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))
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))
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))
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))
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))
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))
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))
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)
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))
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))
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)
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)
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)
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)
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'])
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'])
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'])
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))
def test_user_cant_change_status_from_declined(self): invoice = InvoiceFactory(status=DECLINED) user = ApplicantFactory() self.assertFalse(can_change_status(invoice, user))
def test_user_cant_delete_from_declined(self): invoice = InvoiceFactory(status=DECLINED) user = ApplicantFactory() self.assertFalse(invoice.can_user_delete(user))
def test_user_cant_delete_from_paid(self): invoice = InvoiceFactory(status=PAID) user = ApplicantFactory() self.assertFalse(invoice.can_user_delete(user))
def test_user_can_delete_from_changes_requested(self): invoice = InvoiceFactory(status=CHANGES_REQUESTED) user = ApplicantFactory() self.assertFalse(invoice.can_user_delete(user))
def test_user_cant_delete_from_resubmitted(self): invoice = InvoiceFactory(status=RESUBMITTED) user = ApplicantFactory() self.assertFalse(invoice.can_user_delete(user))
def test_can_user_delete_from_submitted(self): invoice = InvoiceFactory(status=SUBMITTED) user = ApplicantFactory() self.assertTrue(invoice.can_user_delete(user))
def test_user_cant_change_status_from_resubmitted(self): invoice = InvoiceFactory(status=RESUBMITTED) user = ApplicantFactory() self.assertFalse(can_change_status(invoice, user))
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))
def test_user_cannot_upload_first_contract(self): applicant = ApplicantFactory() project = ProjectFactory(status=CONTRACTING) self.assertFalse(user_can_upload_contract(project, applicant))
def test_user_cant_change_status_from_paid(self): invoice = InvoiceFactory(status=PAID) user = ApplicantFactory() self.assertFalse(can_change_status(invoice, user))
def test_applicant_can_edit_in_changes_requested(self): invoice = InvoiceFactory(status=CHANGES_REQUESTED_BY_STAFF) applicant = ApplicantFactory() self.assertTrue(can_edit(invoice, applicant))