处理后台新需求
Build Backend JAR / build (push) Failing after 16m58s

This commit is contained in:
supernijia
2026-08-09 20:08:39 +08:00
parent f7e26ee266
commit 38216a1885
42 changed files with 3425 additions and 424 deletions
+36 -9
View File
@@ -32,7 +32,7 @@ class _FakeCursor:
self.calls.append((sql, tuple(params)))
if 'COUNT(*) AS total' in sql:
self.kind = 'count'
elif 'MAX(t.created_at)' in sql:
elif 'AS latest_created_at' in sql and 'GROUP BY' in sql:
self.kind = 'groups'
self.group_limit = int(params[-2])
self.group_offset = int(params[-1])
@@ -59,14 +59,14 @@ class _FakeCursor:
limited = []
for row in rows:
shop_key = row['shop_name'].strip().casefold()
if counts.get(shop_key, 0) >= 3:
if counts.get(shop_key, 0) >= 1:
continue
counts[shop_key] = counts.get(shop_key, 0) + 1
limited.append(row)
return limited
if self.current_shop is not None:
rows = [row for row in rows if row['shop_name'].strip() == self.current_shop]
return rows[:3]
return rows[:1]
return []
@@ -85,7 +85,7 @@ class AdminShopDataGroupTest(unittest.TestCase):
def setUp(self):
self.app = Flask(__name__)
self.group_rows = [
{'shop_name': 'Shop A', 'latest_created_at': datetime(2026, 8, 5, 12, 0)},
{'shop_name': 'Shop A', 'latest_created_at': datetime(2026, 8, 7, 5, 21, 45)},
{'shop_name': '', 'latest_created_at': datetime(2026, 8, 4, 12, 0)},
]
self.result_rows = [
@@ -98,7 +98,8 @@ class AdminShopDataGroupTest(unittest.TestCase):
]
@staticmethod
def _result_row(result_id, shop_name, created_at, result_file_url=None):
def _result_row(
result_id, shop_name, created_at, result_file_url=None, latest_file_updated_at=None):
return {
'result_id': result_id,
'task_id': result_id + 100,
@@ -119,6 +120,7 @@ class AdminShopDataGroupTest(unittest.TestCase):
'created_at': created_at,
'updated_at': created_at,
'finished_at': created_at,
'latest_file_updated_at': latest_file_updated_at or created_at,
'file_job_id': None,
'file_status': 'SUCCESS',
'username': 'operator',
@@ -133,9 +135,25 @@ class AdminShopDataGroupTest(unittest.TestCase):
self.assertEqual(group['shop_name'], 'Shop A')
self.assertEqual(group['group_name'], 'Group 1')
self.assertEqual([item['result_id'] for item in group['results']], [5, 4, 3])
self.assertEqual([item['result_id'] for item in group['results']], [5])
self.assertEqual(group['results'][0]['result_file_url'], 'object-5')
def test_group_item_falls_back_to_daily_file_update_time(self):
row = self._result_row(
21427,
'Shop A',
'2026-08-06T15:20:43',
latest_file_updated_at=datetime(2026, 8, 7, 5, 21, 45),
)
group = admin_api._shop_data_crawl_group_item(
{'shop_name': 'Shop A', 'latest_created_at': None},
{'shop a': [row]},
{},
)
self.assertEqual(group['latest_created_at'], '2026-08-07 05:21:45')
def test_list_paginates_groups_and_ignores_removed_user_status_filters(self):
cursor = _FakeCursor(
self.group_rows,
@@ -160,10 +178,11 @@ class AdminShopDataGroupTest(unittest.TestCase):
self.assertEqual(payload['total'], 2)
self.assertEqual(payload['page'], 1)
self.assertEqual(payload['items'][0]['shop_name'], 'Shop A')
self.assertEqual(len(payload['items'][0]['results']), 3)
self.assertEqual(payload['items'][0]['latest_created_at'], '2026-08-07 05:21:45')
self.assertEqual(len(payload['items'][0]['results']), 1)
self.assertEqual(
[item['result_id'] for item in payload['items'][0]['results']],
[5, 4, 3],
[5],
)
self.assertEqual(payload['items'][1]['shop_name'], '未命名')
self.assertEqual(len(payload['items'][1]['results']), 1)
@@ -173,7 +192,15 @@ class AdminShopDataGroupTest(unittest.TestCase):
self.assertNotIn('FAILED', params)
self.assertTrue(any('GROUP BY TRIM(COALESCE(r.source_filename, ' in sql for sql, _ in cursor.calls))
self.assertTrue(any('ROW_NUMBER() OVER' in sql for sql, _ in cursor.calls))
self.assertTrue(any('shop_row_number <= 3' in sql for sql, _ in cursor.calls))
self.assertTrue(any('shop_row_number <= 1' in sql for sql, _ in cursor.calls))
self.assertTrue(any(
'LEFT JOIN biz_shop_data_crawl_daily_file df ON df.latest_result_id = r.id' in sql
for sql, _ in cursor.calls
))
self.assertTrue(any(
'MAX(COALESCE(df.last_success_at, df.updated_at, t.finished_at, t.updated_at, t.created_at))'
in sql for sql, _ in cursor.calls
))
self.assertTrue(any('TRIM(COALESCE(sm.shop_name' in sql for sql, _ in cursor.calls))
self.assertTrue(any("TRIM(COALESCE(r.result_file_url, '')) <> ''" in sql for sql, _ in cursor.calls))