2026-04-28 11:53:48 +08:00
|
|
|
|
import { expect, test } from './fixtures';
|
|
|
|
|
|
|
|
|
|
|
|
function frontBaseUrl(): string {
|
|
|
|
|
|
const raw =
|
|
|
|
|
|
process.env.HUIKE_FRONT_BASE_URL?.trim() ||
|
|
|
|
|
|
'https://music-room.moicen.com';
|
|
|
|
|
|
return raw.replace(/\/$/, '');
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 不依赖浏览器:验证网关返回 H5 入口文档(部署/ DNS / TLS / Nginx 全链路底线)。
|
|
|
|
|
|
*/
|
2026-05-01 15:38:15 +08:00
|
|
|
|
const testOrgId = process.env.PROD_ORG_ID?.trim() || '57753e11dff343b1ab95623933e8960b';
|
2026-05-01 09:30:36 +08:00
|
|
|
|
|
2026-04-28 11:53:48 +08:00
|
|
|
|
test.describe('网关与 H5 文档(request)', () => {
|
|
|
|
|
|
test('GET / 返回 HTML', async ({ request }) => {
|
|
|
|
|
|
const res = await request.get(`${frontBaseUrl()}/`);
|
|
|
|
|
|
expect(res.ok(), `HTTP ${res.status()} ${res.statusText()}`).toBeTruthy();
|
|
|
|
|
|
const ct = res.headers()['content-type'] ?? '';
|
|
|
|
|
|
expect(ct).toMatch(/text\/html/i);
|
|
|
|
|
|
});
|
|
|
|
|
|
});
|
2026-05-01 09:30:36 +08:00
|
|
|
|
|
|
|
|
|
|
test.describe('课包商店 API(反代验收)', () => {
|
|
|
|
|
|
const kcBase =
|
|
|
|
|
|
process.env.KC_BASE_URL?.trim() || 'https://admin.moicen.com';
|
|
|
|
|
|
|
|
|
|
|
|
test('public-packages API 返回 JSON(非 HTML)', async ({ request }) => {
|
|
|
|
|
|
const url = `${kcBase}/api/v1/clazz/course-package/public-packages?org_id=${testOrgId}&page=1&page_size=20`;
|
|
|
|
|
|
const res = await request.get(url);
|
|
|
|
|
|
expect(res.ok(), `HTTP ${res.status()} ${res.statusText()}`).toBeTruthy();
|
|
|
|
|
|
|
|
|
|
|
|
const ct = res.headers()['content-type'] ?? '';
|
|
|
|
|
|
expect(ct).toMatch(/application\/json/i);
|
|
|
|
|
|
|
|
|
|
|
|
const body = await res.json();
|
|
|
|
|
|
expect(body).toHaveProperty('r');
|
|
|
|
|
|
expect(body.r).toBe(true);
|
|
|
|
|
|
expect(body).toHaveProperty('d');
|
|
|
|
|
|
expect(Array.isArray(body.d?.[0])).toBe(true);
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
test('public-packages API 含课包卡片字段', async ({ request }) => {
|
|
|
|
|
|
const url = `${kcBase}/api/v1/clazz/course-package/public-packages?org_id=${testOrgId}&page=1&page_size=20`;
|
|
|
|
|
|
const res = await request.get(url);
|
|
|
|
|
|
expect(res.ok()).toBeTruthy();
|
|
|
|
|
|
|
|
|
|
|
|
const body = await res.json();
|
|
|
|
|
|
const packages = body.d?.[0] as Array<Record<string, unknown>>;
|
|
|
|
|
|
expect(packages.length).toBeGreaterThan(0);
|
|
|
|
|
|
|
|
|
|
|
|
for (const pkg of packages) {
|
|
|
|
|
|
expect(pkg).toHaveProperty('package_name');
|
|
|
|
|
|
expect(pkg).toHaveProperty('total_lessons');
|
|
|
|
|
|
expect(pkg).toHaveProperty('package_status');
|
|
|
|
|
|
// Pricing fields should exist in data but not displayed in frontend
|
|
|
|
|
|
expect(pkg).toHaveProperty('original_price');
|
|
|
|
|
|
expect(pkg).toHaveProperty('selling_price');
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
});
|