const assert = require("assert"); const { createAxiosMock, createLoggerMock, createAxiosError, loadServiceModule, normalize } = require("../serviceHarness.cjs"); const tests = []; const test = (name, fn) => { tests.push({ name, fn }); }; test("search/getBasicSearch returns res.data on success", async () => { const axios = createAxiosMock(); const logger = createLoggerMock(); const helpers = loadServiceModule("httpServiceUtils.js", { consoleLogger: logger.consoleLogger }); axios.getHandler = async () => ({ data: { value: ["ok"] } }); const search = loadServiceModule("searchDirectService.js", { axios, BASE_URL: "http://example.local", consoleLogger: logger.consoleLogger, ...helpers }); const result = await search.getBasicSearch("abc"); assert.deepStrictEqual(normalize(result), { value: ["ok"] }); assert.strictEqual( axios.calls[0].url, "http://example.local/api/endpoint/getbasicsearch_api?searchString=abc" ); }); test("search/getBasicSearch returns error.response on failure", async () => { const axios = createAxiosMock(); const logger = createLoggerMock(); const helpers = loadServiceModule("httpServiceUtils.js", { consoleLogger: logger.consoleLogger }); const error = createAxiosError(503, "Unavailable"); axios.getHandler = async () => Promise.reject(error); const search = loadServiceModule("searchDirectService.js", { axios, BASE_URL: "", consoleLogger: logger.consoleLogger, ...helpers }); const result = await search.getBasicSearch("abc"); assert.strictEqual(result, error.response); assert.strictEqual(logger.calls.length, 1); }); test("search/getAdvancedSearch preserves ErrResponse shape on failure", async () => { const axios = createAxiosMock(); const logger = createLoggerMock(); const helpers = loadServiceModule("httpServiceUtils.js", { consoleLogger: logger.consoleLogger }); axios.getHandler = async () => Promise.reject(createAxiosError(400, "Bad Request")); const search = loadServiceModule("searchDirectService.js", { axios, BASE_URL: "", consoleLogger: logger.consoleLogger, ...helpers }); const result = await search.getAdvancedSearch({ foo: "bar" }); assert.deepStrictEqual(normalize(result), { value: [], errorCode: 400, errorMsg: "Bad Request" }); assert.strictEqual(logger.calls.length, 1); }); test("reference/getAppealsTypes preserves ErrResponse shape on failure", async () => { const axios = createAxiosMock(); const logger = createLoggerMock(); const helpers = loadServiceModule("httpServiceUtils.js", { consoleLogger: logger.consoleLogger }); axios.getHandler = async () => Promise.reject(createAxiosError(404, "Not Found")); const reference = loadServiceModule("referenceDataDirectService.js", { axios, BASE_URL: "", consoleLogger: logger.consoleLogger, ...helpers }); const result = await reference.getAppealsTypes(); assert.deepStrictEqual(normalize(result), { value: [], errorCode: 404, errorMsg: "Not Found" }); assert.strictEqual(logger.calls.length, 1); }); test("case/getCaseMessage returns error.response on failure", async () => { const axios = createAxiosMock(); const logger = createLoggerMock(); const helpers = loadServiceModule("httpServiceUtils.js", { consoleLogger: logger.consoleLogger }); const error = createAxiosError(500, "Error"); axios.getHandler = async () => Promise.reject(error); const caseService = loadServiceModule("caseDirectService.js", { axios, BASE_URL: "", consoleLogger: logger.consoleLogger, ...helpers }); const result = await caseService.getCaseMessage("x"); assert.strictEqual(result, error.response); assert.strictEqual(logger.calls.length, 1); }); test("case/getPortalModuleDetails composes BASE_URL route with encoded case reference", async () => { const axios = createAxiosMock(); const logger = createLoggerMock(); axios.getHandler = async () => ({ data: { value: [] } }); const caseService = loadServiceModule("caseDirectService.js", { axios, BASE_URL: "http://example.local", consoleLogger: logger.consoleLogger }); const result = await caseService.getPortalModuleDetails( "appeal", "REF A/B" ); assert.deepStrictEqual(normalize(result), { value: [] }); assert.strictEqual( axios.calls[0].url, "http://example.local/api/endpoint/getportalmoduledetails_api?appealType=appeal&caseReference=REF%20A/B" ); }); test("admin/getNewAppealsPage returns res.data on success", async () => { const axios = createAxiosMock(); const logger = createLoggerMock(); const helpers = loadServiceModule("httpServiceUtils.js", { consoleLogger: logger.consoleLogger }); axios.getHandler = async () => ({ data: { value: [1, 2] } }); const admin = loadServiceModule("adminDirectService.js", { axios, BASE_URL: "", ...helpers }); const result = await admin.getNewAppealsPage("q", 1, "a", "b", 20); assert.deepStrictEqual(normalize(result), { value: [1, 2] }); assert.strictEqual(logger.calls.length, 0); }); test("admin/getNewAppealsPage returns error.response on failure", async () => { const axios = createAxiosMock(); const logger = createLoggerMock(); const helpers = loadServiceModule("httpServiceUtils.js", { consoleLogger: logger.consoleLogger }); const error = createAxiosError(502, "Bad Gateway"); axios.getHandler = async () => Promise.reject(error); const admin = loadServiceModule("adminDirectService.js", { axios, BASE_URL: "", ...helpers }); const result = await admin.getNewAppealsPage("q", 1, "a", "b", 20); assert.strictEqual(result, error.response); assert.strictEqual(logger.calls.length, 1); }); test("admin/getNewAppeals returns error.response on failure", async () => { const axios = createAxiosMock(); const logger = createLoggerMock(); const helpers = loadServiceModule("httpServiceUtils.js", { consoleLogger: logger.consoleLogger }); const error = createAxiosError(401, "Unauthorized"); axios.getHandler = async () => Promise.reject(error); const admin = loadServiceModule("adminDirectService.js", { axios, BASE_URL: "", ...helpers }); const result = await admin.getNewAppeals("ignored"); assert.strictEqual(result, error.response); assert.strictEqual(logger.calls.length, 1); }); const run = async () => { let passed = 0; for (const currentTest of tests) { await currentTest.fn(); passed += 1; } console.log( `Phase 6 behavioural tests passed (${passed}/${tests.length}).` ); }; run().catch((error) => { console.error(error); process.exit(1); });