File size: 1,683 Bytes
c1dcc23
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# PROMPT: "Write pytest tests that (1) validate store_layout.json loads into the
#   StoreLayout model and zone_at() maps a foot point to the right zone, and (2)
#   verify the POS loader is idempotent — loading the same clean CSV twice inserts
#   rows once."
# CHANGES MADE: Used a point known to lie inside the SKINCARE polygon on CAM_FLOOR_01
#   and asserted the entry camera exposes an entry_line; kept the POS CSV inline so
#   the test has no external file dependency.
from __future__ import annotations

from sqlalchemy import func, select

from app.models import PosTransaction
from app.services.pos_loader import load_pos_csv
from layout import get_layout


def test_store_layout_loads_and_maps_zone():
    layout = get_layout()
    assert layout.store_id == "STORE_BLR_002"
    assert "SKINCARE" in layout.zones and "BILLING" in layout.zones
    entry = layout.cameras["CAM_ENTRY_01"]
    assert entry.role == "entry" and entry.entry_line and entry.inside_point
    # a point inside the SKINCARE polygon on the floor camera
    zone = layout.zone_at("CAM_FLOOR_01", (0.4, 0.5))
    assert zone is not None and zone.zone_id == "SKINCARE"


def test_pos_loader_is_idempotent(db, tmp_path):
    csv = tmp_path / "pos.csv"
    csv.write_text(
        "store_id,transaction_id,timestamp,basket_value_inr\n"
        "STORE_BLR_002,TXN_1,2026-04-10T14:55:00Z,1240.0\n"
        "STORE_BLR_002,TXN_2,2026-04-10T15:01:00Z,680.0\n",
        encoding="utf-8",
    )
    assert load_pos_csv(db, csv) == 2
    assert load_pos_csv(db, csv) == 0  # second load inserts nothing
    total = db.execute(select(func.count()).select_from(PosTransaction)).scalar_one()
    assert total == 2