From c350737e833a824f44f84be272de34da0460dc6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C3=A1vio=20Juvenal?= Date: Fri, 4 Oct 2024 17:12:38 -0300 Subject: [PATCH] Improve coverage --- .coveragerc | 7 +++++ tests/test_conf.py | 63 +++++++++++++++++++++++++++++++++++++++++++++ tests/test_views.py | 10 +++++++ 3 files changed, 80 insertions(+) create mode 100644 tests/test_conf.py diff --git a/.coveragerc b/.coveragerc index d1f6fb5..264abff 100644 --- a/.coveragerc +++ b/.coveragerc @@ -8,3 +8,10 @@ omit = */migrations/* *static* */templates/* + management/commands/generate_openapi_schema.py + apps.py + admin.py +exclude_lines = + pragma: no cover + if TYPE_CHECKING: + raise NotImplementedError diff --git a/tests/test_conf.py b/tests/test_conf.py new file mode 100644 index 0000000..afb2e00 --- /dev/null +++ b/tests/test_conf.py @@ -0,0 +1,63 @@ +from django.core.exceptions import ImproperlyConfigured +from django.test import override_settings + +import pytest + +from django_ai_assistant.conf import DEFAULTS, PREFIX, Settings + + +@pytest.fixture +def settings(): + return Settings() + + +def test_getattr_existing_setting(settings): + assert settings.INIT_API_FN == DEFAULTS["INIT_API_FN"] + + +def test_getattr_non_existing_setting(settings): + with pytest.raises(AttributeError): + settings.NON_EXISTING_SETTING # noqa: B018 + + +def test_get_setting_default(settings): + assert settings.get_setting("INIT_API_FN") == DEFAULTS["INIT_API_FN"] + + +@override_settings(AI_ASSISTANT_INIT_API_FN="custom.module.init_api") +def test_get_setting_override(settings): + assert settings.get_setting("INIT_API_FN") == "custom.module.init_api" + + +def test_change_setting_enter(settings): + settings.change_setting(f"{PREFIX}INIT_API_FN", "new.value", enter=True) + assert settings.INIT_API_FN == "new.value" + + +def test_change_setting_exit(settings): + settings.change_setting(f"{PREFIX}INIT_API_FN", "new.value", enter=True) + assert settings.INIT_API_FN == "new.value" + settings.change_setting(f"{PREFIX}INIT_API_FN", None, enter=False) + assert settings.INIT_API_FN == DEFAULTS["INIT_API_FN"] + + +def test_change_setting_invalid_prefix(settings): + settings.change_setting("INVALID_PREFIX_SETTING", "value", enter=True) + assert not hasattr(settings, "SETTING") + + +def test_change_setting_invalid_setting(settings): + settings.change_setting(f"{PREFIX}INVALID_SETTING", "value", enter=True) + assert not hasattr(settings, "INVALID_SETTING") + + +def test_call_fn(settings): + result = settings.call_fn("INIT_API_FN") + assert result + + +@override_settings(AI_ASSISTANT_INIT_API_FN="django.core.exceptions.ImproperlyConfigured") +def test_call_fn_override(settings): + result = settings.call_fn("INIT_API_FN") + + assert isinstance(result, ImproperlyConfigured) diff --git a/tests/test_views.py b/tests/test_views.py index e5498a9..f6c8a06 100644 --- a/tests/test_views.py +++ b/tests/test_views.py @@ -172,6 +172,16 @@ def test_gets_specific_thread(authenticated_client): assert response.json()["id"] == thread.id +@pytest.mark.django_db(transaction=True) +def test_gets_specific_thread_that_does_not_exist(authenticated_client): + response = authenticated_client.get( + reverse("django_ai_assistant:thread_detail_update_delete", kwargs={"thread_id": 1000000}) + ) + + assert response.status_code == HTTPStatus.NOT_FOUND + assert response.json() == {"detail": "Not Found"} + + def test_does_not_list_threads_if_unauthorized(): # TODO: Implement this test once permissions are in place pass