mirror of
https://gitee.com/kekingcn/file-online-preview.git
synced 2026-03-13 20:53:47 +08:00
test(e2e): address copilot review for fixture stability and CI python setup
This commit is contained in:
9
.github/workflows/pr-e2e-mvp.yml
vendored
9
.github/workflows/pr-e2e-mvp.yml
vendored
@@ -31,6 +31,11 @@ jobs:
|
||||
cache: 'npm'
|
||||
cache-dependency-path: tests/e2e/package-lock.json
|
||||
|
||||
- name: Setup Python 3.11
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.11'
|
||||
|
||||
- name: Install LibreOffice + zip
|
||||
run: |
|
||||
sudo apt-get update
|
||||
@@ -38,8 +43,8 @@ jobs:
|
||||
|
||||
- name: Setup Python deps for office fixtures
|
||||
run: |
|
||||
python3 -m pip install --upgrade pip
|
||||
pip3 install python-docx openpyxl python-pptx
|
||||
python -m pip install --upgrade pip
|
||||
pip install -r tests/e2e/requirements.txt
|
||||
|
||||
- name: Build kkFileView
|
||||
run: mvn -q -pl server -DskipTests package
|
||||
|
||||
3
tests/e2e/.gitignore
vendored
3
tests/e2e/.gitignore
vendored
@@ -4,3 +4,6 @@ test-results/
|
||||
|
||||
__pycache__/
|
||||
fixtures/zip-tmp/
|
||||
fixtures/sample.docx
|
||||
fixtures/sample.xlsx
|
||||
fixtures/sample.pptx
|
||||
|
||||
@@ -26,7 +26,7 @@ mvn -q -pl server -DskipTests package
|
||||
cd tests/e2e
|
||||
npm install
|
||||
npx playwright install --with-deps chromium
|
||||
pip3 install python-docx openpyxl python-pptx
|
||||
pip3 install -r tests/e2e/requirements.txt
|
||||
```
|
||||
|
||||
3. Generate fixtures and start fixture server:
|
||||
|
||||
@@ -4,10 +4,12 @@
|
||||
"version": "0.1.0",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"test": "playwright test",
|
||||
"test:headed": "playwright test --headed",
|
||||
"gen:fixtures": "node ./scripts/generate-fixtures.mjs",
|
||||
"gen:office": "python3 ./scripts/generate-office-fixtures.py"
|
||||
"gen:office": "python3 ./scripts/generate-office-fixtures.py",
|
||||
"gen:all": "npm run gen:fixtures && npm run gen:office",
|
||||
"pretest": "npm run gen:all",
|
||||
"test": "playwright test",
|
||||
"test:headed": "playwright test --headed"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@playwright/test": "^1.55.0"
|
||||
|
||||
3
tests/e2e/requirements.txt
Normal file
3
tests/e2e/requirements.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
python-docx==1.1.2
|
||||
openpyxl==3.1.5
|
||||
python-pptx==1.0.2
|
||||
@@ -1,6 +1,6 @@
|
||||
import fs from 'node:fs';
|
||||
import path from 'node:path';
|
||||
import { execSync } from 'node:child_process';
|
||||
import { execFileSync } from 'node:child_process';
|
||||
|
||||
const fixturesDir = path.resolve(process.cwd(), 'tests/e2e/fixtures');
|
||||
fs.mkdirSync(fixturesDir, { recursive: true });
|
||||
@@ -14,14 +14,17 @@ write('sample.xml', '<root><name>kkFileView</name><e2e>true</e2e></root>');
|
||||
write('sample.csv', 'name,value\nkkFileView,1\ne2e,1\n');
|
||||
write('sample.html', '<!doctype html><html><body><h1>kkFileView fixture</h1></body></html>');
|
||||
|
||||
// zip (contains txt)
|
||||
const zipWork = path.join(fixturesDir, 'zip-tmp');
|
||||
fs.mkdirSync(zipWork, { recursive: true });
|
||||
fs.writeFileSync(path.join(zipWork, 'inner.txt'), 'kkFileView zip inner file');
|
||||
try {
|
||||
execSync(`cd "${zipWork}" && zip -q -r "${path.join(fixturesDir, 'sample.zip')}" inner.txt`);
|
||||
} catch {
|
||||
// fallback: keep going if zip is not available locally
|
||||
// zip (contains txt) - only generate if missing to avoid noisy local diffs
|
||||
const zipPath = path.join(fixturesDir, 'sample.zip');
|
||||
if (!fs.existsSync(zipPath)) {
|
||||
const zipWork = path.join(fixturesDir, 'zip-tmp');
|
||||
fs.mkdirSync(zipWork, { recursive: true });
|
||||
fs.writeFileSync(path.join(zipWork, 'inner.txt'), 'kkFileView zip inner file');
|
||||
try {
|
||||
execFileSync('zip', ['-X', '-q', '-r', zipPath, 'inner.txt'], { cwd: zipWork });
|
||||
} catch {
|
||||
// fallback: keep going if zip is not available locally
|
||||
}
|
||||
}
|
||||
|
||||
// 1x1 png
|
||||
|
||||
@@ -11,6 +11,14 @@ async function openPreview(request: any, fileUrl: string) {
|
||||
return request.get(`/onlinePreview?url=${encoded}`);
|
||||
}
|
||||
|
||||
test.beforeAll(async ({ request }) => {
|
||||
const required = ['sample.txt', 'sample.docx', 'sample.xlsx', 'sample.pptx', 'sample.zip'];
|
||||
for (const name of required) {
|
||||
const resp = await request.get(`${fixtureBase}/${name}`);
|
||||
expect(resp.ok(), `fixture missing or unavailable: ${name}`).toBeTruthy();
|
||||
}
|
||||
});
|
||||
|
||||
test('01 home/index reachable', async ({ request }) => {
|
||||
const resp = await request.get('/');
|
||||
expect(resp.status()).toBeLessThan(500);
|
||||
|
||||
Reference in New Issue
Block a user