diff --git a/pages/api/endpoint/getToken.js b/pages/api/endpoint/getToken.js index 9e2f6ca2..be712f67 100644 --- a/pages/api/endpoint/getToken.js +++ b/pages/api/endpoint/getToken.js @@ -13,41 +13,35 @@ * description: Success */ import axios from "axios"; +import { respondError, respondSuccess } from "../middleware/apiResponse"; export default async function ApiProxy(req, res) { - const accessTokenEndpoint = process.env.ACCESS_TOKEN_ENDPOINT; - const tenantId = process.env.TENANT; - const tokenBody = - "grant_type=" + - process.env.GRANT_TYPE + - "&client_id=" + - process.env.CLIENT_ID + - "&client_secret=" + - process.env.CLIENT_SECRET + - "&scope=" + - "https://" + - process.env.RELAYURI + - "/.default"; + try { + const accessTokenEndpoint = process.env.ACCESS_TOKEN_ENDPOINT; + const tenantId = process.env.TENANT; + const tokenBody = + "grant_type=" + + process.env.GRANT_TYPE + + "&client_id=" + + process.env.CLIENT_ID + + "&client_secret=" + + process.env.CLIENT_SECRET + + "&scope=" + + "https://" + + process.env.RELAYURI + + "/.default"; - var config = { - method: "post", - headers: { - "Content-Type": "application/x-www-form-urlencoded", - "Cache-Control": "no-cache", - }, - url: `${accessTokenEndpoint}${tenantId}/oauth2/v2.0/token`, - body: tokenBody, - }; + const { data } = await axios.post( + `${accessTokenEndpoint}${tenantId}/oauth2/v2.0/token`, + tokenBody + ); - console.log("get token case:", config); - - return axios - .post(`${accessTokenEndpoint}${tenantId}/oauth2/v2.0/token`, tokenBody) - .then(({ data }) => { - console.log; - res.status(200).json(data); - }) - .catch((error) => { - res.status(400); + return respondSuccess(res, data); + } catch (error) { + return respondError(res, { + status: 400, + code: "TOKEN_FETCH_FAILED", + message: "Unable to fetch token" }); + } } diff --git a/tests/phase21/endpoint-handler-contract.test.cjs b/tests/phase21/endpoint-handler-contract.test.cjs index 2ff0209f..0b3e09e1 100644 --- a/tests/phase21/endpoint-handler-contract.test.cjs +++ b/tests/phase21/endpoint-handler-contract.test.cjs @@ -3611,6 +3611,70 @@ test("getappealtypesfornewappeal returns success payload contract", async () => ); }); +test("getToken success returns token payload contract", async () => { + const mod = loadModule("pages/api/endpoint/getToken.js", { + respondError: respondErrorMock, + respondSuccess: respondSuccessMock, + axios: { + post: async () => ({ + data: { + access_token: "token", + token_type: "Bearer" + } + }) + }, + process: { + env: { + ACCESS_TOKEN_ENDPOINT: "https://login.microsoftonline.com/", + TENANT: "tenant-id", + GRANT_TYPE: "client_credentials", + CLIENT_ID: "client-id", + CLIENT_SECRET: "secret", + RELAYURI: "relay.example" + } + } + }); + + const req = { body: {} }; + const res = createRes(); + await mod.default(req, res); + + assert.strictEqual(res.state.statusCode, 200); + assert.deepStrictEqual(JSON.parse(JSON.stringify(res.state.jsonBody)), { + access_token: "token", + token_type: "Bearer" + }); +}); + +test("getToken catch path returns TOKEN_FETCH_FAILED", async () => { + const mod = loadModule("pages/api/endpoint/getToken.js", { + respondError: respondErrorMock, + respondSuccess: respondSuccessMock, + axios: { + post: async () => { + throw new Error("token fetch failed"); + } + }, + process: { + env: { + ACCESS_TOKEN_ENDPOINT: "https://login.microsoftonline.com/", + TENANT: "tenant-id", + GRANT_TYPE: "client_credentials", + CLIENT_ID: "client-id", + CLIENT_SECRET: "secret", + RELAYURI: "relay.example" + } + } + }); + + const req = { body: {} }; + const res = createRes(); + await mod.default(req, res); + + assert.strictEqual(res.state.statusCode, 400); + assert.strictEqual(res.state.jsonBody.error.code, "TOKEN_FETCH_FAILED"); +}); + test("getsipsmedia returns success contract", async () => { const mod = loadModule("pages/api/endpoint/getsipsmedia_api.js", { respondSuccess: respondSuccessMock