def test_technical_500_response(settings, mock_api_response, mocker, rf, capsys): settings.DEBUG = True test_data_url = 'http://www.fixmydjango.com/test-server' try: raise ValueError("test") except: exc_info = sys.exc_info() def clean_traceback(tb): # remove \r tb = tb.replace('\r', '') # remove empty lines tb_lines = [line for line in tb.split('\n') if line.strip()] return '\n'.join(tb_lines) mocker.patch('fixmydjango.is_django_exception', return_value=True) mocker.patch('fixmydjango.clean_traceback', side_effect=clean_traceback) mocker.patch('fixmydjango.sanitize_traceback', side_effect=lambda x: x) request = rf.get(reverse('test-error')) response = technical_500_response(request, *exc_info) assert response.status_code == 500 assert format_template(FIX_MY_DJANGO_MESSAGE[0:50], {'url': test_data_url}) in response.content out, err = capsys.readouterr() assert out == colored(FIX_MY_DJANGO_MESSAGE_PLAIN.format(url=test_data_url), 'yellow') + '\n'
def test_error_view(settings, api_live_server, live_server, capsys): settings.DEBUG = True # this test doesn't works in Django <= 1.6, # because in this version live_server doesn't work with DEBUG=True. # see: https://github.com/fjsj/liveservererror if LooseVersion(django.get_version()) >= LooseVersion('1.7'): test_data_url = 'http://www.fixmydjango.com/test-server' # need to use live_server, because # test client launches exceptions thrown inside views response = requests.get(live_server.url + reverse('test-error')) assert response.status_code == 500 assert format_template(FIX_MY_DJANGO_MESSAGE[0:50], {}) in response.content out, err = capsys.readouterr() assert out == colored(FIX_MY_DJANGO_MESSAGE_PLAIN.format(url=test_data_url), 'yellow') + '\n'
def test_error_view(settings, api_live_server, live_server, capsys): settings.DEBUG = True # this test doesn't works in Django <= 1.6, # because in this version live_server doesn't work with DEBUG=True. # see: https://github.com/fjsj/liveservererror if LooseVersion(django.get_version()) >= LooseVersion('1.7'): test_data_url = 'http://www.fixmydjango.com/test-server' # need to use live_server, because # test client launches exceptions thrown inside views response = requests.get(live_server.url + reverse('test-error')) assert response.status_code == 500 assert format_template(FIX_MY_DJANGO_MESSAGE[0:50], {}) in response.content out, err = capsys.readouterr() assert out == colored( FIX_MY_DJANGO_MESSAGE_PLAIN.format(url=test_data_url), 'yellow') + '\n'
def test_technical_500_response_not_django(settings, mocker, rf, capsys): settings.DEBUG = True test_data_url = 'http://www.fixmydjango.com/test-server' try: raise ValueError("test") except: exc_info = sys.exc_info() mocker.patch('fixmydjango.is_django_exception', return_value=False) mocker.spy(requests, 'get') request = rf.get(reverse('test-error')) response = technical_500_response(request, *exc_info) assert requests.get.call_count == 0 assert response.status_code == 500 assert format_template(FIX_MY_DJANGO_MESSAGE, {'url': test_data_url}) not in response.content out, err = capsys.readouterr() assert out == ''
def test_technical_500_response_not_interfered_by_some_bug(settings, mocker, rf, capsys): settings.DEBUG = True test_data_url = 'http://www.fixmydjango.com/test-server' def raise_exception(__): raise Exception("bug") try: raise ValueError("test") except: exc_info = sys.exc_info() mocker.patch('fixmydjango.is_django_exception', side_effect=raise_exception) request = rf.get(reverse('test-error')) response = technical_500_response(request, *exc_info) assert response.status_code == 500 assert format_template(FIX_MY_DJANGO_MESSAGE, {'url': test_data_url}) not in response.content out, err = capsys.readouterr() assert FIX_MY_DJANGO_OOPS_MESSAGE in out assert 'Traceback (most recent call last):' not in out