文件
OmniCard/backend/test/modules/card/admin-seed-guard.test.ts
wikiboss 62e0ae4435 feat: 同步管理端、用户端与后端业务,并接通线上 Web 接口
补齐平台订阅、外部登录、CRM 同步与用户端页面;Nginx 转发用户端接口,登录页使用 Google 与 Apple 标志。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-23 18:01:47 +08:00

91 行
2.7 KiB
TypeScript

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

import { CoolCommException } from '@cool-midway/core';
import { AdminCardInfoController } from '../../../src/modules/card/controller/admin/info';
import { CardInfoService } from '../../../src/modules/card/service/info';
/**
* R35:生产环境禁止 POST /admin/card/info/seed 写入演示名片
*/
describe('AdminCardInfoController seed 生产守卫', () => {
const originalNodeEnv = process.env.NODE_ENV;
afterEach(() => {
process.env.NODE_ENV = originalNodeEnv;
});
function createController(env: {
nodeEnv?: string;
midwayEnv?: string;
}): {
controller: AdminCardInfoController;
seedMockCards: jest.Mock;
} {
if (env.nodeEnv !== undefined) {
process.env.NODE_ENV = env.nodeEnv;
}
const seedMockCards = jest.fn().mockResolvedValue(6);
const controller = new AdminCardInfoController();
controller.cardInfoService = {
seedMockCards,
} as unknown as CardInfoService;
controller.ok = jest.fn((data: unknown) => ({
code: 1000,
data,
})) as never;
if (env.midwayEnv !== undefined) {
(controller as { app?: { getEnv: () => string } }).app = {
getEnv: () => env.midwayEnv as string,
};
}
return { controller, seedMockCards };
}
it('NODE_ENV=production 时应抛明确错误且不调用 seedMockCards', async () => {
const { controller, seedMockCards } = createController({
nodeEnv: 'production',
});
await expect(controller.seed()).rejects.toThrow(CoolCommException);
await expect(controller.seed()).rejects.toThrow(
/生产|production|禁止|不可用|不允许/i
);
expect(seedMockCards).not.toHaveBeenCalled();
expect(controller.ok).not.toHaveBeenCalled();
});
it('Midway getEnv()=prod 时应拒绝且不播种', async () => {
const { controller, seedMockCards } = createController({
nodeEnv: 'local',
midwayEnv: 'prod',
});
await expect(controller.seed()).rejects.toThrow(CoolCommException);
expect(seedMockCards).not.toHaveBeenCalled();
});
it('非生产环境应调用 seedMockCards 并正常返回', async () => {
const { controller, seedMockCards } = createController({
nodeEnv: 'local',
midwayEnv: 'local',
});
const result = await controller.seed();
expect(seedMockCards).toHaveBeenCalledTimes(1);
expect(controller.ok).toHaveBeenCalled();
expect(result).toEqual({
code: 1000,
data: expect.objectContaining({ count: 6 }),
});
});
it('unittest 环境允许播种(本地测试)', async () => {
const { controller, seedMockCards } = createController({
nodeEnv: 'unittest',
midwayEnv: 'unittest',
});
await controller.seed();
expect(seedMockCards).toHaveBeenCalledTimes(1);
});
});