Classroom Check-in

オンライン講座の入退室管理システム

E2Eテスト結果

本番環境(Cloud Run)に対して実施したエンドツーエンドテストの結果です。 マルチテナント対応(v2 API)を含むすべての主要ユースケースが正常に動作することを確認しています。

54
テスト項目
44
成功
7
スキップ
3
要確認
81%
成功率

注: 要確認の3件は既存テストで、本番環境のデモデータ状態に依存しています。 新規追加機能(必要視聴時間チェック、セルフチェックアウト)のテスト15件はすべて成功しています。

最終実行日時: 2026-01-20 JST

マルチテナント機能(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)