feat(collect): persist product status snapshots
This commit is contained in:
@@ -40,6 +40,9 @@ class DbTests(TempDirMixin, unittest.TestCase):
|
||||
"image_task_key",
|
||||
"cover_reset_count",
|
||||
"cover_reset_at",
|
||||
"product_status",
|
||||
"product_status_note",
|
||||
"product_status_at",
|
||||
}.issubset(task_columns)
|
||||
)
|
||||
finally:
|
||||
@@ -113,9 +116,13 @@ class DbTests(TempDirMixin, unittest.TestCase):
|
||||
}
|
||||
self.assertIn("cover_reset_count", columns)
|
||||
self.assertIn("cover_reset_at", columns)
|
||||
self.assertIn("product_status", columns)
|
||||
self.assertIn("product_status_note", columns)
|
||||
self.assertIn("product_status_at", columns)
|
||||
task = db.get_task(1, conn=conn)
|
||||
self.assertEqual(0, task.cover_reset_count)
|
||||
self.assertIsNone(task.cover_reset_at)
|
||||
self.assertIsNone(task.product_status)
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
@@ -217,6 +224,62 @@ class DbTests(TempDirMixin, unittest.TestCase):
|
||||
|
||||
self.assert_removed(temp_dir)
|
||||
|
||||
def test_product_status_snapshot_preserves_collection_lifecycle_and_content(self):
|
||||
with self.make_temp_dir() as temp_dir:
|
||||
db_path = os.path.join(temp_dir, "cmshopee.db")
|
||||
db.init_db(db_path)
|
||||
batch_id = db.create_batch(["input.xlsx"], path=db_path)
|
||||
db.insert_tasks(
|
||||
batch_id,
|
||||
[
|
||||
{
|
||||
"source_file_abs": os.path.join(temp_dir, "input.xlsx"),
|
||||
"source_sheet": "Sheet1",
|
||||
"source_row": 2,
|
||||
"account_name": "shop",
|
||||
"alias": "alias",
|
||||
"item_id": "51100639510",
|
||||
}
|
||||
],
|
||||
path=db_path,
|
||||
)
|
||||
task = db.list_tasks(batch_id=batch_id, path=db_path)[0]
|
||||
|
||||
db.set_collected(task.id, "旧标题", "old.jpg", db_path)
|
||||
db.set_product_status(
|
||||
task.id,
|
||||
"reviewing",
|
||||
"审核说明",
|
||||
"2026-07-18T09:00:00",
|
||||
path=db_path,
|
||||
)
|
||||
status_only = db.get_task(task.id, path=db_path)
|
||||
self.assertEqual("collected", status_only.stage)
|
||||
self.assertEqual("success", status_only.status)
|
||||
self.assertEqual("旧标题", status_only.old_title)
|
||||
self.assertEqual("old.jpg", status_only.old_cover_path)
|
||||
self.assertEqual("reviewing", status_only.product_status)
|
||||
self.assertEqual("审核说明", status_only.product_status_note)
|
||||
self.assertEqual("2026-07-18T09:00:00", status_only.product_status_at)
|
||||
|
||||
db.set_collected(
|
||||
task.id,
|
||||
"重新采集标题",
|
||||
"new-old.jpg",
|
||||
product_status_value="not-a-status",
|
||||
product_status_note="x" * 2200,
|
||||
product_status_at="2026-07-18T10:00:00",
|
||||
path=db_path,
|
||||
)
|
||||
refreshed = db.get_task(task.id, path=db_path)
|
||||
self.assertEqual("unknown", refreshed.product_status)
|
||||
self.assertEqual("重新采集标题", refreshed.old_title)
|
||||
self.assertEqual("new-old.jpg", refreshed.old_cover_path)
|
||||
self.assertEqual("2026-07-18T10:00:00", refreshed.product_status_at)
|
||||
self.assertEqual(2000, len(refreshed.product_status_note))
|
||||
|
||||
self.assert_removed(temp_dir)
|
||||
|
||||
def test_set_generated_cover_preserves_title_and_records_ai_success(self):
|
||||
with self.make_temp_dir() as temp_dir:
|
||||
db_path = os.path.join(temp_dir, "cmshopee.db")
|
||||
|
||||
Reference in New Issue
Block a user