Watch
1
0
Fork
You've already forked Seyyed_arc
0
forked from hesabix/arc
Seyyed_arc/hesabixAPI/tests/test_inventory_discrepancy_service.py

74 lines
2.2 KiB
Python

from types import SimpleNamespace
from app.services.inventory_discrepancy_service import (
_correction_lines_by_case_line,
_serialize,
)
def test_serialize_includes_labels_needed_by_discrepancy_ui():
invoice = SimpleNamespace(code="QS-42", document_date=SimpleNamespace(isoformat=lambda: "2026-10-12"))
product = SimpleNamespace(name="کالای نمونه", code="P-1", base_purchase_price=125_000)
warehouse = SimpleNamespace(name="انبار اصلی")
line = SimpleNamespace(
id=7,
product_id=11,
product=product,
warehouse_id=3,
warehouse=warehouse,
invoice_item_line_id=13,
available_quantity=0,
requested_quantity=2,
shortage_quantity=2,
resolved_quantity=0,
resolution_unit_cost=None,
)
case = SimpleNamespace(
id=5,
business_id=1,
invoice_document_id=42,
invoice_document=invoice,
warehouse_document_id=9,
resolution_document_id=None,
status="open",
source_type="quick_sale",
reason_code="urgent_sale",
reason_note=None,
created_by_user_id=2,
resolved_by_user_id=None,
resolution_type=None,
created_at=None,
resolved_at=None,
lines=[line],
)
result = _serialize(case)
assert result["invoice_code"] == "QS-42"
assert result["invoice_date"] == "2026-10-12"
assert result["lines"][0]["product_name"] == "کالای نمونه"
assert result["lines"][0]["product_code"] == "P-1"
assert result["lines"][0]["warehouse_name"] == "انبار اصلی"
assert result["lines"][0]["suggested_unit_cost"] == 125_000
def test_correction_lines_are_matched_by_case_line_not_only_product():
lines = [
{
"product_id": 11,
"warehouse_id": 1,
"unit_cost": 100,
"extra_info": {"inventory_discrepancy_line_id": 7},
},
{
"product_id": 11,
"warehouse_id": 2,
"unit_cost": 120,
"extra_info": {"inventory_discrepancy_line_id": 8},
},
]
indexed = _correction_lines_by_case_line(lines)
assert indexed[7]["warehouse_id"] == 1
assert indexed[8]["warehouse_id"] == 2