Add test for sentry-debug endpoint

This commit is contained in:
Antoine Bartuccio 2024-10-15 14:09:51 +02:00
parent d16a207a83
commit c1a85486cc
3 changed files with 42 additions and 6 deletions

View File

@ -724,7 +724,8 @@ if DEBUG:
"debug_toolbar.panels.signals.SignalsPanel", "debug_toolbar.panels.signals.SignalsPanel",
"debug_toolbar.panels.redirects.RedirectsPanel", "debug_toolbar.panels.redirects.RedirectsPanel",
] ]
SENTRY_ENV = "development" if not TESTING:
SENTRY_ENV = "development" # We can't test if it gets overridden in settings
if TESTING: if TESTING:
CAPTCHA_TEST_MODE = True CAPTCHA_TEST_MODE = True

32
sith/tests.py Normal file
View File

@ -0,0 +1,32 @@
from contextlib import nullcontext as does_not_raise
import pytest
from _pytest.python_api import RaisesContext
from django.test import Client
from django.test.utils import override_settings
from django.urls import reverse
@pytest.mark.django_db
@pytest.mark.parametrize(
("sentry_dsn", "sentry_env", "expected_error", "expected_return_code"),
[
# Working case
("something", "development", pytest.raises(ZeroDivisionError), None),
# View is disabled when DSN isn't defined or environment isn't development
("something", "production", does_not_raise(), 404),
("", "development", does_not_raise(), 404),
("", "production", does_not_raise(), 404),
],
)
def test_sentry_debug_endpoint(
client: Client,
sentry_dsn: str,
sentry_env: str,
expected_error: RaisesContext[ZeroDivisionError] | does_not_raise[None],
expected_return_code: int | None,
):
with expected_error, override_settings(
SENTRY_DSN=sentry_dsn, SENTRY_ENV=sentry_env
):
assert client.get(reverse("sentry-debug")).status_code == expected_return_code

View File

@ -17,6 +17,7 @@ from ajax_select import urls as ajax_select_urls
from django.conf import settings from django.conf import settings
from django.conf.urls.static import static from django.conf.urls.static import static
from django.contrib import admin from django.contrib import admin
from django.http import Http404
from django.urls import include, path from django.urls import include, path
from django.views.i18n import JavaScriptCatalog from django.views.i18n import JavaScriptCatalog
from ninja_extra import NinjaExtraAPI from ninja_extra import NinjaExtraAPI
@ -71,11 +72,12 @@ if settings.DEBUG:
urlpatterns += [path("__debug__/", include(debug_toolbar.urls))] urlpatterns += [path("__debug__/", include(debug_toolbar.urls))]
if settings.SENTRY_ENV == "development" and settings.SENTRY_DSN:
def sentry_debug(request):
"""Sentry debug endpoint """Sentry debug endpoint
This function always crash and allows us to test This function always crash and allows us to test
the sentry configuration and the modal popup the sentry configuration and the modal popup
displayed to users on production displayed to users on production
The error will be displayed on Sentry The error will be displayed on Sentry
@ -83,8 +85,9 @@ if settings.SENTRY_ENV == "development" and settings.SENTRY_DSN:
NOTE : you need to specify the SENTRY_DSN setting in settings_custom.py NOTE : you need to specify the SENTRY_DSN setting in settings_custom.py
""" """
if settings.SENTRY_ENV != "development" or not settings.SENTRY_DSN:
raise Http404
_division_by_zero = 1 / 0
def raise_exception(request):
_division_by_zero = 1 / 0
urlpatterns += [path("sentry-debug/", raise_exception)] urlpatterns += [path("sentry-debug/", sentry_debug, name="sentry-debug")]