def test_doest_show_active_invoices_when_paid_or_declined(self): project = ProjectFactory(lead=self.user) InvoiceFactory(project=project, status=PAID) InvoiceFactory(project=project, status=DECLINED) response = self.get_page() self.assertNotContains(response, "Active Invoices")
def test_active_invoices_with_invoices_in_correct_state(self): project = ProjectFactory(lead=self.user) InvoiceFactory(project=project, status=SUBMITTED) InvoiceFactory(project=project, status=CHANGES_REQUESTED) InvoiceFactory(project=project, status=RESUBMITTED) response = self.get_page() self.assertContains(response, "Active Invoices")
def test_doesnt_show_active_invoices_when_not_mine(self): project = ProjectFactory() InvoiceFactory(project=project, status=SUBMITTED) InvoiceFactory(project=project, status=CHANGES_REQUESTED) InvoiceFactory(project=project, status=RESUBMITTED) response = self.get_page() self.assertNotContains(response, "Active Invoices")
def test_finance1_can_get_required_valid_checks(self): user = FinanceFactory() project = ProjectFactory() invoice = InvoiceFactory(project=project, status=APPROVED_BY_STAFF, valid_checks=True) self.client.force_login(user) response = self.get_to_retrieve(project.id, invoice.id) self.assertEqual(response.status_code, 200) self.assertTrue(response.data.get('valid_checks'))
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_finance2_can_add_deliverables(self): user = Finance2Factory() project = ProjectFactory() invoice = InvoiceFactory(project=project, status=APPROVED_BY_FINANCE_1) 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, 201)
def test_staff_can_add_deliverables(self): user = StaffFactory() project = ProjectFactory() invoice = InvoiceFactory(project=project, status=SUBMITTED) 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, 201)
def test_finance1_can_set_required_valid_checks(self): user = FinanceFactory() 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, 201)
def test_deliverable_available_gte_quantity(self): user = StaffFactory() project = ProjectFactory() invoice = InvoiceFactory(project=project, status=SUBMITTED) deliverable = DeliverableFactory(project=project) self.client.force_login(user) response = self.post_to_add(project.id, invoice.id, deliverable.id, quantity=3) self.assertEqual(response.status_code, 400) error_message = {'detail': ErrorDetail(string='Required quantity is more than available', code='invalid')} self.assertEqual(response.data, error_message)
def test_deliverable_dont_exists_in_project_deliverables(self): user = StaffFactory() project = ProjectFactory() invoice = InvoiceFactory(project=project, status=SUBMITTED) deliverable = DeliverableFactory() self.client.force_login(user) response = self.post_to_add(project.id, invoice.id, deliverable.id) self.assertEqual(response.status_code, 400) error_message = {'detail': ErrorDetail(string='Not Found', code='invalid')} self.assertEqual(response.data, error_message)
def test_finance2_can_remove_deliverables(self): user = Finance2Factory() project = ProjectFactory() invoice = InvoiceFactory(project=project, status=APPROVED_BY_FINANCE_1) 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, 200)
def test_staff_cant_remove_deliverables_after_staff_approval(self): user = StaffFactory() project = ProjectFactory() invoice = InvoiceFactory(project=project, status=APPROVED_BY_STAFF) 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_can_remove_deliverables(self): user = StaffFactory() project = ProjectFactory() invoice = InvoiceFactory(project=project, status=SUBMITTED) 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, 200)
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_cant_get_set_required_checks_without_login(self): project = ProjectFactory() invoice = InvoiceFactory(project=project, status=APPROVED_BY_STAFF) valid_checks = True valid_checks_link = 'https://google.com' 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_cant_add_or_remove_wihtout_login(self): project = ProjectFactory() invoice = InvoiceFactory(project=project) deliverable = DeliverableFactory(project=project) invoice_deliverable = InvoiceDeliverableFactory(deliverable=deliverable) response = self.post_to_add(project.id, invoice.id, deliverable.id) self.assertEqual(response.status_code, 403) response = self.delete_to_remove(project.id, invoice.id, invoice_deliverable.id) self.assertEqual(response.status_code, 403)
def test_deliverable_already_exists_in_invoice(self): user = StaffFactory() project = ProjectFactory() invoice = InvoiceFactory(project=project, status=SUBMITTED) deliverable = DeliverableFactory(project=project) invoice_deliverable = InvoiceDeliverableFactory(deliverable=deliverable) invoice.deliverables.add(invoice_deliverable) self.client.force_login(user) response = self.post_to_add(project.id, invoice.id, deliverable.id) self.assertEqual(response.status_code, 400) error_message = {'detail': ErrorDetail(string='Invoice Already has this deliverable', code='invalid')} self.assertEqual(response.data, error_message)
def test_deliverables_cant_removed_after_finance2_approval(self): project = ProjectFactory() invoice = InvoiceFactory(project=project, status=APPROVED_BY_FINANCE_2) deliverable = DeliverableFactory(project=project) invoice_deliverable = InvoiceDeliverableFactory(deliverable=deliverable) invoice.deliverables.add(invoice_deliverable) finance1 = FinanceFactory() finance2 = Finance2Factory() staff = StaffFactory() for user in [staff, finance1, finance2]: 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_email_staff_update_invoice(self): project = self.source_factory() invoice = InvoiceFactory(project=project) staff = StaffFactory() self.adapter_process( MESSAGES.UPDATE_INVOICE, adapter=EmailAdapter(), user=staff, source=project, related=invoice, ) self.assertEqual(len(mail.outbox), 1) self.assertEqual(mail.outbox[0].to, [project.user.email])
def test_slack_staff_update_invoice(self): backend = get_backend() backend.reset_messages() project = self.source_factory() invoice = InvoiceFactory(project=project) staff = StaffFactory() self.adapter_process( MESSAGES.UPDATE_INVOICE, adapter=self.slack(), user=staff, source=project, related=invoice, ) messages = backend.retrieve_messages() self.assertEqual(len(messages), 1)
def test_slack_staff_update_invoice(self): responses.add(responses.POST, self.target_url, status=200, body='OK') project = self.source_factory() invoice = InvoiceFactory(project=project) staff = StaffFactory() self.adapter_process( MESSAGES.UPDATE_INVOICE, adapter=self.slack(), user=staff, source=project, related=invoice, ) self.assertEqual(len(responses.calls), 1)
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_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_can_save_related_invoice(self): other = InvoiceFactory() activity = ActivityFactory(related_object=other) self.assertEqual(other, activity.related_object)