fix(status): ignore promotion edit warnings

This commit is contained in:
chengma
2026-07-20 10:52:32 +08:00
parent b3d9857b3e
commit 9c4224286a
10 changed files with 253 additions and 14 deletions
+143 -1
View File
@@ -7,7 +7,7 @@ sys.path.insert(0, os.path.dirname(__file__))
from _helpers import TempDirMixin
from app import db
from app import db, product_status
class DbTests(TempDirMixin, unittest.TestCase):
@@ -259,6 +259,148 @@ class DbTests(TempDirMixin, unittest.TestCase):
self.assert_removed(temp_dir)
def test_init_db_repairs_only_legacy_promotion_status_misclassification(self):
with self.make_temp_dir() as temp_dir:
db_path = os.path.join(temp_dir, "cmshopee.db")
db.init_db(db_path)
batch_ids = {}
for index, name in enumerate(
(
"legacy-promotion",
"legacy-unknown",
"after-promotion",
"legacy-unlisted",
"deleted-promotion",
),
start=1,
):
batch_id = db.create_batch([f"{name}.xlsx"], path=db_path)
batch_ids[name] = batch_id
db.insert_tasks(
batch_id,
[
{
"source_file_abs": os.path.join(temp_dir, f"{name}.xlsx"),
"source_sheet": "Sheet1",
"source_row": 2,
"account_name": "店铺",
"alias": "alias",
"item_id": str(51100639800 + index),
}
],
path=db_path,
)
promotion_note = (
"标题:由於正在進行促銷,以下一些欄位無法進行編輯,"
"數值將顯示為灰色。"
)
conn = db.connect(db_path)
try:
with conn:
legacy_ids = [
batch_ids["legacy-promotion"],
batch_ids["legacy-unknown"],
batch_ids["legacy-unlisted"],
batch_ids["deleted-promotion"],
]
placeholders = ", ".join("?" for _batch_id in legacy_ids)
conn.execute(
f"UPDATE batches SET created_at = ? WHERE id IN ({placeholders})",
("2026-07-18T16:34:36", *legacy_ids),
)
task_by_batch = {
batch_id: db.list_tasks(batch_id=batch_id, conn=conn)[0]
for batch_id in batch_ids.values()
}
conn.execute(
"""
UPDATE tasks
SET product_status = 'unknown', product_status_note = ?,
product_status_at = ?, new_cover_path = ?,
stage = 'generated', status = 'success'
WHERE id = ?
""",
(
promotion_note,
"2026-07-20T09:18:10",
"new.jpg",
task_by_batch[batch_ids["legacy-promotion"]].id,
),
)
conn.execute(
"UPDATE tasks SET product_status = 'unknown', product_status_note = ? WHERE id = ?",
(
"其他未知状态提示",
task_by_batch[batch_ids["legacy-unknown"]].id,
),
)
conn.execute(
"UPDATE tasks SET product_status = 'unknown', product_status_note = ? WHERE id = ?",
(
promotion_note,
task_by_batch[batch_ids["after-promotion"]].id,
),
)
conn.execute(
"UPDATE tasks SET product_status = 'unlisted', product_status_note = ? WHERE id = ?",
(
promotion_note,
task_by_batch[batch_ids["legacy-unlisted"]].id,
),
)
conn.execute(
"UPDATE tasks SET product_status = 'unknown', product_status_note = ? WHERE id = ?",
(
promotion_note,
task_by_batch[batch_ids["deleted-promotion"]].id,
),
)
conn.execute(
"UPDATE batches SET deleted_at = ? WHERE id = ?",
("2026-07-19T00:00:00", batch_ids["deleted-promotion"]),
)
finally:
conn.close()
db.init_db(db_path)
legacy_promotion = db.list_tasks(
batch_id=batch_ids["legacy-promotion"], path=db_path
)[0]
legacy_unknown = db.list_tasks(
batch_id=batch_ids["legacy-unknown"], path=db_path
)[0]
after_promotion = db.list_tasks(
batch_id=batch_ids["after-promotion"], path=db_path
)[0]
legacy_unlisted = db.list_tasks(
batch_id=batch_ids["legacy-unlisted"], path=db_path
)[0]
deleted_promotion = db.list_tasks(
batch_id=batch_ids["deleted-promotion"],
include_deleted=True,
path=db_path,
)[0]
self.assertEqual("normal", legacy_promotion.product_status)
self.assertEqual(db.LEGACY_PROMOTION_STATUS_REPAIR_NOTE, legacy_promotion.product_status_note)
self.assertEqual("2026-07-20T09:18:10", legacy_promotion.product_status_at)
cover_plan = product_status.build_apply_plan([legacy_promotion], "cover")
self.assertEqual([legacy_promotion.id], [task.id for task in cover_plan["executable"]])
self.assertEqual("unknown", legacy_unknown.product_status)
self.assertEqual("unknown", after_promotion.product_status)
self.assertEqual("unlisted", legacy_unlisted.product_status)
self.assertEqual("unknown", deleted_promotion.product_status)
first_updated_at = legacy_promotion.updated_at
db.init_db(db_path)
self.assertEqual(
first_updated_at,
db.get_task(legacy_promotion.id, path=db_path).updated_at,
)
self.assert_removed(temp_dir)
def test_account_batch_task_lifecycle(self):
with self.make_temp_dir() as temp_dir:
db_path = os.path.join(temp_dir, "cmshopee.db")