From 6da6fdb4d2518b889454d8adbecfeef36516176e Mon Sep 17 00:00:00 2001 From: robbond Date: Tue, 24 Mar 2026 09:28:01 +0000 Subject: [PATCH] refactor(api): migrate batch 6 endpoints to relayGet --- memory-bank/change-log.md | 32 +++++++++++++ pages/api/endpoint/getformdata_api.js | 40 +++++----------- pages/api/endpoint/getpersonalaccount_api.js | 38 +++++---------- .../endpoint/getportalmoduledetails_api.js | 45 ++++++------------ .../endpoint/getsearchdocumenthistory_api.js | 37 +++++---------- .../getsearchdocumenthistorypaged_api.js | 46 +++++++------------ tests/phase21/_shared.cjs | 3 ++ .../endpoint-handler-contract.test.cjs | 42 +++++++++++++++++ 8 files changed, 144 insertions(+), 139 deletions(-) diff --git a/memory-bank/change-log.md b/memory-bank/change-log.md index d265dc77..faac9c3d 100644 --- a/memory-bank/change-log.md +++ b/memory-bank/change-log.md @@ -870,3 +870,35 @@ Validation: Follow-ups: - Continue P2-S2 with next bounded batch (e.g. search/listing cluster) as a separate commit if required. + +--- + +### CL-023: TASK22229 P2-S2 Batch 6 (profile/form/document-history/portal-module relay GET cluster) + +date: 2026-03-24 +author: Cline +scope: `pages/api/endpoint/{getpersonalaccount_api,getformdata_api,getsearchdocumenthistory_api,getsearchdocumenthistorypaged_api,getportalmoduledetails_api}.js`, `tests/phase21/endpoint-handler-contract.test.cjs` +type: change +rationale: Execute requested Batch 6 by migrating the next bounded set of read-only endpoint handlers to shared `relayGet` while preserving existing request validation and response/error contracts. +impact: Reduced endpoint relay boilerplate and improved consistency; no intended behavior contract changes. +status: completed + +Summary: + +- Migrated Batch 6 endpoints to shared `relayGet`: + - `getpersonalaccount_api.js` + - `getformdata_api.js` + - `getsearchdocumenthistory_api.js` (uses `requestOptionsBuilder` with `azureHeadersPaged`) + - `getsearchdocumenthistorypaged_api.js` (uses `requestOptionsBuilder` with `azureHeadersPaged`) + - `getportalmoduledetails_api.js` +- Preserved all existing required-query validation guards and existing error codes/messages. +- Updated Phase 21 endpoint contract tests to inject `relayGet` mocks for migrated handlers (validation path, catch path, and success path where applicable). + +Validation: + +- `node tests/phase21/endpoint-handler-contract.test.cjs` -> pass (152/152) +- `npm run lint` -> warnings only (pre-existing `react-hooks/exhaustive-deps`; no new lint errors) + +Follow-ups: + +- Optional next bounded batch: migrate remaining legacy relay GET handlers in advanced/basic search-document/detail clusters that still use direct axios relay patterns. diff --git a/pages/api/endpoint/getformdata_api.js b/pages/api/endpoint/getformdata_api.js index 39ac3034..11eef400 100644 --- a/pages/api/endpoint/getformdata_api.js +++ b/pages/api/endpoint/getformdata_api.js @@ -1,13 +1,5 @@ -import axios from "axios"; -import { azureHeaders } from "../../../actions/core/headers"; -import { consoleLogger } from "../../../actions/core/logger"; -import { getToken } from "../../../actions/core/token"; -import { hashAPIPath } from "../../../actions/core/hash"; -import { respondError, respondSuccess } from "../middleware/apiResponse"; - -const WEBAPI_URL = - process.env.RELAY_ROOT || - "https://dev-pedw-ns.servicebus.windows.net/dev-pedw-hc/"; +import { respondError } from "../middleware/apiResponse"; +import { relayGet } from "../middleware/relayForwarding"; export default async function ApiProxy(req, res) { const whichForm = req.query.whichForm; @@ -20,26 +12,18 @@ export default async function ApiProxy(req, res) { }); } - try { - const token = await getToken(); + const queryUrl = + "systemforms?$select=formid,name,formxml,type,objecttypecode&$filter=(objecttypecode eq 'pinswg_" + + whichForm + + "' and type eq 2)&$count=true&$top=201"; - const queryUrl = - "systemforms?$select=formid,name,formxml,type,objecttypecode&$filter=(objecttypecode eq 'pinswg_" + - whichForm + - "' and type eq 2)&$count=true&$top=201"; - - const { data } = await axios.get( - WEBAPI_URL + queryUrl + hashAPIPath(queryUrl), - azureHeaders(token.access_token) - ); - - return respondSuccess(res, data); - } catch (error) { - consoleLogger(error); - return respondError(res, { + return relayGet({ + queryUrl, + res, + errorResponse: { status: 400, code: "FORM_DATA_FETCH_FAILED", message: "Failed to fetch form data" - }); - } + } + }); } diff --git a/pages/api/endpoint/getpersonalaccount_api.js b/pages/api/endpoint/getpersonalaccount_api.js index 2aae367a..56039c90 100644 --- a/pages/api/endpoint/getpersonalaccount_api.js +++ b/pages/api/endpoint/getpersonalaccount_api.js @@ -17,16 +17,8 @@ * description: hello world */ -import axios from "axios"; -import { azureHeaders } from "../../../actions/core/headers"; -import { consoleLogger } from "../../../actions/core/logger"; -import { getToken } from "../../../actions/core/token"; -import { hashAPIPath } from "../../../actions/core/hash"; -import { respondError, respondSuccess } from "../middleware/apiResponse"; - -const WEBAPI_URL = - process.env.RELAY_ROOT || - "https://dev-pedw-ns.servicebus.windows.net/dev-pedw-hc/"; +import { respondError } from "../middleware/apiResponse"; +import { relayGet } from "../middleware/relayForwarding"; export default async function ApiProxy(req, res) { const contactid = req.query.contactid; @@ -39,24 +31,18 @@ export default async function ApiProxy(req, res) { }); } - try { - const token = await getToken(); - const queryUrl = - "contacts(" + - contactid + - ")?$select=firstname, lastname, emailaddress1, telephone1, company, address1_line1,address1_line2,address1_city, address1_county,address1_postalcode,pinswg_typeofinvolvement,pinswg_contact_associatedlpa,pinswg_preferredlanguage&$count=true"; - const { data } = await axios.get( - WEBAPI_URL + queryUrl + hashAPIPath(queryUrl), - azureHeaders(token.access_token) - ); + const queryUrl = + "contacts(" + + contactid + + ")?$select=firstname, lastname, emailaddress1, telephone1, company, address1_line1,address1_line2,address1_city, address1_county,address1_postalcode,pinswg_typeofinvolvement,pinswg_contact_associatedlpa,pinswg_preferredlanguage&$count=true"; - return respondSuccess(res, data); - } catch (error) { - consoleLogger(error); - return respondError(res, { + return relayGet({ + queryUrl, + res, + errorResponse: { status: 400, code: "PERSONAL_ACCOUNT_FETCH_FAILED", message: "Failed to fetch personal account" - }); - } + } + }); } diff --git a/pages/api/endpoint/getportalmoduledetails_api.js b/pages/api/endpoint/getportalmoduledetails_api.js index 90c07967..23e44cf6 100644 --- a/pages/api/endpoint/getportalmoduledetails_api.js +++ b/pages/api/endpoint/getportalmoduledetails_api.js @@ -23,17 +23,9 @@ * description: hello world */ -import axios from "axios"; -import { azureHeaders } from "../../../actions/core/headers"; -import { consoleLogger } from "../../../actions/core/logger"; -import { getToken } from "../../../actions/core/token"; import { getSelectQuery } from "../../../actions/selectQueryTypes"; -import { hashAPIPath } from "../../../actions/core/hash"; -import { respondError, respondSuccess } from "../middleware/apiResponse"; - -const WEBAPI_URL = - process.env.RELAY_ROOT || - "https://dev-pedw-ns.servicebus.windows.net/dev-pedw-hc/"; +import { respondError } from "../middleware/apiResponse"; +import { relayGet } from "../middleware/relayForwarding"; export default async function ApiProxy(req, res) { const appealType = req.query.appealType; @@ -58,30 +50,23 @@ export default async function ApiProxy(req, res) { }); } - try { - const token = await getToken(); - const escapedCaseReference = caseReference.split("'").join("''"); + const escapedCaseReference = caseReference.split("'").join("''"); - let queryUrl = - appealType + - "?$filter=pinswg_name eq '" + - escapedCaseReference + - "'&$count=true"; + let queryUrl = + appealType + + "?$filter=pinswg_name eq '" + + escapedCaseReference + + "'&$count=true"; - queryUrl = queryUrl + getSelectQuery(appealType); + queryUrl = queryUrl + getSelectQuery(appealType); - const { data } = await axios.get( - WEBAPI_URL + queryUrl + hashAPIPath(queryUrl), - azureHeaders(token.access_token) - ); - - return respondSuccess(res, data); - } catch (error) { - consoleLogger(error); - return respondError(res, { + return relayGet({ + queryUrl, + res, + errorResponse: { status: 400, code: "PORTAL_MODULE_DETAILS_FETCH_FAILED", message: "Failed to fetch portal module details" - }); - } + } + }); } diff --git a/pages/api/endpoint/getsearchdocumenthistory_api.js b/pages/api/endpoint/getsearchdocumenthistory_api.js index 19893c0a..51f602cb 100644 --- a/pages/api/endpoint/getsearchdocumenthistory_api.js +++ b/pages/api/endpoint/getsearchdocumenthistory_api.js @@ -16,16 +16,9 @@ * description: Success */ -import axios from "axios"; import { azureHeadersPaged } from "../../../actions/core/headers"; -import { consoleLogger } from "../../../actions/core/logger"; -import { getToken } from "../../../actions/core/token"; -import { hashAPIPath } from "../../../actions/core/hash"; -import { respondError, respondSuccess } from "../middleware/apiResponse"; - -const WEBAPI_URL = - process.env.RELAY_ROOT || - "https://dev-pedw-ns.servicebus.windows.net/dev-pedw-hc/"; +import { respondError } from "../middleware/apiResponse"; +import { relayGet } from "../middleware/relayForwarding"; export default async function ApiProxy(req, res) { const documentID = req.query.documentid; @@ -38,24 +31,18 @@ export default async function ApiProxy(req, res) { }); } - try { - const token = await getToken(); - const queryUrl = - "pinswg_documenthistories?$count=true&$select=_pinswg_documentid_value,pinswg_createddate,pinswg_state,pinswg_fileexists,statecode,pinswg_publisheddate&$filter=_pinswg_documentid_value eq " + - documentID; + const queryUrl = + "pinswg_documenthistories?$count=true&$select=_pinswg_documentid_value,pinswg_createddate,pinswg_state,pinswg_fileexists,statecode,pinswg_publisheddate&$filter=_pinswg_documentid_value eq " + + documentID; - const { data } = await axios.get( - WEBAPI_URL + queryUrl + hashAPIPath(queryUrl), - azureHeadersPaged(token.access_token) - ); - - return respondSuccess(res, data); - } catch (error) { - consoleLogger(error); - return respondError(res, { + return relayGet({ + queryUrl, + res, + requestOptionsBuilder: (accessToken) => azureHeadersPaged(accessToken), + errorResponse: { status: 400, code: "SEARCH_DOCUMENT_HISTORY_FETCH_FAILED", message: "Failed to fetch search document history" - }); - } + } + }); } diff --git a/pages/api/endpoint/getsearchdocumenthistorypaged_api.js b/pages/api/endpoint/getsearchdocumenthistorypaged_api.js index 4ee413c4..3cbad2b1 100644 --- a/pages/api/endpoint/getsearchdocumenthistorypaged_api.js +++ b/pages/api/endpoint/getsearchdocumenthistorypaged_api.js @@ -42,16 +42,9 @@ * description: Success */ -import axios from "axios"; import { azureHeadersPaged } from "../../../actions/core/headers"; -import { consoleLogger } from "../../../actions/core/logger"; -import { getToken } from "../../../actions/core/token"; -import { hashAPIPath } from "../../../actions/core/hash"; -import { respondError, respondSuccess } from "../middleware/apiResponse"; - -const WEBAPI_URL = - process.env.RELAY_ROOT || - "https://dev-pedw-ns.servicebus.windows.net/dev-pedw-hc/"; +import { respondError } from "../middleware/apiResponse"; +import { relayGet } from "../middleware/relayForwarding"; export default async function ApiProxy(req, res) { const documentID = req.query.documentid; @@ -64,29 +57,22 @@ export default async function ApiProxy(req, res) { }); } - try { - const token = await getToken(); + const queryUrl = + "pinswg_documenthistories?$count=true&$select=_pinswg_documentid_value,pinswg_createddate,pinswg_state,pinswg_fileexists,statecode,pinswg_publisheddate&$filter=_pinswg_documentid_value eq " + + documentID; + // + + // (typeof pageNumber != "undefined" + // ? "&$skiptoken=" + ('') + // : ""); - const queryUrl = - "pinswg_documenthistories?$count=true&$select=_pinswg_documentid_value,pinswg_createddate,pinswg_state,pinswg_fileexists,statecode,pinswg_publisheddate&$filter=_pinswg_documentid_value eq " + - documentID; - // + - // (typeof pageNumber != "undefined" - // ? "&$skiptoken=" + ('') - // : ""); - - const { data } = await axios.get( - WEBAPI_URL + queryUrl + hashAPIPath(queryUrl), - azureHeadersPaged(token.access_token) - ); - - return respondSuccess(res, data); - } catch (error) { - consoleLogger(error); - return respondError(res, { + return relayGet({ + queryUrl, + res, + requestOptionsBuilder: (accessToken) => azureHeadersPaged(accessToken), + errorResponse: { status: 400, code: "SEARCH_DOCUMENT_HISTORY_PAGED_FETCH_FAILED", message: "Failed to fetch paged search document history" - }); - } + } + }); } diff --git a/tests/phase21/_shared.cjs b/tests/phase21/_shared.cjs index ada96f29..118144c0 100644 --- a/tests/phase21/_shared.cjs +++ b/tests/phase21/_shared.cjs @@ -41,6 +41,8 @@ const loadModule = (relativePath, injected = {}) => { source += '\nif (typeof ApiProxy !== "undefined" && !module.exports.default) module.exports.default = ApiProxy;\n'; + const defaultRelayGet = async () => ({}); + const context = { module: { exports: {} }, exports: {}, @@ -52,6 +54,7 @@ const loadModule = (relativePath, injected = {}) => { warn: () => {}, error: () => {} }, + relayGet: defaultRelayGet, ...injected }; diff --git a/tests/phase21/endpoint-handler-contract.test.cjs b/tests/phase21/endpoint-handler-contract.test.cjs index c0fdfa91..7c5b5f60 100644 --- a/tests/phase21/endpoint-handler-contract.test.cjs +++ b/tests/phase21/endpoint-handler-contract.test.cjs @@ -947,6 +947,7 @@ test("getbasicsearch returns SEARCH_STRING_REQUIRED when searchString missing", const mod = loadModule("pages/api/endpoint/getbasicsearch_api.js", { respondError: respondErrorMock, respondSuccess: respondSuccessMock, + relayGet: async () => ({}), getToken: async () => ({ access_token: "token" }), hashAPIPath: () => "&hash=expected", azureHeadersPaged: () => ({}), @@ -966,6 +967,8 @@ test("getbasicsearch catch path returns BASIC_SEARCH_FETCH_FAILED", async () => const mod = loadModule("pages/api/endpoint/getbasicsearch_api.js", { respondError: respondErrorMock, respondSuccess: respondSuccessMock, + relayGet: async ({ res, errorResponse }) => + respondErrorMock(res, errorResponse), getToken: async () => ({ access_token: "token" }), hashAPIPath: () => "&hash=expected", azureHeadersPaged: () => ({}), @@ -992,6 +995,7 @@ test("getcasemessage returns CASE_ID_REQUIRED when id missing", async () => { const mod = loadModule("pages/api/endpoint/getcasemessage_api.js", { respondError: respondErrorMock, respondSuccess: respondSuccessMock, + relayGet: async () => ({}), getToken: async () => ({ access_token: "token" }), hashAPIPath: () => "&hash=expected", azureHeadersPaged: () => ({}), @@ -1011,6 +1015,8 @@ test("getcasemessage catch path returns CASE_MESSAGE_FETCH_FAILED", async () => const mod = loadModule("pages/api/endpoint/getcasemessage_api.js", { respondError: respondErrorMock, respondSuccess: respondSuccessMock, + relayGet: async ({ res, errorResponse }) => + respondErrorMock(res, errorResponse), getToken: async () => ({ access_token: "token" }), hashAPIPath: () => "&hash=expected", azureHeadersPaged: () => ({}), @@ -1195,6 +1201,7 @@ test("getsearchdocumenthistory returns DOCUMENT_ID_REQUIRED when documentid miss { respondError: respondErrorMock, respondSuccess: respondSuccessMock, + relayGet: async () => ({}), getToken: async () => ({ access_token: "token" }), hashAPIPath: () => "&hash=expected", azureHeadersPaged: () => ({}), @@ -1217,6 +1224,8 @@ test("getsearchdocumenthistory catch path returns SEARCH_DOCUMENT_HISTORY_FETCH_ { respondError: respondErrorMock, respondSuccess: respondSuccessMock, + relayGet: async ({ res, errorResponse }) => + respondErrorMock(res, errorResponse), getToken: async () => ({ access_token: "token" }), hashAPIPath: () => "&hash=expected", azureHeadersPaged: () => ({}), @@ -1246,6 +1255,10 @@ test("getsearchdocumenthistory success returns existing data payload contract", { respondError: respondErrorMock, respondSuccess: respondSuccessMock, + relayGet: async ({ res }) => + respondSuccessMock(res, { + value: [{ _pinswg_documentid_value: "d1" }] + }), getToken: async () => ({ access_token: "token" }), hashAPIPath: () => "&hash=expected", azureHeadersPaged: () => ({}), @@ -1274,6 +1287,7 @@ test("getsearchdocumenthistorypaged returns DOCUMENT_ID_REQUIRED when documentid { respondError: respondErrorMock, respondSuccess: respondSuccessMock, + relayGet: async () => ({}), getToken: async () => ({ access_token: "token" }), hashAPIPath: () => "&hash=expected", azureHeadersPaged: () => ({}), @@ -1296,6 +1310,8 @@ test("getsearchdocumenthistorypaged catch path returns SEARCH_DOCUMENT_HISTORY_P { respondError: respondErrorMock, respondSuccess: respondSuccessMock, + relayGet: async ({ res, errorResponse }) => + respondErrorMock(res, errorResponse), getToken: async () => ({ access_token: "token" }), hashAPIPath: () => "&hash=expected", azureHeadersPaged: () => ({}), @@ -2065,6 +2081,8 @@ test("getbasicdnssearch catch path returns BASIC_DNS_SEARCH_FETCH_FAILED", async const mod = loadModule("pages/api/endpoint/getbasicdnssearch_api.js", { respondError: respondErrorMock, respondSuccess: respondSuccessMock, + relayGet: async ({ res, errorResponse }) => + respondErrorMock(res, errorResponse), getToken: async () => ({ access_token: "token" }), hashAPIPath: () => "&hash=expected", azureHeadersPaged: () => ({}), @@ -2259,6 +2277,7 @@ test("getportalmoduledetails returns APPEAL_TYPE_REQUIRED when appealType missin const mod = loadModule("pages/api/endpoint/getportalmoduledetails_api.js", { respondError: respondErrorMock, respondSuccess: respondSuccessMock, + relayGet: async () => ({}), getToken: async () => ({ access_token: "token" }), getSelectQuery: () => "&$select=pinswg_name", hashAPIPath: () => "&hash=expected", @@ -2279,6 +2298,8 @@ test("getportalmoduledetails catch path returns PORTAL_MODULE_DETAILS_FETCH_FAIL const mod = loadModule("pages/api/endpoint/getportalmoduledetails_api.js", { respondError: respondErrorMock, respondSuccess: respondSuccessMock, + relayGet: async ({ res, errorResponse }) => + respondErrorMock(res, errorResponse), getToken: async () => ({ access_token: "token" }), getSelectQuery: () => "&$select=pinswg_name", hashAPIPath: () => "&hash=expected", @@ -2853,6 +2874,8 @@ test("getlpa catch path returns LPA_FETCH_FAILED", async () => { const mod = loadModule("pages/api/endpoint/getlpa_api.js", { respondError: respondErrorMock, respondSuccess: respondSuccessMock, + relayGet: async ({ res, errorResponse }) => + respondErrorMock(res, errorResponse), getToken: async () => ({ access_token: "token" }), hashAPIPath: () => "&hash=expected", azureHeaders: () => ({}), @@ -2932,6 +2955,8 @@ test("getprojecttypes catch path returns PROJECT_TYPES_FETCH_FAILED", async () = const mod = loadModule("pages/api/endpoint/getprojecttypes_api.js", { respondError: respondErrorMock, respondSuccess: respondSuccessMock, + relayGet: async ({ res, errorResponse }) => + respondErrorMock(res, errorResponse), getToken: async () => ({ access_token: "token" }), hashAPIPath: () => "&hash=expected", azureHeaders: () => ({}), @@ -2958,6 +2983,8 @@ test("getappealtypes catch path returns APPEAL_TYPES_FETCH_FAILED", async () => const mod = loadModule("pages/api/endpoint/getappealtypes_api.js", { respondError: respondErrorMock, respondSuccess: respondSuccessMock, + relayGet: async ({ res, errorResponse }) => + respondErrorMock(res, errorResponse), getToken: async () => ({ access_token: "token" }), hashAPIPath: () => "&hash=expected", azureHeaders: () => ({}), @@ -2985,6 +3012,7 @@ test("getlinkedcases returns PARENT_INCIDENT_ID_REQUIRED when parentincidentid m const mod = loadModule("pages/api/endpoint/getlinkedcases_api.js", { respondError: respondErrorMock, respondSuccess: respondSuccessMock, + relayGet: async () => ({}), getToken: async () => ({ access_token: "token" }), hashAPIPath: () => "&hash=expected", azureHeadersPaged: () => ({}), @@ -3007,6 +3035,8 @@ test("getlinkedcases catch path returns LINKED_CASES_FETCH_FAILED", async () => const mod = loadModule("pages/api/endpoint/getlinkedcases_api.js", { respondError: respondErrorMock, respondSuccess: respondSuccessMock, + relayGet: async ({ res, errorResponse }) => + respondErrorMock(res, errorResponse), getToken: async () => ({ access_token: "token" }), hashAPIPath: () => "&hash=expected", azureHeadersPaged: () => ({}), @@ -3033,6 +3063,7 @@ test("getformdata returns WHICH_FORM_REQUIRED when whichForm missing", async () const mod = loadModule("pages/api/endpoint/getformdata_api.js", { respondError: respondErrorMock, respondSuccess: respondSuccessMock, + relayGet: async () => ({}), getToken: async () => ({ access_token: "token" }), hashAPIPath: () => "&hash=expected", azureHeaders: () => ({}), @@ -3052,6 +3083,8 @@ test("getformdata catch path returns FORM_DATA_FETCH_FAILED", async () => { const mod = loadModule("pages/api/endpoint/getformdata_api.js", { respondError: respondErrorMock, respondSuccess: respondSuccessMock, + relayGet: async ({ res, errorResponse }) => + respondErrorMock(res, errorResponse), getToken: async () => ({ access_token: "token" }), hashAPIPath: () => "&hash=expected", azureHeaders: () => ({}), @@ -3075,6 +3108,7 @@ test("getispublishedbyid returns SEARCH_STRING_REQUIRED when searchString missin const mod = loadModule("pages/api/endpoint/getispublishedbyid_api.js", { respondError: respondErrorMock, respondSuccess: respondSuccessMock, + relayGet: async () => ({}), getToken: async () => ({ access_token: "token" }), hashAPIPath: () => "&hash=expected", azureHeaders: () => ({}), @@ -3094,6 +3128,8 @@ test("getispublishedbyid catch path returns IS_PUBLISHED_FETCH_FAILED", async () const mod = loadModule("pages/api/endpoint/getispublishedbyid_api.js", { respondError: respondErrorMock, respondSuccess: respondSuccessMock, + relayGet: async ({ res, errorResponse }) => + respondErrorMock(res, errorResponse), getToken: async () => ({ access_token: "token" }), hashAPIPath: () => "&hash=expected", azureHeaders: () => ({}), @@ -3257,6 +3293,7 @@ test("getbasicdnsurlsearch returns SEARCH_STRING_REQUIRED when searchString miss const mod = loadModule("pages/api/endpoint/getbasicdnsurlsearch_api.js", { respondError: respondErrorMock, respondSuccess: respondSuccessMock, + relayGet: async () => ({}), getToken: async () => ({ access_token: "token" }), hashAPIPath: () => "&hash=expected", azureHeadersPaged: () => ({}), @@ -3277,6 +3314,8 @@ test("getbasicdnsurlsearch catch path returns BASIC_DNS_URL_SEARCH_FETCH_FAILED" const mod = loadModule("pages/api/endpoint/getbasicdnsurlsearch_api.js", { respondError: respondErrorMock, respondSuccess: respondSuccessMock, + relayGet: async ({ res, errorResponse }) => + respondErrorMock(res, errorResponse), getToken: async () => ({ access_token: "token" }), hashAPIPath: () => "&hash=expected", azureHeadersPaged: () => ({}), @@ -3304,6 +3343,7 @@ test("getpartsavedappeal returns SEARCH_STRING_REQUIRED when searchString missin const mod = loadModule("pages/api/endpoint/getpartsavedappeal_api.js", { respondError: respondErrorMock, respondSuccess: respondSuccessMock, + relayGet: async () => ({}), getToken: async () => ({ access_token: "token" }), hashAPIPath: () => "&hash=expected", azureHeadersPaged: () => ({}), @@ -3324,6 +3364,8 @@ test("getpartsavedappeal catch path returns PART_SAVED_APPEAL_FETCH_FAILED", asy const mod = loadModule("pages/api/endpoint/getpartsavedappeal_api.js", { respondError: respondErrorMock, respondSuccess: respondSuccessMock, + relayGet: async ({ res, errorResponse }) => + respondErrorMock(res, errorResponse), getToken: async () => ({ access_token: "token" }), hashAPIPath: () => "&hash=expected", azureHeadersPaged: () => ({}),