@einja/dev-cli 0.1.10 → 0.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/file-system.js +1 -1
- package/dist/lib/file-system.js.map +1 -1
- package/package.json +1 -2
- package/scaffolds/cli/preset.yaml +110 -0
- package/scaffolds/example/README.md +35 -0
- package/scaffolds/example/specs/issues/issue999-example-task/design.md +879 -0
- package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/README.md +150 -0
- package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase1/1-1.md +268 -0
- package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase1/1-2.md +179 -0
- package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase1/1-3.md +392 -0
- package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase1/evidence/.gitkeep +0 -0
- package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase2/2-1.md +459 -0
- package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase2/evidence/.gitkeep +0 -0
- package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/scenarios.md +125 -0
- package/scaffolds/example/specs/issues/issue999-example-task/requirements.md +494 -0
- package/scaffolds/example/specs/issues/issue999-example-task/tasks.md +212 -0
- package/scaffolds/instructions/deployment-setup.md +458 -0
- package/scaffolds/instructions/environment-setup.md +509 -0
- package/scaffolds/instructions/local-server-environment-and-worktree.md +539 -0
- package/scaffolds/instructions/task-execute.md +649 -0
- package/scaffolds/instructions/task-vibe-kanban-loop.md +495 -0
- package/scaffolds/memory/archive/.gitkeep +0 -0
- package/scaffolds/memory/decisions.md +35 -0
- package/scaffolds/memory/patterns.md +37 -0
- package/scaffolds/CLAUDE.md.template +0 -386
- /package/{templates → scaffolds/templates}/README.md +0 -0
- /package/{templates → scaffolds/templates}/design-simple.md.template +0 -0
- /package/{templates → scaffolds/templates}/design.md.template +0 -0
- /package/{templates → scaffolds/templates}/qa-test.md.template +0 -0
- /package/{templates → scaffolds/templates}/requirements.md.template +0 -0
|
@@ -0,0 +1,459 @@
|
|
|
1
|
+
# Phase 2-1: 認証API実装 QAテスト結果
|
|
2
|
+
|
|
3
|
+
## テスト対象タスク
|
|
4
|
+
- **タスクID**: 2.1.1~2.1.8
|
|
5
|
+
- **タスク名**: 認証API実装
|
|
6
|
+
- **実装日**: YYYY-MM-DD
|
|
7
|
+
- **テスター**: TBD
|
|
8
|
+
- **最終更新**: YYYY-MM-DD HH:MM
|
|
9
|
+
|
|
10
|
+
## テストサマリー
|
|
11
|
+
| ステータス | 件数 |
|
|
12
|
+
|----------|-----|
|
|
13
|
+
| ✅ PASS | 0 |
|
|
14
|
+
| ❌ FAIL | 0 |
|
|
15
|
+
| ⚠️ PARTIAL | 0 |
|
|
16
|
+
| 🔄 未実施 | 8 |
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## 必須自動テスト結果
|
|
21
|
+
|
|
22
|
+
### 実行コマンド
|
|
23
|
+
```bash
|
|
24
|
+
# 1. ユニットテスト
|
|
25
|
+
pnpm test
|
|
26
|
+
|
|
27
|
+
# 2. E2Eテスト(該当する場合)
|
|
28
|
+
pnpm test:e2e
|
|
29
|
+
|
|
30
|
+
# 3. Lintチェック
|
|
31
|
+
pnpm lint
|
|
32
|
+
|
|
33
|
+
# 4. ビルドチェック
|
|
34
|
+
pnpm build
|
|
35
|
+
|
|
36
|
+
# 5. 型チェック(TypeScript)
|
|
37
|
+
pnpm typecheck
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### 結果
|
|
41
|
+
| テスト項目 | ステータス | 備考 |
|
|
42
|
+
|----------|----------|------|
|
|
43
|
+
| ユニットテスト | 🔄 | - |
|
|
44
|
+
| E2Eテスト | 🔄 | - |
|
|
45
|
+
| Lintチェック | 🔄 | - |
|
|
46
|
+
| ビルドチェック | 🔄 | - |
|
|
47
|
+
| 型チェック | 🔄 | - |
|
|
48
|
+
|
|
49
|
+
**重要**: 上記のいずれか1つでも失敗した場合、全体ステータスは**❌ FAIL**となります。
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## タスク2.1.1: マジックリンク送信API実装
|
|
54
|
+
|
|
55
|
+
### 受け入れ条件
|
|
56
|
+
- AC4.1: Given 有効なメールアドレス When マジックリンク送信API呼び出し Then 成功レスポンスが返る
|
|
57
|
+
- AC4.2: Given 無効なメールアドレス When マジックリンク送信API呼び出し Then バリデーションエラーが返る
|
|
58
|
+
- AC4.3: Given レート制限超過 When マジックリンク送信API呼び出し Then 429エラーが返る
|
|
59
|
+
|
|
60
|
+
### テストシナリオ
|
|
61
|
+
|
|
62
|
+
#### API統合テスト
|
|
63
|
+
|
|
64
|
+
| No | エンドポイント | メソッド | リクエストボディ | 期待されるレスポンス | 結果 | 備考 |
|
|
65
|
+
|----|-------------|---------|---------------|------------------|------|------|
|
|
66
|
+
| 1 | /api/auth/magic-link | POST | {"email":"test@example.com"} | 200, {"success":true,"message":"..."} | - | - |
|
|
67
|
+
| 2 | /api/auth/magic-link | POST | {"email":"invalid-email"} | 400, バリデーションエラー | - | - |
|
|
68
|
+
| 3 | /api/auth/magic-link | POST | {} | 400, 必須フィールドエラー | - | - |
|
|
69
|
+
| 4 | /api/auth/magic-link | POST | 同一メールで1分以内に再送 | 429, レート制限エラー | - | - |
|
|
70
|
+
| 5 | /api/auth/magic-link | POST | 同一IPから1分以内に4回目 | 429, レート制限エラー | - | - |
|
|
71
|
+
|
|
72
|
+
### 全体ステータス: 🔄 未実施
|
|
73
|
+
|
|
74
|
+
#### 主な問題点
|
|
75
|
+
- (実施後に記載)
|
|
76
|
+
|
|
77
|
+
#### 対応策
|
|
78
|
+
- (実施後に記載)
|
|
79
|
+
|
|
80
|
+
#### エビデンス
|
|
81
|
+
- ログファイル: `qa-tests/phase2/evidence/2-1-1-api.log`
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## タスク2.1.2: トークン検証API実装
|
|
86
|
+
|
|
87
|
+
### 受け入れ条件
|
|
88
|
+
- AC4.4: Given 有効なトークン When 検証API呼び出し Then セッションが作成される
|
|
89
|
+
- AC4.5: Given 期限切れトークン When 検証API呼び出し Then TOKEN_EXPIREDエラーが返る
|
|
90
|
+
- AC4.6: Given 使用済みトークン When 検証API呼び出し Then TOKEN_USEDエラーが返る
|
|
91
|
+
|
|
92
|
+
### テストシナリオ
|
|
93
|
+
|
|
94
|
+
#### API検証ロジックテスト
|
|
95
|
+
|
|
96
|
+
| No | テストシナリオ | トークン状態 | 期待されるレスポンス | 結果 | 備考 |
|
|
97
|
+
|----|-------------|-----------|------------------|------|------|
|
|
98
|
+
| 1 | 有効なトークンで検証 | 有効、未使用 | 200, セッション作成成功 | - | - |
|
|
99
|
+
| 2 | 期限切れトークンで検証 | 期限切れ | 401, TOKEN_EXPIRED | - | - |
|
|
100
|
+
| 3 | 使用済みトークンで検証 | 使用済み | 401, TOKEN_USED | - | - |
|
|
101
|
+
| 4 | 無効なトークンで検証 | 存在しない | 401, TOKEN_INVALID | - | - |
|
|
102
|
+
| 5 | トークンなしで検証 | - | 400, バリデーションエラー | - | - |
|
|
103
|
+
|
|
104
|
+
### 全体ステータス: 🔄 未実施
|
|
105
|
+
|
|
106
|
+
#### 主な問題点
|
|
107
|
+
- (実施後に記載)
|
|
108
|
+
|
|
109
|
+
#### 対応策
|
|
110
|
+
- (実施後に記載)
|
|
111
|
+
|
|
112
|
+
#### エビデンス
|
|
113
|
+
- ログファイル: `qa-tests/phase2/evidence/2-1-2-verify.log`
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## タスク2.1.3: トークン検証画面コンポーネント実装
|
|
118
|
+
|
|
119
|
+
### 受け入れ条件
|
|
120
|
+
- AC4.7: Given マジックリンククリック When 検証画面表示 Then ローディングスピナーが表示される
|
|
121
|
+
- AC4.8: Given トークン検証成功 When 検証完了 Then ダッシュボードにリダイレクトされる
|
|
122
|
+
|
|
123
|
+
### テストシナリオ
|
|
124
|
+
|
|
125
|
+
#### コンポーネント単体テスト
|
|
126
|
+
|
|
127
|
+
| No | テスト項目 | 期待値 | 結果 | 備考 |
|
|
128
|
+
|----|---------|--------|------|------|
|
|
129
|
+
| 1 | TokenVerifyingコンポーネントがレンダリングされる | コンポーネントがDOMに存在 | - | - |
|
|
130
|
+
| 2 | ローディングスピナーが表示される | スピナー要素が存在 | - | - |
|
|
131
|
+
| 3 | 検証中メッセージが表示される | 「認証しています...」メッセージ表示 | - | - |
|
|
132
|
+
| 4 | マウント時に自動検証が開始される | API呼び出しが実行される | - | - |
|
|
133
|
+
| 5 | 検証成功時に自動リダイレクトされる | 3秒以内にダッシュボードへ遷移 | - | - |
|
|
134
|
+
|
|
135
|
+
### 全体ステータス: 🔄 未実施
|
|
136
|
+
|
|
137
|
+
#### 主な問題点
|
|
138
|
+
- (実施後に記載)
|
|
139
|
+
|
|
140
|
+
#### 対応策
|
|
141
|
+
- (実施後に記載)
|
|
142
|
+
|
|
143
|
+
#### エビデンス
|
|
144
|
+
- スクリーンショット: `qa-tests/phase2/evidence/2-1-3-verifying.png`
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## タスク2.1.4: エラー画面コンポーネント実装
|
|
149
|
+
|
|
150
|
+
### 受け入れ条件
|
|
151
|
+
- AC4.9: Given トークン期限切れ When エラー画面表示 Then 再送信ボタンが表示される
|
|
152
|
+
- AC4.10: Given 無効なトークン When エラー画面表示 Then ログインページに戻るボタンが表示される
|
|
153
|
+
|
|
154
|
+
### テストシナリオ
|
|
155
|
+
|
|
156
|
+
#### エラーパターンテスト
|
|
157
|
+
|
|
158
|
+
| No | エラー種別 | 期待される表示内容 | 結果 | 備考 |
|
|
159
|
+
|----|---------|----------------|------|------|
|
|
160
|
+
| 1 | TOKEN_EXPIRED | 「リンクの有効期限が切れています」タイトル、「新しいリンクを送信」ボタン | - | - |
|
|
161
|
+
| 2 | TOKEN_USED | 「このリンクは既に使用されています」タイトル、「新しいリンクを送信」ボタン | - | - |
|
|
162
|
+
| 3 | TOKEN_INVALID | 「無効なリンクです」タイトル、「ログインページに戻る」ボタン | - | - |
|
|
163
|
+
| 4 | RATE_LIMIT | 「リクエスト回数の上限に達しました」タイトル、リトライ可能時刻表示 | - | - |
|
|
164
|
+
|
|
165
|
+
### 全体ステータス: 🔄 未実施
|
|
166
|
+
|
|
167
|
+
#### 主な問題点
|
|
168
|
+
- (実施後に記載)
|
|
169
|
+
|
|
170
|
+
#### 対応策
|
|
171
|
+
- (実施後に記載)
|
|
172
|
+
|
|
173
|
+
#### エビデンス
|
|
174
|
+
- スクリーンショット: `qa-tests/phase2/evidence/2-1-4-error.png`
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## タスク2.1.5: 認証フロー統合実装
|
|
179
|
+
|
|
180
|
+
### 受け入れ条件
|
|
181
|
+
- AC4.11: Given ログイン画面 When メール送信成功 Then 確認画面に遷移する
|
|
182
|
+
- AC4.12: Given マジックリンク When クリック Then 認証が完了しダッシュボードに遷移する
|
|
183
|
+
|
|
184
|
+
### テストシナリオ
|
|
185
|
+
|
|
186
|
+
#### 統合テスト
|
|
187
|
+
|
|
188
|
+
| No | テストシナリオ | 期待される動作 | 結果 | 備考 |
|
|
189
|
+
|----|-------------|-------------|------|------|
|
|
190
|
+
| 1 | ログイン画面からメール送信まで | API呼び出し成功、確認画面遷移 | - | - |
|
|
191
|
+
| 2 | マジックリンククリックから認証まで | トークン検証、ダッシュボード遷移 | - | - |
|
|
192
|
+
| 3 | エラー発生時の画面遷移 | 適切なエラー画面表示 | - | - |
|
|
193
|
+
| 4 | エラーからのリカバリー | ログイン画面に戻り再試行可能 | - | - |
|
|
194
|
+
|
|
195
|
+
### 全体ステータス: 🔄 未実施
|
|
196
|
+
|
|
197
|
+
#### 主な問題点
|
|
198
|
+
- (実施後に記載)
|
|
199
|
+
|
|
200
|
+
#### 対応策
|
|
201
|
+
- (実施後に記載)
|
|
202
|
+
|
|
203
|
+
#### エビデンス
|
|
204
|
+
- ログファイル: `qa-tests/phase2/evidence/2-1-5-integration.log`
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## タスク2.1.6: UIインタラクションテスト作成・実行
|
|
209
|
+
|
|
210
|
+
### 受け入れ条件
|
|
211
|
+
- AC4.13: Given UIインタラクションテスト When 全画面のインタラクションを検証 Then 期待通りの反応が得られる
|
|
212
|
+
|
|
213
|
+
### テストシナリオ
|
|
214
|
+
|
|
215
|
+
#### トークン検証画面のインタラクションテスト
|
|
216
|
+
|
|
217
|
+
| No | テストシナリオ | 操作 | 期待される反応 | 結果 | 備考 |
|
|
218
|
+
|----|--------------|------|-------------|------|------|
|
|
219
|
+
| 1 | 初期表示 | マジックリンクをクリック | ローディングスピナー表示、「認証しています...」メッセージ表示 | - | - |
|
|
220
|
+
| 2 | 検証処理実行 | 画面表示直後 | 自動的にトークン検証API呼び出し | - | - |
|
|
221
|
+
| 3 | ローディング状態(短時間) | 検証開始後2秒以内 | スピナーとメッセージのみ表示 | - | - |
|
|
222
|
+
| 4 | プログレスバー表示 | 検証開始後3秒以上経過 | プログレスバー追加表示 | - | - |
|
|
223
|
+
| 5 | 検証成功 | トークンが有効 | メッセージが「ログインしています...」に変更 | - | - |
|
|
224
|
+
| 6 | 自動リダイレクト | 検証成功後 | 3秒以内にダッシュボードへ自動リダイレクト | - | - |
|
|
225
|
+
| 7 | 戻るボタン防止 | 検証中にブラウザ戻るボタン | 警告表示または無効化 | - | - |
|
|
226
|
+
|
|
227
|
+
### エラー画面のインタラクションテスト
|
|
228
|
+
|
|
229
|
+
#### トークン期限切れエラー
|
|
230
|
+
|
|
231
|
+
| No | テストシナリオ | 操作 | 期待される反応 | 結果 | 備考 |
|
|
232
|
+
|----|--------------|------|-------------|------|------|
|
|
233
|
+
| 1 | エラー画面表示 | 期限切れトークンで検証 | 「リンクの有効期限が切れています」タイトル表示 | - | - |
|
|
234
|
+
| 2 | エラーメッセージ | エラー画面表示 | 詳細メッセージと対処法表示 | - | - |
|
|
235
|
+
| 3 | リカバリーアクション | 「新しいリンクを送信」ボタン表示 | ボタンがクリック可能状態 | - | - |
|
|
236
|
+
| 4 | ボタンクリック | 「新しいリンクを送信」をクリック | ログイン画面に遷移 | - | - |
|
|
237
|
+
| 5 | メールアドレスプリフィル | ログイン画面遷移後 | 前回使用したメールアドレスがフィールドにプリフィル | - | - |
|
|
238
|
+
|
|
239
|
+
#### トークン使用済みエラー
|
|
240
|
+
|
|
241
|
+
| No | テストシナリオ | 操作 | 期待される反応 | 結果 | 備考 |
|
|
242
|
+
|----|--------------|------|-------------|------|------|
|
|
243
|
+
| 1 | エラー画面表示 | 使用済みトークンで検証 | 「このリンクは既に使用されています」タイトル表示 | - | - |
|
|
244
|
+
| 2 | リカバリーアクション | ボタン表示 | 「新しいリンクを送信」ボタン表示 | - | - |
|
|
245
|
+
| 3 | ボタンクリック | ボタンをクリック | ログイン画面に遷移、メールアドレスプリフィル | - | - |
|
|
246
|
+
|
|
247
|
+
#### 無効なトークンエラー
|
|
248
|
+
|
|
249
|
+
| No | テストシナリオ | 操作 | 期待される反応 | 結果 | 備考 |
|
|
250
|
+
|----|--------------|------|-------------|------|------|
|
|
251
|
+
| 1 | エラー画面表示 | 無効なトークンで検証 | 「無効なリンクです」タイトル表示 | - | - |
|
|
252
|
+
| 2 | リカバリーアクション | ボタン表示 | 「ログインページに戻る」ボタン表示 | - | - |
|
|
253
|
+
| 3 | ボタンクリック | ボタンをクリック | ログイン画面に遷移(プリフィルなし) | - | - |
|
|
254
|
+
|
|
255
|
+
#### レート制限エラー
|
|
256
|
+
|
|
257
|
+
| No | テストシナリオ | 操作 | 期待される反応 | 結果 | 備考 |
|
|
258
|
+
|----|--------------|------|-------------|------|------|
|
|
259
|
+
| 1 | エラー画面表示 | レート制限超過 | 「リクエスト回数の上限に達しました」タイトル表示 | - | - |
|
|
260
|
+
| 2 | リトライ可能時刻表示 | エラー画面表示 | 「XX:XX に再度お試しください」メッセージ表示 | - | - |
|
|
261
|
+
| 3 | リカバリーアクション | ボタン表示 | リカバリーアクションボタンなし(時間経過待ち) | - | - |
|
|
262
|
+
| 4 | ホームリンク | リンク表示 | 「ホームに戻る」リンク表示 | - | - |
|
|
263
|
+
|
|
264
|
+
### 全体ステータス: 🔄 未実施
|
|
265
|
+
|
|
266
|
+
#### 主な問題点
|
|
267
|
+
- (実施後に記載)
|
|
268
|
+
|
|
269
|
+
#### 対応策
|
|
270
|
+
- (実施後に記載)
|
|
271
|
+
|
|
272
|
+
#### エビデンス
|
|
273
|
+
- スクリーンショット: `qa-tests/phase2/evidence/2-1-6-interaction/`
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
## タスク2.1.7: 視覚的回帰テスト作成・実行
|
|
278
|
+
|
|
279
|
+
### 受け入れ条件
|
|
280
|
+
- AC4.14: Given 視覚的回帰テスト When 全画面のスクリーンショット取得 Then ベースラインと差分がない
|
|
281
|
+
|
|
282
|
+
### テストシナリオ
|
|
283
|
+
|
|
284
|
+
#### ログイン画面
|
|
285
|
+
|
|
286
|
+
| No | 状態 | スクリーンショットパス | ベースライン | 差分検出 | 結果 | 備考 |
|
|
287
|
+
|----|------|---------------------|------------|---------|------|------|
|
|
288
|
+
| 1 | デフォルト | evidence/login-default.png | - | - | - | 初期表示状態 |
|
|
289
|
+
| 2 | フォーカス状態 | evidence/login-focused.png | - | - | - | メールフィールドフォーカス時 |
|
|
290
|
+
| 3 | バリデーションエラー(空欄) | evidence/login-error-empty.png | - | - | - | 空欄送信時のエラー |
|
|
291
|
+
| 4 | バリデーションエラー(形式) | evidence/login-error-invalid.png | - | - | - | 不正形式メールのエラー |
|
|
292
|
+
| 5 | ローディング状態(短時間) | evidence/login-loading-short.png | - | - | - | 送信中、スピナーのみ |
|
|
293
|
+
| 6 | ローディング状態(長時間) | evidence/login-loading-long.png | - | - | - | 送信中、追加メッセージ表示 |
|
|
294
|
+
|
|
295
|
+
### メール送信確認画面
|
|
296
|
+
|
|
297
|
+
| No | 状態 | スクリーンショットパス | ベースライン | 差分検出 | 結果 | 備考 |
|
|
298
|
+
|----|------|---------------------|------------|---------|------|------|
|
|
299
|
+
| 1 | 初期表示 | evidence/email-sent-initial.png | - | - | - | カウントダウン開始状態 |
|
|
300
|
+
| 2 | カウントダウン中 | evidence/email-sent-countdown.png | - | - | - | カウントダウン表示中 |
|
|
301
|
+
| 3 | 再送信可能状態 | evidence/email-sent-resendable.png | - | - | - | カウントダウン完了後 |
|
|
302
|
+
| 4 | 再送信中 | evidence/email-sent-resending.png | - | - | - | 再送信ボタンクリック後 |
|
|
303
|
+
|
|
304
|
+
### トークン検証画面
|
|
305
|
+
|
|
306
|
+
| No | 状態 | スクリーンショットパス | ベースライン | 差分検出 | 結果 | 備考 |
|
|
307
|
+
|----|------|---------------------|------------|---------|------|------|
|
|
308
|
+
| 1 | 検証中(初期) | evidence/verifying-initial.png | - | - | - | スピナーとメッセージのみ |
|
|
309
|
+
| 2 | 検証中(プログレスバー) | evidence/verifying-progress.png | - | - | - | 3秒経過後、プログレスバー表示 |
|
|
310
|
+
| 3 | 検証成功 | evidence/verifying-success.png | - | - | - | 成功メッセージ表示 |
|
|
311
|
+
|
|
312
|
+
### エラー画面
|
|
313
|
+
|
|
314
|
+
| No | エラー種別 | スクリーンショットパス | ベースライン | 差分検出 | 結果 | 備考 |
|
|
315
|
+
|----|---------|---------------------|------------|---------|------|------|
|
|
316
|
+
| 1 | トークン期限切れ | evidence/error-expired.png | - | - | - | 期限切れエラー画面 |
|
|
317
|
+
| 2 | トークン使用済み | evidence/error-used.png | - | - | - | 使用済みエラー画面 |
|
|
318
|
+
| 3 | 無効なトークン | evidence/error-invalid.png | - | - | - | 無効トークンエラー画面 |
|
|
319
|
+
| 4 | レート制限 | evidence/error-ratelimit.png | - | - | - | レート制限エラー画面 |
|
|
320
|
+
|
|
321
|
+
### スクリーンショット取得手順
|
|
322
|
+
|
|
323
|
+
#### 環境準備
|
|
324
|
+
1. ローカル開発サーバーを起動
|
|
325
|
+
2. テスト用データベースをセットアップ
|
|
326
|
+
3. テスト用メールアカウントを準備
|
|
327
|
+
|
|
328
|
+
#### Playwright MCPを使用した自動取得例
|
|
329
|
+
```javascript
|
|
330
|
+
// ログイン画面 - デフォルト
|
|
331
|
+
mcp_playwright.navigate('http://localhost:3000/auth/login')
|
|
332
|
+
mcp_playwright.screenshot({
|
|
333
|
+
filename: 'qa-tests/phase2/evidence/login-default.png'
|
|
334
|
+
})
|
|
335
|
+
|
|
336
|
+
// ログイン画面 - フォーカス状態
|
|
337
|
+
mcp_playwright.click({
|
|
338
|
+
element: 'メールアドレスフィールド',
|
|
339
|
+
ref: '[data-testid="email-input"]'
|
|
340
|
+
})
|
|
341
|
+
mcp_playwright.screenshot({
|
|
342
|
+
filename: 'qa-tests/phase2/evidence/login-focused.png'
|
|
343
|
+
})
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
### ベースライン管理
|
|
347
|
+
|
|
348
|
+
#### ベースライン作成
|
|
349
|
+
- 初回テスト時に全スクリーンショットを取得
|
|
350
|
+
- `evidence/` ディレクトリに保存
|
|
351
|
+
- Gitにコミットしてベースラインとして管理
|
|
352
|
+
|
|
353
|
+
#### 差分検出方法
|
|
354
|
+
- 実装変更後、同じ手順でスクリーンショットを再取得
|
|
355
|
+
- ベースライン画像と比較
|
|
356
|
+
- 視覚的差分がある場合は、意図的な変更か確認
|
|
357
|
+
|
|
358
|
+
#### ベースライン更新基準
|
|
359
|
+
- 意図的なデザイン変更時
|
|
360
|
+
- レイアウト調整時
|
|
361
|
+
- コンポーネントの視覚的改善時
|
|
362
|
+
|
|
363
|
+
### 全体ステータス: 🔄 未実施
|
|
364
|
+
|
|
365
|
+
#### 主な問題点
|
|
366
|
+
- (実施後に記載)
|
|
367
|
+
|
|
368
|
+
#### 対応策
|
|
369
|
+
- (実施後に記載)
|
|
370
|
+
|
|
371
|
+
#### エビデンス
|
|
372
|
+
- スクリーンショット: `qa-tests/phase2/evidence/2-1-7-visual/`
|
|
373
|
+
- ベースライン画像: `qa-tests/phase2/evidence/baseline/`
|
|
374
|
+
|
|
375
|
+
---
|
|
376
|
+
|
|
377
|
+
## タスク2.1.8: 要件4シナリオテスト作成・実行
|
|
378
|
+
|
|
379
|
+
### 受け入れ条件
|
|
380
|
+
- AC4.15: Given E2Eテスト When 全認証フローをテスト Then 全シナリオがパスする
|
|
381
|
+
|
|
382
|
+
### テストシナリオ
|
|
383
|
+
|
|
384
|
+
#### End-to-End認証フローテスト
|
|
385
|
+
|
|
386
|
+
| No | テストシナリオ | 期待される結果 | 結果 | 備考 |
|
|
387
|
+
|----|-------------|-------------|------|------|
|
|
388
|
+
| 1 | 新規ユーザーの完全な認証フロー | ログイン画面→メール送信→トークン検証→ダッシュボード | - | - |
|
|
389
|
+
| 2 | メールアドレス入力からマジックリンク受信 | 15分以内に有効なリンク受信 | - | - |
|
|
390
|
+
| 3 | マジックリンククリックから認証完了 | 3秒以内にダッシュボード表示 | - | - |
|
|
391
|
+
| 4 | セッション確立の確認 | ログイン状態が維持される | - | - |
|
|
392
|
+
|
|
393
|
+
### エラーケーステスト
|
|
394
|
+
|
|
395
|
+
| No | テストシナリオ | 期待される結果 | 結果 | 備考 |
|
|
396
|
+
|----|-------------|-------------|------|------|
|
|
397
|
+
| 1 | 期限切れトークンでアクセス | エラー画面表示、再送信可能 | - | - |
|
|
398
|
+
| 2 | 使用済みトークンでアクセス | エラー画面表示、再送信可能 | - | - |
|
|
399
|
+
| 3 | 無効なトークンでアクセス | エラー画面表示、ログイン画面へ戻る | - | - |
|
|
400
|
+
| 4 | レート制限超過 | エラー画面表示、待機時間表示 | - | - |
|
|
401
|
+
|
|
402
|
+
### タイムアウトテスト
|
|
403
|
+
|
|
404
|
+
| No | テストシナリオ | 期待される動作 | 結果 | 備考 |
|
|
405
|
+
|----|-------------|-------------|------|------|
|
|
406
|
+
| 1 | メール送信API 3秒以上 | 追加メッセージ表示 | - | - |
|
|
407
|
+
| 2 | トークン検証API 3秒以上 | プログレスバー表示 | - | - |
|
|
408
|
+
| 3 | API呼び出しタイムアウト | 適切なエラー表示 | - | - |
|
|
409
|
+
|
|
410
|
+
### 全体ステータス: 🔄 未実施
|
|
411
|
+
|
|
412
|
+
#### 主な問題点
|
|
413
|
+
- (実施後に記載)
|
|
414
|
+
|
|
415
|
+
#### 対応策
|
|
416
|
+
- (実施後に記載)
|
|
417
|
+
|
|
418
|
+
#### エビデンス
|
|
419
|
+
- ログファイル: `qa-tests/phase2/evidence/2-1-8-e2e.log`
|
|
420
|
+
|
|
421
|
+
---
|
|
422
|
+
|
|
423
|
+
## 統合テスト結果サマリー
|
|
424
|
+
|
|
425
|
+
### フェーズ2-1全体結果
|
|
426
|
+
- **全体ステータス**: 🔄 未実施
|
|
427
|
+
- **完了タスク**: 0/8
|
|
428
|
+
- **テスト合格率**: -
|
|
429
|
+
|
|
430
|
+
### 修正が必要な項目
|
|
431
|
+
(実施後に記載)
|
|
432
|
+
|
|
433
|
+
### 次フェーズへの引き継ぎ事項
|
|
434
|
+
1. マジックリンク認証フローが正常に動作していること
|
|
435
|
+
2. 全エラーケースが適切に処理されること
|
|
436
|
+
3. セッション管理の基盤が確立されていること
|
|
437
|
+
|
|
438
|
+
### 改善提案
|
|
439
|
+
(実施後に記載)
|
|
440
|
+
|
|
441
|
+
---
|
|
442
|
+
|
|
443
|
+
## 報告と対応
|
|
444
|
+
|
|
445
|
+
### 失敗原因分類
|
|
446
|
+
<!-- 該当する分類にチェック -->
|
|
447
|
+
- [ ] **A: 実装ミス** → task-executerへ差し戻し
|
|
448
|
+
- [ ] **B: 要件齟齬** → requirements.md修正 → task-executerへ差し戻し
|
|
449
|
+
- [ ] **C: 設計不備** → design.md修正 → task-executerへ差し戻し
|
|
450
|
+
- [ ] **D: 環境問題** → qa再実行
|
|
451
|
+
|
|
452
|
+
### task-executerへの差し戻し(該当する場合)
|
|
453
|
+
(実施後に記載)
|
|
454
|
+
|
|
455
|
+
### 修正優先度
|
|
456
|
+
(実施後に記載)
|
|
457
|
+
|
|
458
|
+
### 回避策(該当する場合)
|
|
459
|
+
(実施後に記載)
|
package/scaffolds/example/specs/issues/issue999-example-task/qa-tests/phase2/evidence/.gitkeep
ADDED
|
File without changes
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# シナリオテスト
|
|
2
|
+
|
|
3
|
+
## 概要
|
|
4
|
+
このファイルは、複数タスクをまたぐ継続操作のシナリオテストを定義します。
|
|
5
|
+
各タスク完了後に、該当するシナリオテストを実行してください。
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## シナリオ1: マジックリンク認証フロー
|
|
10
|
+
|
|
11
|
+
### 目的
|
|
12
|
+
ユーザーがメールアドレスを入力してマジックリンクをリクエストし、メール内のリンクをクリックしてログイン完了までの一連のフローを検証する。
|
|
13
|
+
|
|
14
|
+
### 関連
|
|
15
|
+
- **受け入れ条件**: AC1.1, AC1.2, AC1.3, AC1.4
|
|
16
|
+
- **関連タスク**: 1.1.1, 1.1.2, 1.1.3, 2.1.1
|
|
17
|
+
|
|
18
|
+
### 実施タイミング
|
|
19
|
+
- **タスク1.1.3完了後**: Step 1-4まで(部分実行:API認証まで)
|
|
20
|
+
- **タスク2.1.5完了後**: 全Step(フル実行:UI実装完了)
|
|
21
|
+
- **タスク2.1.8完了後**: 全Step(リグレッション:Phase 2完了確認)
|
|
22
|
+
|
|
23
|
+
### テスト手順
|
|
24
|
+
|
|
25
|
+
| Step | 操作 | 確認項目 | 期待値 | 結果 |
|
|
26
|
+
|------|------|---------|--------|------|
|
|
27
|
+
| 1 | ログイン画面に移動 | 画面が表示される | メールアドレス入力フォームが表示される | - |
|
|
28
|
+
| 2 | メールアドレス入力: test@example.com | - | - | - |
|
|
29
|
+
| 3 | 送信ボタンをクリック | ローディング状態になる | ボタン無効化、スピナー表示 | - |
|
|
30
|
+
| 4 | - | API呼び出しが成功 | メール送信確認画面に遷移 | - |
|
|
31
|
+
| 5 | - | 送信先アドレスが表示される | test@example.comが表示 | - |
|
|
32
|
+
| 6 | 受信したメールのリンクをクリック | トークン検証画面に遷移 | ローディングスピナー表示 | - |
|
|
33
|
+
| 7 | - | 認証処理が完了 | ダッシュボードにリダイレクト | - |
|
|
34
|
+
| 8 | - | ログイン状態になる | ユーザー名またはアバターが表示される | - |
|
|
35
|
+
|
|
36
|
+
### 実行ログ
|
|
37
|
+
(実施後に記載)
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## シナリオ2: プロフィール取得・更新フロー
|
|
42
|
+
|
|
43
|
+
### 目的
|
|
44
|
+
認証済みユーザーが自身のプロフィールを取得し、更新できることを検証する。
|
|
45
|
+
|
|
46
|
+
### 関連
|
|
47
|
+
- **受け入れ条件**: AC2.1, AC2.2
|
|
48
|
+
- **関連タスク**: 1.2.1, 1.2.2
|
|
49
|
+
|
|
50
|
+
### 実施タイミング
|
|
51
|
+
- **タスク1.2.1完了後**: Step 1-2まで(部分実行:取得APIのみ)
|
|
52
|
+
- **タスク1.2.2完了後**: 全Step(フル実行:プロフィールAPI実装完了)
|
|
53
|
+
- **タスク2.1.8完了後**: 全Step(リグレッション:認証UI変更の影響確認)
|
|
54
|
+
|
|
55
|
+
### テスト手順
|
|
56
|
+
|
|
57
|
+
| Step | 操作 | 確認項目 | 期待値 | 結果 |
|
|
58
|
+
|------|------|---------|--------|------|
|
|
59
|
+
| 1 | シナリオ1を実行してログイン状態にする | ログイン済み | ダッシュボードが表示される | - |
|
|
60
|
+
| 2 | GET /api/users/me を呼び出す | プロフィール取得 | 現在のプロフィール情報がJSON形式で返る | - |
|
|
61
|
+
| 3 | PUT /api/users/profile でbioを更新 | 更新成功 | 200 OK、更新後のデータが返る | - |
|
|
62
|
+
| 4 | GET /api/users/me を再度呼び出す | 更新が反映されている | bioフィールドが新しい値になっている | - |
|
|
63
|
+
|
|
64
|
+
### 実行ログ
|
|
65
|
+
(実施後に記載)
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## シナリオ3: エラーハンドリングフロー
|
|
70
|
+
|
|
71
|
+
### 目的
|
|
72
|
+
各種エラーケース(無効なメールアドレス、期限切れトークン、使用済みトークン等)が適切にハンドリングされることを検証する。
|
|
73
|
+
|
|
74
|
+
### 関連
|
|
75
|
+
- **受け入れ条件**: AC1.2, AC1.3
|
|
76
|
+
- **関連タスク**: 1.1.2, 1.1.3, 2.1.1
|
|
77
|
+
|
|
78
|
+
### 実施タイミング
|
|
79
|
+
- **タスク1.1.3完了後**: Step 1-4まで(部分実行:APIエラーハンドリング)
|
|
80
|
+
- **タスク2.1.4完了後**: 全Step(フル実行:UIエラー表示含む)
|
|
81
|
+
- **タスク2.1.8完了後**: 全Step(リグレッション:Phase 2完了確認)
|
|
82
|
+
|
|
83
|
+
### テスト手順
|
|
84
|
+
|
|
85
|
+
| Step | 操作 | 確認項目 | 期待値 | 結果 |
|
|
86
|
+
|------|------|---------|--------|------|
|
|
87
|
+
| 1 | ログイン画面で空欄のまま送信 | バリデーションエラー | 「メールアドレスを入力してください」表示 | - |
|
|
88
|
+
| 2 | 不正な形式(test@)で送信 | バリデーションエラー | 「有効なメールアドレスを入力してください」表示 | - |
|
|
89
|
+
| 3 | 有効なメールで送信後、1分以内に再送信 | レート制限エラー | 429エラー、待機時間が表示される | - |
|
|
90
|
+
| 4 | 期限切れトークンでアクセス | 期限切れエラー | 「リンクの有効期限が切れています」表示 | - |
|
|
91
|
+
| 5 | 使用済みトークンで再アクセス | 使用済みエラー | 「このリンクは既に使用されています」表示 | - |
|
|
92
|
+
| 6 | 無効なトークンでアクセス | 無効エラー | 「無効なリンクです」表示 | - |
|
|
93
|
+
|
|
94
|
+
### 実行ログ
|
|
95
|
+
(実施後に記載)
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## シナリオ4: セキュリティ通知フロー
|
|
100
|
+
|
|
101
|
+
### 目的
|
|
102
|
+
新しいデバイスからログインした際にセキュリティ通知が送信され、セッション無効化ができることを検証する。
|
|
103
|
+
|
|
104
|
+
### 関連
|
|
105
|
+
- **受け入れ条件**: AC3.1, AC3.2(Story 3に対応)
|
|
106
|
+
- **関連タスク**: 3.1.1, 3.1.2, 3.1.3
|
|
107
|
+
|
|
108
|
+
### 実施タイミング
|
|
109
|
+
- **タスク3.1.2完了後**: Step 1-3まで(部分実行:通知送信まで)
|
|
110
|
+
- **タスク3.1.3完了後**: 全Step(フル実行:セッション無効化含む)
|
|
111
|
+
- **タスク3.1.5完了後**: 全Step(リグレッション:Phase 3完了確認)
|
|
112
|
+
|
|
113
|
+
### テスト手順
|
|
114
|
+
|
|
115
|
+
| Step | 操作 | 確認項目 | 期待値 | 結果 |
|
|
116
|
+
|------|------|---------|--------|------|
|
|
117
|
+
| 1 | 新しいデバイス(別ブラウザ)でログイン | ログイン成功 | ダッシュボードに遷移 | - |
|
|
118
|
+
| 2 | - | セキュリティ通知メール受信 | 新規デバイスログインの通知メールが届く | - |
|
|
119
|
+
| 3 | ダッシュボード確認 | 通知バナー表示 | 「新しいデバイスからのログインを検出しました」 | - |
|
|
120
|
+
| 4 | メール内「セッション無効化」リンクをクリック | 確認画面表示 | 「このセッションを無効化しますか?」表示 | - |
|
|
121
|
+
| 5 | 「無効化する」ボタンをクリック | セッション無効化 | 「セッションを無効化しました」表示 | - |
|
|
122
|
+
| 6 | 無効化されたデバイスでページをリロード | ログアウト状態 | ログイン画面にリダイレクト | - |
|
|
123
|
+
|
|
124
|
+
### 実行ログ
|
|
125
|
+
(実施後に記載)
|