test(e2e): mailpit 基盤(#6890)でメール送信フローのメール本文検証を拡充する
- Dominant language
- PHP
- Stars
- 788
- Forks
- 719
- Avg merge
- 4d 4h
- Merged PRs (30d)
- 39
Description
## 概要(Overview)
PR #6890(`ci(e2e): mailcatcher → mailpit 置換`、close #6879)で、E2E に**送信メール本文を検証する基盤**が入りました(mailpit の REST API を叩く `clearMailbox` / `findMessageId` / `getMessageText` を `e2e/tests/front-mail.spec.ts` に実装)。ただし現状メール本文を検証しているのは **会員登録(EF04)だけ**です。
他のメール送信フローは UI 操作の E2E はあってもメール本文は未検証のため、**「E2E でやる価値がある(他テスト層で代替しにくい)順」に絞ってメール本文検証を拡充**します。
> 本 Issue は **#6890 のマージが前提(Depends on #6890)** です。ヘルパー実装・`MAILPIT_URL` 環境変数・mailpit 起動 action は #6890 に含まれます。
## 現状のカバレッジと狙い
単体テスト(`tests/Eccube/Tests/Service/MailServiceTest.php`)は全メール送信メソッドを、Web 機能テスト(`tests/Eccube/Tests/Web/...`)は主要フローの送信をカーネルレベルで検証済みです。そのため E2E は「**ブラウザ導線 × メール本文**」という他層で代替しにくい部分に価値を絞ります。
## やること(チェックリスト)
### 先行タスク: 共有ヘルパー抽出
- [ ] `front-mail.spec.ts` 内の無名関数 `clearMailbox` / `findMessageId` / `getMessageText` を **`e2e/helpers/mail-client.ts`** に抽出(`expect.poll` ベースの `waitForMessageId` も追加)。`front-mail.spec.ts` をこれに差し替える。POM/helpers 規約(`@helpers/*`)に準拠。
### 優先度・高(他層も薄い / 単一 Web テストで書きにくい)
- [ ] **会員情報変更 通知メール**(`mypage_change` ・ `MailService::sendCustomerChangeNotifyMail`)— Web 機能テストが薄い。使い捨て会員を EF04 フローで作成 → 会員情報変更 → 通知メール本文を検証。
- [ ] **お届け先 変更通知メール**(`mypage_delivery_new` / `edit` / `delete` ・ 同メソッド)— 同上。
- [ ] **メール設定 → 件名反映**(管理: メール設定 + `admin_order_mail` ・ `sendAdminOrderMail`)— メール設定で件名を変更 → 受注メールを送信 → **件名が反映される**ことを検証。2 画面を跨ぐため単体/単一 Web では書きにくい。Bcc で宛先 2 件になることも確認。
### 優先度・中(他層で送信検証済み。ブラウザ導線として価値がある範囲に限定)
- [ ] **注文確定メール**(`shopping_checkout` ・ `sendOrderMail`)— 会員購入の通し購入フロー end-to-end +「ご注文ありがとうございます」本文。
- [ ] **出荷通知メール**(管理: `admin_shipping_notify_mail` / `admin_shipping_update_order_status` ・ `sendShippingNotifyMail`)—「商品出荷のお知らせ」+ Bcc。
### 対象外(他層で十分・E2E 重複価値が低いと判断)
- お問い合わせ / パスワード再発行 / 退会 / 仮会員メール再送 … 単体+Web 機能テストで送信検証済み。単純フォームで JS リスクも低いため**今回は E2E 化しない**。
- `sendPasswordResetCompleteMail` … **`src/` 内に呼び出し元が無く UI トリガーが存在しない**ため恒久的に対象外(単体テストのみ)。
### CI
- [ ] 新規 `admin-mail.spec.ts` を `.github/workflows/e2e-test.yml` の `matrix.suite` に追加(`front-mail` は #6890 で追加済み、`MAILPIT_URL` env も #6890 で設定済み)。`admin-mail` シャードにも `MAILPIT_URL` が渡ることを確認する。
## 想定ファイル
- 新規: `e2e/helpers/mail-client.ts`
- 変更: `e2e/tests/front-mail.spec.ts`(ヘルパー差し替え+ front フロー追加)
- 新規: `e2e/tests/admin-mail.spec.ts`(管理フロー: メール設定件名反映・出荷通知)
- 変更: `.github/workflows/e2e-test.yml`(`admin-mail` を suite に追加)
## 実装上の注意
- `front-*` spec は未認証 state。会員操作は共有固定会員 `playwright@test.test` を汚さないため、**EF04 と同じ entry → activate で使い捨て会員を都度作成**して操作する。新規メールは `mailpit_${Date.now()}@example.com` で一意化(#6890 踏襲)。
- 待機は web-first assertion + `expect.poll`(固定 `waitForTimeout` は yubinbango 等の外部 JS 待ちのみ許容)。
- 件名の検証キー例: 会員登録のご確認 / 会員登録が完了しました(実装済)、ご注文ありがとうございます、商品出荷のお知らせ。その他は `MailTemplate` の件名を参照。
- 規約は `.claude/skills/e2e/SKILL.md` に従う。
## 関連
- 契機・依存: #6890(Depends on), #6879
Contributor guide
Research direction
Read .claude/skills/e2e/SKILL.md and the existing e2e/tests/front-mail.spec.ts, then confirm that #6890 is merged before starting. Extract the mail helpers into e2e/helpers/mail-client.ts, add the listed front and admin flows, and update .github/workflows/e2e-test.yml. Done means the selected browser flows verify the specified subjects or bodies and the admin-mail shard receives MAILPIT_URL.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- github-actions, php, playwright, typescript
- Domain
- ci-cd, testing
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 48/100