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