---
document_type: "test_doc"
service: "MOMENTRY_CORE"
title: "Playground 功能測試計畫"
date: "2026-03-31"
version: "V1.0"
status: "active"
owner: "Warren"
created_by: "OpenCode"
tags:
  - "功能測試計畫"
  - "playground"
ai_query_hints:
  - "查詢 Playground 功能測試計畫 的內容"
  - "Playground 功能測試計畫 的主要目的是什麼？"
  - "如何操作或實施 Playground 功能測試計畫？"
---

# Playground 功能測試計畫

| 項目 | 內容 |
|------|------|
| 建立者 | Warren |
| 建立時間 | 2026-03-31 |
| 文件版本 | V1.0 |
| 測試類型 | 功能測試、隔離測試、整合測試 |

---

## 版本歷史

| 版本 | 日期 | 目的 | 操作人 |
|------|------|------|--------|
| V1.0 | 2026-03-31 | 創建測試計畫 | Warren |

---

## 測試目標

1. **功能測試**：驗證 Playground 基本功能正常運作
2. **隔離測試**：確保 Development 與 Production 數據完全隔離
3. **整合測試**：驗證完整視頻處理流程在 Playground 環境中正常運行

---

## 測試環境

### 硬體/軟體需求

| 項目 | 規格 |
|------|------|
| 測試影片 | 1 個短視頻（< 1 分鐘）|
| PostgreSQL | 已啟動，Schema `dev` 已創建 |
| MongoDB | 已啟動 |
| Qdrant | 已啟動 |
| Redis | 已啟動 |

### 環境配置

| 服務 | Production | Playground |
|------|-----------|------------|
| Port | 3002 | 3003 |
| PostgreSQL Schema | `public` | `dev` |
| MongoDB Database | `momentry` | `momentry_dev` |
| Qdrant Collection | `momentry_rule1` | `momentry_dev_rule1` |
| Redis Prefix | `momentry:` | `momentry_dev:` |
| Output Directory | `/output` | `/output_dev` |

---

## 測試案例

### Phase 1: 連接性測試

#### TC-01: PostgreSQL Schema 隔離驗證

| 項目 | 內容 |
|------|------|
| 測試目標 | 確認 Playground 使用 `dev` schema |
| 前置條件 | PostgreSQL `dev` schema 已創建 |
| 測試步驟 | 1. 啟動 Playground Server (port 3003)<br>2. 執行 SQL: `SELECT current_schema()`<br>3. 檢查結果為 `dev` |
| 預期結果 | current_schema = `dev` |
| 驗證方式 | API 或直接查詢 |

```bash
# 測試指令
psql "postgres://accusys:accusys@localhost:5432/momentry" -c "SET search_path TO dev; SELECT current_schema();"
```

#### TC-02: MongoDB Database 隔離驗證

| 項目 | 內容 |
|------|------|
| 測試目標 | 確認 Playground 使用 `momentry_dev` database |
| 前置條件 | MongoDB `momentry_dev` database 已創建 |
| 測試步驟 | 1. 啟動 Playground Server<br>2. 檢查 MongoDB 連線使用的資料庫名稱 |
| 預期結果 | 使用 `momentry_dev` database |

```bash
# 測試指令
curl -s "http://localhost:27017/momentry_dev/_/command" | jq
```

#### TC-03: Qdrant Collection 隔離驗證

| 項目 | 內容 |
|------|------|
| 測試目標 | 確認 Playground 使用 `momentry_dev_rule1` collection |
| 前置條件 | Qdrant collection 已創建 |
| 測試步驟 | 1. 列出所有 collections<br>2. 確認 `momentry_dev_rule1` 存在 |
| 預期結果 | Collection 列表包含 `momentry_dev_rule1` |

```bash
# 測試指令
curl -s -H "api-key: Test3200Test3200Test3200" \
  "http://localhost:6333/collections" | jq '.result[].name'
```

#### TC-04: Redis Prefix 隔離驗證

| 項目 | 內容 |
|------|------|
| 測試目標 | 確認 Playground 使用 `momentry_dev:` prefix |
| 前置條件 | Redis 運行中 |
| 測試步驟 | 1. 啟動 Playground Server<br>2. 執行任何 API 調用<br>3. 檢查 Redis keys 使用 `momentry_dev:` prefix |
| 預期結果 | 所有 keys 以 `momentry_dev:` 開頭 |

```bash
# 測試指令
redis-cli KEYS "momentry_dev:*"
```

---

### Phase 2: 功能測試

#### TC-05: 視頻註冊功能

| 項目 | 內容 |
|------|------|
| 測試目標 | 驗證 Playground 可以註冊視頻 |
| 前置條件 | Playground Server 運行中 |
| 測試步驟 | 1. 調用 `/api/v1/videos/register` API<br>2. 傳入測試視頻路徑<br>3. 檢查響應 |
| 預期結果 | 返回視頻 UUID，數據存入 `dev.videos` |

```bash
# 測試指令
curl -X POST "http://localhost:3003/api/v1/videos/register" \
  -H "Content-Type: application/json" \
  -d '{"file_path": "/path/to/test/video.mp4"}'
```

#### TC-06: 視頻查詢功能

| 項目 | 內容 |
|------|------|
| 測試目標 | 驗證可以查詢已註冊的視頻 |
| 前置條件 | TC-05 成功 |
| 測試步驟 | 1. 調用 `/api/v1/videos/{uuid}` API<br>2. 檢查返回的視頻信息 |
| 預期結果 | 返回視頻詳細信息，schema 為 `dev` |

#### TC-07: Chunk 存儲功能

| 項目 | 內容 |
|------|------|
| 測試目標 | 驗證 Chunk 數據存入正確的隔離存儲 |
| 前置條件 | Playground Server 運行中 |
| 測試步驟 | 1. 處理視頻生成 chunks<br>2. 檢查 PostgreSQL `dev.chunks`<br>3. 檢查 MongoDB `momentry_dev.chunks`<br>4. 檢查 Qdrant `momentry_dev_rule1` |
| 預期結果 | 所有存儲位置正確隔離 |

```bash
# 驗證 PostgreSQL
psql "postgres://accusys:accusys@localhost:5432/momentry" \
  -c "SELECT COUNT(*) FROM dev.chunks;"

# 驗證 MongoDB
curl -s "http://localhost:27017/momentry_dev/chunks/count" | jq

# 驗證 Qdrant
curl -s -H "api-key: Test3200Test3200Test3200" \
  "http://localhost:6333/collections/momentry_dev_rule1/points/count" | jq
```

---

### Phase 3: 隔離完整性測試

#### TC-08: 數據不交叉污染測試

| 項目 | 內容 |
|------|------|
| 測試目標 | 確認 Production 和 Playground 數據完全隔離 |
| 前置條件 | 兩個環境都在運行 |
| 測試步驟 | 1. 在 Production 環境註冊視頻 A<br>2. 在 Playground 環境註冊視頻 B<br>3. 分別查詢兩個環境<br>4. 確認數據不互通 |
| 預期結果 | Production 只能看到 A，Playground 只能看到 B |

#### TC-09: Redis Key 隔離測試

| 項目 | 內容 |
|------|------|
| 測試目標 | 確認 Redis keys 完全隔離 |
| 前置條件 | 兩個環境都在運行 |
| 測試步驟 | 1. 在 Production 執行操作<br>2. 在 Playground 執行操作<br>3. 檢查 keys 分離 |
| 預期結果 | `momentry:*` 和 `momentry_dev:*` 分開 |

```bash
# 驗證 keys 分離
redis-cli KEYS "momentry:*"     # 應該只有 production keys
redis-cli KEYS "momentry_dev:*" # 應該只有 playground keys
```

---

### Phase 4: 完整流程測試

#### TC-10: 端到端視頻處理流程

| 項目 | 內容 |
|------|------|
| 測試目標 | 驗證完整視頻處理流程在 Playground 正常運行 |
| 前置條件 | 所有服務正常，測試視頻準備完成 |
| 測試步驟 | 1. 註冊測試視頻<br>2. 觸發處理（ASR, OCR, YOLO 等）<br>3. 檢查 chunks 生成<br>4. 檢查向量存入 Qdrant<br>5. 驗證搜尋功能 |
| 預期結果 | 完整流程正常，數據存入隔離存儲 |

```bash
# 完整流程測試指令序列

# 1. 註冊視頻
curl -X POST "http://localhost:3003/api/v1/videos/register" \
  -H "Content-Type: application/json" \
  -d '{"file_path": "/path/to/test_video.mp4"}'

# 2. 獲取 UUID (假設為 test-uuid)
VIDEO_UUID="test-uuid"

# 3. 觸發處理
curl -X POST "http://localhost:3003/api/v1/videos/${VIDEO_UUID}/process" \
  -H "Content-Type: application/json" \
  -d '{"processors": ["asr", "ocr", "yolo"]}'

# 4. 等待處理完成 (輪詢狀態)
curl "http://localhost:3003/api/v1/videos/${VIDEO_UUID}"

# 5. 驗證數據存入隔離存儲
psql "postgres://accusys:accusys@localhost:5432/momentry" \
  -c "SELECT COUNT(*) FROM dev.chunks WHERE uuid = '${VIDEO_UUID}';"

# 6. 驗證向量存入 Qdrant
curl -s -H "api-key: Test3200Test3200Test3200" \
  "http://localhost:6333/collections/momentry_dev_rule1/points/count" | jq
```

---

## 測試檢查清單

### 測試前檢查

| 項目 | 狀態 | 備註 |
|------|------|------|
| PostgreSQL 運行中 | [ ] | |
| `dev` schema 已創建 | [ ] | |
| MongoDB 運行中 | [ ] | |
| `momentry_dev` database 已創建 | [ ] | |
| Qdrant 運行中 | [ ] | |
| `momentry_dev_rule1` collection 已創建 | [ ] | |
| Redis 運行中 | [ ] | |
| 測試視頻準備完成 | [ ] | |
| 防火牆/端口 3003 開放 | [ ] | |

### 測試後檢查

| 項目 | 狀態 | 備註 |
|------|------|------|
| TC-01: PostgreSQL Schema 隔離 | [ ] | |
| TC-02: MongoDB Database 隔離 | [ ] | |
| TC-03: Qdrant Collection 隔離 | [ ] | |
| TC-04: Redis Prefix 隔離 | [ ] | |
| TC-05: 視頻註冊功能 | [ ] | |
| TC-06: 視頻查詢功能 | [ ] | |
| TC-07: Chunk 存儲功能 | [ ] | |
| TC-08: 數據不交叉污染 | [ ] | |
| TC-09: Redis Key 隔離 | [ ] | |
| TC-10: 端到端流程 | [ ] | |

---

## 測試數據準備

### 測試視頻要求

| 項目 | 規格 |
|------|------|
| 時長 | 30 秒 - 1 分鐘 |
| 解析度 | 720p 或以上 |
| 格式 | MP4 |
| 內容 | 包含說話人形體、場景變化 |

### 測試用影片路徑

```
# 請選擇一個測試影片
/Users/accusys/momentry/test_videos/sample_video.mp4
```

---

## 預期測試結果

### 成功標準

| 項目 | 標準 |
|------|------|
| 功能測試 | 所有 API 調用成功返回正確響應 |
| 隔離測試 | 兩個環境數據完全隔離，無交叉 |
| 整合測試 | 完整流程正常運行，數據正確存儲 |

### 常見問題

| 問題 | 原因 | 解決方案 |
|------|------|---------|
| 連接失敗 | 服務未啟動 | 檢查 PostgreSQL/MongoDB/Qdrant/Redis 狀態 |
| Schema 錯誤 | `dev` schema 未創建 | 執行 `CREATE SCHEMA dev;` |
| Collection 錯誤 | Qdrant collection 未創建 | 使用 Qdrant API 創建 collection |
| 數據交叉 | Schema 切換失敗 | 檢查 `search_path` 配置 |

---

## 測試報告模板

```
# Playground 功能測試報告

## 測試環境
- 日期: YYYY-MM-DD
- 測試人員: 
- 系統版本: 

## 測試結果

| 測試案例 | 狀態 | 備註 |
|----------|------|------|
| TC-01 | PASS/FAIL | |
| TC-02 | PASS/FAIL | |
| ... | ... | |

## 問題記錄

### 問題 1
- 描述: 
- 影響: 
- 解決方案: 

## 總結

- 總測試數: X
- 通過: X
- 失敗: X
- 通過率: X%
```

---

## 相關文件

| 文件 | 說明 |
|------|------|
| `PLAYGROUND_ARCHITECTURE.md` | Playground 隔離架構規劃 |
| `SERVICES.md` | 服務端口分配 |
| `MOMENTRY_CORE_REDIS_KEYS.md` | Redis Key 設計規範 |

---

## 版本資訊

- 版本: V1.0
- 建立日期: 2026-03-31
- 文件更新: 2026-03-31
