Build observed product review queue
This commit is contained in:
124
tests/test_review_queue.py
Normal file
124
tests/test_review_queue.py
Normal file
@@ -0,0 +1,124 @@
|
||||
import tempfile
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
|
||||
import build_observed_products
|
||||
import build_review_queue
|
||||
from layer_helpers import write_csv_rows
|
||||
|
||||
|
||||
class ReviewQueueTests(unittest.TestCase):
|
||||
def test_build_review_queue_preserves_existing_status(self):
|
||||
observed_rows = [
|
||||
{
|
||||
"observed_product_id": "gobs_1",
|
||||
"retailer": "giant",
|
||||
"representative_upc": "111",
|
||||
"representative_image_url": "",
|
||||
"representative_name_norm": "GALA APPLE",
|
||||
"times_seen": "2",
|
||||
"distinct_item_names_count": "2",
|
||||
"distinct_upcs_count": "1",
|
||||
"is_fee": "false",
|
||||
}
|
||||
]
|
||||
item_rows = [
|
||||
{
|
||||
"observed_product_id": "gobs_1",
|
||||
"item_name": "SB GALA APPLE 5LB",
|
||||
"item_name_norm": "GALA APPLE",
|
||||
"line_total": "7.99",
|
||||
},
|
||||
{
|
||||
"observed_product_id": "gobs_1",
|
||||
"item_name": "SB GALA APPLE 5 LB",
|
||||
"item_name_norm": "GALA APPLE",
|
||||
"line_total": "8.49",
|
||||
},
|
||||
]
|
||||
existing = {
|
||||
build_review_queue.stable_id("rvw", "gobs_1|missing_image"): {
|
||||
"status": "approved",
|
||||
"resolution_notes": "looked fine",
|
||||
"created_at": "2026-03-15",
|
||||
}
|
||||
}
|
||||
|
||||
queue = build_review_queue.build_review_queue(
|
||||
observed_rows, item_rows, existing, "2026-03-16"
|
||||
)
|
||||
|
||||
self.assertEqual(2, len(queue))
|
||||
missing_image = [row for row in queue if row["reason_code"] == "missing_image"][0]
|
||||
self.assertEqual("approved", missing_image["status"])
|
||||
self.assertEqual("looked fine", missing_image["resolution_notes"])
|
||||
|
||||
def test_review_queue_main_writes_output(self):
|
||||
with tempfile.TemporaryDirectory() as tmpdir:
|
||||
observed_path = Path(tmpdir) / "products_observed.csv"
|
||||
items_path = Path(tmpdir) / "items_enriched.csv"
|
||||
output_path = Path(tmpdir) / "review_queue.csv"
|
||||
|
||||
observed_rows = [
|
||||
{
|
||||
"observed_product_id": "gobs_1",
|
||||
"retailer": "giant",
|
||||
"observed_key": "giant|upc=111|name=GALA APPLE",
|
||||
"representative_upc": "111",
|
||||
"representative_item_name": "SB GALA APPLE 5LB",
|
||||
"representative_name_norm": "GALA APPLE",
|
||||
"representative_brand": "SB",
|
||||
"representative_variant": "",
|
||||
"representative_size_value": "5",
|
||||
"representative_size_unit": "lb",
|
||||
"representative_pack_qty": "",
|
||||
"representative_measure_type": "weight",
|
||||
"representative_image_url": "",
|
||||
"is_store_brand": "true",
|
||||
"is_fee": "false",
|
||||
"first_seen_date": "2026-01-01",
|
||||
"last_seen_date": "2026-01-10",
|
||||
"times_seen": "2",
|
||||
"example_order_id": "1",
|
||||
"example_item_name": "SB GALA APPLE 5LB",
|
||||
"raw_name_examples": "SB GALA APPLE 5LB | SB GALA APPLE 5 LB",
|
||||
"normalized_name_examples": "GALA APPLE",
|
||||
"example_prices": "7.99 | 8.49",
|
||||
"distinct_item_names_count": "2",
|
||||
"distinct_upcs_count": "1",
|
||||
}
|
||||
]
|
||||
item_rows = [
|
||||
{
|
||||
"retailer": "giant",
|
||||
"order_id": "1",
|
||||
"line_no": "1",
|
||||
"item_name": "SB GALA APPLE 5LB",
|
||||
"item_name_norm": "GALA APPLE",
|
||||
"upc": "111",
|
||||
"size_value": "5",
|
||||
"size_unit": "lb",
|
||||
"pack_qty": "",
|
||||
"measure_type": "weight",
|
||||
"is_store_brand": "true",
|
||||
"is_fee": "false",
|
||||
"line_total": "7.99",
|
||||
}
|
||||
]
|
||||
|
||||
write_csv_rows(
|
||||
observed_path, observed_rows, build_observed_products.OUTPUT_FIELDS
|
||||
)
|
||||
write_csv_rows(items_path, item_rows, list(item_rows[0].keys()))
|
||||
|
||||
build_review_queue.main.callback(
|
||||
observed_csv=str(observed_path),
|
||||
items_enriched_csv=str(items_path),
|
||||
output_csv=str(output_path),
|
||||
)
|
||||
|
||||
self.assertTrue(output_path.exists())
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user