from datetime import date import faker from sqlalchemy.orm import Session from src.models.b4w import B4wDb from src.models.category import CategoryDb, upsert_category from tests.factories import CategoryFactory def _load_initial_categories(session: Session) -> None: for category in CategoryFactory.build_all(): upsert_category(session, category, do_commit=False) session.commit() def test_b4w_populate(populated_db_b4w): val_dt_min, val_dt_max = date(2026, 1, 1), date(2026, 3, 31) session = populated_db_b4w( "b4w_basic", 100, setup=_load_initial_categories, ValDt=lambda: faker.Faker().date_between(val_dt_min, val_dt_max), ) assert session assert session.query(B4wDb).count() == 100 assert session.query(CategoryDb).count() >= len(CategoryFactory.build_all()) # ``ValDt`` was given as a per-row callable: it must have been resolved # and persisted for every row. dates = [d for (d,) in session.query(B4wDb.date_valid).all()] assert all(val_dt_min <= d <= val_dt_max for d in dates) # ``Id1`` is assigned per row: one distinct row per id, no dedup collisions. ids = [i for (i,) in session.query(B4wDb.id_b4w).order_by(B4wDb.id_b4w).all()] assert ids == list(range(1, 101))