marination
3 years ago
2 changed files with 130 additions and 5 deletions
@ -0,0 +1,125 @@ |
|||
# Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors |
|||
# See license.txt |
|||
|
|||
import frappe |
|||
|
|||
from erpnext.stock.report.stock_ageing.stock_ageing import FIFOSlots |
|||
from erpnext.tests.utils import ERPNextTestCase |
|||
|
|||
class TestStockAgeing(ERPNextTestCase): |
|||
def setUp(self) -> None: |
|||
self.filters = frappe._dict( |
|||
company="_Test Company", |
|||
to_date="2021-12-10" |
|||
) |
|||
|
|||
def test_normal_inward_outward_queue(self): |
|||
"Reference: Case 1 in stock_ageing_fifo_logic.md" |
|||
sle = [ |
|||
frappe._dict( |
|||
name="Flask Item", |
|||
actual_qty=30, qty_after_transaction=30, |
|||
posting_date="2021-12-01", voucher_type="Stock Entry", |
|||
voucher_no="001", |
|||
has_serial_no=False, serial_no=None |
|||
), |
|||
frappe._dict( |
|||
name="Flask Item", |
|||
actual_qty=20, qty_after_transaction=50, |
|||
posting_date="2021-12-02", voucher_type="Stock Entry", |
|||
voucher_no="002", |
|||
has_serial_no=False, serial_no=None |
|||
), |
|||
frappe._dict( |
|||
name="Flask Item", |
|||
actual_qty=(-10), qty_after_transaction=40, |
|||
posting_date="2021-12-03", voucher_type="Stock Entry", |
|||
voucher_no="003", |
|||
has_serial_no=False, serial_no=None |
|||
) |
|||
] |
|||
|
|||
slots = FIFOSlots(self.filters, sle).generate() |
|||
|
|||
self.assertTrue(slots["Flask Item"]["fifo_queue"]) |
|||
result = slots["Flask Item"] |
|||
queue = result["fifo_queue"] |
|||
|
|||
self.assertEqual(result["qty_after_transaction"], result["total_qty"]) |
|||
self.assertEqual(queue[0][0], 20.0) |
|||
|
|||
def test_insufficient_balance(self): |
|||
"Reference: Case 3 in stock_ageing_fifo_logic.md" |
|||
sle = [ |
|||
frappe._dict( |
|||
name="Flask Item", |
|||
actual_qty=(-30), qty_after_transaction=(-30), |
|||
posting_date="2021-12-01", voucher_type="Stock Entry", |
|||
voucher_no="001", |
|||
has_serial_no=False, serial_no=None |
|||
), |
|||
frappe._dict( |
|||
name="Flask Item", |
|||
actual_qty=20, qty_after_transaction=(-10), |
|||
posting_date="2021-12-02", voucher_type="Stock Entry", |
|||
voucher_no="002", |
|||
has_serial_no=False, serial_no=None |
|||
), |
|||
frappe._dict( |
|||
name="Flask Item", |
|||
actual_qty=20, qty_after_transaction=10, |
|||
posting_date="2021-12-03", voucher_type="Stock Entry", |
|||
voucher_no="003", |
|||
has_serial_no=False, serial_no=None |
|||
), |
|||
frappe._dict( |
|||
name="Flask Item", |
|||
actual_qty=10, qty_after_transaction=20, |
|||
posting_date="2021-12-03", voucher_type="Stock Entry", |
|||
voucher_no="004", |
|||
has_serial_no=False, serial_no=None |
|||
) |
|||
] |
|||
|
|||
slots = FIFOSlots(self.filters, sle).generate() |
|||
|
|||
result = slots["Flask Item"] |
|||
queue = result["fifo_queue"] |
|||
|
|||
self.assertEqual(result["qty_after_transaction"], result["total_qty"]) |
|||
self.assertEqual(queue[0][0], 10.0) |
|||
self.assertEqual(queue[1][0], 10.0) |
|||
|
|||
def test_stock_reconciliation(self): |
|||
sle = [ |
|||
frappe._dict( |
|||
name="Flask Item", |
|||
actual_qty=30, qty_after_transaction=30, |
|||
posting_date="2021-12-01", voucher_type="Stock Entry", |
|||
voucher_no="001", |
|||
has_serial_no=False, serial_no=None |
|||
), |
|||
frappe._dict( |
|||
name="Flask Item", |
|||
actual_qty=0, qty_after_transaction=50, |
|||
posting_date="2021-12-02", voucher_type="Stock Reconciliation", |
|||
voucher_no="002", |
|||
has_serial_no=False, serial_no=None |
|||
), |
|||
frappe._dict( |
|||
name="Flask Item", |
|||
actual_qty=(-10), qty_after_transaction=40, |
|||
posting_date="2021-12-03", voucher_type="Stock Entry", |
|||
voucher_no="003", |
|||
has_serial_no=False, serial_no=None |
|||
) |
|||
] |
|||
|
|||
slots = FIFOSlots(self.filters, sle).generate() |
|||
|
|||
result = slots["Flask Item"] |
|||
queue = result["fifo_queue"] |
|||
|
|||
self.assertEqual(result["qty_after_transaction"], result["total_qty"]) |
|||
self.assertEqual(queue[0][0], 20.0) |
|||
self.assertEqual(queue[1][0], 20.0) |
Loading…
Reference in new issue