From fa0424d0a304feb8e5298bd6da87d61dd5a9644d Mon Sep 17 00:00:00 2001 From: Braden MacDonald Date: Wed, 19 Feb 2025 16:55:18 -0800 Subject: [PATCH] test: check typing of mixins --- .../apps/authoring/components/test_models.py | 12 ++++++++++- .../apps/authoring/publishing/test_models.py | 21 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 tests/openedx_learning/apps/authoring/publishing/test_models.py diff --git a/tests/openedx_learning/apps/authoring/components/test_models.py b/tests/openedx_learning/apps/authoring/components/test_models.py index 8ac3ac43..ca786d28 100644 --- a/tests/openedx_learning/apps/authoring/components/test_models.py +++ b/tests/openedx_learning/apps/authoring/components/test_models.py @@ -2,6 +2,7 @@ Tests related to the Component models """ from datetime import datetime, timezone +from typing import TYPE_CHECKING, assert_type from freezegun import freeze_time @@ -10,7 +11,7 @@ get_component, get_or_create_component_type, ) -from openedx_learning.apps.authoring.components.models import ComponentType +from openedx_learning.apps.authoring.components.models import Component, ComponentType, ComponentVersion from openedx_learning.apps.authoring.publishing.api import ( LearningPackage, create_learning_package, @@ -19,6 +20,15 @@ ) from openedx_learning.lib.test_utils import TestCase +if TYPE_CHECKING: + # Test that our mixins on Component.objects and PublishableEntityVersionMixin etc. haven't broken manager typing + assert_type(Component.objects.create(), Component) + assert_type(Component.objects.get(), Component) + assert_type(Component.with_publishing_relations.create(), Component) + assert_type(Component.with_publishing_relations.get(), Component) + assert_type(ComponentVersion.objects.create(), ComponentVersion) + assert_type(ComponentVersion.objects.get(), ComponentVersion) + class TestModelVersioningQueries(TestCase): """ diff --git a/tests/openedx_learning/apps/authoring/publishing/test_models.py b/tests/openedx_learning/apps/authoring/publishing/test_models.py new file mode 100644 index 00000000..60b2d084 --- /dev/null +++ b/tests/openedx_learning/apps/authoring/publishing/test_models.py @@ -0,0 +1,21 @@ +""" +Tests related to the Publishing model mixins +""" +from typing import TYPE_CHECKING, assert_type + +from openedx_learning.apps.authoring.publishing.models import PublishableEntityMixin, PublishableEntityVersionMixin +from openedx_learning.lib.managers import WithRelationsManager + +if TYPE_CHECKING: + # Test that our mixins provide the right typing for 'objects' + class FooEntity(PublishableEntityMixin): + pass + + assert_type(FooEntity.objects.create(), FooEntity) + assert_type(FooEntity.objects, WithRelationsManager[FooEntity]) + + class FooEntityVersion(PublishableEntityVersionMixin): + pass + + assert_type(FooEntityVersion.objects.create(), FooEntityVersion) + assert_type(FooEntityVersion.objects, WithRelationsManager[FooEntityVersion])