const test = require('node:test') const assert = require('node:assert/strict') const express = require('express') const { createMockContext } = require('../src/context/createMockContext') const registerMemberProfileRoute = require('../src/routes/ewl/edip/memberProfile') function withEnv(overrides, fn) { const previousValues = new Map() for (const [key, value] of Object.entries(overrides)) { previousValues.set(key, process.env[key]) if (value === undefined) { delete process.env[key] } else { process.env[key] = value } } try { return fn() } finally { for (const [key, value] of previousValues.entries()) { if (value === undefined) { delete process.env[key] } else { process.env[key] = value } } } } async function startMemberProfileApp(envOverrides = {}) { return withEnv(envOverrides, async () => { const context = createMockContext() const app = express() app.use(express.json({ limit: '2mb' })) registerMemberProfileRoute({ app, context }) const server = await new Promise((resolve) => { const instance = app.listen(0, '127.0.0.1', () => resolve(instance)) }) const address = server.address() return { baseUrl: `http://${address.address}:${address.port}`, close: async () => new Promise((resolve, reject) => { server.close((error) => { if (error) { reject(error) return } resolve() }) }), } }) } test('member profile route returns forced 503 when configured', async () => { const app = await startMemberProfileApp({ MOCK_MEMBER_PROFILE_FORCE_STATUS_CODE: '503', MOCK_MEMBER_PROFILE_FORCE_ERROR_CODE: 'MOCK_503', MOCK_MEMBER_PROFILE_FORCE_ERROR_MSG: 'Mock member profile unavailable', MOCK_REDEEMED_PROMOTION_RECORDING_ENABLED: 'false', }) try { const response = await fetch(`${app.baseUrl}/ewl/edip/v1/member/profile`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ schema: {}, data: { accountNum: '80000001' } }), }) const body = await response.json() assert.equal(response.status, 503) assert.equal(body.errorCode, 'MOCK_503') assert.equal(body.message, 'Mock member profile unavailable') } finally { await app.close() } }) test('member profile route delays response when configured', async () => { const app = await startMemberProfileApp({ MOCK_MEMBER_PROFILE_DELAY_MS: '120', MOCK_REDEEMED_PROMOTION_RECORDING_ENABLED: 'false', }) try { const startedAt = Date.now() const response = await fetch(`${app.baseUrl}/ewl/edip/v1/member/profile`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ schema: {}, data: { accountNum: '80000001' } }), }) const elapsedMs = Date.now() - startedAt const body = await response.json() assert.equal(response.status, 200) assert.equal(body.status, true) assert.ok(elapsedMs >= 100, `expected delayed response, got ${elapsedMs}ms`) } finally { await app.close() } })