diff --git a/tests/integrations/django/myapp/urls.py b/tests/integrations/django/myapp/urls.py index af5458347e..4050a64a85 100644 --- a/tests/integrations/django/myapp/urls.py +++ b/tests/integrations/django/myapp/urls.py @@ -28,3 +28,5 @@ path("message", views.message, name="message"), path("mylogin", views.mylogin, name="mylogin"), ] + +handler500 = views.handler500 diff --git a/tests/integrations/django/myapp/views.py b/tests/integrations/django/myapp/views.py index 479b7e8662..a9ca03b96f 100644 --- a/tests/integrations/django/myapp/views.py +++ b/tests/integrations/django/myapp/views.py @@ -1,6 +1,6 @@ from django.contrib.auth import login from django.contrib.auth.models import User -from django.http import HttpResponse +from django.http import HttpResponse, HttpResponseServerError import sentry_sdk @@ -19,3 +19,7 @@ def mylogin(request): user.backend = "django.contrib.auth.backends.ModelBackend" login(request, user) return HttpResponse("ok") + + +def handler500(request): + return HttpResponseServerError("Sentry error: %s" % sentry_sdk.last_event_id()) diff --git a/tests/integrations/django/test_basic.py b/tests/integrations/django/test_basic.py index 911d2974b6..d78b50137f 100644 --- a/tests/integrations/django/test_basic.py +++ b/tests/integrations/django/test_basic.py @@ -12,7 +12,7 @@ except ImportError: from django.core.urlresolvers import reverse -from sentry_sdk import Hub +from sentry_sdk import Hub, last_event_id from tests.integrations.django.myapp.wsgi import application @@ -77,6 +77,17 @@ def test_404(client): assert status.lower() == "404 not found" +def test_500(client): + old_event_id = last_event_id() + content, status, headers = client.get("/view-exc") + assert status.lower() == "500 internal server error" + content = b"".join(content).decode("utf-8") + event_id = last_event_id() + assert content == "Sentry error: %s" % event_id + assert event_id is not None + assert old_event_id != event_id + + def test_management_command_raises(): # This just checks for our assumption that Django passes through all # exceptions by default, so our excepthook can be used for management diff --git a/tests/integrations/flask/test_flask.py b/tests/integrations/flask/test_flask.py index 694fe97154..fbcaddc70c 100644 --- a/tests/integrations/flask/test_flask.py +++ b/tests/integrations/flask/test_flask.py @@ -9,7 +9,7 @@ from flask_login import LoginManager, login_user -from sentry_sdk import capture_message, capture_exception +from sentry_sdk import capture_message, capture_exception, last_event_id from sentry_sdk.integrations.logging import LoggingIntegration import sentry_sdk.integrations.flask as flask_sentry @@ -361,3 +361,26 @@ def wsgi_app(environ, start_response): error, = exceptions assert error is exc.value + + +def test_500(sentry_init, capture_events, app): + sentry_init(integrations=[flask_sentry.FlaskIntegration()]) + + app.debug = False + app.testing = False + + @app.route("/") + def index(): + 1 / 0 + + @app.errorhandler(500) + def error_handler(err): + return "Sentry error: %s" % last_event_id() + + events = capture_events() + + client = app.test_client() + response = client.get("/") + + event, = events + assert response.data.decode("utf-8") == "Sentry error: %s" % event["event_id"]