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); }); });