"""现货采样申请三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()