Add tests/test_stock.py
This commit is contained in:
69
tests/test_stock.py
Normal file
69
tests/test_stock.py
Normal 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
|
||||||
Reference in New Issue
Block a user