diff --git a/pages/api/endpoint/getbasicdnssearch_api.js b/pages/api/endpoint/getbasicdnssearch_api.js
index 82a18e29..68c29b9e 100644
--- a/pages/api/endpoint/getbasicdnssearch_api.js
+++ b/pages/api/endpoint/getbasicdnssearch_api.js
@@ -17,37 +17,41 @@
*/
import axios from "axios";
-import CryptoJS from "crypto-js";
import _ from "lodash";
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/";
export default async function ApiProxy(req, res) {
- var token = await getToken();
+ try {
+ const token = await getToken();
- var queryUrl =
- "incidents?$select=pinswg_environmentalstatementlocation,pinswg_caseaddress,modifiedon,description,numberofchildincidents,_accountid_value,_customerid_value,_pinswg_associatedlpa_value,_ownerid_value,pinswg_appealcasetype,statuscode,ticketnumber,title, _primarycontactid_value,pinswg_lpareference&$expand=primarycontactid($select=fullname)&$filter=(pinswg_appealcasetype eq 846040011 or pinswg_appealcasetype eq 846040002)and pinswg_publishtoweb eq true&$orderby=createdon desc&$count=true";
+ const queryUrl =
+ "incidents?$select=pinswg_environmentalstatementlocation,pinswg_caseaddress,modifiedon,description,numberofchildincidents,_accountid_value,_customerid_value,_pinswg_associatedlpa_value,_ownerid_value,pinswg_appealcasetype,statuscode,ticketnumber,title, _primarycontactid_value,pinswg_lpareference&$expand=primarycontactid($select=fullname)&$filter=(pinswg_appealcasetype eq 846040011 or pinswg_appealcasetype eq 846040002)and pinswg_publishtoweb eq true&$orderby=createdon desc&$count=true";
- return axios
- .get(
+ const { data } = await axios.get(
WEBAPI_URL + queryUrl + hashAPIPath(queryUrl),
azureHeadersPaged(token.access_token)
- )
- .then(({ data }) => {
- var dataStr;
- _.has(data, "@odata.nextLink") == true &&
- ((dataStr = JSON.stringify(data["@odata.nextLink"])),
- (data["@odata.nextLink"] = dataStr.split("/v8.2/")[1]));
- res.status(200).json(data);
- })
- .catch((error) => {
- consoleLogger(error);
- res.status(400).json(error);
+ );
+
+ if (_.has(data, "@odata.nextLink") === true) {
+ const dataStr = JSON.stringify(data["@odata.nextLink"]);
+ data["@odata.nextLink"] = dataStr.split("/v8.2/")[1];
+ }
+
+ return respondSuccess(res, data);
+ } catch (error) {
+ consoleLogger(error);
+ return respondError(res, {
+ status: 400,
+ code: "BASIC_DNS_SEARCH_FETCH_FAILED",
+ message: "Failed to fetch basic DNS search results"
});
+ }
}
diff --git a/pages/api/endpoint/getbasicdnssearchdetails_api.js b/pages/api/endpoint/getbasicdnssearchdetails_api.js
index 7bd99f7c..1ac1acf3 100644
--- a/pages/api/endpoint/getbasicdnssearchdetails_api.js
+++ b/pages/api/endpoint/getbasicdnssearchdetails_api.js
@@ -11,45 +11,54 @@
*/
import axios from "axios";
-import CryptoJS from "crypto-js";
import _ from "lodash";
+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/";
export default async function ApiProxy(req, res) {
- var caseReference = req.query.caseReference;
- var token = await getToken();
+ const caseReference = req.query.caseReference;
- var queryUrl =
- "pinswg_dnses?$filter=pinswg_name eq '" +
- caseReference +
- "&$count=true";
- //" and statuscode eq 1&$count=true";
+ if (
+ typeof caseReference !== "string" ||
+ caseReference.trim().length === 0
+ ) {
+ return respondError(res, {
+ status: 400,
+ code: "CASE_REFERENCE_REQUIRED",
+ message: "caseReference is required"
+ });
+ }
- queryUrl = queryUrl + getSelectQuery("pinswg_dnses");
+ try {
+ const token = await getToken();
- var apiResponse = _.isEmpty(req.query)
- ? res.status(400).json()
- : typeof caseReference != "undefined" && caseReference.length > 0
- ? axios
- .get(
- WEBAPI_URL + queryUrl + hashAPIPath(queryUrl),
- azureHeaders(token.access_token)
- )
- .then(({ data }) => {
- res.status(200).json(data);
- })
- .catch((error) => {
- consoleLogger(error);
- res.status(400).json(error);
- })
- : res.status(400).json();
+ let queryUrl =
+ "pinswg_dnses?$filter=pinswg_name eq '" +
+ caseReference +
+ "&$count=true";
- return apiResponse;
+ queryUrl = queryUrl + getSelectQuery("pinswg_dnses");
+
+ 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, {
+ status: 400,
+ code: "BASIC_DNS_SEARCH_DETAILS_FETCH_FAILED",
+ message: "Failed to fetch basic DNS search details"
+ });
+ }
}
diff --git a/pages/api/endpoint/getbasicdnssearchdetailspaged_api.js b/pages/api/endpoint/getbasicdnssearchdetailspaged_api.js
index fd87438b..d85e1668 100644
--- a/pages/api/endpoint/getbasicdnssearchdetailspaged_api.js
+++ b/pages/api/endpoint/getbasicdnssearchdetailspaged_api.js
@@ -10,50 +10,59 @@
* description: Success
*/
import axios from "axios";
-import CryptoJS from "crypto-js";
import _ from "lodash";
import { azureHeadersPaged } 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/";
export default async function ApiProxy(req, res) {
- var caseReference = req.query.caseReference;
- var token = await getToken();
+ const caseReference = req.query.caseReference;
- var queryUrl =
- "pinswg_dnses?$filter=pinswg_name eq '" +
- caseReference +
- "&$count=true";
- //" and statuscode eq 1&$count=true";
+ if (
+ typeof caseReference !== "string" ||
+ caseReference.trim().length === 0
+ ) {
+ return respondError(res, {
+ status: 400,
+ code: "CASE_REFERENCE_REQUIRED",
+ message: "caseReference is required"
+ });
+ }
- queryUrl = queryUrl + getSelectQuery("pinswg_dnses");
+ try {
+ const token = await getToken();
- var apiResponse = _.isEmpty(req.query)
- ? res.status(400).json()
- : typeof caseReference != "undefined" && caseReference.length > 0
- ? axios
- .get(
- WEBAPI_URL + queryUrl + hashAPIPath(queryUrl),
- azureHeadersPaged(token.access_token)
- )
- .then(({ data }) => {
- var dataStr;
- _.has(data, "@odata.nextLink") == true &&
- ((dataStr = JSON.stringify(data["@odata.nextLink"])),
- (data["@odata.nextLink"] = dataStr.split("/v8.2/")[1]));
- return res.status(200).json(data);
- })
- .catch((error) => {
- consoleLogger(error);
- res.status(400).json(error);
- })
- : res.status(400).json();
+ let queryUrl =
+ "pinswg_dnses?$filter=pinswg_name eq '" +
+ caseReference +
+ "&$count=true";
- return apiResponse;
+ queryUrl = queryUrl + getSelectQuery("pinswg_dnses");
+
+ const { data } = await axios.get(
+ WEBAPI_URL + queryUrl + hashAPIPath(queryUrl),
+ azureHeadersPaged(token.access_token)
+ );
+
+ if (_.has(data, "@odata.nextLink") === true) {
+ const dataStr = JSON.stringify(data["@odata.nextLink"]);
+ data["@odata.nextLink"] = dataStr.split("/v8.2/")[1];
+ }
+
+ return respondSuccess(res, data);
+ } catch (error) {
+ consoleLogger(error);
+ return respondError(res, {
+ status: 400,
+ code: "BASIC_DNS_SEARCH_DETAILS_PAGED_FETCH_FAILED",
+ message: "Failed to fetch paged basic DNS search details"
+ });
+ }
}
diff --git a/pages/api/endpoint/getbasicdnssearchpaged_api.js b/pages/api/endpoint/getbasicdnssearchpaged_api.js
index dceb0c23..4d8d7791 100644
--- a/pages/api/endpoint/getbasicdnssearchpaged_api.js
+++ b/pages/api/endpoint/getbasicdnssearchpaged_api.js
@@ -48,43 +48,75 @@ import { azureHeadersPagedCustom } from "../../../actions/core/headers";
import { getToken } from "../../../actions/core/token";
import { consoleLogger } from "../../../actions/core/logger";
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/";
export default async function ApiProxy(req, res) {
- var pageNumber = req.query.pageNumber;
- var token = await getToken();
+ const pageNumber = req.query.pageNumber;
+ const orderby = req.query.orderby;
+ const fieldSort = req.query.fieldSort;
+ const showNumberOfRecords = req.query.showNumberOfRecords;
- var orderby = req.query.orderby;
- var fieldSort = req.query.fieldSort;
- var showNumberOfRecords = req.query.showNumberOfRecords;
+ if (typeof orderby !== "string" || orderby.trim().length === 0) {
+ return respondError(res, {
+ status: 400,
+ code: "ORDER_BY_REQUIRED",
+ message: "orderby is required"
+ });
+ }
- var queryUrl =
- "incidents?$select=pinswg_environmentalstatementlocation,pinswg_caseaddress,modifiedon,description,numberofchildincidents,_accountid_value,_customerid_value,_pinswg_associatedlpa_value,_ownerid_value,pinswg_appealcasetype,statuscode,ticketnumber,title, _primarycontactid_value,pinswg_lpareference&$expand=primarycontactid($select=fullname)&$filter=(pinswg_appealcasetype eq 846040011 or pinswg_appealcasetype eq 846040002) and pinswg_publishtoweb eq true&$orderby=" +
- orderby +
- " " +
- fieldSort +
- "&$count=true" +
- (typeof pageNumber != "undefined"
- ? "&$skiptoken=" + ''
- : "");
+ if (typeof fieldSort !== "string" || fieldSort.trim().length === 0) {
+ return respondError(res, {
+ status: 400,
+ code: "FIELD_SORT_REQUIRED",
+ message: "fieldSort is required"
+ });
+ }
- return axios
- .get(
+ if (
+ typeof showNumberOfRecords !== "string" ||
+ showNumberOfRecords.trim().length === 0
+ ) {
+ return respondError(res, {
+ status: 400,
+ code: "SHOW_NUMBER_OF_RECORDS_REQUIRED",
+ message: "showNumberOfRecords is required"
+ });
+ }
+
+ try {
+ const token = await getToken();
+
+ const queryUrl =
+ "incidents?$select=pinswg_environmentalstatementlocation,pinswg_caseaddress,modifiedon,description,numberofchildincidents,_accountid_value,_customerid_value,_pinswg_associatedlpa_value,_ownerid_value,pinswg_appealcasetype,statuscode,ticketnumber,title, _primarycontactid_value,pinswg_lpareference&$expand=primarycontactid($select=fullname)&$filter=(pinswg_appealcasetype eq 846040011 or pinswg_appealcasetype eq 846040002) and pinswg_publishtoweb eq true&$orderby=" +
+ orderby +
+ " " +
+ fieldSort +
+ "&$count=true" +
+ (typeof pageNumber != "undefined"
+ ? "&$skiptoken=" + ''
+ : "");
+
+ const { data } = await axios.get(
WEBAPI_URL + queryUrl + hashAPIPath(queryUrl),
azureHeadersPagedCustom(token.access_token, showNumberOfRecords)
- )
- .then(({ data }) => {
- var dataStr;
- _.has(data, "@odata.nextLink") == true &&
- ((dataStr = JSON.stringify(data["@odata.nextLink"])),
- (data["@odata.nextLink"] = dataStr.split("/v8.2/")[1]));
- return res.status(200).json(data);
- })
- .catch((error) => {
- consoleLogger(error);
- res.status(400).json(error);
+ );
+
+ if (_.has(data, "@odata.nextLink") === true) {
+ const dataStr = JSON.stringify(data["@odata.nextLink"]);
+ data["@odata.nextLink"] = dataStr.split("/v8.2/")[1];
+ }
+
+ return respondSuccess(res, data);
+ } catch (error) {
+ consoleLogger(error);
+ return respondError(res, {
+ status: 400,
+ code: "BASIC_DNS_SEARCH_PAGED_FETCH_FAILED",
+ message: "Failed to fetch paged basic DNS search results"
});
+ }
}
diff --git a/tests/phase21/endpoint-handler-contract.test.cjs b/tests/phase21/endpoint-handler-contract.test.cjs
index abbe8671..56aaf536 100644
--- a/tests/phase21/endpoint-handler-contract.test.cjs
+++ b/tests/phase21/endpoint-handler-contract.test.cjs
@@ -1773,6 +1773,200 @@ test("getbasicsearch_by_lparref catch path returns BASIC_SEARCH_LPA_REF_FETCH_FA
);
});
+test("getbasicdnssearch catch path returns BASIC_DNS_SEARCH_FETCH_FAILED", async () => {
+ const mod = loadModule("pages/api/endpoint/getbasicdnssearch_api.js", {
+ respondError: respondErrorMock,
+ respondSuccess: respondSuccessMock,
+ getToken: async () => ({ access_token: "token" }),
+ hashAPIPath: () => "&hash=expected",
+ azureHeadersPaged: () => ({}),
+ axios: {
+ get: async () => {
+ throw new Error("relay failed");
+ }
+ },
+ consoleLogger: () => {},
+ _: { has: () => false }
+ });
+
+ const req = { query: {} };
+ const res = createRes();
+ await mod.default(req, res);
+
+ assert.strictEqual(res.state.statusCode, 400);
+ assert.strictEqual(
+ res.state.jsonBody.error.code,
+ "BASIC_DNS_SEARCH_FETCH_FAILED"
+ );
+});
+
+test("getbasicdnssearchpaged returns ORDER_BY_REQUIRED when orderby missing", async () => {
+ const mod = loadModule("pages/api/endpoint/getbasicdnssearchpaged_api.js", {
+ respondError: respondErrorMock,
+ respondSuccess: respondSuccessMock,
+ getToken: async () => ({ access_token: "token" }),
+ hashAPIPath: () => "&hash=expected",
+ azureHeadersPagedCustom: () => ({}),
+ axios: { get: async () => ({ data: { value: [] } }) },
+ consoleLogger: () => {},
+ _: { has: () => false }
+ });
+
+ const req = { query: { fieldSort: "asc", showNumberOfRecords: "10" } };
+ const res = createRes();
+ await mod.default(req, res);
+
+ assert.strictEqual(res.state.statusCode, 400);
+ assert.strictEqual(res.state.jsonBody.error.code, "ORDER_BY_REQUIRED");
+});
+
+test("getbasicdnssearchpaged catch path returns BASIC_DNS_SEARCH_PAGED_FETCH_FAILED", async () => {
+ const mod = loadModule("pages/api/endpoint/getbasicdnssearchpaged_api.js", {
+ respondError: respondErrorMock,
+ respondSuccess: respondSuccessMock,
+ getToken: async () => ({ access_token: "token" }),
+ hashAPIPath: () => "&hash=expected",
+ azureHeadersPagedCustom: () => ({}),
+ axios: {
+ get: async () => {
+ throw new Error("relay failed");
+ }
+ },
+ consoleLogger: () => {},
+ _: { has: () => false }
+ });
+
+ const req = {
+ query: {
+ orderby: "createdon",
+ fieldSort: "asc",
+ showNumberOfRecords: "10"
+ }
+ };
+ const res = createRes();
+ await mod.default(req, res);
+
+ assert.strictEqual(res.state.statusCode, 400);
+ assert.strictEqual(
+ res.state.jsonBody.error.code,
+ "BASIC_DNS_SEARCH_PAGED_FETCH_FAILED"
+ );
+});
+
+test("getbasicdnssearchdetails returns CASE_REFERENCE_REQUIRED when caseReference missing", async () => {
+ const mod = loadModule(
+ "pages/api/endpoint/getbasicdnssearchdetails_api.js",
+ {
+ respondError: respondErrorMock,
+ respondSuccess: respondSuccessMock,
+ getToken: async () => ({ access_token: "token" }),
+ getSelectQuery: () => "&$select=pinswg_name",
+ hashAPIPath: () => "&hash=expected",
+ azureHeaders: () => ({}),
+ axios: { get: async () => ({ data: { value: [] } }) },
+ consoleLogger: () => {}
+ }
+ );
+
+ const req = { query: {} };
+ const res = createRes();
+ await mod.default(req, res);
+
+ assert.strictEqual(res.state.statusCode, 400);
+ assert.strictEqual(
+ res.state.jsonBody.error.code,
+ "CASE_REFERENCE_REQUIRED"
+ );
+});
+
+test("getbasicdnssearchdetails catch path returns BASIC_DNS_SEARCH_DETAILS_FETCH_FAILED", async () => {
+ const mod = loadModule(
+ "pages/api/endpoint/getbasicdnssearchdetails_api.js",
+ {
+ respondError: respondErrorMock,
+ respondSuccess: respondSuccessMock,
+ getToken: async () => ({ access_token: "token" }),
+ getSelectQuery: () => "&$select=pinswg_name",
+ hashAPIPath: () => "&hash=expected",
+ azureHeaders: () => ({}),
+ axios: {
+ get: async () => {
+ throw new Error("relay failed");
+ }
+ },
+ consoleLogger: () => {}
+ }
+ );
+
+ const req = { query: { caseReference: "DNS-001" } };
+ const res = createRes();
+ await mod.default(req, res);
+
+ assert.strictEqual(res.state.statusCode, 400);
+ assert.strictEqual(
+ res.state.jsonBody.error.code,
+ "BASIC_DNS_SEARCH_DETAILS_FETCH_FAILED"
+ );
+});
+
+test("getbasicdnssearchdetailspaged returns CASE_REFERENCE_REQUIRED when caseReference missing", async () => {
+ const mod = loadModule(
+ "pages/api/endpoint/getbasicdnssearchdetailspaged_api.js",
+ {
+ respondError: respondErrorMock,
+ respondSuccess: respondSuccessMock,
+ getToken: async () => ({ access_token: "token" }),
+ getSelectQuery: () => "&$select=pinswg_name",
+ hashAPIPath: () => "&hash=expected",
+ azureHeadersPaged: () => ({}),
+ axios: { get: async () => ({ data: { value: [] } }) },
+ consoleLogger: () => {},
+ _: { has: () => false }
+ }
+ );
+
+ const req = { query: {} };
+ const res = createRes();
+ await mod.default(req, res);
+
+ assert.strictEqual(res.state.statusCode, 400);
+ assert.strictEqual(
+ res.state.jsonBody.error.code,
+ "CASE_REFERENCE_REQUIRED"
+ );
+});
+
+test("getbasicdnssearchdetailspaged catch path returns BASIC_DNS_SEARCH_DETAILS_PAGED_FETCH_FAILED", async () => {
+ const mod = loadModule(
+ "pages/api/endpoint/getbasicdnssearchdetailspaged_api.js",
+ {
+ respondError: respondErrorMock,
+ respondSuccess: respondSuccessMock,
+ getToken: async () => ({ access_token: "token" }),
+ getSelectQuery: () => "&$select=pinswg_name",
+ hashAPIPath: () => "&hash=expected",
+ azureHeadersPaged: () => ({}),
+ axios: {
+ get: async () => {
+ throw new Error("relay failed");
+ }
+ },
+ consoleLogger: () => {},
+ _: { has: () => false }
+ }
+ );
+
+ const req = { query: { caseReference: "DNS-001" } };
+ const res = createRes();
+ await mod.default(req, res);
+
+ assert.strictEqual(res.state.statusCode, 400);
+ assert.strictEqual(
+ res.state.jsonBody.error.code,
+ "BASIC_DNS_SEARCH_DETAILS_PAGED_FETCH_FAILED"
+ );
+});
+
const run = async () => {
let passed = 0;
for (const currentTest of tests) {