Beispiel #1
0
    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))
Beispiel #2
0
    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))
Beispiel #3
0
    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())
Beispiel #4
0
    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())
Beispiel #5
0
 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})
Beispiel #6
0
    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
        )
Beispiel #7
0
 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])
                          })
Beispiel #8
0
    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])
Beispiel #9
0
    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)
Beispiel #10
0
    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])
Beispiel #11
0
    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)
Beispiel #12
0
    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)
Beispiel #13
0
    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)
Beispiel #14
0
    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])
Beispiel #15
0
    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
Beispiel #16
0
    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')
Beispiel #17
0
    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)
Beispiel #18
0
    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)
Beispiel #19
0
    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)
Beispiel #20
0
    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)
Beispiel #21
0
    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)
Beispiel #22
0
    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)
Beispiel #23
0
    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
            ])
Beispiel #24
0
    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
            ])
Beispiel #25
0
    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)
Beispiel #26
0
    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')
Beispiel #27
0
    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')
Beispiel #28
0
    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')
Beispiel #29
0
    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')
Beispiel #30
0
    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')