diff --git a/opentech/apply/tests/factories.py b/opentech/apply/tests/factories.py index 406c735adb05f186553c013226f1595972454d74..51aceef9f7e32ab7c26fb2eb037ad8d72de0b41a 100644 --- a/opentech/apply/tests/factories.py +++ b/opentech/apply/tests/factories.py @@ -1,7 +1,7 @@ from django.forms import Form import factory -from opentech.apply.workflow import Phase, Stage, Workflow +from opentech.apply.workflow import Action, Phase, Stage, Workflow class ListSubFactory(factory.SubFactory): @@ -26,11 +26,22 @@ class ListSubFactory(factory.SubFactory): ] +class ActionFactory(factory.Factory): + class Meta: + model = Action + + name = factory.Faker('word') + + class PhaseFactory(factory.Factory): class Meta: model = Phase + class Params: + num_actions = factory.Faker('random_int', min=1, max=5) + name = factory.Faker('word') + actions = ListSubFactory(ActionFactory, count=factory.SelfAttribute('num_actions')) class StageFactory(factory.Factory): diff --git a/opentech/apply/tests/test_workflow.py b/opentech/apply/tests/test_workflow.py index 1545f1cc9bb9a6ef876bef3f32f4b54e066bb628..d529959edb2e508153f9d32ce6f009098c794b40 100644 --- a/opentech/apply/tests/test_workflow.py +++ b/opentech/apply/tests/test_workflow.py @@ -3,7 +3,7 @@ from django.forms import Form from opentech.apply.workflow import Action, Phase, Stage, Workflow -from .factories import PhaseFactory, StageFactory, WorkflowFactory +from .factories import ActionFactory, PhaseFactory, StageFactory, WorkflowFactory class TestWorkflowCreation(SimpleTestCase): @@ -49,9 +49,11 @@ class TestStageCreation(SimpleTestCase): class TestPhaseCreation(SimpleTestCase): def test_can_create_phase(self): + actions = ActionFactory.create_batch(2) name = 'the_phase' - phase = Phase(name) + phase = Phase(name, actions) self.assertEqual(phase.name, name) + self.assertEqual(phase.actions, actions) class TestActions(SimpleTestCase): diff --git a/opentech/apply/workflow.py b/opentech/apply/workflow.py index 352530db7c60eead182c4daa952a0cc2cfe7a466..4ea3bf407e3f4fee8749a8268b534f210e9d07c0 100644 --- a/opentech/apply/workflow.py +++ b/opentech/apply/workflow.py @@ -54,9 +54,10 @@ class Stage(Iterable['Phase']): class Phase: - def __init__(self, name: str) -> None: + def __init__(self, name: str, actions: Sequence['Action']) -> None: self.name = name self.stage: Union['Stage', None] = None + self.actions = actions self.occurance = 0 def __str__(self): @@ -64,7 +65,7 @@ class Phase: class Action: - def __init__(self, name: str): + def __init__(self, name: str) -> None: self.name = name @@ -74,17 +75,19 @@ class ReviewPhase(Phase): pass -internal_review = ReviewPhase('Under Review') +next_phase = Action('next') + +internal_review = ReviewPhase('Under Review', [next_phase]) -ac_review = ReviewPhase('Under Review') +ac_review = ReviewPhase('Under Review', [next_phase]) -response = Phase('Ready to Respond') +response = Phase('Ready to Respond', [next_phase]) -rejected = Phase('Rejected') +rejected = Phase('Rejected', [next_phase]) -accepted = Phase('Accepted') +accepted = Phase('Accepted', [next_phase]) -progress = Phase('Progress') +progress = Phase('Progress', [next_phase]) standard_stage = Stage('Standard', Form(), [internal_review, response, ac_review, response, accepted, rejected])