SimpleDetail
📖 2 menit baca

センター メンバーシップ & SSO ハブのテスト シナリオ

1. 実行ガイド

レベル ツール スコープ
ユニット Jest サービス、DTO 検証、ガード、ライセンス/支払い状態マシン。
インテグレーション Jest + Supertest + PostgreSQL テスト DB コントローラー、Prisma、ガード、トランザクション、エラーフォーマット。
E2E Playwright メンバー/管理者ブラウザのジャーニー。
外部サンドボックス Midtrans/Xendit サンドボックス ホストされた支払いとウェブフックのオリジナル/シミュレーション。
キュー BullMQ + Redis テスト インスタンス 再試行、遅延ジョブ、ライフサイクル スケジューラ。

各シナリオは独立したデータベースを使用し、テスト後データをクリーンアップする。スケジューラのタイムスタンプはインジェクト/フェイクできる必要があり、実際の時間に依存しないようにする。

2. 機能シナリオ

ID 種類 前提条件 ステップ 期待される結果
TS-AUTH-01 E2E メール未登録 登録 → 検証リンクを開く → ログイン アカウント有効、ダッシュボードアクセス可能、メール送信済み。
TS-AUTH-02 インテグレーション メール既に登録済み 同じメールアドレスで登録する (大文字小文字を区別) 409 EMAIL_ALREADY_REGISTERED; 2 番目のアカウントなし。
TS-AUTH-03 インテグレーション アカウント未検証 ログインと無料アクティベーション エラー アカウント未検証に基づいて拒否。
TS-AUTH-04 インテグレーション アカウント有効 ログインを繰り返し、制限を超える 429 した後、制限; パスワードはレスポンス/ログに表示されない。
TS-AUTH-05 E2E アカウント有効 パスワードを忘れた → リセットトークン → 新しいパスワードでログイン 旧パスワードは拒否され、新しいパスワードは受け入れられ、古いトークンは再利用できない。
TS-LIC-01 インテグレーション メンバー有効、NOTO フリーミアム有効 フリーミアムを 2 回アクティブ化する 最初 201 active_free; 2 回目 409; ライセンス ID は 1 つだけ。
TS-LIC-02 ユニット + インテグレーション 有料ライセンス期限切れ 期限切れのライフサイクルを実行し、グレース エンドを実行する active → grace_period → suspended; 通知がスケジュールされる。
TS-LIC-03 インテグレーション 2 つのメンバー メンバー A がライセンス B を読む 404/403 ライセンス B の詳細が漏洩しない。
TS-ORD-01 インテグレーション メンバー有効、有料プラン 同じ idempotency キーで 2 回オーダーを送信する オーダー/支払い URL は同じ; 1 つのオーダー pending_payment となる。
TS-ORD-02 インテグレーション オーダー pendding 同じ idempotency キーで異なるボディを送信する 409 オーダーは変更されない。
TS-PAY-01 インテグレーション オーダー pendding Midtrans の有効な支払い webhook を送信する オーダー支払い、支払い決済、ライセンス有効、オーディットログが作成される。
TS-PAY-02 インテグレーション オーダー pendding webhook の金額/署名が無効な場合 400; オーダー/ライセンスは変更されず、イベントが記録される。
TS-PAY-03 インテグレーション 支払い決済すでに成功した 同じ webhook を再送信する 200; ライセンス/支払い/メールは増加しない。
TS-PAY-04 サンドボックス サンドボックスの認証情報 Midtrans/Xendit サンドボックスでチェックアウトし、完了/キャンセルする 内部状態は各ゲートウェイのコールバックに基づいて正しい。
TS-SSO-01 インテグレーション OAuth クライアント/リダイレクト URI 有効 PKCE で認可 → トークン交換 1 回限りのコード、JWKS による JWT RS256 が有効。
TS-SSO-02 インテグレーション メンバーライセンスが凍結 認可とトークン更新 license_suspended/license_inactive に基づいて拒否される。
TS-ADM-01 インテグレーション メンバー非管理者 管理者エンドポイントを呼び出す 403; オーディットはシークレットを含まない。
TS-ADM-02 インテグレーション スーパーアドミン メンバーを凍結し、トークン/アクセスを確認する アクションが記録される; 新しいアクセスは規則に基づいて拒否される。
TS-JOB-01 キュー メール プロバイダーがシミュレートされた失敗 メール ジョブを実行する ジョブはリトライされ、バックオフ; 登録/支払い トランザクションは成功する。
TS-JOB-02 キュー 2 つのワーカー/スケジューラ ライフサイクルを同時に実行する 1 つのトランジションが有効; メール/ステータスが重複しない。

3. セキュリティと可靠性のリグレッションテスト

ID テスト 期待される結果
TS-SEC-01 bearer トークンなし/期限切れ/不正なトークン 401 標準エラーフォーマット。
TS-SEC-02 OAuth リダイレクト URI、ステート、または PKCE が無効 認可が拒否され、コード/トークンが発行されない。
TS-SEC-03 不知名の DTO フィールド、ペイロードが大きすぎる、または有効なクエリ パゴINATION が無効 400; フィールドはサービス/データベースに伝達されない。
TS-SEC-04 許可されていない CORS のオリジン ブラウザは API にアクセスできない。
TS-REL-01 一時的に PostgreSQL/Redis/メールが利用できない API は正常に機能し、部分的な支払いは発生しない; ジョブは復元/リトライできる。
TS-REL-02 既存データに Prisma マイグレーションを実行する マイグレーションが成功し、重要なデータは有効で、ロールバック プランが存在する。

4. スモーク テスト ステージング/プロダクション

  1. GET /health が正常に機能し、フロントエンドがパブリック ページをロードできる。
  2. サンドボックスの登録/ログインが成功し、メール キュー ワーカーがジョブを処理する。
  3. カタログ、フリーミアム、アクティベーション、ダッシュボードが正しいライセンスを表示する。
  4. Midtrans/Xendit サンドボックスが有効な webhook を送信し、リトライせずに