Skip to content

Commit ec873a7

Browse files
authored
Add basic test of graph_transitions (and centralize tests) (#43)
1 parent 189aefa commit ec873a7

11 files changed

+56
-7
lines changed

django_fsm/management/commands/graph_transitions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ def get_graphviz_layouts():
114114
except ModuleNotFoundError:
115115
return {"sfdp", "circo", "twopi", "dot", "neato", "fdp", "osage", "patchwork"}
116116
else:
117-
return graphviz.backend.ENGINES
117+
return graphviz.ENGINES
118118

119119

120120
class Command(BaseCommand):

django_fsm/tests/__init__.py

Whitespace-only changes.

django_fsm/tests/test_basic_transitions.py renamed to tests/testapp/tests/test_basic_transitions.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from django_fsm.signals import pre_transition
1313

1414

15-
class BlogPost(models.Model):
15+
class SimpleBlogPost(models.Model):
1616
state = FSMField(default="new")
1717

1818
@transition(field=state, source="new", target="published")
@@ -50,7 +50,7 @@ def empty(self):
5050

5151
class FSMFieldTest(TestCase):
5252
def setUp(self):
53-
self.model = BlogPost()
53+
self.model = SimpleBlogPost()
5454

5555
def test_initial_state_instantiated(self):
5656
self.assertEqual(self.model.state, "new")
@@ -121,11 +121,11 @@ def test_empty_string_target(self):
121121

122122
class StateSignalsTests(TestCase):
123123
def setUp(self):
124-
self.model = BlogPost()
124+
self.model = SimpleBlogPost()
125125
self.pre_transition_called = False
126126
self.post_transition_called = False
127-
pre_transition.connect(self.on_pre_transition, sender=BlogPost)
128-
post_transition.connect(self.on_post_transition, sender=BlogPost)
127+
pre_transition.connect(self.on_pre_transition, sender=SimpleBlogPost)
128+
post_transition.connect(self.on_post_transition, sender=SimpleBlogPost)
129129

130130
def on_pre_transition(self, sender, instance, name, source, target, **kwargs):
131131
self.assertEqual(instance.state, source)
@@ -148,7 +148,7 @@ def test_signals_not_called_on_invalid_transition(self):
148148

149149
class TestFieldTransitionsInspect(TestCase):
150150
def setUp(self):
151-
self.model = BlogPost()
151+
self.model = SimpleBlogPost()
152152

153153
def test_in_operator_for_available_transitions(self):
154154
# store the generator in a list, so we can reuse the generator and do multiple asserts
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
from __future__ import annotations
2+
3+
from django.core.management import call_command
4+
from django.db import models
5+
from django.test import TestCase
6+
7+
from django_fsm import FSMField
8+
from django_fsm import transition
9+
10+
11+
class VisualBlogPost(models.Model):
12+
state = FSMField(default="new")
13+
14+
@transition(field=state, source="new", target="published")
15+
def publish(self):
16+
pass
17+
18+
@transition(source="published", field=state)
19+
def notify_all(self):
20+
pass
21+
22+
@transition(source="published", target="hidden", field=state)
23+
def hide(self):
24+
pass
25+
26+
@transition(source="new", target="removed", field=state)
27+
def remove(self):
28+
raise Exception("Upss")
29+
30+
@transition(source=["published", "hidden"], target="stolen", field=state)
31+
def steal(self):
32+
pass
33+
34+
@transition(source="*", target="moderated", field=state)
35+
def moderate(self):
36+
pass
37+
38+
@transition(source="+", target="blocked", field=state)
39+
def block(self):
40+
pass
41+
42+
@transition(source="*", target="", field=state)
43+
def empty(self):
44+
pass
45+
46+
47+
class GraphTransitionsCommandTest(TestCase):
48+
def test_dummy(self):
49+
call_command("graph_transitions", "testapp.VisualBlogPost")

0 commit comments

Comments
 (0)