クーポンのフローが気づかれずに壊れる理由
- メールが遅れる。 オファーのメールはマーケティングツールを経由してスケジュールに従い、サインアップの数分後に送られることが多く、それが1時間になっても誰も気づきません。
- コードが何度も使える。 1回限りのコードが2回、または終了日後に受け付けられると、そのたびに損失が出ます。
- 1人で複数のアカウント。
name+promo1@として再びサインアップすると、多くのアプリで2回目のウェルカムオファーがもらえます。ウェルカムオファーの不正利用を参照してください。 - 詳細が間違っている。 メールでは20%なのにチェックアウトでは10%になる、またはオファーの終了日がメールに書かれていない。「日曜日まで」や「本日限り」も、メールが届いた日を基準にした終了日として扱います。
Proxy Mail QA でできること
- ステージングサイトで新しいアドレスを使ってオファーに登録します。
- アカウントページと受信トレイでクーポンを確認します。コピーボタン付きのコード、割引内容(「20%オフ」)、終了日、アドレス作成から到着までの時間が表示されます。終了日を過ぎると「期限切れ」と表示されますが、コピーは引き続きできるため、チェックアウトで拒否されることをテストできます。
- テスト決済でチェックアウト時に適用し、その結果を受信トレイに記録します。受け付け、拒否、またはエラーを、アプリが表示したメッセージとともに記録します。
- 判定を確認します。終了日後に受け付けられたクーポン、1回限りなのに2回受け付けられたクーポン、同じ人がすでに受け取ったオファーで受け付けられたクーポンは失敗になります。エラーは警告になります。
確認する内容
- 約束した時間内(たとえばサインアップから5分以内)にクーポンが届く。
- チェックアウトでの割引がメールの内容と一致する。
- 1回限りのコードは2回目に、わかりやすいメッセージとともに拒否される。
- 期限切れのコードは拒否される。
- メールにオファーの終了日が書かれていて、配信停止リンクがある(オファーはマーケティングメールです)。
テストでの使い方
const submitted = new Date();await page.getByRole('button', { name: 'Get 20% off' }).click();
// Offers often take minutes: this waits up to 10.const coupon = await qa.waitForCode(address, { type: 'coupon', since: submitted, timeout: 600 });expect(coupon.discount).toBe('20% off');expect(coupon.after_seconds).toBeLessThan(300);
await page.getByLabel('Promo code').fill(coupon.value);await page.getByRole('button', { name: 'Apply' }).click();const first = await qa.recordCouponResult(address, 'accepted', { oneTime: true });expect(first.check?.status).toBe('pass');
// The same code again should be refused.await page.getByLabel('Promo code').fill(coupon.value);await page.getByRole('button', { name: 'Apply' }).click();const again = await qa.recordCouponResult(address, 'rejected', { message: await page.getByRole('alert').innerText() });expect(again.check?.status).not.toBe('fail');MCP server に接続したエージェントは、wait_for_code(kind coupon)と record_coupon_result で同じことができます。また、test_coupon_checkout プロンプトはステージング環境での一連の流れを順に案内します。