Files
LinkPort/web/tests/asset-remarks.spec.ts
2026-09-27 16:39:38 +08:00

42 lines
2.3 KiB
TypeScript

import { test, expect } from '@playwright/test';
test('资产备注支持创建、编辑、刷新和清空且保留原文件', async ({ page }) => {
await page.goto('/');
const session = await (await page.request.get('/api/v1/session')).json();
const headers = { 'X-CSRF-Token': session.csrfToken };
let id = '';
try {
// Generic files remain compatible through the API and resource search.
const drawer = page.getByRole('dialog', { name: '编辑资产', exact: true });
const remark = '开发环境\n负责人:测试 📝';
const response = await page.request.post('/api/v1/assets', { headers, data: {
name: '备注测试资产', type: 'file', filename: 'remark.txt', content: 'fixture-file', remark,
} });
expect(response.ok()).toBeTruthy();
const original = (await response.json()).config;
id = original.id;
expect(original.remark).toBe(remark);
await expect(drawer).not.toBeVisible();
for (const value of ['修改后的备注\n第二行', '']) {
await page.reload();
await page.keyboard.press('Control+k');
const search = page.getByRole('dialog', { name: '搜索资源 · 当前项目与环境', exact: true });
await search.getByRole('combobox', { name: '搜索资源关键词', exact: true }).fill('备注测试资产');
await search.getByRole('option').filter({ hasText: '备注测试资产' }).click();
await expect(drawer.getByRole('textbox', { name: '资产备注', exact: true })).toHaveValue(value ? remark : '修改后的备注\n第二行');
await drawer.getByRole('textbox', { name: '资产备注', exact: true }).fill(value);
const saved = page.waitForResponse(r => r.url().endsWith(`/assets/${id}`) && r.request().method() === 'PUT');
await drawer.getByRole('button', { name: '保存资产', exact: true }).click();
expect((await saved).ok()).toBeTruthy();
await expect(drawer).not.toBeVisible();
const asset = await (await page.request.get(`/api/v1/assets/${id}`)).json();
expect(asset.config.remark || '').toBe(value);
expect(asset.config.filename).toBe(original.filename);
expect(asset.config.updatedAt).toBe(original.updatedAt);
expect(asset.secretStatus.content).toBe(true);
}
} finally {
if (id) await page.request.delete(`/api/v1/assets/${id}`, { headers });
}
});