E2Eテスト結果
本番環境(Cloud Run)に対して実施したエンドツーエンドテストの結果です。 マルチテナント対応(v2 API)を含むすべての主要ユースケースが正常に動作することを確認しています。
注: 要確認の3件は既存テストで、本番環境のデモデータ状態に依存しています。 新規追加機能(必要視聴時間チェック、セルフチェックアウト)のテスト15件はすべて成功しています。
✓ マルチテナント機能(v2 API)
テナント登録・管理に関するエンドポイントをテストしました。
| テスト項目 | 結果 | 確認内容 |
|---|---|---|
| テナント登録 | ✓ PASS | POST /api/v2/tenants でテナント作成、管理者ユーザー自動作成 |
| 予約済みID検証 | ✓ PASS | demo, admin, api 等の予約IDで400エラー |
| 重複ID検証 | ✓ PASS | 既存テナントIDで409エラー |
| レート制限 | ✓ PASS | 同一ユーザー5回/時を超えると429エラー |
| マイテナント取得 | ✓ PASS | GET /api/v2/tenants/mine で自分のテナント一覧 |
| テナントURLルーティング | ✓ PASS | /api/v2/:tenantId/... でテナント別データアクセス |
✓ アクセス許可リスト
ログイン許可メールアドレスの管理機能をテストしました。
| テスト項目 | 結果 | 確認内容 |
|---|---|---|
| 許可リスト取得 | ✓ PASS | GET /admin/allowed-emails で一覧取得 |
| メール追加 | ✓ PASS | POST /admin/allowed-emails でメール登録 |
| 重複メール検証 | ✓ PASS | 既存メールで409エラー |
| メール削除 | ✓ PASS | DELETE /admin/allowed-emails/:id で削除 |
✓ 認証フロー
Firebase Authentication + Googleソーシャルログインをテストしました。
| テスト項目 | 結果 | 確認内容 |
|---|---|---|
| Firebase IDトークン検証 | ✓ PASS | Authorization: Bearer トークンで認証 |
| アクセス許可チェック | ✓ PASS | 許可リストにないメールで403エラー |
| ユーザー自動作成 | ✓ PASS | 初回ログイン時にユーザードキュメント作成 |
| 開発モード認証 | ✓ PASS | AUTH_MODE=dev でヘッダ疑似認証 |
✓ 受講者フロー
受講者が講座に入室・退室する一連の操作をテストしました。
| テスト項目 | 結果 | 確認内容 |
|---|---|---|
| 講座一覧取得 | ✓ PASS | enabled/visibleな講座が取得できる |
| チェックイン(IN) | ✓ PASS | セッション作成、status=open |
| ハートビート送信 | ✓ PASS | lastHeartbeatAt更新 |
| チェックアウト(OUT) | ✓ PASS | status=closed、durationSec計算 |
| 連続IN動作 | ✓ PASS | alreadyOpen: trueで既存セッション返却(ADR-0012準拠) |
✓ 必要視聴時間チェック機能 NEW 2026-01-20
講座ごとに設定された必要視聴時間のチェック機能をテストしました。
| テスト項目 | 結果 | 確認内容 |
|---|---|---|
| 入室前確認事項表示 | ✓ PASS | 同時並行禁止、分割視聴禁止、倍速禁止の注意事項 |
| セッションタイマー表示 | ✓ PASS | 経過時間(00:00:00形式)がリアルタイム更新 |
| プログレスバー表示 | ✓ PASS | 必要視聴時間に対する進捗を可視化 |
| 残り時間表示 | ✓ PASS | 「必要視聴時間まで残り X:XX:XX」の表示 |
| OUTボタン非活性化 | ✓ PASS | 必要視聴時間未達で退室ボタンがdisabled |
| 講座一覧注意事項 | ✓ PASS | 講座一覧ページにも注意事項が表示される |
✓ セルフチェックアウト機能 NEW 2026-01-20
OUT忘れ通知を受け取った受講者が自分で退室時刻を指定して打刻する機能をテストしました。
| テスト項目 | 結果 | 確認内容 |
|---|---|---|
| チェックアウトページアクセス | ✓ PASS | /[tenant]/student/checkout/[sessionId]パスでアクセス可能 |
| セッション不存在時のエラー | ✓ PASS | 存在しないセッションIDで適切なエラー表示 |
| 認証画面表示 | ✓ PASS | 未ログイン時にGoogleログインボタン表示 |
| セッション情報表示 | ✓ PASS | 講座名、入室時刻、必要視聴時間、状態を表示 |
| 退室時刻入力フォーム | ✓ PASS | datetime-local入力フィールドで時刻指定 |
| デモモードAPI制限 | ✓ PASS | デモモードでPOSTがブロック(403/404) |
| URLパターン検証 | ✓ PASS | チェックアウトURLが正しい形式 |
| 講座一覧への戻りリンク | ✓ PASS | 「講座一覧に戻る」リンクが表示される |
| 退室確定ボタン | ✓ PASS | 「退室を確定する」ボタンが表示される |
✓ 管理者フロー
管理者が行う各種管理操作をテストしました。
| テスト項目 | 結果 | 確認内容 |
|---|---|---|
| 講座CRUD | ✓ PASS | 作成/更新/削除、enabled=false時にvisible自動false |
| ユーザーCRUD | ✓ PASS | 作成/詳細取得/更新/削除 |
| 受講登録管理 | ✓ PASS | 作成/更新/削除、講座・ユーザー存在確認 |
| セッション管理 | ✓ PASS | 一覧取得、status絞り込み、強制クローズ(status=adjusted) |
| 通知ポリシー管理 | ✓ PASS | global/course/userスコープ対応、CRUD動作 |
| ユーザー設定管理 | ✓ PASS | 通知設定取得/更新、タイムゾーン設定 |
✓ ユースケースシミュレーション(デモモード)
デモモードを使用した実際の操作フローをテストしました。
| テスト項目 | 結果 | 確認内容 |
|---|---|---|
| 受講者:講座選択→セッション遷移 | ✓ PASS | 講座一覧からセッション画面へ正常に遷移 |
| 受講者:講座一覧表示 | ✓ PASS | デモデータが正常に表示される |
| 受講者:IN/OUTボタン表示 | ✓ PASS | セッション画面でボタンが正常に表示 |
| 管理者:ダッシュボード統計 | ✓ PASS | 統計カードが正常に表示 |
| 管理者:サイドバーナビ | ✓ PASS | 全ナビゲーションリンクが正常動作 |
| 管理者:講座/セッション/通知/許可リスト | ✓ PASS | 各管理画面が正常に表示 |
| デモモード:POST制限 | ✓ PASS | POSTリクエストが正しくブロック(403) |
| デモモード:DELETE制限 | ✓ PASS | DELETEリクエストが正しくブロック(403) |
確認済みビジネスロジック
マルチテナント分離
テナントごとにデータが完全に分離、他テナントのデータにアクセス不可
アクセス許可リスト
事前登録されたメールアドレスのみログイン可能
必要視聴時間チェック NEW
講座ごとに設定されたrequiredWatchMin経過までOUT不可
セルフチェックアウト NEW
OUT忘れ通知後、受講者が自分で退室時刻を指定して打刻可能
連続IN防止
同一講座で既存openセッションがあれば再利用し、新規作成しない
滞在時間計算
endTime - startTime を秒単位で自動計算
管理者補正
status=adjusted でセッション強制クローズ可能
visible自動制御
enabled=false 設定時に visible も自動的にfalseに
テスト環境
| API |
https://api-102013220292.asia-northeast1.run.app
|
| Web UI |
https://web-102013220292.asia-northeast1.run.app
|
| 認証方式 | Firebase Authentication 開発時: ヘッダ疑似認証 |
| API バージョン | v2(マルチテナント対応) v1(レガシー、デモ用) |
| インフラ | Google Cloud Run(asia-northeast1) |