Add tests/test_stock.py

This commit is contained in:
2026-04-11 03:58:53 +00:00
parent 18af11a63a
commit 31451e1f2f

69
tests/test_stock.py Normal file
View File

@@ -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