From 815243d545670a1c6726fdf5610a13ab9118497c Mon Sep 17 00:00:00 2001 From: Pascal F Date: Wed, 4 Jun 2025 09:07:27 +0200 Subject: [PATCH] DX: Cleanup tests using Ruff --- tests/testapp/models.py | 28 +++++++++---------- .../tests/test_access_deferred_fsm_field.py | 3 -- tests/testapp/tests/test_custom_data.py | 3 -- .../tests/test_exception_transitions.py | 3 -- tests/testapp/tests/test_key_field.py | 11 ++++---- tests/testapp/tests/test_lock_mixin.py | 6 ---- tests/testapp/tests/test_mixin_support.py | 3 -- .../tests/test_model_create_with_generic.py | 13 ++------- tests/testapp/tests/test_multi_resultstate.py | 3 -- tests/testapp/tests/test_multidecorators.py | 3 -- .../testapp/tests/test_object_permissions.py | 2 -- tests/testapp/tests/test_permissions.py | 2 +- tests/testapp/tests/test_state_transitions.py | 13 ++++----- .../tests/test_string_field_parameter.py | 3 -- .../test_transition_all_except_target.py | 3 -- tests/testapp/views.py | 1 - 16 files changed, 29 insertions(+), 71 deletions(-) delete mode 100644 tests/testapp/views.py diff --git a/tests/testapp/models.py b/tests/testapp/models.py index f7f592e..c630d98 100644 --- a/tests/testapp/models.py +++ b/tests/testapp/models.py @@ -40,13 +40,26 @@ def dean_rejected(self): pass +class DbState(models.Model): + """ + States in DB + """ + + id = models.CharField(primary_key=True, max_length=50) + + label = models.CharField(max_length=255) + + def __str__(self): + return self.label + + class FKApplication(models.Model): """ Student application need to be approved by dept chair and dean. Test workflow for FSMKeyField """ - state = FSMKeyField("testapp.DbState", default="new", on_delete=models.CASCADE) + state = FSMKeyField(DbState, default="new", on_delete=models.CASCADE) @transition(field=state, source="new", target="draft") def draft(self): @@ -73,19 +86,6 @@ def dean_rejected(self): pass -class DbState(models.Model): - """ - States in DB - """ - - id = models.CharField(primary_key=True, max_length=50) - - label = models.CharField(max_length=255) - - def __str__(self): - return self.label - - class BlogPost(models.Model): """ Test workflow diff --git a/tests/testapp/tests/test_access_deferred_fsm_field.py b/tests/testapp/tests/test_access_deferred_fsm_field.py index e751cbb..9c147b7 100644 --- a/tests/testapp/tests/test_access_deferred_fsm_field.py +++ b/tests/testapp/tests/test_access_deferred_fsm_field.py @@ -11,9 +11,6 @@ class DeferrableModel(models.Model): state = FSMField(default="new") - class Meta: - app_label = "testapp" - @transition(field=state, source="new", target="published") def publish(self): pass diff --git a/tests/testapp/tests/test_custom_data.py b/tests/testapp/tests/test_custom_data.py index aa0ac8b..8c79de7 100644 --- a/tests/testapp/tests/test_custom_data.py +++ b/tests/testapp/tests/test_custom_data.py @@ -10,9 +10,6 @@ class BlogPostWithCustomData(models.Model): state = FSMField(default="new") - class Meta: - app_label = "testapp" - @transition(field=state, source="new", target="published", conditions=[], custom={"label": "Publish", "type": "*"}) def publish(self): pass diff --git a/tests/testapp/tests/test_exception_transitions.py b/tests/testapp/tests/test_exception_transitions.py index 080caf7..7165eda 100644 --- a/tests/testapp/tests/test_exception_transitions.py +++ b/tests/testapp/tests/test_exception_transitions.py @@ -13,9 +13,6 @@ class ExceptionalBlogPost(models.Model): state = FSMField(default="new") - class Meta: - app_label = "testapp" - @transition(field=state, source="new", target="published", on_error="crashed") def publish(self): raise Exception("Upss") diff --git a/tests/testapp/tests/test_key_field.py b/tests/testapp/tests/test_key_field.py index e9a9b95..122a5cc 100644 --- a/tests/testapp/tests/test_key_field.py +++ b/tests/testapp/tests/test_key_field.py @@ -50,8 +50,7 @@ def moderate(self): class FSMKeyFieldTest(TestCase): def setUp(self): - for item in FK_AVAILABLE_STATES: - DbState.objects.create(pk=item[0], label=item[1]) + DbState.objects.bulk_create(DbState(pk=item[0], label=item[1]) for item in FK_AVAILABLE_STATES) self.model = FKBlogPost() def test_initial_state_instantiated(self): @@ -126,9 +125,11 @@ def hide(self): class BlogPostWithFKStateTest(TestCase): def setUp(self): - BlogPostStatus.objects.create(name="new") - BlogPostStatus.objects.create(name="published") - BlogPostStatus.objects.create(name="hidden") + BlogPostStatus.objects.bulk_create([ + BlogPostStatus(name="new") + BlogPostStatus(name="published") + BlogPostStatus(name="hidden") + ]) self.model = BlogPostWithFKState() def test_known_transition_should_succeed(self): diff --git a/tests/testapp/tests/test_lock_mixin.py b/tests/testapp/tests/test_lock_mixin.py index 9867934..fc3cb6b 100644 --- a/tests/testapp/tests/test_lock_mixin.py +++ b/tests/testapp/tests/test_lock_mixin.py @@ -14,9 +14,6 @@ class LockedBlogPost(ConcurrentTransitionMixin, models.Model): state = FSMField(default="new") text = models.CharField(max_length=50) - class Meta: - app_label = "testapp" - @transition(field=state, source="new", target="published") def publish(self): pass @@ -30,9 +27,6 @@ class ExtendedBlogPost(LockedBlogPost): review_state = FSMField(default="waiting", protected=True) notes = models.CharField(max_length=50) - class Meta: - app_label = "testapp" - @transition(field=review_state, source="waiting", target="rejected") def reject(self): pass diff --git a/tests/testapp/tests/test_mixin_support.py b/tests/testapp/tests/test_mixin_support.py index e75b05f..3af2264 100644 --- a/tests/testapp/tests/test_mixin_support.py +++ b/tests/testapp/tests/test_mixin_support.py @@ -8,9 +8,6 @@ class WorkflowMixin: - class Meta: - app_label = "testapp" - @transition(field="state", source="*", target="draft") def draft(self): pass diff --git a/tests/testapp/tests/test_model_create_with_generic.py b/tests/testapp/tests/test_model_create_with_generic.py index c1f0128..b811211 100644 --- a/tests/testapp/tests/test_model_create_with_generic.py +++ b/tests/testapp/tests/test_model_create_with_generic.py @@ -1,10 +1,6 @@ from __future__ import annotations -try: - from django.contrib.contenttypes.fields import GenericForeignKey -except ImportError: - # Django 1.6 - from django.contrib.contenttypes.generic import GenericForeignKey +from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.models import ContentType from django.db import models from django.test import TestCase @@ -13,9 +9,7 @@ from django_fsm import transition -class Ticket(models.Model): - class Meta: - app_label = "testapp" +class Ticket(models.Model): ... class TaskState(models.TextChoices): @@ -29,9 +23,6 @@ class Task(models.Model): causality = GenericForeignKey("content_type", "object_id") state = FSMField(default=TaskState.NEW) - class Meta: - app_label = "testapp" - @transition(field=state, source=TaskState.NEW, target=TaskState.DONE) def do(self): pass diff --git a/tests/testapp/tests/test_multi_resultstate.py b/tests/testapp/tests/test_multi_resultstate.py index 7451479..fb2c3a4 100644 --- a/tests/testapp/tests/test_multi_resultstate.py +++ b/tests/testapp/tests/test_multi_resultstate.py @@ -14,9 +14,6 @@ class MultiResultTest(models.Model): state = FSMField(default="new") - class Meta: - app_label = "testapp" - @transition(field=state, source="new", target=RETURN_VALUE("for_moderators", "published")) def publish(self, *, is_public=False): return "published" if is_public else "for_moderators" diff --git a/tests/testapp/tests/test_multidecorators.py b/tests/testapp/tests/test_multidecorators.py index 6eda60c..ee4c629 100644 --- a/tests/testapp/tests/test_multidecorators.py +++ b/tests/testapp/tests/test_multidecorators.py @@ -13,9 +13,6 @@ class TestModel(models.Model): signal_counter = models.IntegerField(default=0) state = FSMField(default="SUBMITTED_BY_USER") - class Meta: - app_label = "testapp" - @transition(field=state, source="SUBMITTED_BY_USER", target="REVIEW_USER") @transition(field=state, source="SUBMITTED_BY_ADMIN", target="REVIEW_ADMIN") @transition(field=state, source="SUBMITTED_BY_ANONYMOUS", target="REVIEW_ANONYMOUS") diff --git a/tests/testapp/tests/test_object_permissions.py b/tests/testapp/tests/test_object_permissions.py index 47e63b3..503c910 100644 --- a/tests/testapp/tests/test_object_permissions.py +++ b/tests/testapp/tests/test_object_permissions.py @@ -15,8 +15,6 @@ class ObjectPermissionTestModel(models.Model): state = FSMField(default="new") class Meta: - app_label = "testapp" - permissions = [ ("can_publish_objectpermissiontestmodel", "Can publish ObjectPermissionTestModel"), ] diff --git a/tests/testapp/tests/test_permissions.py b/tests/testapp/tests/test_permissions.py index a343e68..3e20b25 100644 --- a/tests/testapp/tests/test_permissions.py +++ b/tests/testapp/tests/test_permissions.py @@ -18,7 +18,7 @@ def setUp(self): self.privileged.user_permissions.add(Permission.objects.get_by_natural_key("can_publish_post", "testapp", "blogpost")) self.privileged.user_permissions.add(Permission.objects.get_by_natural_key("can_remove_post", "testapp", "blogpost")) - def test_proviledged_access_succeed(self): + def test_privileged_access_succeed(self): assert has_transition_perm(self.model.publish, self.privileged) assert has_transition_perm(self.model.remove, self.privileged) diff --git a/tests/testapp/tests/test_state_transitions.py b/tests/testapp/tests/test_state_transitions.py index 23dfe38..95fcd0b 100644 --- a/tests/testapp/tests/test_state_transitions.py +++ b/tests/testapp/tests/test_state_transitions.py @@ -16,9 +16,6 @@ class STATE: state = FSMField(default=STATE.CATERPILLAR, state_choices=STATE_CHOICES) - class Meta: - app_label = "testapp" - @transition(field=state, source=STATE.CATERPILLAR, target=STATE.BUTTERFLY) def cocoon(self): pass @@ -32,7 +29,6 @@ def crawl(self): class Caterpillar(Insect): class Meta: - app_label = "testapp" proxy = True def crawl(self): @@ -43,7 +39,6 @@ def crawl(self): class Butterfly(Insect): class Meta: - app_label = "testapp" proxy = True def fly(self): @@ -63,8 +58,12 @@ def test_transition_proxy_set_succeed(self): assert isinstance(insect, Butterfly) def test_load_proxy_set(self): - Insect.objects.create(state=Insect.STATE.CATERPILLAR) - Insect.objects.create(state=Insect.STATE.BUTTERFLY) + Insect.objects.bulk_create( + [ + Insect(state=Insect.STATE.CATERPILLAR), + Insect(state=Insect.STATE.BUTTERFLY), + ] + ) insects = Insect.objects.all() assert {Caterpillar, Butterfly} == {insect.__class__ for insect in insects} diff --git a/tests/testapp/tests/test_string_field_parameter.py b/tests/testapp/tests/test_string_field_parameter.py index 34ed80d..f221c26 100644 --- a/tests/testapp/tests/test_string_field_parameter.py +++ b/tests/testapp/tests/test_string_field_parameter.py @@ -10,9 +10,6 @@ class BlogPostWithStringField(models.Model): state = FSMField(default="new") - class Meta: - app_label = "testapp" - @transition(field="state", source="new", target="published", conditions=[]) def publish(self): pass diff --git a/tests/testapp/tests/test_transition_all_except_target.py b/tests/testapp/tests/test_transition_all_except_target.py index fda48aa..be36204 100644 --- a/tests/testapp/tests/test_transition_all_except_target.py +++ b/tests/testapp/tests/test_transition_all_except_target.py @@ -11,9 +11,6 @@ class TestExceptTargetTransitionShortcut(models.Model): state = FSMField(default="new") - class Meta: - app_label = "testapp" - @transition(field=state, source="new", target="published") def publish(self): pass diff --git a/tests/testapp/views.py b/tests/testapp/views.py deleted file mode 100644 index 60f00ef..0000000 --- a/tests/testapp/views.py +++ /dev/null @@ -1 +0,0 @@ -# Create your views here.