Merged PR 2429: Add public search API grouping facade slice
Add public search API grouping facade slice Related work items: #23754
This commit is contained in:
@@ -0,0 +1,199 @@
|
||||
const assert = require("assert");
|
||||
const fs = require("fs");
|
||||
const path = require("path");
|
||||
|
||||
const { loadModule, createRes } = require("../phase21/_shared.cjs");
|
||||
|
||||
const rootDir = path.resolve(__dirname, "..", "..");
|
||||
|
||||
const tests = [];
|
||||
const test = (name, fn) => tests.push({ name, fn });
|
||||
|
||||
const read = (relativePath) =>
|
||||
fs.readFileSync(path.join(rootDir, relativePath), "utf8");
|
||||
|
||||
test("search basic-paged facade delegates to legacy handler", async () => {
|
||||
const calls = [];
|
||||
const mod = loadModule("pages/api/search/basic-paged.js", {
|
||||
legacyBasicSearchPagedHandler: async (req, res) => {
|
||||
calls.push({ req, res });
|
||||
return res.status(200).json({ ok: true, route: "basic-paged" });
|
||||
}
|
||||
});
|
||||
|
||||
const req = {
|
||||
method: "GET",
|
||||
query: {
|
||||
searchString: "cas",
|
||||
pageNumber: "1",
|
||||
orderby: "createdon",
|
||||
fieldSort: "desc",
|
||||
showNumberOfRecords: "10"
|
||||
}
|
||||
};
|
||||
const res = createRes();
|
||||
await mod.default(req, res);
|
||||
|
||||
assert.strictEqual(calls.length, 1);
|
||||
assert.strictEqual(calls[0].req, req);
|
||||
assert.strictEqual(calls[0].res, res);
|
||||
});
|
||||
|
||||
test("search advanced facade delegates to legacy handler", async () => {
|
||||
const calls = [];
|
||||
const mod = loadModule("pages/api/search/advanced.js", {
|
||||
legacyAdvancedSearchHandler: async (req, res) => {
|
||||
calls.push({ req, res });
|
||||
return res.status(200).json({ ok: true, route: "advanced" });
|
||||
}
|
||||
});
|
||||
|
||||
const req = { method: "GET", query: { searchstring: '{"q":"cas"}' } };
|
||||
const res = createRes();
|
||||
await mod.default(req, res);
|
||||
|
||||
assert.strictEqual(calls.length, 1);
|
||||
assert.strictEqual(calls[0].req, req);
|
||||
assert.strictEqual(calls[0].res, res);
|
||||
});
|
||||
|
||||
test("search advanced-paged facade delegates to legacy handler", async () => {
|
||||
const calls = [];
|
||||
const mod = loadModule("pages/api/search/advanced-paged.js", {
|
||||
legacyAdvancedSearchPagedHandler: async (req, res) => {
|
||||
calls.push({ req, res });
|
||||
return res.status(200).json({ ok: true, route: "advanced-paged" });
|
||||
}
|
||||
});
|
||||
|
||||
const req = {
|
||||
method: "GET",
|
||||
query: {
|
||||
searchstring: '{"q":"cas"}',
|
||||
pageNumber: "1",
|
||||
orderby: "createdon",
|
||||
fieldSort: "desc",
|
||||
showNumberOfRecords: "10"
|
||||
}
|
||||
};
|
||||
const res = createRes();
|
||||
await mod.default(req, res);
|
||||
|
||||
assert.strictEqual(calls.length, 1);
|
||||
assert.strictEqual(calls[0].req, req);
|
||||
assert.strictEqual(calls[0].res, res);
|
||||
});
|
||||
|
||||
test("search basic-details-paged facade delegates to legacy handler", async () => {
|
||||
const calls = [];
|
||||
const mod = loadModule("pages/api/search/basic-details-paged.js", {
|
||||
legacyBasicSearchDetailsPagedHandler: async (req, res) => {
|
||||
calls.push({ req, res });
|
||||
return res.status(200).json({ value: [{ ticketnumber: "CAS-1" }] });
|
||||
}
|
||||
});
|
||||
|
||||
const req = {
|
||||
method: "GET",
|
||||
query: {
|
||||
appealTypeName: "pinswg_planningappeals78s",
|
||||
primaryIdAttribute: "pinswg_planningappeals78id",
|
||||
incidentID: "_pinswg_planningappeals78ids_value eq abc"
|
||||
}
|
||||
};
|
||||
const res = createRes();
|
||||
await mod.default(req, res);
|
||||
|
||||
assert.strictEqual(calls.length, 1);
|
||||
assert.strictEqual(calls[0].req, req);
|
||||
assert.strictEqual(calls[0].res, res);
|
||||
});
|
||||
|
||||
test("legacy public search endpoint handlers remain present", async () => {
|
||||
const legacyFiles = [
|
||||
"pages/api/endpoint/getbasicsearchpaged_api.js",
|
||||
"pages/api/endpoint/getadvancedsearch_api.js",
|
||||
"pages/api/endpoint/getadvancedsearchpaged_api.js",
|
||||
"pages/api/endpoint/getbasicsearchdetailspaged_api.js",
|
||||
"pages/api/endpoint/getbasicsearch_api.js",
|
||||
"pages/api/endpoint/getbasicsearchdetails_api.js"
|
||||
];
|
||||
|
||||
legacyFiles.forEach((filePath) => {
|
||||
assert.strictEqual(
|
||||
fs.existsSync(path.join(rootDir, filePath)),
|
||||
true,
|
||||
filePath
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
test("searchDirectService active public search methods now target grouped search routes", async () => {
|
||||
const source = read("actions/services/searchDirectService.js");
|
||||
|
||||
assert.match(source, /\/api\/search\/basic-paged\?/);
|
||||
assert.match(source, /\/api\/search\/advanced\?/);
|
||||
assert.match(source, /\/api\/search\/advanced-paged\?/);
|
||||
assert.match(source, /\/api\/search\/basic-details-paged\?/);
|
||||
});
|
||||
|
||||
test("searchDirectService adopted public search methods no longer target legacy endpoint URLs", async () => {
|
||||
const source = read("actions/services/searchDirectService.js");
|
||||
|
||||
assert.doesNotMatch(source, /\/api\/endpoint\/getbasicsearchpaged_api/);
|
||||
assert.doesNotMatch(source, /\/api\/endpoint\/getadvancedsearch_api/);
|
||||
assert.doesNotMatch(source, /\/api\/endpoint\/getadvancedsearchpaged_api/);
|
||||
assert.doesNotMatch(
|
||||
source,
|
||||
/\/api\/endpoint\/getbasicsearchdetailspaged_api/
|
||||
);
|
||||
});
|
||||
|
||||
test("searchDirectService excluded routes remain outside grouped public search adoption scope", async () => {
|
||||
const source = read("actions/services/searchDirectService.js");
|
||||
|
||||
assert.match(source, /\/api\/endpoint\/getbasicsearch_api/);
|
||||
assert.match(source, /\/api\/endpoint\/getbasicsearchdetails_api/);
|
||||
assert.match(
|
||||
source,
|
||||
/\/api\/endpoint\/getbasicsearch_by_address_paged_api/
|
||||
);
|
||||
assert.match(source, /\/api\/endpoint\/getbasicsearch_by_address_api/);
|
||||
assert.match(source, /\/api\/endpoint\/getbasicdnssearch_api/);
|
||||
assert.match(source, /\/api\/endpoint\/getbasicdnssearchpaged_api/);
|
||||
});
|
||||
|
||||
test("searchDirectService public search request contract strings are preserved", async () => {
|
||||
const source = read("actions/services/searchDirectService.js");
|
||||
|
||||
assert.match(source, /searchString=/);
|
||||
assert.match(source, /searchstring=/);
|
||||
assert.match(source, /pageNumber=/);
|
||||
assert.match(source, /orderby=/);
|
||||
assert.match(source, /fieldSort=/);
|
||||
assert.match(source, /showNumberOfRecords=/);
|
||||
assert.match(source, /appealTypeName=/);
|
||||
assert.match(source, /primaryIdAttribute=/);
|
||||
assert.match(source, /incidentID=/);
|
||||
});
|
||||
|
||||
async function run() {
|
||||
let failures = 0;
|
||||
|
||||
for (const { name, fn } of tests) {
|
||||
try {
|
||||
await fn();
|
||||
console.log(`✓ ${name}`);
|
||||
} catch (error) {
|
||||
failures += 1;
|
||||
console.error(`✗ ${name}`);
|
||||
console.error(error);
|
||||
}
|
||||
}
|
||||
|
||||
if (failures > 0) {
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
run();
|
||||
Reference in New Issue
Block a user