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