From 0a5e29cfc59191f35ecf07c0a942a56f25320fbc Mon Sep 17 00:00:00 2001 From: Steven Bal Date: Mon, 10 Mar 2025 11:18:22 +0100 Subject: [PATCH 1/3] :fire: Remove unused code * `build_absolute_url` and `get_domain` that were used by the previous implementation of django-setup-configuration, but no longer used after the refactor * templatetags that were unused --- src/objecttypes/utils/__init__.py | 29 --------- .../utils/templatetags/__init__.py | 0 src/objecttypes/utils/templatetags/utils.py | 64 ------------------- 3 files changed, 93 deletions(-) delete mode 100644 src/objecttypes/utils/templatetags/__init__.py delete mode 100644 src/objecttypes/utils/templatetags/utils.py diff --git a/src/objecttypes/utils/__init__.py b/src/objecttypes/utils/__init__.py index 9eeca335..e69de29b 100644 --- a/src/objecttypes/utils/__init__.py +++ b/src/objecttypes/utils/__init__.py @@ -1,29 +0,0 @@ -from django.conf import settings -from django.http import HttpRequest - -from furl import furl - - -def get_domain() -> str: - """ - Obtain the domain/netloc according to settings or configuration. - """ - from django.contrib.sites.models import Site - - if settings.OBJECTTYPES_DOMAIN: - return settings.OBJECTTYPES_DOMAIN - - return Site.objects.get_current().domain - - -def build_absolute_url(path: str, request: HttpRequest | None = None) -> str: - if request is not None: - return request.build_absolute_uri(path) - - domain = get_domain() - _furl = furl( - scheme="https" if settings.IS_HTTPS else "http", - netloc=domain, - path=path, - ) - return _furl.url diff --git a/src/objecttypes/utils/templatetags/__init__.py b/src/objecttypes/utils/templatetags/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/src/objecttypes/utils/templatetags/utils.py b/src/objecttypes/utils/templatetags/utils.py deleted file mode 100644 index 62206ff0..00000000 --- a/src/objecttypes/utils/templatetags/utils.py +++ /dev/null @@ -1,64 +0,0 @@ -from django import template -from django.utils.html import format_html - -register = template.Library() - - -class CaptureNode(template.Node): - def __init__(self, nodelist, var_name): - self.nodelist = nodelist - self.var_name = var_name - - def render(self, context): - output = self.nodelist.render(context) - context[self.var_name] = output - return "" - - -@register.tag -def capture(parser, token): - """ - Captures contents and assigns them to variable. - Allows capturing templatetags that don't support "as". - - Example: - - {% capture as body %}{% lorem 20 w random %}{% endcapture %} - {% include 'components/text/text.html' with body=body only %} - """ - args = token.split_contents() - if len(args) < 3 or args[-2] != "as": - raise template.TemplateSyntaxError( - "'capture' tag requires a variable name after keyword 'as'." - ) - var_name = args[-1] - nodelist = parser.parse(("endcapture",)) - parser.delete_first_token() - return CaptureNode(nodelist, var_name) - - -@register.simple_tag -def placekitten(width=800, height=600): - """ - Renders a "placekitten" placeholder image. - - Example: - - {%placekitten %} - {%placekitten 200 200 %} - """ - return format_html(f'') - - -@register.simple_tag -def placekitten_src(width=800, height=600): - """ - Return a "placekitten" placeholder image url. - - Example: - - {% placekitten_src as src %} - {% placekitten_src 200 200 as mobile_src %} - {% include 'components/image/image.html' with mobile_src=mobile_src src=src alt='placekitten' only %} - """ - return f"//placekitten.com/{width}/{height}" From eeb9a1e817dba3034fbef47e0decafc8020e85eb Mon Sep 17 00:00:00 2001 From: Steven Bal Date: Mon, 10 Mar 2025 11:18:41 +0100 Subject: [PATCH 2/3] :white_check_mark: Add tests to fix coverage * token model migration * generate_token command --- ...uthenticaton.py => test_authentication.py} | 0 .../token/tests/test_generate_token.py | 31 ++++++++++ .../token/tests/test_migrations.py | 62 +++++++++++++++++++ 3 files changed, 93 insertions(+) rename src/objecttypes/token/tests/{test_authenticaton.py => test_authentication.py} (100%) create mode 100644 src/objecttypes/token/tests/test_generate_token.py diff --git a/src/objecttypes/token/tests/test_authenticaton.py b/src/objecttypes/token/tests/test_authentication.py similarity index 100% rename from src/objecttypes/token/tests/test_authenticaton.py rename to src/objecttypes/token/tests/test_authentication.py diff --git a/src/objecttypes/token/tests/test_generate_token.py b/src/objecttypes/token/tests/test_generate_token.py new file mode 100644 index 00000000..91efeef4 --- /dev/null +++ b/src/objecttypes/token/tests/test_generate_token.py @@ -0,0 +1,31 @@ +from io import StringIO + +from django.core.management import call_command +from django.test import TestCase + +from objecttypes.token.models import TokenAuth + + +class GenerateTokenCommandTests(TestCase): + def test_generate_token(self): + out = StringIO() + + call_command( + "generate_token", + "john doe", + "john@example.com", + organization="ACME", + application="Foo", + administration="Bar", + stdout=out, + ) + + token = TokenAuth.objects.get() + + self.assertIsNotNone(token.token) + self.assertEqual(token.contact_person, "john doe") + self.assertEqual(token.email, "john@example.com") + self.assertEqual(token.organization, "ACME") + self.assertEqual(token.application, "Foo") + self.assertEqual(token.administration, "Bar") + self.assertEqual(out.getvalue(), f"Token {token.token} was generated\n") diff --git a/src/objecttypes/token/tests/test_migrations.py b/src/objecttypes/token/tests/test_migrations.py index 0597b317..4bcd6bd9 100644 --- a/src/objecttypes/token/tests/test_migrations.py +++ b/src/objecttypes/token/tests/test_migrations.py @@ -1,3 +1,5 @@ +from datetime import datetime + from django.core.management import call_command from django.db import connection from django.db.migrations.executor import MigrationExecutor @@ -50,6 +52,66 @@ def tearDownClass(cls) -> None: call_command("migrate", verbosity=0, database=connection._alias) +class SwitchToNewTokenAuthModelTestCase(BaseMigrationTest): + app = "token" + migrate_from = "0005_tokenauth" + migrate_to = "0006_copy_token_auth" + + def test_migrate_to_new_model(self): + OldTokenAuth = self.old_app_state.get_model("token", "OldTokenAuth") + + token = OldTokenAuth.objects.create( + token="foo", + contact_person="john doe", + email="john@example.com", + organization="ACME", + last_modified=datetime(2024, 1, 1), + created=datetime(2024, 1, 1), + application="Foo", + administration="Bar", + ) + + self.assertEqual(token.pk, "foo") + + self._perform_migration() + + TokenAuth = self.apps.get_model("token", "TokenAuth") + token = TokenAuth.objects.get() + + self.assertTrue(isinstance(token.pk, int)) + self.assertEqual(token.token, "foo") + + +class SwitchToOldTokenAuthModelTestCase(BaseMigrationTest): + app = "token" + migrate_from = "0006_copy_token_auth" + migrate_to = "0005_tokenauth" + + def test_migrate_to_old_model(self): + TokenAuth = self.old_app_state.get_model("token", "TokenAuth") + + token = TokenAuth.objects.create( + token="foo", + contact_person="john doe", + email="john@example.com", + organization="ACME", + last_modified=datetime(2024, 1, 1), + created=datetime(2024, 1, 1), + application="Foo", + administration="Bar", + ) + + self.assertTrue(isinstance(token.pk, int)) + + self._perform_migration() + + OldTokenAuth = self.apps.get_model("token", "OldTokenAuth") + token = OldTokenAuth.objects.get() + + self.assertEqual(token.pk, "foo") + self.assertEqual(token.token, "foo") + + class TestTokenAuthUniqueness(BaseMigrationTest): app = "token" migrate_from = "0008_alter_tokenauth_token" From 07ade12fb65a5a6bb0a2f84cbb54d0eac4f5ef20 Mon Sep 17 00:00:00 2001 From: Steven Bal Date: Mon, 10 Mar 2025 11:36:17 +0100 Subject: [PATCH 3/3] :wrench: Update ignore/omit for codecov --- .github/codecov.yml | 6 ++++++ setup.cfg | 7 ++++++- 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 .github/codecov.yml diff --git a/.github/codecov.yml b/.github/codecov.yml new file mode 100644 index 00000000..6c44de40 --- /dev/null +++ b/.github/codecov.yml @@ -0,0 +1,6 @@ +# Keep in sync with setup.cfg in the root of the project +ignore: + - "src/manage.py" + - "src/objecttypes/wsgi.py" + - "src/objecttypes/conf/local_example.py" + - "**/tests/*" diff --git a/setup.cfg b/setup.cfg index 2177fd96..5f9a6cd8 100644 --- a/setup.cfg +++ b/setup.cfg @@ -19,4 +19,9 @@ exclude = migrations,static,media branch = True source = src omit = - */test_*.py + # files processed at entrypoint time + src/manage.py + src/objecttypes/wsgi.py + src/openforms/conf/local_example.py + # generic test patterns + */tests/*