dy-dashboard/tests/test_spot_application_tabs.py
2026-10-28 11:14:17 +08:00

47 lines
2.3 KiB
Python

"""现货采样申请三Tab及数据口径。"""
import unittest
from pathlib import Path
from unittest.mock import patch
from flask import Flask
from routes import spot
ROOT=Path(__file__).resolve().parents[1]
ROUTE=(ROOT/'routes/spot.py').read_text(encoding='utf-8')
APP=(ROOT/'static/js/app.js').read_text(encoding='utf-8')
class SpotApplicationTabsTest(unittest.TestCase):
def test_api_supports_three_tabs_and_status_filters(self):
for tab in ('application','arrived','rejected'): self.assertIn("tab == '"+tab+"'",ROUTE)
self.assertIn("IN ('已到货','样品已到货')",ROUTE)
self.assertIn('final_product_name',ROUTE)
def test_frontend_has_three_tabs(self):
for text in ('现货采样申请','已到货','已驳回','switchSpotApplicationTab'): self.assertIn(text,APP)
def test_original_application_columns_remain(self):
for text in ('申请人','日期','部门','品牌','产品名称','厂家','图片','产品链接','寄样数量','条形码','收件信息','状态','原因','操作'):
self.assertIn(text,APP)
def test_arrived_and_rejected_columns(self):
for text in ('序号','图片','平台','运营','到货时间','是否驳回','驳回原因'): self.assertIn(text,APP)
class SpotApplicationTabQueryTest(unittest.TestCase):
def result_query(self, tab):
app=Flask(__name__)
with app.test_request_context('/api/spot/application/list?tab='+tab+'&search=测试&page=2'), \
patch.object(spot,'role_required',return_value=True), \
patch.object(spot,'query',side_effect=[[{'cnt':1}],[]]) as query:
result=spot.application_list.__wrapped__().get_json()
self.assertEqual(result['code'],0)
self.assertEqual(result['data']['page'],2)
sql,params=query.call_args.args
self.assertEqual(params[-2:],[20,20])
return sql
def test_arrived_uses_confirmation_status_image_platform_and_arrival_date(self):
sql=self.result_query('arrived')
for fragment in ("IN ('已到货','样品已到货')", "a.status='通过'", 'a.image_path', 'c.platform', 'c.arrival_date AS arrival_time'):
self.assertIn(fragment,sql)
def test_rejected_uses_application_status_and_its_own_reason(self):
sql=self.result_query('rejected')
self.assertIn("a.status='驳回'",sql)
self.assertIn("COALESCE(a.reason,'') AS reject_reason",sql)
self.assertNotIn('spot_confirmations',sql)
self.assertNotIn('c.',sql)
if __name__=='__main__':unittest.main()