EC-CUBE / EC-CUBE/ec-cube

test(e2e): mailpit 基盤(#6890)でメール送信フローのメール本文検証を拡充する

Open
#6,912 0 comments 0 reactions 0 assignees View on GitHub
test
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.