Skip to content

Commit

Permalink
Add tests for get_purchase_orders logic (#6236)
Browse files Browse the repository at this point in the history
  • Loading branch information
30350n committed Jan 14, 2024
1 parent f27503b commit d2d59e0
Showing 1 changed file with 141 additions and 0 deletions.
141 changes: 141 additions & 0 deletions InvenTree/plugin/base/barcodes/test_barcode.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
from part.models import Part
from stock.models import StockItem

from .mixins import SupplierBarcodeMixin


class BarcodeAPITest(InvenTreeAPITestCase):
"""Tests for barcode api."""
Expand Down Expand Up @@ -354,3 +356,142 @@ def test_submit(self):
self.line_item.refresh_from_db()
self.assertEqual(self.line_item.allocated_quantity(), 10)
self.assertTrue(self.line_item.is_fully_allocated())


class SupplierBarcodeMixinTest(InvenTreeAPITestCase):
"""Unit tests for the SupplierBarcodeMixin class."""

@classmethod
def setUpTestData(cls):
"""Setup for all tests."""
super().setUpTestData()

cls.supplier = company.models.Company.objects.create(
name='Supplier Barcode Mixin Test Company', is_supplier=True
)

cls.supplier_other = company.models.Company.objects.create(
name='Other Supplier Barcode Mixin Test Company', is_supplier=True
)

cls.supplier_no_orders = company.models.Company.objects.create(
name='Supplier Barcode Mixin Test Company with no Orders', is_supplier=True
)

cls.purchase_order_pending = order.models.PurchaseOrder.objects.create(
status=order.models.PurchaseOrderStatus.PENDING.value,
supplier=cls.supplier,
supplier_reference='ORDER#1337',
)

cls.purchase_order_1 = order.models.PurchaseOrder.objects.create(
status=order.models.PurchaseOrderStatus.PLACED.value,
supplier=cls.supplier,
supplier_reference='ORDER#1338',
)

cls.purchase_order_duplicate_1 = order.models.PurchaseOrder.objects.create(
status=order.models.PurchaseOrderStatus.PLACED.value,
supplier=cls.supplier,
supplier_reference='ORDER#1339',
)

cls.purchase_order_duplicate_2 = order.models.PurchaseOrder.objects.create(
status=order.models.PurchaseOrderStatus.PLACED.value,
supplier=cls.supplier_other,
supplier_reference='ORDER#1339',
)

def setUp(self):
"""Setup method for each test."""
super().setUp()

def test_order_not_placed(self):
"""Check that purchase order which has not been placed doesn't get returned."""
purchase_orders = SupplierBarcodeMixin.get_purchase_orders(
self.purchase_order_pending.reference, None
)
self.assertIsNone(purchase_orders.first())

purchase_orders = SupplierBarcodeMixin.get_purchase_orders(
None, self.purchase_order_pending.supplier_reference
)
self.assertIsNone(purchase_orders.first())

def test_order_simple(self):
"""Check that we can get a purchase order by either reference, supplier_reference or both."""
purchase_orders = SupplierBarcodeMixin.get_purchase_orders(
self.purchase_order_1.reference, None
)
self.assertEqual(purchase_orders.count(), 1)
self.assertEqual(purchase_orders.first(), self.purchase_order_1)

purchase_orders = SupplierBarcodeMixin.get_purchase_orders(
None, self.purchase_order_1.supplier_reference
)
self.assertEqual(purchase_orders.count(), 1)
self.assertEqual(purchase_orders.first(), self.purchase_order_1)

purchase_orders = SupplierBarcodeMixin.get_purchase_orders(
self.purchase_order_1.reference, self.purchase_order_1.supplier_reference
)
self.assertEqual(purchase_orders.count(), 1)
self.assertEqual(purchase_orders.first(), self.purchase_order_1)

purchase_orders = SupplierBarcodeMixin.get_purchase_orders(
self.purchase_order_1.reference,
self.purchase_order_1.supplier_reference,
supplier=self.supplier,
)
self.assertEqual(purchase_orders.count(), 1)
self.assertEqual(purchase_orders.first(), self.purchase_order_1)

def test_wrong_supplier_order(self):
"""Check that no orders get returned if the wrong supplier is specified."""
purchase_orders = SupplierBarcodeMixin.get_purchase_orders(
self.purchase_order_1.reference, None, supplier=self.supplier_no_orders
)
self.assertIsNone(purchase_orders.first())

purchase_orders = SupplierBarcodeMixin.get_purchase_orders(
None,
self.purchase_order_1.supplier_reference,
supplier=self.supplier_no_orders,
)
self.assertIsNone(purchase_orders.first())

def test_supplier_order_duplicate(self):
"""Test getting purchase_orders with the same supplier_reference works correctly."""
purchase_orders = SupplierBarcodeMixin.get_purchase_orders(
None, self.purchase_order_duplicate_1.supplier_reference
)
self.assertEqual(purchase_orders.count(), 2)
self.assertEqual(
set(purchase_orders),
{self.purchase_order_duplicate_1, self.purchase_order_duplicate_2},
)

purchase_orders = SupplierBarcodeMixin.get_purchase_orders(
self.purchase_order_duplicate_1.reference,
self.purchase_order_duplicate_1.supplier_reference,
)
self.assertEqual(purchase_orders.count(), 1)
self.assertEqual(purchase_orders.first(), self.purchase_order_duplicate_1)

# check that mixing the reference and supplier_reference doesn't work

purchase_orders = SupplierBarcodeMixin.get_purchase_orders(
self.purchase_order_duplicate_1.supplier_reference,
self.purchase_order_duplicate_1.reference,
)
self.assertIsNone(purchase_orders.first())

# check that specifying the right supplier works

purchase_orders = SupplierBarcodeMixin.get_purchase_orders(
None,
self.purchase_order_duplicate_1.supplier_reference,
supplier=self.supplier_other,
)
self.assertEqual(purchase_orders.count(), 1)
self.assertEqual(purchase_orders.first(), self.purchase_order_duplicate_2)

0 comments on commit d2d59e0

Please sign in to comment.