/** * Simyo 设备更换处理模块集成测试 */ import { deviceChangeHandler } from '../../src/simyo/js/modules/device-change-handler.js'; import { stateManager } from '../../src/simyo/js/modules/state-manager.js'; describe('Simyo DeviceChangeHandler 集成覆盖', () => { beforeEach(() => { stateManager.clearSession(); stateManager.set('sessionToken', 'test-session-token'); global.fetch.mockReset(); }); it('应完成设备更换主流程:applyNewEsim -> verifyCode', async () => { const jsonHeaders = { get: (name) => name === 'content-type' ? 'application/json' : null }; global.fetch .mockResolvedValueOnce({ headers: jsonHeaders, ok: true, json: async () => ({ success: true, result: { message: 'apply success', remainingNumberOfTries: 3 } }) }) .mockResolvedValueOnce({ headers: jsonHeaders, ok: true, json: async () => ({ success: true, result: { message: 'verify success', remainingNumberOfTries: 2 } }) }); const applyResult = await deviceChangeHandler.applyNewEsim(); const verifyResult = await deviceChangeHandler.verifyCode('123456'); expect(applyResult.success).toBe(true); expect(verifyResult.success).toBe(true); expect(stateManager.get('validationCode')).toBe('123456'); expect(global.fetch).toHaveBeenCalledTimes(2); expect(global.fetch).toHaveBeenNthCalledWith( 1, '/api/simyo/settings/simcard', expect.objectContaining({ method: 'POST' }) ); expect(global.fetch).toHaveBeenNthCalledWith( 2, '/api/simyo/esim/verify-code', expect.objectContaining({ method: 'POST' }) ); }); });