SearchAdd 測試導覽
這份文件只處理一件事:
- 幫接手
search_add的工程師快速理解tests/SearchAddStep*IntegrationTest.php在測什麼
這批 Step 測試的命名來源,不是業務流程名稱,而是 legacy 重寫時的切分步驟。
來源文件在舊專案:
get-lancer-php56/scripts/api_test/suites/search_add/docs/rewrite/REWRITE_STEPS.mdget-lancer-php56/scripts/api_test/suites/search_add/docs/rewrite/STEP_2_TICKET.mdget-lancer-php56/scripts/api_test/suites/search_add/docs/rewrite/STEP_3_TICKET.mdget-lancer-php56/scripts/api_test/suites/search_add/docs/rewrite/STEP_4_TICKET.mdget-lancer-php56/scripts/api_test/suites/search_add/docs/rewrite/STEP_5_TICKET.mdget-lancer-php56/scripts/api_test/suites/search_add/docs/rewrite/STEP_6_TICKET.mdget-lancer-php56/scripts/api_test/suites/search_add/docs/rewrite/STEP_7_TICKET.mdget-lancer-php56/scripts/api_test/suites/search_add/docs/rewrite/STEP_8_TICKET.mdget-lancer-php56/scripts/api_test/suites/search_add/docs/rewrite/STEP_9_TICKET.md
怎麼看這批測試
先記住一件事:
Step 2到Step 9是「新專案重寫順序」- 不是 runtime 真正的執行順序
- 也不是使用者會理解的 API 階段名稱
所以這批測試比較像:
- rewrite/cutover 驗收測試
不是:
- 最適合新人第一眼理解業務規則的語意化測試
如果你要快速排查,建議順序:
- 先看 request_lifecycle.md
- 再看本文件對應哪一個 Step
- 最後才進該支 test class 看 fixture 和 assertion
Step 對照表
Step 2
- 測試檔:tests/SearchAddStep2IntegrationTest.php
- 對應 legacy ticket:
get-lancer-php56/scripts/api_test/suites/search_add/docs/rewrite/STEP_2_TICKET.md
- 核心目的:
- existing session user 建單主線
- actor resolution
quote_requests主表建立
- 刻意不測:
- auto signup
- request 附屬表
- auto quote
Step 3
- 測試檔:tests/SearchAddStep3IntegrationTest.php
- 對應 legacy ticket:
get-lancer-php56/scripts/api_test/suites/search_add/docs/rewrite/STEP_3_TICKET.md
- 核心目的:
- auto signup
- actor fallback
- 建單前核心風控
- 典型規則:
- phone verified
- blocked user
- duplicate request
- overseas phone
Step 4
- 測試檔:tests/SearchAddStep4IntegrationTest.php
- 對應 legacy ticket:
get-lancer-php56/scripts/api_test/suites/search_add/docs/rewrite/STEP_4_TICKET.md
- 核心目的:
- request 建立後的同步附屬資料寫入
- 典型寫表:
quote_form_submissionsquote_form_submission_fieldsquote_request_landing_pagesquote_request_logsquote_activities
Step 5
- 測試檔:tests/SearchAddStep5IntegrationTest.php
- 對應 legacy ticket:
get-lancer-php56/scripts/api_test/suites/search_add/docs/rewrite/STEP_5_TICKET.md
- 核心目的:
- auto quote match
- bid 建立前的候選過濾
quote_request_match_infos/read_segment_9_matches
- 典型規則:
- balance
- read segment
- ibon specific-user rule
Step 6
- 測試檔:tests/SearchAddStep6IntegrationTest.php
- 對應 legacy ticket:
get-lancer-php56/scripts/api_test/suites/search_add/docs/rewrite/STEP_6_TICKET.md
- 核心目的:
- bid finalize
- pricing success / fallback
quote_bid_detect_contents- submit quote activity
Step 7
- 測試檔:tests/SearchAddStep7IntegrationTest.php
- 對應 legacy ticket:
get-lancer-php56/scripts/api_test/suites/search_add/docs/rewrite/STEP_7_TICKET.md
- 核心目的:
- special flow
- preserve / invitation
- direct reserve
- authorized mode
- direct user
- 補充:
- 這支最容易混到 queue / transaction / reserve / activity 驗證
- 看測試時先判斷它在保哪個特殊分支
Step 8
- 測試檔:tests/SearchAddStep8IntegrationTest.php
- 對應 legacy ticket:
get-lancer-php56/scripts/api_test/suites/search_add/docs/rewrite/STEP_8_TICKET.md
- 核心目的:
- signup / social / referral / external integration 殘差
- Apple / Google / Facebook
- fetnet / 55688 / referral / security hash
Step 9
- 測試檔:tests/SearchAddStep9IntegrationTest.php
- 對應 legacy ticket:
get-lancer-php56/scripts/api_test/suites/search_add/docs/rewrite/STEP_9_TICKET.md
- 核心目的:
- booking
- second-link
- abnormal / tracking / cutover 收尾
- async / task 類最終驗收
閱讀建議
如果你是第一次接手:
- 先理解
Step是 rewrite phase,不是 business phase - 每次只讀一支 test class
- 先看 class 頂部註解,再看 test method 名稱
- 最後才追 fixture helper
如果你是要改某條規則:
- 先找它屬於哪個 Step
- 回頭看對應 legacy ticket
- 再決定要不要補更語意化的專屬測試,例如:
IbonFlowTestAuthorizedFlowTestBookingFlowTest
Special Flow 名詞白話表
這些名稱在 Step 7 與 Step 9 很常出現,但對第一次接手的人不夠直觀。
Authorized
- 指的是:客戶指定某一位專家來接這張單
- 常見特徵:
match_type = Authorize- request 帶
quote_service_id
- 白話理解:
- 不是系統自己去配一批 provider
- 而是先對指定的那位 provider 建 bid,再進 contact 後處理
Preserve
- 指的是:保留或回補某位既有 provider 的 invitation 流程
- 白話理解:
- 這張 request 不是走一般 auto quote 主線
- 而是把某位特定 provider 重新帶回這張單
Direct Reserve
- 指的是:直接預約某位 provider
- 白話理解:
- 不只建 bid
- 還要補 reservation / pause event / message 類 side effects
Direct User
- 指的是:直接指定某位 provider user 來對接
- 白話理解:
- 和一般 auto match 不同
- 不是靠候選池自己挑人,而是直接建立特定 user/provider 的對應關係
Booking
- 指的是:booking shop user 送出的 request
- 白話理解:
- 這類 request 有自己的 request metadata、task 與 downstream 規則
- 不完全等同一般 consumer request
Second Link
- 指的是:R2 request 與前一筆 R1 request 的關聯
- 白話理解:
- 某些來源下,這張新 request 不是完全獨立
- 系統要記住它和前一筆 request 的關係,必要時補排前一筆
newQuoteRequest
長期建議
這批 Step 測試適合保留,因為它們代表 rewrite/cutover 驗收。
但未來如果要讓新同事更快上手,建議逐步補一層語意化測試:
IbonFlowTest.phpAuthorizedFlowTest.phpBookingFlowTest.phpSecondLinkFlowTest.php
這樣:
Step測試保 rewrite 驗收- 語意化測試保業務規則理解
兩層並存會比現在只有 Step 系列更容易維護。