From a3186d75dd7551ccdb7fd3d16730f11b146965c5 Mon Sep 17 00:00:00 2001 From: Rijul Poudel Date: Mon, 14 Sep 2026 10:44:38 -0500 Subject: [PATCH 1/4] [test]: fill in borrow invoice number and date --- .../businessrules/tests/test_borrow.py | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 specifyweb/backend/businessrules/tests/test_borrow.py diff --git a/specifyweb/backend/businessrules/tests/test_borrow.py b/specifyweb/backend/businessrules/tests/test_borrow.py new file mode 100644 index 00000000000..c68ff4f8804 --- /dev/null +++ b/specifyweb/backend/businessrules/tests/test_borrow.py @@ -0,0 +1,26 @@ +from django.utils import timezone + +from specifyweb.specify import models +from specifyweb.specify.tests.test_api import ApiTests + + +class BorrowTests(ApiTests): + def test_fill_invoice_number_and_date(self): + borrow_date = timezone.now() + + borrow = models.Borrow.objects.create( + collectionmemberid=self.collection.id, + invoicenumber='BORROW-8524-001', + borrowdate=borrow_date, + ) + + fetched_borrow = models.Borrow.objects.get(id=borrow.id) + + self.assertEqual( + fetched_borrow.invoicenumber, + 'BORROW-8524-001', + ) + self.assertEqual( + fetched_borrow.borrowdate, + borrow_date, + ) From 4860b517f7d01cc7612f837f1820f16352451d5c Mon Sep 17 00:00:00 2001 From: Rijul Poudel Date: Mon, 14 Sep 2026 10:47:15 -0500 Subject: [PATCH 2/4] [test]: add existing agent to borrow --- .../businessrules/tests/test_borrow.py | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/specifyweb/backend/businessrules/tests/test_borrow.py b/specifyweb/backend/businessrules/tests/test_borrow.py index c68ff4f8804..c30520a31a4 100644 --- a/specifyweb/backend/businessrules/tests/test_borrow.py +++ b/specifyweb/backend/businessrules/tests/test_borrow.py @@ -24,3 +24,32 @@ def test_fill_invoice_number_and_date(self): fetched_borrow.borrowdate, borrow_date, ) + + def test_add_existing_agent_to_borrow(self): + borrow = models.Borrow.objects.create( + collectionmemberid=self.collection.id, + invoicenumber='BORROW-AGENT-001', + ) + + borrow_agent = borrow.borrowagents.create( + agent=self.agent, + collectionmemberid=self.collection.id, + role='Borrower', + ) + + fetched_borrow_agent = models.Borrowagent.objects.get( + id=borrow_agent.id, + ) + + self.assertEqual( + fetched_borrow_agent.borrow.id, + borrow.id, + ) + self.assertEqual( + fetched_borrow_agent.agent.id, + self.agent.id, + ) + self.assertEqual( + fetched_borrow_agent.role, + 'Borrower', + ) From 4e9a424bd10730178127bc82bca73cd6d925dfab Mon Sep 17 00:00:00 2001 From: Rijul Poudel Date: Mon, 14 Sep 2026 10:48:45 -0500 Subject: [PATCH 3/4] [test]: create new agent for borrow --- .../businessrules/tests/test_borrow.py | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/specifyweb/backend/businessrules/tests/test_borrow.py b/specifyweb/backend/businessrules/tests/test_borrow.py index c30520a31a4..8e267b58b27 100644 --- a/specifyweb/backend/businessrules/tests/test_borrow.py +++ b/specifyweb/backend/businessrules/tests/test_borrow.py @@ -53,3 +53,57 @@ def test_add_existing_agent_to_borrow(self): fetched_borrow_agent.role, 'Borrower', ) + + def test_create_new_agent_for_borrow(self): + borrow = models.Borrow.objects.create( + collectionmemberid=self.collection.id, + invoicenumber='BORROW-NEW-AGENT-001', + ) + + new_agent = models.Agent.objects.create( + agenttype=0, + firstname='New', + lastname='Borrow Agent', + division=self.division, + ) + + borrow_agent = models.Borrowagent.objects.create( + borrow=borrow, + agent=new_agent, + collectionmemberid=self.collection.id, + role='Borrower', + ) + + fetched_agent = models.Agent.objects.get(id=new_agent.id) + fetched_borrow_agent = models.Borrowagent.objects.get( + id=borrow_agent.id, + ) + + self.assertEqual( + fetched_agent.firstname, + 'New', + ) + self.assertEqual( + fetched_agent.lastname, + 'Borrow Agent', + ) + self.assertEqual( + fetched_agent.agenttype, + 0, + ) + self.assertEqual( + fetched_agent.division, + self.division, + ) + self.assertEqual( + fetched_borrow_agent.borrow, + borrow, + ) + self.assertEqual( + fetched_borrow_agent.agent, + new_agent, + ) + self.assertEqual( + fetched_borrow_agent.role, + 'Borrower', + ) From f800edf31e26b3ae27b4fd45f665c2f41eccd4cf Mon Sep 17 00:00:00 2001 From: Rijul Poudel Date: Mon, 14 Sep 2026 10:53:23 -0500 Subject: [PATCH 4/4] [test]: add shipment with fields to borrow --- .../businessrules/tests/test_borrow.py | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git a/specifyweb/backend/businessrules/tests/test_borrow.py b/specifyweb/backend/businessrules/tests/test_borrow.py index 8e267b58b27..356b0ea5bbd 100644 --- a/specifyweb/backend/businessrules/tests/test_borrow.py +++ b/specifyweb/backend/businessrules/tests/test_borrow.py @@ -1,3 +1,5 @@ +from decimal import Decimal + from django.utils import timezone from specifyweb.specify import models @@ -107,3 +109,98 @@ def test_create_new_agent_for_borrow(self): fetched_borrow_agent.role, 'Borrower', ) + + def test_add_shipment_with_all_fields_to_borrow(self): + shipment_date = timezone.now() + + borrow = models.Borrow.objects.create( + collectionmemberid=self.collection.id, + invoicenumber='BORROW-SHIPMENT-001', + ) + + shipment = borrow.shipments.create( + shipmentnumber='BORROW-SHIPMENT-001', + shipmentdate=shipment_date, + shipmentmethod='Courier', + numberofpackages=3, + insuredforamount='500.00', + weight='12.5 kg', + number1=Decimal('10.25'), + number2=Decimal('20.50'), + remarks='Borrow shipment remarks', + text1='Borrow shipment text one', + text2='Borrow shipment text two', + yesno1=True, + yesno2=False, + shipper=self.agent, + discipline=self.discipline, + ) + + fetched_shipment = models.Shipment.objects.get( + id=shipment.id, + ) + + self.assertEqual( + fetched_shipment.borrow, + borrow, + ) + self.assertEqual( + fetched_shipment.shipmentnumber, + 'BORROW-SHIPMENT-001', + ) + self.assertEqual( + fetched_shipment.shipmentdate, + shipment_date, + ) + self.assertEqual( + fetched_shipment.shipmentmethod, + 'Courier', + ) + self.assertEqual( + fetched_shipment.numberofpackages, + 3, + ) + self.assertEqual( + fetched_shipment.insuredforamount, + '500.00', + ) + self.assertEqual( + fetched_shipment.weight, + '12.5 kg', + ) + self.assertEqual( + fetched_shipment.number1, + Decimal('10.25'), + ) + self.assertEqual( + fetched_shipment.number2, + Decimal('20.50'), + ) + self.assertEqual( + fetched_shipment.remarks, + 'Borrow shipment remarks', + ) + self.assertEqual( + fetched_shipment.text1, + 'Borrow shipment text one', + ) + self.assertEqual( + fetched_shipment.text2, + 'Borrow shipment text two', + ) + self.assertIs( + fetched_shipment.yesno1, + True, + ) + self.assertIs( + fetched_shipment.yesno2, + False, + ) + self.assertEqual( + fetched_shipment.shipper, + self.agent, + ) + self.assertEqual( + fetched_shipment.discipline, + self.discipline, + )