35 lines
1.3 KiB
Python
35 lines
1.3 KiB
Python
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))
|