mirror of
https://github.com/iflytek/skillhub.git
synced 2026-08-28 11:25:00 +00:00
78 lines
3.1 KiB
TypeScript
78 lines
3.1 KiB
TypeScript
import { expect, test } from '@playwright/test'
|
|
import { setEnglishLocale } from './helpers/auth-fixtures'
|
|
import { csrfHeaders } from './helpers/csrf'
|
|
import { loginWithCredentials, registerSession } from './helpers/session'
|
|
import { E2eTestDataBuilder } from './helpers/test-data-builder'
|
|
|
|
function getOptionalEnv(name: string): string | undefined {
|
|
const value = process.env[name]?.trim()
|
|
return value ? value : undefined
|
|
}
|
|
|
|
function adminCredentials() {
|
|
return {
|
|
username: getOptionalEnv('E2E_ADMIN_USERNAME') ?? getOptionalEnv('BOOTSTRAP_ADMIN_USERNAME') ?? 'admin',
|
|
password: getOptionalEnv('E2E_ADMIN_PASSWORD') ?? getOptionalEnv('BOOTSTRAP_ADMIN_PASSWORD') ?? 'ChangeMe!2026',
|
|
}
|
|
}
|
|
|
|
test.describe('Skill Version Compare (Real API)', () => {
|
|
test.describe.configure({ timeout: 150_000 })
|
|
|
|
test.beforeEach(async ({ page }, testInfo) => {
|
|
await setEnglishLocale(page)
|
|
await registerSession(page, testInfo)
|
|
})
|
|
|
|
test('opens compare page for two published versions and renders unified diff data', async ({ page, browser }, testInfo) => {
|
|
const builder = new E2eTestDataBuilder(page, testInfo)
|
|
await builder.init()
|
|
|
|
const adminContext = await browser.newContext()
|
|
const adminPage = await adminContext.newPage()
|
|
const adminBuilder = new E2eTestDataBuilder(adminPage, testInfo)
|
|
await loginWithCredentials(adminPage, adminCredentials(), testInfo)
|
|
await adminBuilder.init()
|
|
|
|
try {
|
|
const namespace = await builder.ensureWritableNamespace()
|
|
const skillName = `compare-ui-${Date.now().toString(36)}`
|
|
const v1 = await builder.publishSkill(namespace.slug, {
|
|
name: skillName,
|
|
version: '1.0.0',
|
|
readmeHeading: `${skillName} v1`,
|
|
})
|
|
|
|
const firstReviewTaskId = await adminBuilder.waitForPendingReview(namespace.slug, v1.slug, v1.version)
|
|
await adminBuilder.approveReview(firstReviewTaskId)
|
|
|
|
const rereleaseResponse = await page.context().request.post(
|
|
`/api/web/skills/${encodeURIComponent(namespace.slug)}/${encodeURIComponent(v1.slug)}/versions/${encodeURIComponent(v1.version)}/rerelease`,
|
|
{
|
|
data: {
|
|
targetVersion: '1.1.0',
|
|
confirmWarnings: true,
|
|
},
|
|
headers: await csrfHeaders(page),
|
|
}
|
|
)
|
|
expect(rereleaseResponse.ok()).toBe(true)
|
|
|
|
const secondReviewTaskId = await adminBuilder.waitForPendingReview(namespace.slug, v1.slug, '1.1.0')
|
|
await adminBuilder.approveReview(secondReviewTaskId)
|
|
|
|
await page.goto(`/space/${encodeURIComponent(namespace.slug)}/${encodeURIComponent(v1.slug)}/compare?from=1.0.0&to=1.1.0`)
|
|
|
|
await expect(page.getByRole('heading', { name: 'Version Compare' })).toBeVisible()
|
|
await expect(page.getByLabel('Base version')).toBeVisible()
|
|
await expect(page.getByLabel('Head version')).toBeVisible()
|
|
await expect(page.getByLabel('File list')).toContainText('SKILL.md')
|
|
await expect(page.getByText('Modified').first()).toBeVisible()
|
|
await expect(page.getByText('SKILL.md').first()).toBeVisible()
|
|
} finally {
|
|
await adminBuilder.cleanup()
|
|
await adminContext.close()
|
|
await builder.cleanup()
|
|
}
|
|
})
|
|
})
|