const assert = require("assert"); const { createAxiosMock, createLoggerMock, createAxiosError, loadServiceModule, normalize } = require("../serviceHarness.cjs"); const tests = []; const test = (name, fn) => tests.push({ name, fn }); test("case/getPortalModuleDetails uses BASE_URL route and 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/myportal/get-portal-module-details?appealType=appeal&caseReference=REF%20A/B" ); }); test("case/getPortalModuleDetailsProxy escapes apostrophes in case reference", async () => { const axios = createAxiosMock(); const logger = createLoggerMock(); axios.getHandler = async () => ({ data: { value: [] } }); const caseService = loadServiceModule("caseDirectService.js", { axios, BASE_URL: "", consoleLogger: logger.consoleLogger }); const result = await caseService.getPortalModuleDetailsProxy( "appeal", "REF'O" ); assert.deepStrictEqual(normalize(result), { value: [] }); assert.strictEqual( axios.calls[0].url, "/api/endpoint/getportalmoduledetailsproxy_api?appealType=appeal&caseReference=REF''O" ); }); test("case/getAppealID composes lookup route and extracts first non-underscore value", async () => { const axios = createAxiosMock(); const logger = createLoggerMock(); axios.getHandler = async () => ({ data: { value: [ { _internal: "ignore", pinswg_appeal: "appeal-123" } ] } }); const caseService = loadServiceModule("caseDirectService.js", { axios, BASE_URL: "", consoleLogger: logger.consoleLogger }); const result = await caseService.getAppealID("REF-1", "pinswg_cases", "id"); assert.strictEqual(result, "appeal-123"); assert.strictEqual( axios.calls[0].url, "/api/endpoint/getappealid_api?updateFormCollection=pinswg_cases&primaryAttribute=id&caseReference=REF-1" ); }); test("case/getAppealPDFDocument logs and returns error.response on failure", async () => { const axios = createAxiosMock(); const logger = createLoggerMock(); const error = createAxiosError(404, "Not Found"); axios.getHandler = async () => Promise.reject(error); const caseService = loadServiceModule("caseDirectService.js", { axios, BASE_URL: "http://example.local", consoleLogger: logger.consoleLogger }); const result = await caseService.getAppealPDFDocument("inc-123"); 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 22 case-service tests passed (${passed}/${tests.length}).` ); }; module.exports = run; if (require.main === module) { run().catch((error) => { console.error(error); process.exit(1); }); }