From 134f99c04c09ea82e4dd87f601bd6dc9d88ef133 Mon Sep 17 00:00:00 2001 From: robbond Date: Mon, 23 Mar 2026 12:16:31 +0000 Subject: [PATCH] TASK22211: normalize address search endpoint contract --- .../endpoint/getbasicsearch_by_address_api.js | 10 ++-- .../endpoint-handler-contract.test.cjs | 58 +++++++++++++++++++ 2 files changed, 64 insertions(+), 4 deletions(-) diff --git a/pages/api/endpoint/getbasicsearch_by_address_api.js b/pages/api/endpoint/getbasicsearch_by_address_api.js index c5bf4477..02ab6644 100644 --- a/pages/api/endpoint/getbasicsearch_by_address_api.js +++ b/pages/api/endpoint/getbasicsearch_by_address_api.js @@ -4,6 +4,7 @@ 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 || @@ -728,15 +729,16 @@ export default async function ApiProxy(req, res) { (record) => record.pinswg_publishtoweb ); - return res.status(200).json({ + return respondSuccess(res, { "@odata.count": searchResultsObj.length, value: searchResultsObj }); } catch (error) { consoleLogger(error); - return res.status(500).json({ - message: "Failed to retrieve search results.", - error: error?.message || error + return respondError(res, { + status: 500, + code: "BASIC_SEARCH_BY_ADDRESS_FETCH_FAILED", + message: "Failed to retrieve search results" }); } } diff --git a/tests/phase21/endpoint-handler-contract.test.cjs b/tests/phase21/endpoint-handler-contract.test.cjs index f2cc2c3c..137144fe 100644 --- a/tests/phase21/endpoint-handler-contract.test.cjs +++ b/tests/phase21/endpoint-handler-contract.test.cjs @@ -1859,6 +1859,64 @@ test("getbasicsearch_by_lparref catch path returns BASIC_SEARCH_LPA_REF_FETCH_FA ); }); +test("getbasicsearch_by_address success returns existing payload contract", async () => { + const mod = loadModule( + "pages/api/endpoint/getbasicsearch_by_address_api.js", + { + respondError: respondErrorMock, + respondSuccess: respondSuccessMock, + getToken: async () => ({ access_token: "token" }), + hashAPIPath: () => "&hash=expected", + azureHeaders: () => ({}), + axios: { + get: async () => ({ data: { value: [] } }) + }, + consoleLogger: () => {}, + jsonpath: () => [] + } + ); + + const req = { query: {} }; + const res = createRes(); + await mod.default(req, res); + + assert.strictEqual(res.state.statusCode, 200); + assert.deepStrictEqual(JSON.parse(JSON.stringify(res.state.jsonBody)), { + "@odata.count": 0, + value: [] + }); +}); + +test("getbasicsearch_by_address catch path returns BASIC_SEARCH_BY_ADDRESS_FETCH_FAILED", async () => { + const mod = loadModule( + "pages/api/endpoint/getbasicsearch_by_address_api.js", + { + respondError: respondErrorMock, + respondSuccess: respondSuccessMock, + getToken: async () => { + throw new Error("token failed"); + }, + hashAPIPath: () => "&hash=expected", + azureHeaders: () => ({}), + axios: { + get: async () => ({ data: { value: [] } }) + }, + consoleLogger: () => {}, + jsonpath: () => [] + } + ); + + const req = { query: {} }; + const res = createRes(); + await mod.default(req, res); + + assert.strictEqual(res.state.statusCode, 500); + assert.strictEqual( + res.state.jsonBody.error.code, + "BASIC_SEARCH_BY_ADDRESS_FETCH_FAILED" + ); +}); + test("getbasicdnssearch catch path returns BASIC_DNS_SEARCH_FETCH_FAILED", async () => { const mod = loadModule("pages/api/endpoint/getbasicdnssearch_api.js", { respondError: respondErrorMock,