def test_create_workflowlevel2_uuid_is_self_generated(self): wflvl1 = factories.WorkflowLevel1(organization=self.core_user.organization) group_wf_team = factories.CoreGroup(name='WF Team', permissions=PERMISSIONS_WORKFLOW_TEAM, organization=self.core_user.organization) self.core_user.core_groups.add(group_wf_team) wflvl1.core_groups.add(group_wf_team) data = { 'name': 'Save the Children', 'workflowlevel1': wflvl1.pk} request = self.factory.post(reverse('workflowlevel2-list'), data) request.user = self.core_user view = WorkflowLevel2ViewSet.as_view({'post': 'create'}) response = view(request) self.assertEqual(response.status_code, 201) self.assertTrue(uuid.UUID(response.data['level2_uuid']))
def test_save_budget_value_from_wfl2_create(self): """ When a budget is created, the related wfl2s total_estimated_budget should be updated """ wflvl1 = factories.WorkflowLevel1(name='WorkflowLevel1', organization=self.organization) wflvl2 = factories.WorkflowLevel2(name='WorkflowLevel2', workflowlevel1=wflvl1, total_estimated_budget=0, actual_cost=0) factories.Budget(proposed_value=100, actual_value=10, workflowlevel2=wflvl2) wflvl2 = WorkflowLevel2.objects.get(pk=wflvl2.pk) self.assertEqual(wflvl2.total_estimated_budget, 100.00) self.assertEqual(wflvl2.actual_cost, 10.00)
def test_update_customform_superuser_minimal(self): self.hikaya_user.user.is_staff = True self.hikaya_user.user.is_superuser = True self.hikaya_user.user.save() wflvl1 = factories.WorkflowLevel1( organization=self.hikaya_user.organization) silo = factories.Silo(workflowlevel1=[wflvl1], owner=self.hikaya_user.user, public=False) fields = [{ 'name': 'name', 'type': 'text' }, { 'name': 'age', 'type': 'number' }, { 'name': 'city', 'type': 'text' }] form_uuid = uuid.uuid4() data = { 'name': 'CustomForm Test', 'fields': json.dumps(fields), 'level1_uuid': wflvl1.level1_uuid, 'hikaya_user_uuid': self.hikaya_user.hikaya_user_uuid, 'form_uuid': form_uuid } request = self.factory.post('api/customform', data=data) request.user = self.hikaya_user.user view = CustomFormViewSet.as_view({'post': 'update'}) response = view(request, pk=silo.pk) self.assertEqual(response.status_code, 200) silo = Silo.objects.get(pk=response.data['id']) self.assertEquals( silo.name, 'customform_test_health_and_survival' '_for_syrians_in_affected_regions') self.assertEqual(silo.data_count, 0)
def test_list_workflowlevel2_program_team(self): request = self.factory.get(reverse('workflowlevel2-list')) wflvl1 = factories.WorkflowLevel1(organization=self.core_user.organization) group_wf_team = factories.CoreGroup(name='WF Team', permissions=PERMISSIONS_WORKFLOW_TEAM, organization=self.core_user.organization) self.core_user.core_groups.add(group_wf_team) wflvl1.core_groups.add(group_wf_team) request.user = self.core_user view = WorkflowLevel2ViewSet.as_view({'get': 'list'}) response = view(request) self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data['results']), 0) factories.WorkflowLevel2(workflowlevel1=wflvl1) response = view(request) self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data['results']), 1)
def test_list_workflowlevel2_view_only(self): request = self.factory.get('/api/workflowlevel2/') wflvl1 = factories.WorkflowLevel1(organization=self.core_user.organization) group_wf_team = factories.CoreGroup(name='WF View Only', permissions=PERMISSIONS_VIEW_ONLY, organization=self.core_user.organization) self.core_user.core_groups.add(group_wf_team) wflvl1.core_groups.add(group_wf_team) request.user = self.core_user view = WorkflowLevel2ViewSet.as_view({'get': 'list'}) response = view(request) self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data['results']), 0) factories.WorkflowLevel2(workflowlevel1=wflvl1) response = view(request) self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data['results']), 1)
def test_create_objective_org_admin(self): group_org_admin = factories.Group(name=ROLE_ORGANIZATION_ADMIN) self.tola_user.user.groups.add(group_org_admin) request = self.factory.post('/api/objective/') wflvl1 = factories.WorkflowLevel1( organization=self.tola_user.organization) wflvl1_url = reverse('workflowlevel1-detail', kwargs={'pk': wflvl1.id}, request=request) data = {'name': 'Macht Deutschland wieder gesund', 'workflowlevel1': wflvl1_url} request = self.factory.post('/api/objective/', data) request.user = self.tola_user.user view = ObjectiveViewSet.as_view({'post': 'create'}) response = view(request) self.assertEqual(response.status_code, 201) self.assertEqual(response.data['name'], u'Macht Deutschland wieder gesund')
def test_create_documentation_org_admin(self): group_org_admin = factories.Group(name=ROLE_ORGANIZATION_ADMIN) self.tola_user.user.groups.add(group_org_admin) request = self.factory.post('/api/documentation/') wflvl1 = factories.WorkflowLevel1( organization=self.tola_user.organization) wflvl1_url = reverse('workflowlevel1-detail', kwargs={'pk': wflvl1.id}, request=request) data = {'workflowlevel1': wflvl1_url} request = self.factory.post('/api/documentation/', data) request.user = self.tola_user.user view = DocumentationViewSet.as_view({'post': 'create'}) response = view(request) self.assertEqual(response.status_code, 201) self.assertEqual(response.data['workflowlevel1'], wflvl1_url)
def test_update_workflowlevel1_org_admin(self): group_org_admin = factories.CoreGroup( name='Org Admin', is_org_level=True, permissions=PERMISSIONS_ORG_ADMIN, organization=self.core_user.organization) self.core_user.core_groups.add(group_org_admin) wflvl1 = factories.WorkflowLevel1( organization=self.core_user.organization) data = {'name': 'Save the Lennons'} request = self.factory.put( reverse('workflowlevel1-detail', args=(wflvl1.pk, )), data) request.user = self.core_user view = WorkflowLevel1ViewSet.as_view({'put': 'update'}) response = view(request, pk=wflvl1.pk) self.assertEqual(response.status_code, 200) wflvl1 = WorkflowLevel1.objects.get(pk=response.data['id']) self.assertEqual(wflvl1.name, data['name'])
def test_update_level_program_admin_json(self): wflvl1 = factories.WorkflowLevel1() WorkflowTeam.objects.create( workflow_user=self.tola_user, workflowlevel1=wflvl1, role=factories.Group(name=ROLE_PROGRAM_ADMIN)) level = factories.Level(organization=self.tola_user.organization, workflowlevel1=wflvl1) data = {'name': 'Goal'} request = self.factory.post('/api/level/', json.dumps(data), content_type='application/json') request.user = self.tola_user.user view = LevelViewSet.as_view({'post': 'update'}) response = view(request, pk=level.pk) self.assertEqual(response.status_code, 200) level = Level.objects.get(pk=response.data['id']) self.assertEquals(level.name, data['name'])
def test_create_workflowlevel2_program_team(self): request = self.factory.post(reverse('workflowlevel2-list')) wflvl1 = factories.WorkflowLevel1( organization=self.core_user.organization) group_wf_team = factories.CoreGroup( name='WF Team', permissions=PERMISSIONS_WORKFLOW_TEAM, organization=self.core_user.organization) self.core_user.core_groups.add(group_wf_team) wflvl1.core_groups.add(group_wf_team) data = {'name': 'Help Syrians', 'workflowlevel1': wflvl1.pk} request = self.factory.post(reverse('workflowlevel2-list'), data) request.user = self.core_user view = WorkflowLevel2ViewSet.as_view({'post': 'create'}) response = view(request) self.assertEqual(response.status_code, 201) self.assertEqual(response.data['name'], u'Help Syrians')
def test_list_workflowlevel1_superuser_and_org_admin(self): wflvl1 = factories.WorkflowLevel1() wflvl2 = factories.WorkflowLevel2(workflowlevel1=wflvl1) group_org_admin = factories.Group(name=ROLE_ORGANIZATION_ADMIN) self.tola_user.user.groups.add(group_org_admin) self.tola_user.user.is_staff = True self.tola_user.user.is_superuser = True self.tola_user.user.save() request = self.factory.get('/api/workflowlevel1/') request.user = self.tola_user.user view = WorkflowLevel1ViewSet.as_view({'get': 'list'}) response = view(request) self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 1) self.assertEqual(response.data[0]['name'], wflvl1.name) self.assertEqual(response.data[0]['budget'], wflvl2.total_estimated_budget) self.assertEqual(response.data[0]['actuals'], wflvl2.actual_cost)
def test_list_workflowlevel2_org_admin(self): request = self.factory.get('/api/workflowlevel2/') group_org_admin = factories.Group(name=ROLE_ORGANIZATION_ADMIN) self.tola_user.user.groups.add(group_org_admin) wflvl1 = factories.WorkflowLevel1() WorkflowTeam.objects.create(workflow_user=self.tola_user, workflowlevel1=wflvl1) factories.WorkflowLevel2(workflowlevel1=wflvl1) request.user = self.tola_user.user view = WorkflowLevel2ViewSet.as_view({'get': 'list'}) response = view(request) self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 0) wflvl1.organization = self.tola_user.organization wflvl1.save() response = view(request) self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 1)
def test_create_workflowlevel2_view_only(self): request = self.factory.post(reverse('workflowlevel2-list')) wflvl1 = factories.WorkflowLevel1( organization=self.core_user.organization) group_wf_team = factories.CoreGroup( name='WF View Only', permissions=PERMISSIONS_VIEW_ONLY, organization=self.core_user.organization) self.core_user.core_groups.add(group_wf_team) wflvl1.core_groups.add(group_wf_team) data = {'name': 'Help Syrians', 'workflowlevel1': wflvl1.pk} request = self.factory.post(reverse('workflowlevel2-list'), data) request.user = self.core_user view = WorkflowLevel2ViewSet.as_view({'post': 'create'}) response = view(request) self.assertEqual(response.status_code, 403)
def test_list_collecteddata_org_admin(self): request = self.factory.get('/api/collecteddata/') group_org_admin = factories.Group(name=ROLE_ORGANIZATION_ADMIN) self.tola_user.user.groups.add(group_org_admin) wflvl1 = factories.WorkflowLevel1( organization=self.tola_user.organization) WorkflowTeam.objects.create(workflow_user=self.tola_user, workflowlevel1=wflvl1) request.user = self.tola_user.user view = CollectedDataViewSet.as_view({'get': 'list'}) response = view(request) self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 0) indicator = factories.Indicator(workflowlevel1=[wflvl1]) factories.CollectedData(workflowlevel1=wflvl1, indicator=indicator) response = view(request) self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 1)
def test_delete_workflowlevel2_org_admin(self): group_org_admin = factories.CoreGroup( name='Org Admin', is_org_level=True, permissions=PERMISSIONS_ORG_ADMIN, organization=self.core_user.organization) self.core_user.core_groups.add(group_org_admin) wflvl1 = factories.WorkflowLevel1( organization=self.core_user.organization) workflowlevel2 = factories.WorkflowLevel2(workflowlevel1=wflvl1) request = self.factory.delete(reverse('workflowlevel2-list')) request.user = self.core_user view = WorkflowLevel2ViewSet.as_view({'delete': 'destroy'}) response = view(request, pk=str(workflowlevel2.pk)) self.assertEqual(response.status_code, 204) self.assertRaises(WorkflowLevel2.DoesNotExist, WorkflowLevel2.objects.get, pk=str(workflowlevel2.pk))
def test_filter_contact_stakeholder_org_admin(self): group_org_admin = factories.Group(name=ROLE_ORGANIZATION_ADMIN) self.tola_user.user.groups.add(group_org_admin) wkflvl1 = factories.WorkflowLevel1() WorkflowTeam.objects.create(workflow_user=self.tola_user, workflowlevel1=wkflvl1) contact1 = factories.Contact(name='John', organization=self.tola_user.organization, workflowlevel1=wkflvl1) factories.Contact(name='Paul', organization=self.tola_user.organization, workflowlevel1=wkflvl1) request = self.factory.get('/api/contact/?name=%s' % contact1.name) request.user = self.tola_user.user view = ContactViewSet.as_view({'get': 'list'}) response = view(request) self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 1) self.assertEqual(response.data[0]['name'], contact1.name)
def test_create_level_superuser(self): self.tola_user.user.is_staff = True self.tola_user.user.is_superuser = True self.tola_user.user.save() request = self.factory.post('/api/level/') wflvl1 = factories.WorkflowLevel1() wflvl1_url = reverse('workflowlevel1-detail', kwargs={'pk': wflvl1.id}, request=request) data = {'name': 'Goal', 'workflowlevel1': wflvl1_url} request = self.factory.post('/api/level/', data) request.user = self.tola_user.user view = LevelViewSet.as_view({'post': 'create'}) response = view(request) self.assertEqual(response.status_code, 201) self.assertEqual(response.data['name'], u'Goal')
def test_create_customform_tolauser_not_found(self): self.tola_user.user.is_staff = True self.tola_user.user.is_superuser = True self.tola_user.user.save() wflvl1 = factories.WorkflowLevel1( organization=self.tola_user.organization) fields = [ { 'name': 'name', 'type': 'text' }, { 'name': 'age', 'type': 'number' }, { 'name': 'city', 'type': 'text' } ] tola_user_uuid = uuid.uuid4() form_uuid = uuid.uuid4() data = { 'name': 'CustomForm Test', 'description': 'This is a test.', 'fields': json.dumps(fields), 'level1_uuid': wflvl1.level1_uuid, 'tola_user_uuid': tola_user_uuid, 'form_uuid': form_uuid } request = self.factory.post('api/customform', data=data) request.user = self.tola_user.user view = CustomFormViewSet.as_view({'post': 'create'}) response = view(request) self.assertEqual(response.status_code, 400) self.assertEqual(response.data, 'TolaUser matching query does not exist.')
def test_filter_workflowlevel2_status_org_admin(self): group_org_admin = factories.CoreGroup( name='Org Admin', is_org_level=True, permissions=PERMISSIONS_ORG_ADMIN, organization=self.core_user.organization) self.core_user.core_groups.add(group_org_admin) wkflvl1 = factories.WorkflowLevel1( organization=self.core_user.organization) wfl_status1 = factories.WorkflowLevelStatus(name="Started Test Status", short_name="started") wfl_status2 = factories.WorkflowLevelStatus( name="Finished Test Status", short_name="finished") wkflvl2_1 = factories.WorkflowLevel2(name='Started brief survey', workflowlevel1=wkflvl1, status=wfl_status1) wkflvl2_2 = factories.WorkflowLevel2(name='Finished brief survey', workflowlevel1=wkflvl1, status=wfl_status2) # filter by status.uuid request = self.factory.get( f"{reverse('workflowlevel2-list')}?status__uuid={str(wfl_status1.pk)}" ) request.user = self.core_user view = WorkflowLevel2ViewSet.as_view({'get': 'list'}) response = view(request) self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data['results']), 1) self.assertEqual(response.data['results'][0]['name'], wkflvl2_1.name) # filter by status.short_name request = self.factory.get( f"{reverse('workflowlevel2-list')}?status__short_name=finished") request.user = self.core_user view = WorkflowLevel2ViewSet.as_view({'get': 'list'}) response = view(request) self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data['results']), 1) self.assertEqual(response.data['results'][0]['name'], wkflvl2_2.name)
def test_delete_workflowlevel2_program_admin(self): wflvl1 = factories.WorkflowLevel1( organization=self.core_user.organization) workflowlevel2 = factories.WorkflowLevel2(workflowlevel1=wflvl1) group_wf_admin = factories.CoreGroup( name='WF Admin', permissions=PERMISSIONS_WORKFLOW_ADMIN, organization=self.core_user.organization) self.core_user.core_groups.add(group_wf_admin) wflvl1.core_groups.add(group_wf_admin) request = self.factory.delete(reverse('workflowlevel2-list')) request.user = self.core_user view = WorkflowLevel2ViewSet.as_view({'delete': 'destroy'}) response = view(request, pk=str(workflowlevel2.pk)) print('------ response') print(response.data) self.assertEqual(response.status_code, 204) self.assertRaises(WorkflowLevel2.DoesNotExist, WorkflowLevel2.objects.get, pk=str(workflowlevel2.pk))
def test_update_workflowlevel2_diff_org_admin(self): group_org_admin = factories.CoreGroup(name='Org Admin', is_org_level=True, permissions=PERMISSIONS_ORG_ADMIN, organization=self.core_user.organization) self.core_user.core_groups.add(group_org_admin) request = self.factory.post(reverse('workflowlevel2-list')) another_org = factories.Organization(name='Another Org') wflvl1 = factories.WorkflowLevel1(organization=another_org) workflowlevel2 = factories.WorkflowLevel2(workflowlevel1=wflvl1) data = {'name': 'Community awareness program conducted to plant trees', 'workflowlevel1': wflvl1.pk} request = self.factory.put( reverse('workflowlevel2-detail', args=(str(workflowlevel2.pk),)), data ) request.user = self.core_user view = WorkflowLevel2ViewSet.as_view({'put': 'update'}) response = view(request, pk=str(workflowlevel2.pk)) self.assertEqual(response.status_code, 403)
def test_update_collecteddata_diff_org_admin(self): group_org_admin = factories.Group(name=ROLE_ORGANIZATION_ADMIN) self.tola_user.user.groups.add(group_org_admin) another_org = factories.Organization(name='Another Org') wflvl1 = factories.WorkflowLevel1(organization=another_org) collecteddata = factories.CollectedData(workflowlevel1=wflvl1) request = self.factory.post('/api/collecteddata/') indicator_url = reverse('indicator-detail', kwargs={'pk': collecteddata.indicator.id}, request=request) data = { 'indicator': indicator_url, 'description': 'Intermediate Results' } request = self.factory.post('/api/collecteddata/', data) request.user = self.tola_user.user view = CollectedDataViewSet.as_view({'post': 'update'}) response = view(request, pk=collecteddata.pk) self.assertEqual(response.status_code, 403)
def test_create_collecteddata_superuser(self): self.tola_user.user.is_staff = True self.tola_user.user.is_superuser = True self.tola_user.user.save() request = self.factory.post('/api/collecteddata/') wflvl1 = factories.WorkflowLevel1() indicator = factories.Indicator(workflowlevel1=[wflvl1]) indicator_url = reverse('indicator-detail', kwargs={'pk': indicator.id}, request=request) data = {'indicator': indicator_url} request = self.factory.post('/api/collecteddata/', data) request.user = self.tola_user.user view = CollectedDataViewSet.as_view({'post': 'create'}) response = view(request) self.assertEqual(response.status_code, 201) self.assertEqual(response.data['indicator'], indicator_url)
def test_update_collecteddata_view_only(self): wflvl1 = factories.WorkflowLevel1( organization=self.tola_user.organization) WorkflowTeam.objects.create(workflow_user=self.tola_user, workflowlevel1=wflvl1, role=factories.Group(name=ROLE_VIEW_ONLY)) collecteddata = factories.CollectedData(workflowlevel1=wflvl1) request = self.factory.post('/api/collecteddata/') indicator_url = reverse('indicator-detail', kwargs={'pk': collecteddata.indicator.id}, request=request) data = { 'indicator': indicator_url, 'description': 'Intermediate Results' } request = self.factory.post('/api/collecteddata/', data) request.user = self.tola_user.user view = CollectedDataViewSet.as_view({'post': 'update'}) response = view(request, pk=collecteddata.pk) self.assertEqual(response.status_code, 403)
def test_create_documentation_program_admin(self): request = self.factory.post('/api/documentation/') wflvl1 = factories.WorkflowLevel1( organization=self.tola_user.organization) wflvl1_url = reverse('workflowlevel1-detail', kwargs={'pk': wflvl1.id}, request=request) WorkflowTeam.objects.create( workflow_user=self.tola_user, workflowlevel1=wflvl1, role=factories.Group(name=ROLE_PROGRAM_ADMIN)) data = {'workflowlevel1': wflvl1_url} request = self.factory.post('/api/documentation/', data) request.user = self.tola_user.user view = DocumentationViewSet.as_view({'post': 'create'}) response = view(request) self.assertEqual(response.status_code, 201) self.assertEqual(response.data['workflowlevel1'], wflvl1_url)
def setUp(self): self.factory = APIRequestFactory() self.tola_user = factories.TolaUser() self.read = factories.Read( owner=self.tola_user.user, type=factories.ReadType(read_type='CustomForm'), read_name='Lennon Survey', ) wflvl1 = factories.WorkflowLevel1( organization=self.tola_user.organization) self.silo = factories.Silo( name='Lennon Survey', workflowlevel1=[wflvl1], owner=self.tola_user.user, columns='[{"name": "name", "type": "text"},' '{"name": "age", "type": "number"},' '{"name": "city", "type": "text"}]', reads=[self.read], public=False )
def test_create_customform_view_only(self): request = self.factory.post('/api/customform/') wflvl1 = factories.WorkflowLevel1( organization=self.tola_user.organization) wflvl1_url = reverse('workflowlevel1-detail', kwargs={'pk': wflvl1.id}, request=request) WorkflowTeam.objects.create( workflow_user=self.tola_user, workflowlevel1=wflvl1, role=factories.Group(name=ROLE_VIEW_ONLY)) data = {'name': '4W Daily Activity Report', 'workflowlevel1': wflvl1_url} request = self.factory.post('/api/customform/', data) request.user = self.tola_user.user view = CustomFormViewSet.as_view({'post': 'create'}) response = view(request) self.assertEqual(response.status_code, 403)
def test_create_customform_org_admin(self): group_org_admin = factories.Group(name=ROLE_ORGANIZATION_ADMIN) self.tola_user.user.groups.add(group_org_admin) request = self.factory.post('/api/customform/') wflvl1 = factories.WorkflowLevel1( organization=self.tola_user.organization) wflvl1_url = reverse('workflowlevel1-detail', kwargs={'pk': wflvl1.id}, request=request) data = {'name': '4W Daily Activity Report', 'workflowlevel1': wflvl1_url} request = self.factory.post('/api/customform/', data) request.user = self.tola_user.user view = CustomFormViewSet.as_view({'post': 'create'}) response = view(request) self.assertEqual(response.status_code, 201) self.assertEqual(response.data['name'], '4W Daily Activity Report')
def test_create_level_program_team(self): request = self.factory.post('/api/level/') wflvl1 = factories.WorkflowLevel1( organization=self.tola_user.organization) wflvl1_url = reverse('workflowlevel1-detail', kwargs={'pk': wflvl1.id}, request=request) WorkflowTeam.objects.create( workflow_user=self.tola_user, workflowlevel1=wflvl1, role=factories.Group(name=ROLE_PROGRAM_TEAM)) data = {'name': 'Goal', 'workflowlevel1': wflvl1_url} request = self.factory.post('/api/level/', data) request.user = self.tola_user.user view = LevelViewSet.as_view({'post': 'create'}) response = view(request) self.assertEqual(response.status_code, 201) self.assertEqual(response.data['name'], u'Goal')
def test_update_workflowlevel2sort_normal_user(self): request = self.factory.post('/workflowlevel2sort/') wflvl1 = factories.WorkflowLevel1( organization=self.core_user.organization) workflowlevel2sort = factories.WorkflowLevel2Sort( workflowlevel1=wflvl1) data = {'workflowlevel2_pk': uuid.uuid4(), 'workflowlevel1': wflvl1.pk} request = self.factory.post('/workflowlevel2sort/', data) request.user = self.core_user view = WorkflowLevel2SortViewSet.as_view({'post': 'update'}) response = view(request, pk=workflowlevel2sort.pk) self.assertEqual(response.status_code, 200) workflowlevel2sort = WorkflowLevel2Sort.objects.get( pk=response.data['id']) self.assertEqual(workflowlevel2sort.workflowlevel2_pk, data['workflowlevel2_pk'])