# 快速測試指南

## 🚀 啟動系統

```bash
# 1. 確保在專案目錄
cd /root/projects/iso27001-system

# 2. 啟動所有服務
docker compose up -d

# 3. 查看服務狀態
docker compose ps

# 4. 查看後端日誌（確認啟動成功）
docker compose logs backend --tail=50
```

---

## ✅ 測試 API 端點

### 1. 健康檢查
```bash
curl http://localhost:8000/api/assets/
```

預期回應：
```json
{
  "count": 3,
  "next": null,
  "previous": null,
  "results": [...]
}
```

### 2. 登入測試
```bash
curl -X POST http://localhost:8000/api/auth/login/ \
  -H "Content-Type: application/json" \
  -d '{"username": "admin", "password": "admin123"}' \
  | python3 -m json.tool
```

### 3. 資產統計
```bash
curl http://localhost:8000/api/assets/statistics/ | python3 -m json.tool
```

### 4. 建立新資產
```bash
curl -X POST http://localhost:8000/api/assets/ \
  -H "Content-Type: application/json" \
  -d '{
    "asset_number": "AST-999",
    "name": "測試資產",
    "asset_type": "hardware",
    "confidentiality": "medium",
    "integrity": "medium",
    "availability": "medium",
    "status": "active"
  }' | python3 -m json.tool
```

### 5. 搜尋資產
```bash
# 搜尋名稱包含 "Web" 的資產
curl "http://localhost:8000/api/assets/?search=Web" | python3 -m json.tool

# 篩選硬體類型資產
curl "http://localhost:8000/api/assets/?asset_type=hardware" | python3 -m json.tool

# 篩選高機密性資產
curl "http://localhost:8000/api/assets/?confidentiality=high" | python3 -m json.tool
```

### 6. 匯出資產（CSV）
```bash
curl "http://localhost:8000/api/assets/export/?format=csv" -o assets_export.csv
cat assets_export.csv
```

---

## 🌐 前端測試

### 1. 啟動前端（如果使用 Docker）
```bash
docker compose up -d frontend
```

### 2. 或本地啟動前端
```bash
cd frontend
npm install
npm start
```

### 3. 開啟瀏覽器
訪問：http://localhost:3000

---

## 🔍 常見問題排解

### 問題 1: 後端無法啟動（port 8000 被佔用）
```bash
# 找出佔用 8000 的程序
ss -tlnp | grep 8000

# 終止該程序（替換 PID）
kill <PID>

# 重新啟動
docker compose up -d backend
```

### 問題 2: 資料庫連線失敗
```bash
# 檢查資料庫狀態
docker compose ps db

# 查看資料庫日誌
docker compose logs db --tail=50

# 重啟資料庫
docker compose restart db

# 等待健康檢查通過後，重啟後端
docker compose restart backend
```

### 問題 3: 前端 API 請求失敗
```bash
# 確認 .env 檔案存在
cat frontend/.env

# 內容應為：
# REACT_APP_API_URL=http://localhost:8000

# 重啟前端
docker compose restart frontend
```

### 問題 4: 需要重置資料庫
```bash
# ⚠️ 警告：這會刪除所有資料！

# 1. 停止所有服務
docker compose down

# 2. 刪除 volume
docker volume rm iso27001-system_postgres_data

# 3. 重新啟動
docker compose up -d

# 4. 等待資料庫啟動
sleep 10

# 5. 執行 migrations
docker compose run --rm backend python manage.py migrate

# 6. 建立超級使用者
docker compose run --rm backend python manage.py shell -c "
from accounts.models import User
User.objects.create_superuser(
    username='admin', 
    email='admin@example.com', 
    password='admin123', 
    role='super_admin'
)
"
```

---

## 📊 批次建立測試資料

### 建立 10 筆測試資產
```bash
cat > /tmp/create_test_assets.sh << 'EOFSCRIPT'
#!/bin/bash

for i in {10..20}; do
  curl -s -X POST http://localhost:8000/api/assets/ \
    -H "Content-Type: application/json" \
    -d "{
      \"asset_number\": \"AST-$(printf '%03d' $i)\",
      \"name\": \"測試資產 $i\",
      \"asset_type\": \"hardware\",
      \"confidentiality\": \"medium\",
      \"integrity\": \"medium\",
      \"availability\": \"medium\",
      \"status\": \"active\"
    }" > /dev/null
  echo "建立資產 AST-$(printf '%03d' $i)"
done

echo "完成！建立了 11 筆測試資產"
EOFSCRIPT

chmod +x /tmp/create_test_assets.sh
/tmp/create_test_assets.sh
```

### 驗證資產數量
```bash
curl -s http://localhost:8000/api/assets/ | python3 -c "import sys, json; data=json.load(sys.stdin); print(f'總共 {data[\"count\"]} 筆資產')"
```

---

## 🧪 進階測試

### 1. 測試資產關係
```bash
# 取得第一筆資產的 ID
ASSET_ID=$(curl -s http://localhost:8000/api/assets/ | python3 -c "import sys, json; print(json.load(sys.stdin)['results'][0]['id'])")

# 查詢該資產的關係
curl "http://localhost:8000/api/assets/${ASSET_ID}/relationships/" | python3 -m json.tool
```

### 2. 測試分頁
```bash
# 每頁 5 筆
curl "http://localhost:8000/api/assets/?page=1&page_size=5" | python3 -m json.tool
```

### 3. 測試排序
```bash
# 按建立時間降冪排列
curl "http://localhost:8000/api/assets/?ordering=-created_at" | python3 -m json.tool

# 按資產編號升冪排列
curl "http://localhost:8000/api/assets/?ordering=asset_number" | python3 -m json.tool
```

### 4. 測試多條件篩選
```bash
# 硬體類型 + 高機密性 + 使用中
curl "http://localhost:8000/api/assets/?asset_type=hardware&confidentiality=high&status=active" | python3 -m json.tool
```

---

## 📝 效能測試

### 使用 ab (Apache Bench)
```bash
# 安裝 ab
apt-get install -y apache2-utils

# 測試資產列表端點（100 請求，10 併發）
ab -n 100 -c 10 http://localhost:8000/api/assets/

# 測試統計端點
ab -n 50 -c 5 http://localhost:8000/api/assets/statistics/
```

---

## 🔐 認證測試

### 完整認證流程
```bash
# 1. 登入取得 Token
TOKEN=$(curl -s -X POST http://localhost:8000/api/auth/login/ \
  -H "Content-Type: application/json" \
  -d '{"username": "admin", "password": "admin123"}' \
  | python3 -c "import sys, json; print(json.load(sys.stdin)['access_token'])")

echo "Token: $TOKEN"

# 2. 使用 Token 查詢當前使用者
curl -H "Authorization: Bearer $TOKEN" \
  http://localhost:8000/api/auth/users/me/ | python3 -m json.tool

# 3. 使用 Token 建立資產
curl -X POST http://localhost:8000/api/assets/ \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "asset_number": "AST-AUTH-TEST",
    "name": "認證測試資產",
    "asset_type": "software",
    "status": "active"
  }' | python3 -m json.tool
```

---

## ✅ 驗證清單

- [ ] 後端服務正常啟動（docker compose ps 顯示 Up）
- [ ] 資料庫連線成功（可以查詢資產列表）
- [ ] 登入功能正常（可以取得 Token）
- [ ] 資產 CRUD 操作正常
- [ ] 統計 API 正常
- [ ] 搜尋篩選功能正常
- [ ] 匯入匯出功能正常
- [ ] 前端可以正常訪問

---

## 🛟 需要協助？

查看日誌：
```bash
# 後端日誌
docker compose logs backend --tail=100 -f

# 資料庫日誌
docker compose logs db --tail=50

# 所有服務日誌
docker compose logs --tail=50
```

完全重啟：
```bash
docker compose down
docker compose up -d
```

---

**測試完成後，請回報測試結果！** ✅
