コード例 #1
0
 def test_valid_hyperlink(self):
     valid_hyperlink_attachment = AttachmentFactory(
         hyperlink='http://example.com/test_file.txt', content_object=self.simple_object
     )
     valid_hyperlink_attachment.clean()
     self.assertIsNotNone(valid_hyperlink_attachment.hyperlink)
     self.assertEqual(valid_hyperlink_attachment.url, valid_hyperlink_attachment.hyperlink)
コード例 #2
0
    def test_patch_agreement_replace_attachment(self):
        agreement = AgreementFactory(partner=self.partner1,
                                     status=Agreement.DRAFT)
        attachment_current = AttachmentFactory(
            content_object=agreement,
            file_type=self.file_type_agreement,
            code=self.file_type_agreement.code,
            file="old_file.pdf",
        )
        attachment_new = AttachmentFactory(
            file="new_file.pdf",
            file_type=None,
            code="",
        )

        status_code, response = self.run_request(agreement.pk)
        self.assertEqual(status_code, status.HTTP_200_OK)
        self.assertTrue(response["attachment"].endswith(
            attachment_current.file.url))

        data = {"attachment": attachment_new.pk}
        status_code, response = self.run_request(
            agreement.pk,
            data,
            method="patch",
        )

        self.assertEqual(status_code, status.HTTP_200_OK)
        self.assertTrue(response["attachment"].endswith(
            attachment_new.file.url))
        agreement_updated = Agreement.objects.get(pk=agreement.pk)
        self.assertEqual(agreement_updated.attachment.last(), attachment_new)
コード例 #3
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
コード例 #4
0
 def test_add_new_PCA_with_amendment(self):
     attachment = AttachmentFactory(
         file="test_file.pdf",
         file_type=None,
         code="",
     )
     attachment_amendment = AttachmentFactory(
         file="test_file_amendment.pdf",
         file_type=None,
         code="",
     )
     self.assertIsNone(attachment.file_type)
     self.assertIsNone(attachment.content_object)
     self.assertFalse(attachment.code)
     self.assertIsNone(attachment_amendment.file_type)
     self.assertIsNone(attachment_amendment.content_object)
     self.assertFalse(attachment_amendment.code)
     self.assertFalse(Activity.objects.exists())
     data = {
         "agreement_type":
         Agreement.PCA,
         "reference_number_year":
         datetime.date.today().year,
         "partner":
         self.partner1.id,
         "country_programme":
         self.country_programme.id,
         "attachment":
         attachment.pk,
         "amendments": [{
             "types": [
                 AgreementAmendment.CLAUSE,
             ],
             "signed_date":
             datetime.date.today().strftime("%Y-%m-%d"),
             "signed_amendment_attachment":
             attachment_amendment.pk,
         }]
     }
     status_code, response = self.run_request_list_ep(data)
     self.assertEqual(status_code, status.HTTP_201_CREATED)
     self.assertEqual(response['agreement_type'], Agreement.PCA)
     self.assertEqual(
         Activity.objects.filter(action=Activity.CREATE).count(), 1)
     attachment_updated = Attachment.objects.get(pk=attachment.pk)
     self.assertEqual(attachment_updated.file_type.code,
                      self.file_type_agreement.code)
     self.assertEqual(attachment_updated.object_id, response["id"])
     self.assertEqual(attachment_updated.code,
                      self.file_type_agreement.code)
     attachment_amendment_updated = Attachment.objects.get(
         pk=attachment_amendment.pk)
     self.assertEqual(attachment_amendment_updated.file_type.code,
                      self.file_type_agreement_amendment.code)
     self.assertEqual(attachment_amendment_updated.object_id,
                      response["amendments"][0]["id"])
     self.assertEqual(attachment_amendment_updated.code,
                      self.file_type_agreement_amendment.code)
コード例 #5
0
 def test_valid_file(self):
     valid_file_attachment = AttachmentFactory(
         # Note: file content is intended to be a byte-string here.
         file=SimpleUploadedFile('simple_file.txt', b'these are the file contents!'),
         content_object=self.simple_object
     )
     valid_file_attachment.clean()
     self.assertIsNotNone(valid_file_attachment.file)
     self.assertEqual(valid_file_attachment.url, valid_file_attachment.file.url)
コード例 #6
0
    def test_str(self):
        instance = AttachmentFactory(file=SimpleUploadedFile(
            'simple_file.txt', b'these are the file contents!'),
                                     content_object=self.simple_object)
        self.assertIn('simple_file', str(instance))

        instance = AttachmentFactory(file=SimpleUploadedFile(
            'simple_file.txt', u'R\xe4dda Barnen'.encode('utf-8')),
                                     content_object=self.simple_object)
        self.assertIn('simple_file', str(instance))
コード例 #7
0
ファイル: test_api_partners.py プロジェクト: azizur77/etools
 def setUp(self):
     self.assessment = AssessmentFactory(
         partner=self.partner,
         completed_date=None,
         report=None,
     )
     self.attachment = AttachmentFactory(
         file="test_file.pdf",
         file_type=None,
         code="",
     )
コード例 #8
0
 def test_last_attachment(self):
     self.file_type.attachment = Attachment.objects.filter(code=self.code)
     field = fields.AttachmentSingleFileField(source="attachment")
     AttachmentFactory(
         file_type=self.file_type,
         content_object=self.file_type,
         code=self.code,
     )
     attachment = AttachmentFactory(
         file_type=self.file_type,
         content_object=self.file_type,
         code=self.code,
         file=self.file_data,
     )
     self.assertEqual(field.get_attribute(self.file_type), attachment.file)
コード例 #9
0
ファイル: test_views.py プロジェクト: alhadheri/etools
 def test_intervention_amendment(self):
     code = "partners_intervention_amendment_signed"
     file_type = AttachmentFileTypeFactory(code=code)
     AttachmentFactory(file_type=file_type,
                       code=code,
                       file="sample1.pdf",
                       content_object=self.intervention_amendment,
                       uploaded_by=self.user)
     response = self.forced_auth_req(
         "get",
         self.url,
         user=self.unicef_staff,
     )
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     self.assertEqual(len(response.data), 3)
     self.assert_keys(response)
     self.assert_values(
         response, self.default_partner_response + [{
             "partner":
             self.partner.name,
             "partner_type":
             self.partner.partner_type,
             "vendor_number":
             self.partner.vendor_number,
             "pd_ssfa_number":
             self.intervention.number,
             "agreement_reference_number":
             self.intervention.agreement.reference_number,
         }])
コード例 #10
0
    def test_patch_agreement_with_attachment_as_pk(self):
        agreement = AgreementFactory(partner=self.partner1,
                                     status=Agreement.DRAFT)
        attachment = AttachmentFactory(
            file="test_file.pdf",
            file_type=None,
            code="",
        )
        self.assertIsNone(attachment.content_object)
        self.assertIsNone(attachment.file_type)
        self.assertEqual(attachment.code, "")

        data = {"attachment": attachment.pk}
        status_code, response = self.run_request(
            agreement.pk,
            data,
            method="patch",
        )

        self.assertEqual(status_code, status.HTTP_200_OK)
        self.assertTrue(response["attachment"].endswith(attachment.file.url))
        attachment_update = Attachment.objects.get(pk=attachment.pk)
        self.assertEqual(attachment_update.content_object, agreement)
        self.assertEqual(attachment_update.file_type, self.file_type_agreement)
        self.assertEqual(attachment_update.code, self.file_type_agreement.code)
コード例 #11
0
ファイル: test_api_partners.py プロジェクト: azizur77/etools
 def test_patch_with_assessment_attachment(self):
     attachment = AttachmentFactory(
         file="test_file.pdf",
         file_type=None,
         code="",
     )
     self.assertIsNone(attachment.file_type)
     self.assertIsNone(attachment.content_object)
     self.assertFalse(attachment.code)
     assessment_qs = Assessment.objects.filter(partner=self.partner)
     self.assertFalse(assessment_qs.exists())
     response = self.forced_auth_req('patch',
                                     self.url,
                                     data={
                                         "assessments": [{
                                             "report_attachment":
                                             attachment.pk,
                                             "completed_date":
                                             datetime.date.today(),
                                             "type":
                                             Assessment.TYPE_OTHER,
                                         }]
                                     },
                                     user=self.unicef_staff)
     data = json.loads(response.rendered_content)
     self.assertEqual(response.status_code, 200)
     self.assertEqual(data["id"], self.partner.pk)
     self.assertEqual(data["interventions"][0]["id"], self.intervention.pk)
     self.assertTrue(assessment_qs.exists())
     self.assertEqual(len(data["assessments"]), 1)
     self.assertEqual(data["assessments"][0]["report_attachment"],
                      attachment.file.url)
コード例 #12
0
ファイル: test_views.py プロジェクト: adi130987/etools
 def test_auditor_with_attachment(self):
     file_type = AttachmentFileTypeFactory(code="audit_report")
     AttachmentFactory(file="test_report.pdf",
                       file_type=file_type,
                       code=file_type.code,
                       content_object=self.engagement)
     self._test_pdf_view(self.auditor)
コード例 #13
0
ファイル: test_api_partners.py プロジェクト: azizur77/etools
 def test_patch_with_core_values_assessment_attachment(self):
     attachment = AttachmentFactory(
         file="test_file.pdf",
         file_type=None,
         code="",
     )
     self.assertIsNone(attachment.file_type)
     self.assertIsNone(attachment.content_object)
     self.assertFalse(attachment.code)
     assessment_qs = CoreValuesAssessment.objects.filter(
         partner=self.partner)
     self.assertFalse(assessment_qs.exists())
     response = self.forced_auth_req(
         'patch',
         self.url,
         data={"core_values_assessments": [{
             "attachment": attachment.pk
         }]},
         user=self.unicef_staff)
     data = json.loads(response.rendered_content)
     self.assertEqual(response.status_code, 200)
     self.assertEqual(data["id"], self.partner.pk)
     self.assertEqual(data["interventions"][0]["id"], self.intervention.pk)
     self.assertTrue(assessment_qs.exists())
     self.assertEqual(len(data["core_values_assessments"]), 1)
     self.assertEqual(data["core_values_assessments"][0]["attachment"],
                      attachment.file.url)
コード例 #14
0
ファイル: test_views.py プロジェクト: alhadheri/etools
 def setUp(self):
     self.attachment = AttachmentFactory(file_type=self.file_type,
                                         code=self.file_type.code,
                                         content_object=self.file_type)
     self.file_data = SimpleUploadedFile('hello_world.txt',
                                         u'hello world!'.encode('utf-8'))
     self.url = reverse("attachments:update", args=[self.attachment.pk])
コード例 #15
0
ファイル: test_views.py プロジェクト: alhadheri/etools
 def test_audit_engagement_report_attachments(self):
     code = "audit_report"
     file_type = AttachmentFileTypeFactory(label="Audit Report", code=code)
     AttachmentFactory(file_type=file_type,
                       code=code,
                       file="sample3.pdf",
                       content_object=self.engagement,
                       uploaded_by=self.user)
     response = self.forced_auth_req(
         "get",
         self.url,
         user=self.unicef_staff,
     )
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     self.assertEqual(len(response.data), 3)
     self.assert_keys(response)
     self.assert_values(
         response,
         self.default_partner_response + [{
             "partner": self.partner.name,
             "partner_type": self.partner.partner_type,
             "vendor_number": self.partner.vendor_number,
             "pd_ssfa_number": "",
             "agreement_reference_number": "",
         }])
     self.assertCountEqual(
         [x["file_type"] for x in response.data],
         [self.file_type_1.label, self.file_type_2.label, file_type.label])
コード例 #16
0
 def test_tpm_activity_attachments(self):
     code = "activity_attachments"
     file_type = AttachmentFileTypeFactory(
         label="Activity Attachment",
         code=code
     )
     AttachmentFactory(
         file_type=file_type,
         code=code,
         file="sample3.pdf",
         content_object=self.tpm_activity,
         uploaded_by=self.user
     )
     response = self.forced_auth_req(
         "get",
         self.url,
         user=self.unicef_staff,
     )
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     self.assertEqual(len(response.data), 3)
     self.assert_keys(response)
     self.assert_values(response, self.default_partner_response + [{
         "partner": self.partner.name,
         "partner_type": self.partner.partner_type,
         "vendor_number": self.partner.vendor_number,
         "pd_ssfa_number": self.intervention.number,
         "agreement_reference_number": self.intervention.agreement.reference_number,
         "source": "Third Party Monitoring",
     }])
     self.assertCountEqual([x["file_type"] for x in response.data], [
         self.file_type_1.label,
         self.file_type_2.label,
         file_type.label
     ])
コード例 #17
0
    def test_add_attachment(self):
        travel = TravelFactory()
        attachment = AttachmentFactory(
            file="test_file.pdf",
            file_type=None,
            code="",
        )
        self.assertIsNone(attachment.file_type)
        self.assertIsNone(attachment.content_object)
        self.assertFalse(attachment.code)
        attachment_qs = TravelAttachment.objects.filter(
            travel=travel
        )
        self.assertFalse(attachment_qs.exists())
        data = {
            'name': 'second',
            'type': 'something',
            'attachment': attachment.pk,
        }
        response = self.forced_auth_req(
            'post',
            reverse(
                't2f:travels:details:attachments',
                kwargs={'travel_pk': travel.pk}
            ),
            data=data,
            user=self.unicef_staff,
            request_format='multipart',
        )
        response_json = json.loads(response.rendered_content)

        expected_keys = ['file', 'id', 'name', 'type', 'url', 'attachment']
        self.assertKeysIn(expected_keys, response_json)
        self.assertTrue(attachment_qs.exists())
コード例 #18
0
 def test_intervention_attachment(self):
     code = "partners_intervention_attachment"
     file_type = AttachmentFileTypeFactory(code=code)
     AttachmentFactory(
         file_type=file_type,
         code=code,
         file="sample1.pdf",
         content_object=self.intervention_attachment,
         uploaded_by=self.user
     )
     response = self.forced_auth_req(
         "get",
         self.url,
         user=self.unicef_staff,
     )
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     self.assertEqual(len(response.data), 3)
     self.assert_keys(response)
     self.assert_values(response, self.default_partner_response + [{
         "partner": self.partner.name,
         "partner_type": self.partner.partner_type,
         "vendor_number": self.partner.vendor_number,
         "pd_ssfa_number": self.intervention.number,
         "agreement_reference_number": self.intervention.agreement.reference_number,
         "source": "Partnership Management Portal",
     }])
     self.assertCountEqual([x["file_type"] for x in response.data], [
         self.file_type_1.label,
         self.file_type_2.label,
         self.intervention_attachment.type.name
     ])
コード例 #19
0
 def test_str(self):
     attachment = AttachmentFactory(file=SimpleUploadedFile(
         'simple_file.txt', u'R\xe4dda Barnen'.encode('utf-8')),
                                    content_object=self.simple_object)
     flat_qs = AttachmentFlat.objects.filter(attachment=attachment)
     self.assertTrue(flat_qs.exists())
     flat = flat_qs.first()
     self.assertEqual(str(flat), str(attachment.file))
コード例 #20
0
ファイル: test_models.py プロジェクト: alhadheri/etools
    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)
コード例 #21
0
ファイル: factories.py プロジェクト: alhadheri/etools
    def report_attachments(self, create, extracted, count, **kwargs):
        if not create:
            return

        for i in range(count):
            AttachmentFactory(code='visit_report',
                              content_object=self,
                              **kwargs)
コード例 #22
0
ファイル: test_commands.py プロジェクト: azizur77/etools
 def test_intervention_update(self):
     attachment_prc = AttachmentFactory(
         content_object=self.intervention,
         file_type=self.file_type_intervention_prc_review,
         code=self.file_type_intervention_prc_review.code,
         file="random.pdf")
     attachment_pd = AttachmentFactory(
         content_object=self.intervention,
         file_type=self.file_type_intervention_signed_pd,
         code=self.file_type_intervention_signed_pd.code,
         file="random.pdf")
     call_command("copy_attachments")
     attachment_prc_update = Attachment.objects.get(pk=attachment_prc.pk)
     self.assertEqual(attachment_prc_update.file.name,
                      self.intervention.prc_review_document.name)
     attachment_pd_update = Attachment.objects.get(pk=attachment_pd.pk)
     self.assertEqual(attachment_pd_update.file.name,
                      self.intervention.signed_pd_document.name)
コード例 #23
0
    def test_agreement_detail_attachment(self):
        attachment = AttachmentFactory(content_object=self.agreement1,
                                       file_type=self.file_type_agreement,
                                       code=self.file_type_agreement.code,
                                       file="test_file.pdf")
        status_code, response = self.run_request(self.agreement1.pk)

        self.assertEqual(status_code, status.HTTP_200_OK)
        self.assertTrue(response["attachment"].endswith(attachment.file.url))
コード例 #24
0
ファイル: test_commands.py プロジェクト: azizur77/etools
 def test_agreement_update(self):
     attachment = AttachmentFactory(content_object=self.agreement,
                                    file_type=self.file_type_agreement,
                                    code=self.file_type_agreement.code,
                                    file="random.pdf")
     call_command("copy_attachments")
     attachment_update = Attachment.objects.get(pk=attachment.pk)
     self.assertEqual(attachment_update.file.name,
                      self.agreement.attached_agreement.name)
コード例 #25
0
ファイル: test_views.py プロジェクト: alhadheri/etools
 def setUpTestData(cls):
     cls.code = "test_code_1"
     cls.file_type = AttachmentFileTypeFactory(code=cls.code)
     cls.unicef_staff = UserFactory(is_staff=True)
     cls.attachment = AttachmentFactory(file_type=cls.file_type,
                                        code=cls.code,
                                        file="sample1.pdf",
                                        content_object=cls.file_type,
                                        uploaded_by=cls.unicef_staff)
     cls.url = reverse("attachments:file", args=[cls.attachment.pk])
コード例 #26
0
 def test_start_date_after_signed_date_attachment(self):
     """Start date after max signed date is valid"""
     intervention = InterventionFactory(
         signed_by_unicef_date=datetime.date(2001, 2, 1),
         signed_by_partner_date=datetime.date(2001, 3, 1),
         start=datetime.date(2001, 4, 1))
     AttachmentFactory(file="random.pdf",
                       code="partners_intervention_signed_pd",
                       content_object=intervention)
     self.assertTrue(start_date_signed_valid(intervention))
コード例 #27
0
 def test_call(self):
     attachment = AttachmentFactory(
         content_object=self.core_value_assessment,
         file_type=self.file_type_partner,
         code=self.file_type_partner.code,
         file="random.pdf")
     etools.applications.partners.tasks.copy_attachments()
     attachment_update = Attachment.objects.get(pk=attachment.pk)
     self.assertEqual(attachment_update.file.name,
                      self.core_value_assessment.assessment.name)
コード例 #28
0
ファイル: test_commands.py プロジェクト: azizur77/etools
 def test_partner_update(self):
     attachment = AttachmentFactory(
         content_object=self.core_values_assessment,
         file_type=self.file_type_partner,
         code=self.file_type_partner.code,
         file="random.pdf")
     call_command("copy_attachments")
     attachment_update = Attachment.objects.get(pk=attachment.pk)
     self.assertEqual(attachment_update.file.name,
                      self.core_values_assessment.assessment)
コード例 #29
0
 def test_intervention(self):
     code_prc = "partners_intervention_prc_review"
     file_type_prc = AttachmentFileTypeFactory(code=code_prc)
     code_pd = "partners_intervention_signed_pd"
     file_type_pd = AttachmentFileTypeFactory(code=code_pd)
     AttachmentFactory(
         file_type=file_type_prc,
         code=code_prc,
         file="sample1.pdf",
         content_object=self.intervention,
         uploaded_by=self.user
     )
     AttachmentFactory(
         file_type=file_type_pd,
         code=code_pd,
         file="sample1.pdf",
         content_object=self.intervention,
         uploaded_by=self.user
     )
     response = self.forced_auth_req(
         "get",
         self.url,
         user=self.unicef_staff,
     )
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     self.assertEqual(len(response.data), 4)
     self.assert_keys(response)
     self.assert_values(response, self.default_partner_response + [{
         "partner": self.partner.name,
         "partner_type": self.partner.partner_type,
         "vendor_number": self.partner.vendor_number,
         "pd_ssfa_number": self.intervention.number,
         "agreement_reference_number": self.intervention.agreement.reference_number,
         "source": "Partnership Management Portal",
     }, {
         "partner": self.partner.name,
         "partner_type": self.partner.partner_type,
         "vendor_number": self.partner.vendor_number,
         "pd_ssfa_number": self.intervention.number,
         "agreement_reference_number": self.intervention.agreement.reference_number,
         "source": "Partnership Management Portal",
     }])
コード例 #30
0
ファイル: test_api_partners.py プロジェクト: unicef/etools
 def setUp(self):
     self.assessment = AssessmentFactory(
         partner=self.partner,
         completed_date=None,
         report=None,
     )
     self.attachment = AttachmentFactory(
         file="test_file.pdf",
         file_type=None,
         code="",
     )
コード例 #31
0
ファイル: test_views.py プロジェクト: azizur77/etools
    def test_list_tpm_user(self):
        attachments_num = self.tpm_partner.attachments.count()

        AttachmentFactory(content_object=self.tpm_partner)

        response = self.forced_auth_req('get',
                                        reverse('tpm:partner-attachments-list',
                                                args=[self.tpm_partner.pk]),
                                        user=self.tpm_user)
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.data['results']), attachments_num + 1)
コード例 #32
0
ファイル: test_api_partners.py プロジェクト: unicef/etools
class TestPartnerOrganizationAssessmentUpdateDeleteView(BaseTenantTestCase):
    @classmethod
    def setUpTestData(cls):
        cls.unicef_staff = UserFactory(is_staff=True)
        cls.partner = PartnerFactory(
            partner_type=PartnerType.CIVIL_SOCIETY_ORGANIZATION,
            cso_type="International",
            hidden=False,
            vendor_number="DDD",
            short_name="Short name",
        )
        cls.partner_staff = PartnerStaffFactory(partner=cls.partner)
        cls.partnership_manager_user = UserFactory(is_staff=True)
        cls.partnership_manager_user.groups.add(GroupFactory())
        cls.partnership_manager_user.profile.partner_staff_member = cls.partner_staff.id
        cls.partnership_manager_user.save()

    def setUp(self):
        self.assessment = AssessmentFactory(
            partner=self.partner,
            completed_date=None,
            report=None,
        )
        self.attachment = AttachmentFactory(
            file="test_file.pdf",
            file_type=None,
            code="",
        )

    def test_post(self):
        assessment_qs = Assessment.objects.filter(partner=self.partner)
        assessment_count = assessment_qs.count()
        response = self.forced_auth_req(
            'post',
            reverse('partners_api:partner-assessment'),
            user=self.partnership_manager_user,
            data={
                "partner": self.partner.pk,
                "type": Assessment.TYPE_OTHER,
                "report_attachment": self.attachment.pk,
                "completed_date": datetime.date.today(),
            }
        )

        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
        self.assertEqual(assessment_qs.count(), assessment_count + 1)
        self.attachment.refresh_from_db()
        self.assertTrue(self.attachment.file_type)

    def test_patch(self):
        self.assertTrue(self.assessment.active)
        response = self.forced_auth_req(
            'patch',
            reverse(
                'partners_api:partner-assessment-detail',
                args=[self.assessment.pk]
            ),
            user=self.partnership_manager_user,
            data={
                "active": False
            }
        )

        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assessment.refresh_from_db()
        self.assertFalse(self.assessment.active)

    def test_patch_permission(self):
        response = self.forced_auth_req(
            'patch',
            reverse(
                'partners_api:partner-assessment-detail',
                args=[self.assessment.pk]
            ),
            user=self.unicef_staff,
            data={
                "active": False
            }
        )

        self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)

    def test_delete_valid(self):
        response = self.forced_auth_req(
            'delete',
            reverse(
                'partners_api:partner-assessment-detail',
                args=[self.assessment.pk]
            ),
            user=self.partnership_manager_user,
        )

        self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)

    def test_delete_error_completed_date(self):
        assessment = AssessmentFactory(
            partner=self.partner,
            report=None,
        )
        response = self.forced_auth_req(
            'delete',
            reverse(
                'partners_api:partner-assessment-detail',
                args=[assessment.pk]
            ),
            user=self.partnership_manager_user,
        )

        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        self.assertEqual(response.data, ["Cannot delete a completed assessment"])

    def test_delete_error_report(self):
        assessment = AssessmentFactory(
            partner=self.partner,
            completed_date=None,
        )
        response = self.forced_auth_req(
            'delete',
            reverse(
                'partners_api:partner-assessment-detail',
                args=[assessment.pk]
            ),
            user=self.partnership_manager_user,
        )

        self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
        self.assertEqual(response.data, ["Cannot delete a completed assessment"])

    def test_delete_permission(self):
        response = self.forced_auth_req(
            'delete',
            reverse(
                'partners_api:partner-assessment-detail',
                args=[self.assessment.pk]
            ),
            user=self.unicef_staff,
        )

        self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)

    def test_delete_not_found(self):
        response = self.forced_auth_req(
            'delete',
            reverse(
                'partners_api:partner-assessment-detail',
                args=[404]
            ),
            user=self.partnership_manager_user,
        )

        self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)