from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from app.db.base import Base
from app.crud.inventory import create_inventory_item, get_inventory_item, update_inventory_item, delete_inventory_item
from app.models.inventory import InventoryType


def setup_in_memory_db():
    engine = create_engine("sqlite:///:memory:", future=True)
    TestingSessionLocal = sessionmaker(bind=engine)
    Base.metadata.create_all(bind=engine)
    return TestingSessionLocal()


def test_create_update_delete_inventory_item():
    db = setup_in_memory_db()
    data = {"name": "Papel sublimacion A4", "sku": "PAP-A4", "type": InventoryType.paper, "unit": "hoja", "quantity_on_hand": 100}
    item = create_inventory_item(db, item_data=data)
    assert item.id is not None
    assert item.name == data["name"]

    updates = {"quantity_on_hand": 80}
    updated = update_inventory_item(db, item, updates)
    assert updated.quantity_on_hand == 80

    deleted = delete_inventory_item(db, updated)
    assert deleted is True
    assert get_inventory_item(db, updated.id) is None
