From 84bb498ef96ce19935f762bf0dba321b6b1d5311 Mon Sep 17 00:00:00 2001 From: Todd Dembrey <todd.dembrey@torchbox.com> Date: Fri, 15 Dec 2017 14:21:18 +0000 Subject: [PATCH] Add actions as requirement on phases --- opentech/apply/tests/factories.py | 13 ++++++++++++- opentech/apply/tests/test_workflow.py | 6 ++++-- opentech/apply/workflow.py | 19 +++++++++++-------- 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/opentech/apply/tests/factories.py b/opentech/apply/tests/factories.py index 406c735ad..51aceef9f 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 1545f1cc9..d529959ed 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 352530db7..4ea3bf407 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]) -- GitLab