fix(status): ignore promotion edit warnings
This commit is contained in:
+143
-1
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user