Beispiel #1
0
    def test_applicant_and_staff_can_edit_in_submitted(self):
        payment_request = PaymentRequestFactory(status=SUBMITTED)
        applicant = ApplicantFactory()
        staff = StaffFactory()

        self.assertTrue(can_edit(payment_request, applicant))
        self.assertTrue(can_edit(payment_request, staff))
Beispiel #2
0
    def test_applicant_and_staff_cant_edit_in_under_review(self):
        payment_request = PaymentRequestFactory(status=UNDER_REVIEW)
        applicant = ApplicantFactory()
        staff = StaffFactory()

        self.assertFalse(can_edit(payment_request, applicant))
        self.assertFalse(can_edit(payment_request, staff))
Beispiel #3
0
    def test_applicant_and_staff_can_edit_in_resubmitted(self):
        invoice = InvoiceFactory(status=RESUBMITTED)
        applicant = ApplicantFactory()
        staff = StaffFactory()

        self.assertTrue(can_edit(invoice, applicant))
        self.assertTrue(can_edit(invoice, staff))
Beispiel #4
0
    def test_user_cannot_upload_when_latest_is_approved(self):
        applicant = ApplicantFactory()
        staff = StaffFactory()

        project = ProjectFactory(status=CONTRACTING)
        ContractFactory(project=project, is_signed=True, approver=staff)
        self.assertFalse(user_can_upload_contract(project, applicant))
Beispiel #5
0
    def test_applicant_and_staff_cant_edit_in_decline(self):
        invoice = InvoiceFactory(status=DECLINED)
        applicant = ApplicantFactory()
        staff = StaffFactory()

        self.assertFalse(can_edit(invoice, applicant))
        self.assertFalse(can_edit(invoice, staff))
Beispiel #6
0
    def test_applicant_and_staff_cant_edit_in_decline(self):
        payment_request = PaymentRequestFactory(status=DECLINED)
        applicant = ApplicantFactory()
        staff = StaffFactory()

        self.assertFalse(can_edit(payment_request, applicant))
        self.assertFalse(can_edit(payment_request, staff))
Beispiel #7
0
    def test_applicant_and_staff_cant_edit_in_paid(self):
        invoice = InvoiceFactory(status=PAID)
        applicant = ApplicantFactory()
        staff = StaffFactory()

        self.assertFalse(can_edit(invoice, applicant))
        self.assertFalse(can_edit(invoice, staff))
Beispiel #8
0
    def test_applicant_cant_add_deliverables(self):
        user = ApplicantFactory()
        project = ProjectFactory()
        invoice = InvoiceFactory(project=project)
        deliverable = DeliverableFactory(project=project)
        self.client.force_login(user)

        response = self.post_to_add(project.id, invoice.id, deliverable.id)
        self.assertEqual(response.status_code, 403)
Beispiel #9
0
    def test_user_upload_happy_path(self):
        applicant = ApplicantFactory()

        project = ProjectFactory(status=CONTRACTING)
        ContractFactory(project=project, is_signed=True, approver=None)
        self.assertTrue(user_can_upload_contract(project, applicant))

        project = ProjectFactory(status=IN_PROGRESS)
        ContractFactory(project=project, is_signed=True, approver=None)
        self.assertTrue(user_can_upload_contract(project, applicant))
Beispiel #10
0
 def test_applicant_cant_edit_invoice(self):
     statuses = [
         APPROVED_BY_FINANCE_1, APPROVED_BY_FINANCE_2, APPROVED_BY_STAFF,
         CHANGES_REQUESTED_BY_FINANCE_1, CHANGES_REQUESTED_BY_FINANCE_2,
         DECLINED, PAID
     ]
     user = ApplicantFactory()
     for status in statuses:
         invoice = InvoiceFactory(status=status)
         self.assertFalse(invoice.can_user_edit(user))
Beispiel #11
0
    def test_applicant_cant_remove_deliverables(self):
        user = ApplicantFactory()
        project = ProjectFactory()
        invoice = InvoiceFactory(project=project)
        deliverable = DeliverableFactory(project=project)
        invoice_deliverable = InvoiceDeliverableFactory(deliverable=deliverable)
        invoice.deliverables.add(invoice_deliverable)
        self.client.force_login(user)

        response = self.delete_to_remove(project.id, invoice.id, invoice_deliverable.id)
        self.assertEqual(response.status_code, 403)
Beispiel #12
0
    def test_staff_only(self):
        factory = RequestFactory()
        project = ProjectFactory()

        request = factory.get(f'/project/{project.pk}')
        request.user = StaffFactory()

        response = ProjectDetailSimplifiedView.as_view()(request, pk=project.pk)
        self.assertEqual(response.status_code, 200)

        request.user = ApplicantFactory()
        with self.assertRaises(PermissionDenied):
            ProjectDetailSimplifiedView.as_view()(request, pk=project.pk)
Beispiel #13
0
    def test_applicant_cant_get_set_required_valid_checks(self):
        user = ApplicantFactory()
        project = ProjectFactory()
        invoice = InvoiceFactory(project=project, status=APPROVED_BY_STAFF)
        valid_checks = True
        valid_checks_link = 'https://google.com'

        self.client.force_login(user)
        response = self.post_to_set(project.id, invoice.id, valid_checks, valid_checks_link)
        self.assertEqual(response.status_code, 403)

        response = self.get_to_retrieve(project.id, invoice.id)
        self.assertEqual(response.status_code, 403)
Beispiel #14
0
    def test_staff_only(self):
        factory = RequestFactory()
        submission = ApplicationSubmissionFactory()
        ProjectFactory(submission=submission)

        request = factory.get(f'/submission/{submission.pk}')
        request.user = StaffFactory()

        response = SubmissionDetailSimplifiedView.as_view()(request,
                                                            pk=submission.pk)
        self.assertEqual(response.status_code, 200)

        request.user = ApplicantFactory()
        with self.assertRaises(PermissionDenied):
            SubmissionDetailSimplifiedView.as_view()(request, pk=submission.pk)
Beispiel #15
0
    def test_invoice_status_user_choices(self):
        applicant = ApplicantFactory()
        staff = StaffFactory()
        finance1 = FinanceFactory()
        finance2 = Finance2Factory()
        applicant_choices = invoice_status_user_choices(applicant)
        self.assertEqual(applicant_choices, [])

        staff_choices = invoice_status_user_choices(staff)
        self.assertEqual(staff_choices, INVOICE_STATUS_PM_CHOICES)

        finance1_choices = invoice_status_user_choices(finance1)
        self.assertEqual(finance1_choices, INVOICE_STATUS_FINANCE_1_CHOICES)

        finance2_choices = invoice_status_user_choices(finance2)
        self.assertEqual(finance2_choices, INVOICE_STATUS_FINANCE_2_CHOICES)
    def test_slack_applicant_update_invoice(self):
        responses.add(responses.POST, self.target_url, status=200, body='OK')

        project = self.source_factory()
        invoice = InvoiceFactory(project=project)
        applicant = ApplicantFactory()

        self.adapter_process(
            MESSAGES.UPDATE_INVOICE,
            adapter=self.slack(),
            user=applicant,
            source=project,
            related=invoice,
        )

        self.assertEqual(len(responses.calls), 1)

        data = json.loads(responses.calls[0].request.body)
        self.assertIn(str(applicant), data['message'])
        self.assertIn(str(project), data['message'])
Beispiel #17
0
    def test_slack_applicant_update_invoice(self):
        backend = get_backend()
        backend.reset_messages()
        project = self.source_factory()
        invoice = InvoiceFactory(project=project)
        applicant = ApplicantFactory()

        self.adapter_process(
            MESSAGES.UPDATE_INVOICE,
            adapter=self.slack(),
            user=applicant,
            source=project,
            related=invoice,
        )
        messages = backend.retrieve_messages()

        self.assertEqual(len(messages), 1)
        message_payload = json.loads(messages[0]['payload'])
        self.assertIn(str(applicant), message_payload['text'])
        self.assertIn(str(project), message_payload['text'])
Beispiel #18
0
    def test_slack_applicant_update_payment_request(self):
        responses.add(responses.POST, self.target_url, status=200, body='OK')

        project = self.source_factory()
        payment_request = PaymentRequestFactory(project=project)
        applicant = ApplicantFactory()

        self.adapter_process(
            MESSAGES.UPDATE_PAYMENT_REQUEST,
            adapter=self.slack(),
            user=applicant,
            source=project,
            related=payment_request,
        )

        self.assertEqual(len(responses.calls), 1)

        data = json.loads(responses.calls[0].request.body)
        self.assertIn(str(applicant), data['message'])
        self.assertIn(str(project), data['message'])
Beispiel #19
0
    def test_user_can_only_upload_during_contracting(self):
        applicant = ApplicantFactory()

        project = ProjectFactory(status=COMMITTED)
        ContractFactory(project=project, is_signed=True, approver=None)
        self.assertTrue(user_can_upload_contract(project, applicant))

        project = ProjectFactory(status=CONTRACTING)
        ContractFactory(project=project, is_signed=True, approver=None)
        self.assertTrue(user_can_upload_contract(project, applicant))

        project = ProjectFactory(status=IN_PROGRESS)
        ContractFactory(project=project, is_signed=True, approver=None)
        self.assertTrue(user_can_upload_contract(project, applicant))

        project = ProjectFactory(status=COMPLETE)
        ContractFactory(project=project, is_signed=True, approver=None)
        self.assertTrue(user_can_upload_contract(project, applicant))

        project = ProjectFactory(status=CLOSING)
        ContractFactory(project=project, is_signed=True, approver=None)
        self.assertTrue(user_can_upload_contract(project, applicant))
Beispiel #20
0
    def test_user_cant_change_status_from_declined(self):
        invoice = InvoiceFactory(status=DECLINED)
        user = ApplicantFactory()

        self.assertFalse(can_change_status(invoice, user))
Beispiel #21
0
    def test_user_cant_delete_from_declined(self):
        invoice = InvoiceFactory(status=DECLINED)
        user = ApplicantFactory()

        self.assertFalse(invoice.can_user_delete(user))
Beispiel #22
0
    def test_user_cant_delete_from_paid(self):
        invoice = InvoiceFactory(status=PAID)
        user = ApplicantFactory()

        self.assertFalse(invoice.can_user_delete(user))
Beispiel #23
0
    def test_user_can_delete_from_changes_requested(self):
        invoice = InvoiceFactory(status=CHANGES_REQUESTED)
        user = ApplicantFactory()

        self.assertFalse(invoice.can_user_delete(user))
Beispiel #24
0
    def test_user_cant_delete_from_resubmitted(self):
        invoice = InvoiceFactory(status=RESUBMITTED)
        user = ApplicantFactory()

        self.assertFalse(invoice.can_user_delete(user))
Beispiel #25
0
    def test_can_user_delete_from_submitted(self):
        invoice = InvoiceFactory(status=SUBMITTED)
        user = ApplicantFactory()

        self.assertTrue(invoice.can_user_delete(user))
Beispiel #26
0
    def test_user_cant_change_status_from_resubmitted(self):
        invoice = InvoiceFactory(status=RESUBMITTED)
        user = ApplicantFactory()

        self.assertFalse(can_change_status(invoice, user))
Beispiel #27
0
    def test_user_cant_change_status_from_changes_requested(self):
        invoice = InvoiceFactory(status=CHANGES_REQUESTED_BY_STAFF)
        user = ApplicantFactory()

        self.assertFalse(can_change_status(invoice, user))
Beispiel #28
0
    def test_user_cannot_upload_first_contract(self):
        applicant = ApplicantFactory()

        project = ProjectFactory(status=CONTRACTING)
        self.assertFalse(user_can_upload_contract(project, applicant))
Beispiel #29
0
    def test_user_cant_change_status_from_paid(self):
        invoice = InvoiceFactory(status=PAID)
        user = ApplicantFactory()

        self.assertFalse(can_change_status(invoice, user))
Beispiel #30
0
    def test_applicant_can_edit_in_changes_requested(self):
        invoice = InvoiceFactory(status=CHANGES_REQUESTED_BY_STAFF)
        applicant = ApplicantFactory()

        self.assertTrue(can_edit(invoice, applicant))