from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from app.db.base import Base
from app.crud.products import create_product, get_product, delete_product


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_and_get_product():
    db = setup_in_memory_db()
    data = {"name": "Taza 11oz", "sku": "TAZA11", "category": "tazas", "base_price": 5.0}
    product = create_product(db, product_data=data)
    assert product.id is not None

    fetched = get_product(db, product.id)
    assert fetched is not None
    assert fetched.name == data["name"]


def test_delete_product():
    db = setup_in_memory_db()
    data = {"name": "Gorro medico", "sku": "GORRO1"}
    product = create_product(db, product_data=data)
    deleted = delete_product(db, product)
    assert deleted is True
    assert get_product(db, product.id) is None
