const assert = require("assert"); const { loadModule, createRes, respondSuccessMock, respondErrorMock } = require("./_shared.cjs"); const tests = []; const test = (name, fn) => tests.push({ name, fn }); test("getaccounts returns EMAIL_ADDRESS_REQUIRED when emailAddress missing", async () => { const mod = loadModule("pages/api/endpoint/getaccounts_api.js", { respondError: respondErrorMock, respondSuccess: respondSuccessMock, getToken: async () => ({ access_token: "token" }), hashAPIPath: () => "&hash=expected", azureHeaders: () => ({}), axios: { get: async () => ({ data: { value: [] } }) }, consoleLogger: () => {} }); const req = { query: {} }; const res = createRes(); await mod.default(req, res); assert.strictEqual(res.state.statusCode, 400); assert.strictEqual(res.state.jsonBody.error.code, "EMAIL_ADDRESS_REQUIRED"); }); test("getaccounts catch path returns ACCOUNTS_FETCH_FAILED", async () => { const mod = loadModule("pages/api/endpoint/getaccounts_api.js", { respondError: respondErrorMock, respondSuccess: respondSuccessMock, getToken: async () => ({ access_token: "token" }), hashAPIPath: () => "&hash=expected", azureHeaders: () => ({}), axios: { get: async () => { throw new Error("relay failed"); } }, consoleLogger: () => {} }); const req = { query: { emailAddress: "user@test.local" } }; const res = createRes(); await mod.default(req, res); assert.strictEqual(res.state.statusCode, 400); assert.strictEqual(res.state.jsonBody.error.code, "ACCOUNTS_FETCH_FAILED"); }); test("getemailaccountcheck returns EMAIL_ADDRESS_REQUIRED when emailAddress missing", async () => { const mod = loadModule("pages/api/endpoint/getemailaccountcheck_api.js", { respondError: respondErrorMock, respondSuccess: respondSuccessMock, getToken: async () => ({ access_token: "token" }), hashAPIPath: () => "&hash=expected", azureHeaders: () => ({}), axios: { get: async () => ({ data: { value: [] } }) }, consoleLogger: () => {} }); const req = { query: {} }; const res = createRes(); await mod.default(req, res); assert.strictEqual(res.state.statusCode, 400); assert.strictEqual(res.state.jsonBody.error.code, "EMAIL_ADDRESS_REQUIRED"); }); test("getemailaccountcheck catch path returns EMAIL_ACCOUNT_CHECK_FAILED", async () => { const mod = loadModule("pages/api/endpoint/getemailaccountcheck_api.js", { respondError: respondErrorMock, respondSuccess: respondSuccessMock, getToken: async () => ({ access_token: "token" }), hashAPIPath: () => "&hash=expected", azureHeaders: () => ({}), axios: { get: async () => { throw new Error("relay failed"); } }, consoleLogger: () => {} }); const req = { query: { emailAddress: "user@test.local" } }; const res = createRes(); await mod.default(req, res); assert.strictEqual(res.state.statusCode, 400); assert.strictEqual( res.state.jsonBody.error.code, "EMAIL_ACCOUNT_CHECK_FAILED" ); }); test("getpreferredlanguage returns EMAIL_ADDRESS_REQUIRED when emailAddress missing", async () => { const mod = loadModule("pages/api/endpoint/getpreferredlanguage_api.js", { respondError: respondErrorMock, respondSuccess: respondSuccessMock, sanitizeString: () => "", isNonEmptyString: () => false, escapeODataString: (value) => value, getToken: async () => ({ access_token: "token" }), hashAPIPath: () => "&hash=expected", azureHeaders: () => ({}), axios: { get: async () => ({ data: { value: [] } }) }, consoleLogger: () => {} }); const req = { query: {} }; const res = createRes(); await mod.default(req, res); assert.strictEqual(res.state.statusCode, 400); assert.strictEqual(res.state.jsonBody.error.code, "EMAIL_ADDRESS_REQUIRED"); }); test("getpreferredlanguage catch path returns PREFERRED_LANGUAGE_FETCH_FAILED", async () => { const mod = loadModule("pages/api/endpoint/getpreferredlanguage_api.js", { respondError: respondErrorMock, respondSuccess: respondSuccessMock, sanitizeString: (value) => value, isNonEmptyString: () => true, escapeODataString: (value) => value, getToken: async () => ({ access_token: "token" }), hashAPIPath: () => "&hash=expected", azureHeaders: () => ({}), axios: { get: async () => { throw new Error("relay failed"); } }, consoleLogger: () => {} }); const req = { query: { emailAddress: "user@test.local" } }; const res = createRes(); await mod.default(req, res); assert.strictEqual(res.state.statusCode, 400); assert.strictEqual( res.state.jsonBody.error.code, "PREFERRED_LANGUAGE_FETCH_FAILED" ); }); test("getpreferredlanguage success returns existing data payload contract", async () => { const mod = loadModule("pages/api/endpoint/getpreferredlanguage_api.js", { respondError: respondErrorMock, respondSuccess: respondSuccessMock, sanitizeString: (value) => value, isNonEmptyString: () => true, escapeODataString: (value) => value, getToken: async () => ({ access_token: "token" }), hashAPIPath: () => "&hash=expected", azureHeaders: () => ({}), axios: { get: async () => ({ data: { value: [ { contactid: "c1", pinswg_preferredlanguage: 807570001 } ] } }) }, consoleLogger: () => {} }); const req = { query: { emailAddress: "user@test.local" } }; const res = createRes(); await mod.default(req, res); assert.strictEqual(res.state.statusCode, 200); assert.deepStrictEqual(JSON.parse(JSON.stringify(res.state.jsonBody)), { value: [ { contactid: "c1", pinswg_preferredlanguage: 807570001 } ] }); }); const run = async () => { let passed = 0; for (const currentTest of tests) { await currentTest.fn(); passed += 1; } console.log( `Phase 21 endpoint-handler contract tests passed (${passed}/${tests.length}).` ); }; module.exports = run; if (require.main === module) { run().catch((error) => { console.error(error); process.exit(1); }); }