Skip to content
Snippets Groups Projects
Unverified Commit 36750ac5 authored by Fredrik Jonsson's avatar Fredrik Jonsson Committed by GitHub
Browse files

Merge pull request #652 from OpenTechFund/feature/new-workflow-labs

Add a new SingleStageExternalDefinition workflow.
parents 201039c4 06f0a3fa
No related branches found
No related tags found
No related merge requests found
# Generated by Django 2.0.8 on 2018-10-24 12:13
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('funds', '0044_add_named_blocks'),
]
operations = [
migrations.AlterField(
model_name='applicationbase',
name='workflow_name',
field=models.CharField(choices=[('single', 'Request'), ('single_ext', 'Request with external review'), ('double', 'Concept & Proposal')], default='single', max_length=100, verbose_name='Workflow'),
),
migrations.AlterField(
model_name='applicationsubmission',
name='workflow_name',
field=models.CharField(choices=[('single', 'Request'), ('single_ext', 'Request with external review'), ('double', 'Concept & Proposal')], default='single', max_length=100, verbose_name='Workflow'),
),
migrations.AlterField(
model_name='labbase',
name='workflow_name',
field=models.CharField(choices=[('single', 'Request'), ('single_ext', 'Request with external review'), ('double', 'Concept & Proposal')], default='single', max_length=100, verbose_name='Workflow'),
),
migrations.AlterField(
model_name='roundbase',
name='workflow_name',
field=models.CharField(choices=[('single', 'Request'), ('single_ext', 'Request with external review'), ('double', 'Concept & Proposal')], default='single', max_length=100, verbose_name='Workflow'),
),
]
......@@ -21,6 +21,8 @@ from opentech.apply.funds.models.forms import (
RoundBaseForm,
RoundBaseReviewForm,
)
from opentech.apply.funds.workflow import ConceptProposal, Request
from opentech.apply.users.tests.factories import StaffFactory, UserFactory
from opentech.apply.stream_forms.testing.factories import FormDataFactory
from opentech.apply.home.factories import ApplyHomePageFactory
......@@ -49,7 +51,10 @@ __all__ = [
def workflow_for_stages(stages):
return list(FundType.WORKFLOW_CHOICES.keys())[stages - 1]
return {
1: Request.admin_name,
2: ConceptProposal.admin_name,
}[stages]
class AbstractApplicationFactory(wagtail_factories.PageFactory):
......
......@@ -34,13 +34,13 @@ def formset_base(field, total, delete, factory, same=False):
return base_data
def form_data(number_forms=0, delete=0, stages=None, same_forms=False):
def form_data(number_forms=0, delete=0, stages=1, same_forms=False):
form_data = formset_base('forms', number_forms, delete, same=same_forms, factory=ApplicationFormFactory)
review_form_data = formset_base('review_forms', number_forms, False, same=same_forms, factory=ReviewFormFactory)
form_data.update(review_form_data)
fund_data = factory.build(dict, FACTORY_CLASS=FundTypeFactory)
fund_data['workflow_name'] = workflow_for_stages(stages or number_forms)
fund_data['workflow_name'] = workflow_for_stages(stages)
form_data.update(fund_data)
return form_data
......@@ -66,7 +66,7 @@ class TestWorkflowFormAdminForm(TestCase):
self.assertTrue(form.is_valid(), form.errors.as_text())
def test_doesnt_validates_with_two_forms_one_stage(self):
form = self.submit_data(form_data(2, stages=1))
form = self.submit_data(form_data(2))
self.assertFalse(form.is_valid())
self.assertTrue(form.errors['__all__'])
formset_errors = form.formsets['forms'].errors
......@@ -76,5 +76,5 @@ class TestWorkflowFormAdminForm(TestCase):
self.assertTrue(formset_errors[1]['form'])
def test_can_save_two_forms(self):
form = self.submit_data(form_data(2))
form = self.submit_data(form_data(2, stages=2))
self.assertTrue(form.is_valid())
......@@ -17,7 +17,7 @@ class TestFundCreationView(TestCase):
self.client.force_login(self.user)
url = reverse('wagtailadmin_pages:add', args=('funds', 'fundtype', self.home.id))
data = form_data(forms, same_forms=same_forms)
data = form_data(forms, same_forms=same_forms, stages=forms)
data['action-publish'] = True
response = self.client.post(url, data=data, secure=True, follow=True)
......
......@@ -137,6 +137,8 @@ class CanEditPermissions(DefaultPermissions):
Request = Stage('Request', False)
RequestExt = Stage('RequestExt', True)
Concept = Stage('Concept', False)
Proposal = Stage('Proposal', True)
......@@ -217,6 +219,112 @@ SingleStageDefinition = {
},
}
SingleStageExternalDefinition = {
INITIAL_STATE: {
'transitions': {
'ext_internal_review': 'Open Review',
'ext_rejected': {'display': 'Reject', 'permissions': {UserPermissions.ADMIN, UserPermissions.LEAD}},
'ext_more_info': 'Request More Information',
},
'display': 'Under Discussion',
'stage': RequestExt,
'permissions': DefaultPermissions(),
'step': 0,
},
'ext_more_info': {
'transitions': {
INITIAL_STATE: {
'display': 'Submit',
'permissions': {UserPermissions.APPLICANT, UserPermissions.LEAD, UserPermissions.ADMIN},
'method': 'create_revision',
},
},
'display': 'More information required',
'stage': RequestExt,
'permissions': CanEditPermissions(),
'step': 0,
},
'ext_internal_review': {
'transitions': {
'ext_post_review_discussion': 'Close Review',
},
'display': 'Internal Review',
'stage': RequestExt,
'permissions': DefaultPermissions(),
'step': 1,
},
'ext_post_review_discussion': {
'transitions': {
'ext_external_review': 'Open AC review',
'ext_rejected': {'display': 'Reject', 'permissions': {UserPermissions.ADMIN, UserPermissions.LEAD}},
'ext_post_review_more_info': 'Request More Information',
},
'display': 'Under Discussion',
'stage': RequestExt,
'permissions': DefaultPermissions(),
'step': 2,
},
'ext_post_review_more_info': {
'transitions': {
'ext_post_review_discussion': {
'display': 'Submit',
'permissions': {UserPermissions.APPLICANT, UserPermissions.LEAD, UserPermissions.ADMIN},
'method': 'create_revision',
},
},
'display': 'More information required',
'stage': RequestExt,
'permissions': CanEditPermissions(),
'step': 2,
},
'ext_external_review': {
'transitions': {
'ext_post_external_review_discussion': 'Close Review',
},
'display': 'Advisory Council Review',
'stage': RequestExt,
'permissions': ReviewerReviewPermissions(),
'step': 3,
},
'ext_post_external_review_discussion': {
'transitions': {
'ext_accepted': {'display': 'Accept', 'permissions': {UserPermissions.ADMIN, UserPermissions.LEAD}},
'ext_rejected': {'display': 'Reject', 'permissions': {UserPermissions.ADMIN, UserPermissions.LEAD}},
'ext_post_external_review_more_info': 'Request More Information',
},
'display': 'Under Discussion',
'stage': RequestExt,
'permissions': DefaultPermissions(),
'step': 4,
},
'ext_post_external_review_more_info': {
'transitions': {
'ext_post_external_review_discussion': {
'display': 'Submit',
'permissions': {UserPermissions.APPLICANT, UserPermissions.LEAD, UserPermissions.ADMIN},
'method': 'create_revision',
},
},
'display': 'More information required',
'stage': RequestExt,
'permissions': CanEditPermissions(),
'step': 4,
},
'ext_accepted': {
'display': 'Accepted',
'stage': RequestExt,
'permissions': NoPermissions(),
'step': 5,
},
'ext_rejected': {
'display': 'Rejected',
'stage': RequestExt,
'permissions': NoPermissions(),
'step': 5,
},
}
DoubleStageDefinition = {
INITIAL_STATE: {
......@@ -416,6 +524,10 @@ Request = Workflow('Request', 'single', **{
for phase_name, phase_data in SingleStageDefinition.items()
})
RequestExternal = Workflow('Request with external review', 'single_ext', **{
phase_name: Phase(phase_name, **phase_data)
for phase_name, phase_data in SingleStageExternalDefinition.items()
})
ConceptProposal = Workflow('Concept & Proposal', 'double', **{
phase_name: Phase(phase_name, **phase_data)
......@@ -425,6 +537,7 @@ ConceptProposal = Workflow('Concept & Proposal', 'double', **{
WORKFLOWS = {
Request.admin_name: Request,
RequestExternal.admin_name: RequestExternal,
ConceptProposal.admin_name: ConceptProposal,
}
......@@ -479,6 +592,7 @@ DETERMINATION_RESPONSE_PHASES = [
'post_review_discussion',
'concept_review_discussion',
'post_external_review_discussion',
'ext_post_external_review_discussion',
]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment