Test db ppopulate #19
@@ -87,11 +87,19 @@ def populated_db_b4w(
|
|||||||
Only the first-layer ingestion table is filled; no further processing.
|
Only the first-layer ingestion table is filled; no further processing.
|
||||||
``**kwargs`` are forwarded to ``B4wExportFactory.build``; callable values
|
``**kwargs`` are forwarded to ``B4wExportFactory.build``; callable values
|
||||||
are resolved per row (e.g. ``ValDt=lambda: faker.date_between(...)``).
|
are resolved per row (e.g. ``ValDt=lambda: faker.date_between(...)``).
|
||||||
|
``Id1`` is reserved: it is set per row (``1..row_count``) and cannot be
|
||||||
|
overridden via ``**kwargs``.
|
||||||
|
The returned session is *not* closed by the fixture; close it in the test.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def populate_db_b4w(
|
def populate_db_b4w(
|
||||||
name: str, row_count: int = DEFAULT_B4W_ROWS, **kwargs: Any
|
name: str, row_count: int = DEFAULT_B4W_ROWS, **kwargs: Any
|
||||||
) -> Session:
|
) -> Session:
|
||||||
|
if "Id1" in kwargs:
|
||||||
|
raise ValueError(
|
||||||
|
"Id1 is set per row (1..row_count) by populated_db_b4w and "
|
||||||
|
"cannot be overridden via **kwargs"
|
||||||
|
)
|
||||||
session = db_session_factory(name)
|
session = db_session_factory(name)
|
||||||
for i in range(row_count):
|
for i in range(row_count):
|
||||||
row_kwargs = {k: (v() if callable(v) else v) for k, v in kwargs.items()}
|
row_kwargs = {k: (v() if callable(v) else v) for k, v in kwargs.items()}
|
||||||
|
|||||||
+11
-2
@@ -2,13 +2,22 @@ from datetime import date
|
|||||||
|
|
||||||
import faker
|
import faker
|
||||||
|
|
||||||
the_faker = faker.Faker()
|
from src.models.b4w import B4wDb
|
||||||
|
|
||||||
|
|
||||||
def test_b4w_populate(populated_db_b4w):
|
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(
|
session = populated_db_b4w(
|
||||||
"b4w_basic",
|
"b4w_basic",
|
||||||
100,
|
100,
|
||||||
ValDt=lambda: faker.Faker().date_between(date(2026, 1, 1), date(2026, 3, 31)),
|
ValDt=lambda: faker.Faker().date_between(val_dt_min, val_dt_max),
|
||||||
)
|
)
|
||||||
assert session
|
assert session
|
||||||
|
assert session.query(B4wDb).count() == 100
|
||||||
|
# ``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))
|
||||||
|
|||||||
Reference in New Issue
Block a user