From 469fc63ca86de9334e2a7841d71f4fd0f533f67b Mon Sep 17 00:00:00 2001
From: sandeepsajan0 <sandeepsajan0@gmail.com>
Date: Thu, 17 Feb 2022 10:58:58 +0530
Subject: [PATCH] Add tests for EditInvoiceForm

---
 hypha/apply/projects/tests/test_forms.py | 74 ++++++++++++++++++++++++
 1 file changed, 74 insertions(+)

diff --git a/hypha/apply/projects/tests/test_forms.py b/hypha/apply/projects/tests/test_forms.py
index 37273cc11..d4d5bb883 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):
-- 
GitLab