test: add HTTP smoke tests for public-packages API (anti-regression for nginx proxy)

The admin.moicen.com nginx must proxy /api/v1/clazz/ to htykc:3002.
Without it, the API returns SPA index.html instead of JSON, causing
"接口返回了页面而非 JSON" errors in the frontend.

Tests verify:
- public-packages API returns Content-Type: application/json
- Response body has valid structure with package fields

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-05-01 09:30:36 +08:00
parent e6ec3ba7d7
commit 8e3f61afeb
+41
View File
@@ -10,6 +10,8 @@ function frontBaseUrl(): string {
/**
* 不依赖浏览器:验证网关返回 H5 入口文档(部署/ DNS / TLS / Nginx 全链路底线)。
*/
const testOrgId = '57753e11dff343b1ab95623933e8960b';
test.describe('网关与 H5 文档(request', () => {
test('GET / 返回 HTML', async ({ request }) => {
const res = await request.get(`${frontBaseUrl()}/`);
@@ -18,3 +20,42 @@ test.describe('网关与 H5 文档(request', () => {
expect(ct).toMatch(/text\/html/i);
});
});
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');
}
});
});