def test_send_report_inactive_author(self): UserFactory(pme=True) visit = TPMVisitFactory(status='pre_tpm_reported', author__is_active=False) visit.send_report() self.assertEqual(len(mail.outbox), len(visit.unicef_focal_points))
def test_reject(self): UserFactory(pme=True) visit = TPMVisitFactory(status='pre_tpm_rejected') visit.reject('Just because') self.assertEqual(len(mail.outbox), len(visit.unicef_focal_points_and_pme))
def test_report_rejected(self): visit = TPMVisitFactory(status='pre_tpm_report_rejected') visit.reject_report('Just because') self.assertEqual( len(mail.outbox), visit.tpm_partner_focal_points.filter( user__email__isnull=False).count())
def test_approve(self): visit = TPMVisitFactory(status='pre_unicef_approved') visit.approve(notify_focal_point=True, notify_tpm_partner=True) self.assertEqual( len(mail.outbox), len(visit.unicef_focal_points_with_emails) + visit.tpm_partner_focal_points.filter( user__email__isnull=False).count())
def test_list_view_filter_single(self): staff = self.tpm_user.tpmpartners_tpmpartnerstaffmember visit_assigned = TPMVisitFactory(status=TPMVisit.ASSIGNED, tpm_partner=staff.tpm_partner, tpm_partner_focal_points=[staff]) TPMVisitFactory(status=TPMVisit.REPORTED, tpm_partner=staff.tpm_partner, tpm_partner_focal_points=[staff]) self._test_list_view(self.tpm_user, [visit_assigned], filters={"status": TPMVisit.ASSIGNED})
def test_assign(self): visit = TPMVisitFactory(status='pre_assigned', tpm_partner_focal_points__count=3) first_partner = visit.tpm_partner_focal_points.first() first_partner.user.is_active = False first_partner.user.save() self.assertEqual(len(mail.outbox), 0) visit.assign() self.assertEqual( len(mail.outbox), visit.tpm_partner_focal_points.filter(user__email__isnull=False).count() - 1 + 1 )
def test_list_view_filter_multiple(self): staff = self.tpm_user.tpmpartners_tpmpartnerstaffmember visit_assigned = TPMVisitFactory(status=TPMVisit.ASSIGNED, tpm_partner=staff.tpm_partner, tpm_partner_focal_points=[staff]) visit_reported = TPMVisitFactory(status=TPMVisit.REPORTED, tpm_partner=staff.tpm_partner, tpm_partner_focal_points=[staff]) self._test_list_view(self.tpm_user, [visit_assigned, visit_reported], filters={ "status__in": ",".join( [TPMVisit.ASSIGNED, TPMVisit.REPORTED]) })
def test_tpm_list_view(self): TPMVisitFactory() # drafts shouldn't be available for tpm self._test_list_view(self.tpm_user, []) visit = TPMVisitFactory( status='assigned', tpm_partner=self.tpm_user.tpmpartners_tpmpartnerstaffmember. tpm_partner, tpm_partner_focal_points=[ self.tpm_user.tpmpartners_tpmpartnerstaffmember ]) self._test_list_view(self.tpm_user, [visit])
def test_intervention_bilateral_partner(self): visit = TPMVisitFactory( tpm_activities__count=1, tpm_activities__intervention__agreement__partner__partner_type= PartnerType.BILATERAL_MULTILATERAL) existing_activity = visit.tpm_activities.first() self.assertIsNotNone(existing_activity) response = self.forced_auth_req( 'patch', reverse('tpm:visits-detail', args=(visit.id, )), user=self.pme_user, data={ 'tpm_activities': [{ 'partner': existing_activity.partner.id, 'date': datetime.now().date(), 'section': existing_activity.section.id, 'locations': existing_activity.locations.all().values_list('id', flat=True), 'offices': existing_activity.offices.all().values_list('id', flat=True), 'unicef_focal_points': existing_activity.unicef_focal_points.all().values_list( 'id', flat=True), }] }) self.assertEqual(response.status_code, status.HTTP_200_OK)
def test_tpm_list_view(self): TPMVisitFactory() TPMVisitFactory(status='cancelled', date_of_assigned=None) # drafts shouldn't be available for tpm, including cancelled from draft self._test_list_view(self.tpm_user, []) visit = TPMVisitFactory( status='assigned', tpm_partner=self.tpm_user.tpmpartners_tpmpartnerstaffmember. tpm_partner, tpm_partner_focal_points=[ self.tpm_user.tpmpartners_tpmpartnerstaffmember ]) self._test_list_view(self.tpm_user, [visit])
def test_cp_outputs_subview(self): TPMVisitFactory(tpm_activities__count=1) response = self.forced_auth_req('get', reverse('tpm:visits-cp-outputs'), user=self.unicef_user) self.assertEqual(response.status_code, status.HTTP_200_OK)
def test_action_point_added(self): visit = TPMVisitFactory(status='tpm_reported', tpm_activities__count=1) activity = visit.tpm_activities.first() self.assertEqual(activity.action_points.count(), 0) response = self.forced_auth_req( 'post', '/api/tpm/visits/{}/action-points/'.format(visit.id), user=self.pme_user, data={ 'tpm_activity': activity.id, 'description': fuzzy.FuzzyText(length=100).fuzz(), 'due_date': fuzzy.FuzzyDate(timezone.now().date(), _FUZZY_END_DATE).fuzz(), 'assigned_to': self.unicef_user.id, 'office': self.pme_user.profile.office.id, 'section': SectionFactory().id, }) self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.assertEqual(activity.action_points.count(), 1) self.assertIsNotNone(activity.action_points.first().partner)
def test_action_point_editable_by_author(self): visit = TPMVisitFactory(status='tpm_reported', tpm_activities__count=1) activity = visit.tpm_activities.first() action_point = ActionPointFactory(tpm_activity=activity, status='pre_completed') self._test_action_point_editable(action_point, action_point.author)
def test_attachments_pv_applicable(self): visit = TPMVisitFactory(status='tpm_reported', tpm_activities__count=3) visit.tpm_activities.first().report_attachments.all().delete() self.assertListEqual( [a.pv_applicable for a in visit.tpm_activities.all()], [False, True, True])
def setUpTestData(cls): cls.code_1 = "test_code_1" cls.file_type_1 = AttachmentFileTypeFactory(code=cls.code_1) cls.code_2 = "test_code_2" cls.file_type_2 = AttachmentFileTypeFactory(code=cls.code_2) cls.unicef_staff = UserFactory(is_staff=True) cls.user = UserFactory() cls.url = reverse("attachments:list") cls.attachment_1 = AttachmentFactory( file_type=cls.file_type_1, code=cls.code_1, file="sample1.pdf", content_object=cls.file_type_1, uploaded_by=cls.unicef_staff ) cls.attachment_2 = AttachmentFactory( file_type=cls.file_type_2, code=cls.code_2, file="sample2.pdf", content_object=cls.file_type_2, uploaded_by=cls.user ) cls.partner = PartnerFactory( partner_type=PartnerType.UN_AGENCY, vendor_number="V123", ) cls.agreement = AgreementFactory(partner=cls.partner) cls.assessment = AssessmentFactory(partner=cls.partner) cls.amendment = AgreementAmendmentFactory(agreement=cls.agreement) cls.intervention = InterventionFactory(agreement=cls.agreement) cls.result_link = InterventionResultLinkFactory( intervention=cls.intervention ) cls.intervention_amendment = InterventionAmendmentFactory( intervention=cls.intervention ) cls.intervention_attachment = InterventionAttachmentFactory( intervention=cls.intervention ) cls.tpm_partner = SimpleTPMPartnerFactory(vendor_number="V432") cls.tpm_visit = TPMVisitFactory(tpm_partner=cls.tpm_partner) cls.tpm_activity = TPMActivityFactory( partner=cls.partner, intervention=cls.intervention, tpm_visit=cls.tpm_visit ) cls.engagement = EngagementFactory(partner=cls.partner) cls.default_partner_response = [{ "partner": "", "partner_type": "", "vendor_number": "", "pd_ssfa_number": "", "agreement_reference_number": "", "source": "", }] * 2
def test_assign_without_activities(self): visit = TPMVisitFactory(status='draft', tpm_activities__count=0) response = self._do_transition(visit, 'assign', self.pme_user) self.assertEquals(response.status_code, status.HTTP_400_BAD_REQUEST) visit = self._refresh_tpm_visit_instance(visit) self.assertEquals(visit.status, 'draft')
def test_activity_attachment_without_intervention(self): visit = TPMVisitFactory(tpm_activities__count=1) activity = visit.tpm_activities.first() activity.intervention = None activity.save() attachment = AttachmentFactory(content_object=activity) denormalize_attachment(attachment)
def test_action_point_complete_fail_unicef_user(self): visit = TPMVisitFactory(status='tpm_reported', tpm_activities__count=1) activity = visit.tpm_activities.first() action_point = ActionPointFactory(tpm_activity=activity, status='pre_completed', comments__count=0) self._test_complete(action_point, self.unicef_user, can_complete=False)
def test_action_point_complete_assignee(self): visit = TPMVisitFactory(status='tpm_reported', tpm_activities__count=1) activity = visit.tpm_activities.first() action_point = ActionPointFactory(tpm_activity=activity, status='pre_completed', comments__count=0) self._test_complete(action_point, action_point.assigned_to)
def test_implementing_partners_subview(self): TPMVisitFactory(tpm_activities__count=1) response = self.forced_auth_req( 'get', reverse('tpm:visits-implementing-partners'), user=self.unicef_user) self.assertEqual(response.status_code, status.HTTP_200_OK)
def test_action_point_editable_by_pme_approved_visit(self): visit = TPMVisitFactory(status='unicef_approved', tpm_activities__count=1) activity = visit.tpm_activities.first() action_point = ActionPointFactory(tpm_activity=activity, status='pre_completed') self._test_action_point_editable(action_point, self.pme_user)
def test_action_point_readonly_by_unicef_user(self): visit = TPMVisitFactory(status='tpm_reported', tpm_activities__count=1) activity = visit.tpm_activities.first() action_point = ActionPointFactory(tpm_activity=activity, status='pre_completed') self._test_action_point_editable(action_point, self.unicef_user, editable=False)
def setUpTestData(cls): super(TestVisitReportAttachmentsView, cls).setUpTestData() cls.visit = TPMVisitFactory( status='tpm_accepted', tpm_partner=cls.tpm_user.tpmpartners_tpmpartnerstaffmember. tpm_partner, tpm_partner_focal_points=[ cls.tpm_user.tpmpartners_tpmpartnerstaffmember ])
def setUpTestData(cls): super().setUpTestData() cls.visit = TPMVisitFactory( status='draft', tpm_partner=cls.tpm_user.tpmpartners_tpmpartnerstaffmember. tpm_partner, tpm_partner_focal_points=[ cls.tpm_user.tpmpartners_tpmpartnerstaffmember ])
def test_action_point_readonly_on_complete_by_author(self): visit = TPMVisitFactory(status='unicef_approved', tpm_activities__count=1) activity = visit.tpm_activities.first() action_point = ActionPointFactory(tpm_activity=activity, status='completed') self._test_action_point_editable(action_point, action_point.assigned_to, editable=False)
def test_tpm_report_after_reject(self): visit = TPMVisitFactory(status='tpm_report_rejected', tpm_partner=self.tpm_partner, tpm_partner_focal_points=[self.tpm_staff]) response = self._do_transition(visit, 'send_report', self.tpm_user) self.assertEquals(response.status_code, status.HTTP_200_OK) visit = self._refresh_tpm_visit_instance(visit) self.assertEquals(visit.status, 'tpm_reported')
def test_tpm_accept_success(self): visit = TPMVisitFactory(status='assigned', tpm_partner=self.tpm_partner, tpm_partner_focal_points=[self.tpm_staff]) response = self._do_transition(visit, 'accept', self.tpm_user) self.assertEquals(response.status_code, status.HTTP_200_OK) visit = self._refresh_tpm_visit_instance(visit) self.assertEquals(visit.status, 'tpm_accepted')
def test_success_assign(self): visit = TPMVisitFactory(status='draft', tpm_activities__count=3, tpm_activities__unicef_focal_points__count=3, tpm_partner_focal_points__count=3) response = self._do_transition(visit, 'assign', self.pme_user) self.assertEquals(response.status_code, status.HTTP_200_OK) visit = self._refresh_tpm_visit_instance(visit) self.assertEquals(visit.status, 'assigned')
def test_approve_report_success(self): visit = TPMVisitFactory(status='tpm_reported') response = self._do_transition(visit, 'approve', self.pme_user, data={'mark_as_programmatic_visit': []}) self.assertEquals(response.status_code, status.HTTP_200_OK) visit = self._refresh_tpm_visit_instance(visit) self.assertEquals(visit.status, 'unicef_approved')
def test_success_cancel(self): visit = TPMVisitFactory(status='draft') response = self._do_transition(visit, 'cancel', self.pme_user, data={'cancel_comment': 'Just because'}) self.assertEquals(response.status_code, status.HTTP_200_OK) visit = self._refresh_tpm_visit_instance(visit) self.assertEquals(visit.status, 'cancelled')