diff --git a/opentech/apply/templates/apply/demo_workflow.html b/opentech/apply/templates/apply/demo_workflow.html index e81ec67c70b4b5dc5c4df1180b497345e1c25149..6817653d77a9c629e74036f2b1c1d425922115f5 100644 --- a/opentech/apply/templates/apply/demo_workflow.html +++ b/opentech/apply/templates/apply/demo_workflow.html @@ -17,7 +17,8 @@ <section class="container"> <h2>{{ workflow}}</h2> <h3>{{ phase.stage }}</h3> - <h4>{{ phase.name }}</h4> + <h4>OTF: {{ phase.name }}</h4> + <h4>Public: {{ phase.public_name }}</h4> <form method="post"> {% csrf_token %} <input id="current" type="hidden" name="current" value="{{ phase }}" /> diff --git a/opentech/apply/tests/test_workflow.py b/opentech/apply/tests/test_workflow.py index 770c5091bf71ca21c58d53275b3e2d4d554c2c94..5770b0d66f7431aeb4fbad149b4dfdb6eb0f089e 100644 --- a/opentech/apply/tests/test_workflow.py +++ b/opentech/apply/tests/test_workflow.py @@ -69,6 +69,23 @@ class TestPhaseCreation(SimpleTestCase): phase = PhaseFactory(actions=actions) self.assertEqual(phase[action.name], action) + def test_uses_name_if_no_public(self): + phase = Phase('Phase Name') + self.assertEqual(phase.public_name, phase.name) + + def test_uses_public_if_provided(self): + public_name = 'Public Name' + phase = Phase('Phase Name', public_name=public_name) + self.assertEqual(phase.public_name, public_name) + self.assertNotEqual(phase.public_name, phase.name) + + def test_uses_public_if_provided_on_class(self): + class NewPhase(Phase): + public_name = 'Public Name' + phase = NewPhase('Phase Name') + self.assertEqual(phase.public_name, NewPhase.public_name) + self.assertNotEqual(phase.public_name, phase.name) + class TestActions(SimpleTestCase): def test_can_create_action(self): diff --git a/opentech/apply/workflow.py b/opentech/apply/workflow.py index dd24aa001f0b802580a884b4d25e2749352579d7..c7ff5b1582fea7467bbba6651e7e2c6acc148d98 100644 --- a/opentech/apply/workflow.py +++ b/opentech/apply/workflow.py @@ -115,10 +115,17 @@ class Stage: class Phase: actions: Sequence['Action'] = list() name: str = '' + public_name: str = '' - def __init__(self, name: str='') -> None: + def __init__(self, name: str='', public_name:str = '') -> None: if name: self.name = name + + if public_name: + self.public_name = public_name + elif not self.public_name: + self.public_name = self.name + self._internal = slugify(self.name) self.stage: Union['Stage', None] = None self._actions = {action.name: action for action in self.actions} @@ -160,10 +167,8 @@ class ChangePhaseAction(Action): def process(self, phase: 'Phase') -> Union['Phase', None]: if isinstance(self.target_phase, str): - phase = globals()[self.target_phase] - else: - phase = self.target_phase - return phase + return phase.stage.current(self.target_phase, '0') + return self.target_phase class NextPhaseAction(Action): @@ -182,16 +187,19 @@ next_phase = NextPhaseAction('Progress') class ReviewPhase(Phase): name = 'Internal Review' + public_name = 'In review' actions = [NextPhaseAction('Close Review')] class DeterminationWithProgressionPhase(Phase): name = 'Under Discussion' + public_name = 'In review' actions = [progress_stage, reject_action] class DeterminationWithNextPhase(Phase): name = 'Under Discussion' + public_name = 'In review' actions = [NextPhaseAction('Open Review'), reject_action]