# 课程资料预览功能测试指南

## 功能概述

本次实现了课程学习页面的资料在线预览功能，支持多种文件格式的在线查看。

## 测试前准备

### 1. 重新构建后端Docker镜像

由于在Dockerfile中添加了LibreOffice，需要重新构建镜像：

```bash
cd kaopeilian-backend
docker-compose -f docker-compose.dev.yml build backend
docker-compose -f docker-compose.dev.yml up -d
```

### 2. 检查LibreOffice是否安装成功

访问调试接口：
```
GET http://localhost:8000/api/v1/preview/check-converter
```

预期返回：
```json
{
  "code": 200,
  "message": "转换服务状态检查完成",
  "data": {
    "libreoffice_installed": true,
    "libreoffice_version": "LibreOffice 版本信息",
    "supported_formats": [".docx", ".doc", ".pptx", ".ppt", ".xlsx", ".xls"],
    "converted_path": "/app/uploads/converted"
  }
}
```

## 测试步骤

### 1. 准备测试数据

为课程上传不同类型的测试文件：
- PDF文件（如：课程讲义.pdf）
- Word文档（如：学习资料.docx）
- PPT演示文稿（如：培训课件.pptx）
- Excel表格（如：数据表.xlsx）
- 视频文件（如：教学视频.mp4）
- 音频文件（如：课程音频.mp3）
- 图片文件（如：示意图.jpg）
- 文本文件（如：说明.txt）

### 2. 访问课程详情页

访问：`http://localhost:3001/trainee/course-detail?id=1`

### 3. 测试资料列表

**测试点：**
- [ ] 左侧资料列表正确显示所有已上传的文件
- [ ] 文件图标根据类型正确显示
- [ ] 文件大小正确显示
- [ ] 文件类型标签正确显示

**测试搜索功能：**
- [ ] 在搜索框输入关键词，列表正确筛选
- [ ] 清空搜索框，列表恢复显示全部

**测试类型筛选：**
- [ ] 点击"文档"按钮，只显示文档类文件
- [ ] 点击"视频"按钮，只显示视频文件
- [ ] 点击"音频"按钮，只显示音频文件
- [ ] 点击"图片"按钮，只显示图片文件
- [ ] 点击"全部"按钮，显示所有文件

### 4. 测试文件预览

#### PDF文件预览
- [ ] 点击PDF文件，右侧显示PDF预览
- [ ] PDF内容正确显示
- [ ] 可以使用浏览器内置的PDF阅读器功能（翻页、缩放等）

#### Office文档预览（重点测试）
- [ ] 点击docx文件，显示"正在转换文档"提示
- [ ] 转换完成后显示PDF预览
- [ ] 再次点击同一文件，直接显示PDF（缓存生效）
- [ ] 测试pptx文件转换预览
- [ ] 测试xlsx文件转换预览

#### 视频文件预览
- [ ] 点击mp4文件，显示视频播放器
- [ ] 视频可以正常播放
- [ ] 播放控件正常工作（播放/暂停、进度条、音量等）

#### 音频文件预览
- [ ] 点击mp3文件，显示音频播放器
- [ ] 音频可以正常播放
- [ ] 播放控件正常工作

#### 图片文件预览
- [ ] 点击jpg/png文件，显示图片
- [ ] 图片清晰显示
- [ ] 可以点击图片放大查看

#### 文本文件预览
- [ ] 点击txt文件，显示文本内容
- [ ] 文本内容正确显示，格式保持

### 5. 测试工具栏功能

- [ ] 点击"下载"按钮，文件正常下载
- [ ] 点击"全屏"按钮（PDF/视频/图片），进入全屏模式
- [ ] 按ESC键退出全屏

### 6. 测试异常情况

**文件不存在：**
- [ ] 删除某个文件的物理文件，点击后显示错误提示

**不支持的格式：**
- [ ] 上传zip等不支持预览的格式
- [ ] 点击后显示"此文件暂不支持在线预览"，提供下载按钮

**转换失败：**
- [ ] 上传损坏的docx文件
- [ ] 点击后转换失败，自动切换到下载模式

## API测试

### 1. 获取课程资料列表

```bash
curl -X GET "http://localhost:8000/api/v1/courses/1/materials" \
  -H "Authorization: Bearer YOUR_TOKEN"
```

### 2. 获取资料预览信息

```bash
curl -X GET "http://localhost:8000/api/v1/preview/material/1" \
  -H "Authorization: Bearer YOUR_TOKEN"
```

预期返回示例（PDF）：
```json
{
  "code": 200,
  "message": "获取预览信息成功",
  "data": {
    "preview_type": "pdf",
    "preview_url": "/static/uploads/courses/1/xxx.pdf",
    "file_name": "课程讲义.pdf",
    "original_url": "/static/uploads/courses/1/xxx.pdf",
    "file_size": 1024000
  }
}
```

预期返回示例（Word转换）：
```json
{
  "code": 200,
  "message": "获取预览信息成功",
  "data": {
    "preview_type": "pdf",
    "preview_url": "/static/uploads/converted/1/1.pdf",
    "file_name": "学习资料.docx",
    "original_url": "/static/uploads/courses/1/xxx.docx",
    "file_size": 2048000,
    "is_converted": true
  }
}
```

## 性能测试

### 转换性能
- [ ] 测试1MB的docx文件转换时间（应在5秒内）
- [ ] 测试5MB的pptx文件转换时间（应在10秒内）
- [ ] 测试缓存命中率（第二次访问应直接返回）

### 并发测试
- [ ] 同时请求3个不同Office文档的转换
- [ ] 观察服务器CPU和内存使用情况

## 常见问题排查

### LibreOffice未安装
**症状：** 调试接口返回 `libreoffice_installed: false`

**解决：**
1. 检查Dockerfile是否正确添加了LibreOffice安装命令
2. 重新构建Docker镜像
3. 检查容器日志：`docker logs <container_id>`

### 文档转换失败
**症状：** 转换后找不到PDF文件

**排查：**
1. 检查后端日志：`docker logs kaopeilian-backend`
2. 检查转换目录权限：`ls -la /app/uploads/converted`
3. 手动测试转换命令：
   ```bash
   docker exec -it kaopeilian-backend bash
   libreoffice --headless --convert-to pdf --outdir /tmp /path/to/test.docx
   ```

### 前端无法显示预览
**症状：** 点击文件后一直loading

**排查：**
1. 打开浏览器开发者工具，查看Network标签
2. 检查API请求是否成功
3. 检查返回的URL是否正确
4. 检查CORS配置

### 文件下载失败
**症状：** 点击下载按钮没有反应

**排查：**
1. 检查文件URL是否正确
2. 检查静态文件服务配置
3. 检查文件是否存在

## 预期效果截图位置

测试完成后，请将以下场景的截图保存到：
`/考培练系统规划/全链路联调/Ai工作流/截图/课程资料预览/`

- 资料列表展示
- PDF文件预览
- Word文档转换后预览
- 视频播放
- 音频播放
- 图片预览
- 文本预览
- 下载模式

## 测试完成标准

- [ ] 所有文件类型都能正确预览或下载
- [ ] Office文档转换功能正常
- [ ] 转换缓存机制生效
- [ ] 界面交互流畅，无明显卡顿
- [ ] 没有JavaScript错误
- [ ] 没有404或500错误
- [ ] 移动端响应式布局正常

## 注意事项

1. **首次转换会比较慢**：LibreOffice启动需要时间，首次转换可能需要10-30秒
2. **缓存目录**：转换后的PDF文件会保存在 `/uploads/converted/{course_id}/` 目录
3. **文件大小限制**：当前设置为15MB，超过此大小的文件无法上传
4. **支持的格式**：详见后端 `ALLOWED_EXTENSIONS` 配置

## 后续优化建议

1. 添加转换进度提示
2. 支持更多文件格式（如Markdown渲染）
3. 添加文件预览的快捷键操作
4. 优化大文件的加载体验
5. 添加文件预览的历史记录
6. 支持文件批量下载

