Skip to content

Commit 28b54cc

Browse files
committed
WIP: Annotate test helpers
1 parent b6f025e commit 28b54cc

File tree

3 files changed

+25
-18
lines changed

3 files changed

+25
-18
lines changed

tests/managers.py

+13-6
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,22 @@
11
from __future__ import annotations
22

3-
from model_utils.managers import SoftDeletableManager, SoftDeletableQuerySet
3+
from model_utils.managers import (
4+
ModelT,
5+
QuerySet,
6+
SoftDeletableManager,
7+
SoftDeletableQuerySet,
8+
)
49

510

6-
class CustomSoftDeleteQuerySet(SoftDeletableQuerySet):
7-
def only_read(self):
11+
class CustomSoftDeleteQuerySet(SoftDeletableQuerySet[ModelT]):
12+
def only_read(self) -> QuerySet[ModelT]:
813
return self.filter(is_read=True)
914

1015

11-
class CustomSoftDeleteManager(SoftDeletableManager):
16+
class CustomSoftDeleteManager(SoftDeletableManager[ModelT]):
1217
_queryset_class = CustomSoftDeleteQuerySet
1318

14-
def only_read(self):
15-
return self.get_queryset().only_read()
19+
def only_read(self) -> QuerySet[ModelT]:
20+
qs = self.get_queryset()
21+
assert isinstance(qs, self._queryset_class), qs
22+
return qs.only_read()

tests/models.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from __future__ import annotations
22

3-
from typing import ClassVar, TypeVar
3+
from typing import Any, ClassVar, TypeVar
44

55
from django.db import models
66
from django.db.models import Manager
@@ -40,7 +40,7 @@ class InheritanceManagerTestParent(models.Model):
4040
on_delete=models.CASCADE)
4141
objects: ClassVar[InheritanceManager[InheritanceManagerTestParent]] = InheritanceManager()
4242

43-
def __str__(self):
43+
def __str__(self) -> str:
4444
return "{}({})".format(
4545
self.__class__.__name__[len('InheritanceManagerTest'):],
4646
self.pk,
@@ -213,7 +213,7 @@ class Tracked(models.Model):
213213

214214
tracker = FieldTracker()
215215

216-
def save(self, *args, **kwargs):
216+
def save(self, *args: Any, **kwargs: Any) -> None:
217217
""" No-op save() to ensure that FieldTracker.patch_save() works. """
218218
super().save(*args, **kwargs)
219219

tests/test_fields/test_field_tracker.py

+9-9
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class FieldTrackerTestCase(TestCase):
3333

3434
tracker = None
3535

36-
def assertHasChanged(self, **kwargs):
36+
def assertHasChanged(self, **kwargs) -> None:
3737
tracker = kwargs.pop('tracker', self.tracker)
3838
for field, value in kwargs.items():
3939
if value is None:
@@ -42,20 +42,20 @@ def assertHasChanged(self, **kwargs):
4242
else:
4343
self.assertEqual(tracker.has_changed(field), value)
4444

45-
def assertPrevious(self, **kwargs):
45+
def assertPrevious(self, **kwargs) -> None:
4646
tracker = kwargs.pop('tracker', self.tracker)
4747
for field, value in kwargs.items():
4848
self.assertEqual(tracker.previous(field), value)
4949

50-
def assertChanged(self, **kwargs):
50+
def assertChanged(self, **kwargs) -> None:
5151
tracker = kwargs.pop('tracker', self.tracker)
5252
self.assertEqual(tracker.changed(), kwargs)
5353

54-
def assertCurrent(self, **kwargs):
54+
def assertCurrent(self, **kwargs) -> None:
5555
tracker = kwargs.pop('tracker', self.tracker)
5656
self.assertEqual(tracker.current(), kwargs)
5757

58-
def update_instance(self, **kwargs):
58+
def update_instance(self, **kwargs) -> None:
5959
for field, value in kwargs.items():
6060
setattr(self.instance, field, value)
6161
self.instance.save()
@@ -885,11 +885,11 @@ def setUp(self) -> None:
885885
self.instance = Tracked.objects.create(number=1)
886886
self.tracker = self.instance.tracker
887887

888-
def assertChanged(self, *fields):
888+
def assertChanged(self, *fields) -> None:
889889
for f in fields:
890890
self.assertTrue(self.tracker.has_changed(f))
891891

892-
def assertNotChanged(self, *fields):
892+
def assertNotChanged(self, *fields) -> None:
893893
for f in fields:
894894
self.assertFalse(self.tracker.has_changed(f))
895895

@@ -920,7 +920,7 @@ def test_context_manager_fields(self) -> None:
920920
def test_tracker_decorator(self) -> None:
921921

922922
@Tracked.tracker
923-
def tracked_method(obj):
923+
def tracked_method(obj) -> None:
924924
obj.name = 'new'
925925
self.assertChanged('name')
926926

@@ -931,7 +931,7 @@ def tracked_method(obj):
931931
def test_tracker_decorator_fields(self) -> None:
932932

933933
@Tracked.tracker(fields=['name'])
934-
def tracked_method(obj):
934+
def tracked_method(obj) -> None:
935935
obj.name = 'new'
936936
obj.number += 1
937937
self.assertChanged('name', 'number')

0 commit comments

Comments
 (0)