From 31451e1f2f9265cbf379eb0a9abc0677151839ef Mon Sep 17 00:00:00 2001 From: openclaw Date: Sat, 11 Apr 2026 03:58:53 +0000 Subject: [PATCH] Add tests/test_stock.py --- tests/test_stock.py | 69 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 tests/test_stock.py diff --git a/tests/test_stock.py b/tests/test_stock.py new file mode 100644 index 0000000..b162098 --- /dev/null +++ b/tests/test_stock.py @@ -0,0 +1,69 @@ +from decimal import Decimal +from app.services import product_service +from app.services import stock_service +from app.schemas.product import ProductCreate +from app.schemas.stock_movement import StockMoveRequest + + +def test_stock_increase(db): + prod = product_service.create_product( + db, + ProductCreate(sku="STOCK-001", name="Test", price=Decimal("10.00"), current_stock=5), + ) + req = StockMoveRequest(product_id=prod.id, type="IN", quantity=10, reason="Compra") + mov, err = stock_service.register_movement(db, req) + assert err == "" + assert mov is not None + db.refresh(prod) + assert prod.current_stock == 15 + + +def test_stock_decrease(db): + prod = product_service.create_product( + db, + ProductCreate(sku="STOCK-002", name="Test", price=Decimal("10.00"), current_stock=20), + ) + req = StockMoveRequest(product_id=prod.id, type="OUT", quantity=5, reason="Venta") + mov, err = stock_service.register_movement(db, req) + assert err == "" + db.refresh(prod) + assert prod.current_stock == 15 + + +def test_stock_insufficient(db): + prod = product_service.create_product( + db, + ProductCreate(sku="STOCK-003", name="Test", price=Decimal("10.00"), current_stock=3), + ) + req = StockMoveRequest(product_id=prod.id, type="OUT", quantity=10, reason="Over sale") + mov, err = stock_service.register_movement(db, req) + assert err == "Stock insuficiente" + assert mov is None + + +def test_stock_adjust(db): + prod = product_service.create_product( + db, + ProductCreate(sku="STOCK-004", name="Test", price=Decimal("10.00"), current_stock=50), + ) + req = StockMoveRequest(product_id=prod.id, type="ADJUST", quantity=100, reason="Inventario") + mov, err = stock_service.register_movement(db, req) + assert err == "" + db.refresh(prod) + assert prod.current_stock == 100 + + +def test_stock_summary(db): + prod1 = product_service.create_product( + db, + ProductCreate(sku="SUM-001", name="Prod 1", price=Decimal("1.00"), min_stock=10, current_stock=5), + ) + prod2 = product_service.create_product( + db, + ProductCreate(sku="SUM-002", name="Prod 2", price=Decimal("2.00"), min_stock=5, current_stock=20), + ) + summary = stock_service.get_stock_summary(db) + assert len(summary) == 2 + low_stock = [s for s in summary if s["is_low_stock"]] + assert len(low_stock) == 1 + assert low_stock[0]["product_id"] == prod1.id