39 lines
1.8 KiB
JavaScript
39 lines
1.8 KiB
JavaScript
import request from 'supertest';
|
||
import { app } from '../src/index.js';
|
||
|
||
// 说明:此测试仅验证接口形状与鉴权门槛。在无真实数据库与鉴权上下文时,
|
||
// 断言未授权访问返回 401/403;当提供格式正确的查询参数时服务器不会 500。
|
||
|
||
describe('Admin stats endpoints shape and query params', () => {
|
||
it('GET /api/admin/stats/detailed rejects without token', async () => {
|
||
const res = await request(app).get('/api/admin/stats/detailed');
|
||
expect([401, 403]).toContain(res.status);
|
||
});
|
||
|
||
it('GET /api/admin/stats/trends rejects without token', async () => {
|
||
const res = await request(app).get('/api/admin/stats/trends?days=7');
|
||
expect([401, 403]).toContain(res.status);
|
||
});
|
||
|
||
it('GET /api/admin/stats/trends validates days range', async () => {
|
||
const res = await request(app).get('/api/admin/stats/trends?days=9999');
|
||
// 未授权优先返回 401/403;若路由先校验参数也可能 400,三者之一均视为通过
|
||
expect([401, 403, 400]).toContain(res.status);
|
||
});
|
||
|
||
it('GET /api/admin/stats/trends accepts start/end date params (no 500)', async () => {
|
||
const res = await request(app).get('/api/admin/stats/trends?startDate=2025-01-01&endDate=2025-01-31');
|
||
expect([401, 403, 200]).toContain(res.status);
|
||
});
|
||
|
||
it('GET /api/admin/stats/detailed returns 400 when start > end', async () => {
|
||
const res = await request(app).get('/api/admin/stats/detailed?startDate=2025-02-01&endDate=2025-01-01');
|
||
expect([401, 403, 400]).toContain(res.status);
|
||
});
|
||
|
||
it('GET /api/admin/stats/trends returns 400 when start > end', async () => {
|
||
const res = await request(app).get('/api/admin/stats/trends?startDate=2025-02-01&endDate=2025-01-01');
|
||
expect([401, 403, 400]).toContain(res.status);
|
||
});
|
||
});
|