diff --git a/hypha/apply/projects/tests/test_forms.py b/hypha/apply/projects/tests/test_forms.py index 37273cc111680319a48aaa9731880964cffbbf18..d4d5bb883afd7ecf0d4bcf15ec14bfcb08b0a386 100644 --- a/hypha/apply/projects/tests/test_forms.py +++ b/hypha/apply/projects/tests/test_forms.py @@ -1,3 +1,4 @@ +import json from io import BytesIO from unittest import mock @@ -15,6 +16,7 @@ from ..files import get_files from ..forms.payment import ( ChangeInvoiceStatusForm, CreateInvoiceForm, + EditInvoiceForm, SelectDocumentForm, filter_request_choices, ) @@ -39,6 +41,7 @@ from .factories import ( DocumentCategoryFactory, InvoiceFactory, ProjectFactory, + SupportingDocumentFactory, address_to_form_data, ) @@ -365,6 +368,77 @@ class TestCreateInvoiceForm(TestCase): self.assertFalse(form.is_valid()) +class TestEditInvoiceForm(TestCase): + + def test_remove_existing_supporting_document(self): + invoice = InvoiceFactory() + SupportingDocumentFactory(invoice=invoice, document=invoice.document) + self.assertTrue(invoice.supporting_documents.exists()) + + form = EditInvoiceForm( + data={ + 'document': invoice.document, + 'supporting_documents-uploads': '[]', + 'date_from': '2018-08-15', + 'date_to': '2019-08-15', + 'amount': invoice.amount, + }, + files={ + 'supporting_documents': [], + }, + instance=invoice) + self.assertTrue(form.is_valid()) + + form.save() + self.assertFalse(invoice.supporting_documents.exists()) + + def test_keep_existing_supporting_document(self): + invoice = InvoiceFactory() + supporting_document = SupportingDocumentFactory(invoice=invoice) + self.assertEqual(invoice.supporting_documents.count(), 1) + + form = EditInvoiceForm( + data={ + 'document': invoice.document, + 'supporting_documents-uploads': json.dumps( + [{"name": supporting_document.document.name, + "size": supporting_document.document.size, + "type": "existing"}] + ), + 'date_from': '2018-08-15', + 'date_to': '2019-08-15', + 'amount': invoice.amount, + }, + instance=invoice) + self.assertTrue(form.is_valid()) + + invoice = form.save() + self.assertEqual(invoice.supporting_documents.count(), 1) + + def test_add_new_supporting_document(self): + invoice = InvoiceFactory() + self.assertEqual(invoice.supporting_documents.count(), 0) + + supporting_document = [SimpleUploadedFile('invoice.pdf', BytesIO(b'somebinarydata').read())] + form = EditInvoiceForm( + data={ + 'document': invoice.document, + 'supporting_documents-uploads': '[]', + 'date_from': '2018-08-15', + 'date_to': '2019-08-15', + 'amount': invoice.amount, + }, + files={ + 'supporting_documents': supporting_document, + }, + instance=invoice, + ) + self.assertTrue(form.is_valid()) + + invoice = form.save() + self.assertEqual(invoice.supporting_documents.count(), 1) + + @override_settings(ROOT_URLCONF='hypha.apply.urls') class TestSelectDocumentForm(TestCase): def test_copying_files(self):