diff --git a/src/appSettings.ts b/src/appSettings.ts index 4aa32b8..46d2411 100644 --- a/src/appSettings.ts +++ b/src/appSettings.ts @@ -13,10 +13,10 @@ export const appSettings = { connectionString: process.env['communicationServices_connectionString'] || '', scopes: ['voip', 'chat'] as TokenScope[] }, - azureActiveDirectory: { + microsoftEntraID: { instance: 'https://login.microsoftonline.com', - clientId: process.env['azureActiveDirectory_clientId'] || '', // Application (Client) ID from Overview of app registration from Azure Portal, e.g. 2ed40e05-ba00-4853-xxxx-xxx60029x596] - clientSecret: process.env['azureActiveDirectory_clientSecret'] || '', // Client secret from Overview of app registration from Azure Portal - tenantId: process.env['azureActiveDirectory_tenantId'] || '' // Directory (Tenant) ID from Overview of app registration from Azure Portal, or 'common' or 'organizations' or 'consumers' + clientId: process.env['microsoftEntraID_clientId'] || '', // Application (Client) ID from Overview of app registration from Azure Portal, e.g. 2ed40e05-ba00-4853-xxxx-xxx60029x596] + clientSecret: process.env['microsoftEntraID_clientSecret'] || '', // Client secret from Overview of app registration from Azure Portal + tenantId: process.env['microsoftEntraID_tenantId'] || '' // Directory (Tenant) ID from Overview of app registration from Azure Portal, or 'common' or 'organizations' or 'consumers' } }; diff --git a/src/controllers/tokenController.ts b/src/controllers/tokenController.ts index b4ed958..86325ba 100644 --- a/src/controllers/tokenController.ts +++ b/src/controllers/tokenController.ts @@ -4,10 +4,10 @@ *---------------------------------------------------------------------------------------------*/ import { NextFunction, Request, Response } from 'express'; -import { createErrorResponse, getAADTokenViaRequest } from '../utils/utils'; +import { createErrorResponse, getMEIDTokenViaRequest } from '../utils/utils'; import { getACSUserId } from '../services/graphService'; import { createACSToken, getACSTokenForTeamsUser } from '../services/acsService'; -import { exchangeAADTokenViaOBO } from '../services/aadService'; +import { exchangeMEIDTokenViaOBO } from '../services/aadService'; import { AuthenticatedRequest } from 'src/types/authenticatedRequest'; const ACS_IDENTITY_NOT_FOUND_ERROR = 'Can not find any ACS identities in Microsoft Graph used to create an ACS token'; @@ -24,12 +24,12 @@ const ACS_IDENTITY_NOT_FOUND_ERROR = 'Can not find any ACS identities in Microso export const getACSToken = async (req: Request, res: Response, next: NextFunction) => { try { // Get aad token via the request - const aadTokenViaRequest = getAADTokenViaRequest(req); + const meidTokenViaRequest = getMEIDTokenViaRequest(req); // Retrieve the AAD token via OBO flow - const aadTokenExchangedViaOBO = await exchangeAADTokenViaOBO(aadTokenViaRequest); + const meidTokenExchangedViaOBO = await exchangeMEIDTokenViaOBO(meidTokenViaRequest); // Retrieve ACS Identity from Microsoft Graph - const acsUserId = await getACSUserId(aadTokenExchangedViaOBO); + const acsUserId = await getACSUserId(meidTokenExchangedViaOBO); if (acsUserId !== undefined) { // The ACS user exists @@ -56,14 +56,14 @@ export const getACSToken = async (req: Request, res: Response, next: NextFunctio * 2. Get Azure AD user object ID obtained from the oid claim of the token received in the Authorization header * 3. Initialize a Communication Identity Client and then issue an ACS access token for the Teams user */ -export const exchangeAADToken = async (req: AuthenticatedRequest, res: Response, next: NextFunction) => { +export const exchangeMEIDToken = async (req: AuthenticatedRequest, res: Response, next: NextFunction) => { try { // Get an Azure AD token passed through the 'teams-user-aad-token' header - const teamsUserAadToken = req.headers['teams-user-aad-token'] as string; + const teamsUserMeidToken = req.headers['teams-user-meid-token'] as string; // Get the oid claim of the token received in the Authorization header const userObjectId = req.user.oid; // Exchange the AAD user token for the Teams access token - const acsTokenForTeamsUser = await getACSTokenForTeamsUser(teamsUserAadToken, userObjectId); + const acsTokenForTeamsUser = await getACSTokenForTeamsUser(teamsUserMeidToken, userObjectId); return res.status(201).json(acsTokenForTeamsUser); } catch (error) { next(error); diff --git a/src/controllers/userController.ts b/src/controllers/userController.ts index 4ec0560..f1e93fd 100644 --- a/src/controllers/userController.ts +++ b/src/controllers/userController.ts @@ -4,8 +4,8 @@ *---------------------------------------------------------------------------------------------*/ import { NextFunction, Request, Response } from 'express'; -import { createErrorResponse, getAADTokenViaRequest } from '../utils/utils'; -import { exchangeAADTokenViaOBO } from '../services/aadService'; +import { createErrorResponse, getMEIDTokenViaRequest } from '../utils/utils'; +import { exchangeMEIDTokenViaOBO } from '../services/aadService'; import { createACSUserIdentity, deleteACSUserIdentity } from '../services/acsService'; import { addIdentityMapping, deleteIdentityMapping, getACSUserId } from '../services/graphService'; @@ -17,16 +17,16 @@ const NO_IDENTITY_MAPPING_INFO_ERROR = 'There is no identity mapping information export const createACSUser = async (req: Request, res: Response, next: NextFunction) => { try { // Get aad token via the request - const aadTokenViaRequest = getAADTokenViaRequest(req); + const meidTokenViaRequest = getMEIDTokenViaRequest(req); // Retrieve the AAD token via OBO flow - const aadTokenExchangedViaOBO = await exchangeAADTokenViaOBO(aadTokenViaRequest); + const meidTokenExchangedViaOBO = await exchangeMEIDTokenViaOBO(meidTokenViaRequest); // Get an ACS user id from Microsoft Graph - let acsUserId = await getACSUserId(aadTokenExchangedViaOBO); + let acsUserId = await getACSUserId(meidTokenExchangedViaOBO); if (acsUserId === undefined) { // Create a Communication Services identity. acsUserId = await createACSUserIdentity(); - const identityMappingResponse = await addIdentityMapping(aadTokenExchangedViaOBO, acsUserId); + const identityMappingResponse = await addIdentityMapping(meidTokenExchangedViaOBO, acsUserId); return res.status(201).json(identityMappingResponse); } @@ -42,11 +42,11 @@ export const createACSUser = async (req: Request, res: Response, next: NextFunct export const getACSUser = async (req: Request, res: Response, next: NextFunction) => { try { // Get aad token via the request - const aadTokenViaRequest = getAADTokenViaRequest(req); + const meidTokenViaRequest = getMEIDTokenViaRequest(req); // Retrieve the AAD token via OBO flow - const aadTokenExchangedViaOBO = await exchangeAADTokenViaOBO(aadTokenViaRequest); + const meidTokenExchangedViaOBO = await exchangeMEIDTokenViaOBO(meidTokenViaRequest); // Get an ACS user id from Microsoft Graph - const acsUserId = await getACSUserId(aadTokenExchangedViaOBO); + const acsUserId = await getACSUserId(meidTokenExchangedViaOBO); return acsUserId === undefined ? res.status(404).json(createErrorResponse(404, NO_IDENTITY_MAPPING_INFO_ERROR)) @@ -69,14 +69,14 @@ export const getACSUser = async (req: Request, res: Response, next: NextFunction export const deleteACSUser = async (req: Request, res: Response, next: NextFunction) => { try { // Get aad token via the request - const aadTokenViaRequest = getAADTokenViaRequest(req); + const meidTokenViaRequest = getMEIDTokenViaRequest(req); // Retrieve the AAD token via OBO flow - const aadTokenExchangedViaOBO = await exchangeAADTokenViaOBO(aadTokenViaRequest); + const meidTokenExchangedViaOBO = await exchangeMEIDTokenViaOBO(meidTokenViaRequest); // Get an ACS user id from Microsoft Graph - const acsUserId = await getACSUserId(aadTokenExchangedViaOBO); + const acsUserId = await getACSUserId(meidTokenExchangedViaOBO); // Delete the identity mapping from the user's roaming profile information using Microsoft Graph Open Extension - await deleteIdentityMapping(aadTokenExchangedViaOBO); + await deleteIdentityMapping(meidTokenExchangedViaOBO); // Delete the ACS user identity which revokes all active access tokens // and prevents users from issuing access tokens for the identity. // It also removes all the persisted content associated with the identity. diff --git a/src/routes/tokenRouter.ts b/src/routes/tokenRouter.ts index 620359d..a74220a 100644 --- a/src/routes/tokenRouter.ts +++ b/src/routes/tokenRouter.ts @@ -4,7 +4,7 @@ *---------------------------------------------------------------------------------------------*/ import express from 'express'; -import { exchangeAADToken, getACSToken } from '../controllers/tokenController'; +import { exchangeMEIDToken, getACSToken } from '../controllers/tokenController'; import { checkJwt, checkScope } from '../utils/utils'; export const tokenRouter = () => { @@ -15,7 +15,7 @@ export const tokenRouter = () => { // 1. Get an ACS token or refresh an ACS token router.get('/', checkJwt, checkScope, getACSToken); // 2. Get an ACS token for a Teams user - router.get('/teams', checkJwt, checkScope, exchangeAADToken); + router.get('/teams', checkJwt, checkScope, exchangeMEIDToken); return router; }; diff --git a/src/services/aadService.ts b/src/services/aadService.ts index 5dda476..e28772e 100644 --- a/src/services/aadService.ts +++ b/src/services/aadService.ts @@ -7,7 +7,7 @@ import { Configuration, ConfidentialClientApplication } from '@azure/msal-node'; import { appSettings } from '../appSettings'; // Error messages -const EXCHANGE_AAD_TOKEN_VIA_OBO_ERROR = +const EXCHANGE_MEID_TOKEN_VIA_OBO_ERROR = 'An error occurred when exchanging the incoming access token for another access token to call downstream APIs through On-Behalf-Of flow'; /** @@ -18,9 +18,9 @@ const EXCHANGE_AAD_TOKEN_VIA_OBO_ERROR = export const createConfidentialClientApplication = (): ConfidentialClientApplication => { const msalConfig: Configuration = { auth: { - clientId: appSettings.azureActiveDirectory.clientId, - authority: `${appSettings.azureActiveDirectory.instance}/${appSettings.azureActiveDirectory.tenantId}`, - clientSecret: appSettings.azureActiveDirectory.clientSecret + clientId: appSettings.microsoftEntraID.clientId, + authority: `${appSettings.microsoftEntraID.instance}/${appSettings.microsoftEntraID.tenantId}`, + clientSecret: appSettings.microsoftEntraID.clientSecret } }; const confidentialClientApplication = new ConfidentialClientApplication(msalConfig); @@ -34,7 +34,7 @@ export const createConfidentialClientApplication = (): ConfidentialClientApplica * * Notice: The incoming access token is generated by the client. */ -export const exchangeAADTokenViaOBO = async (aadToken: string): Promise => { +export const exchangeMEIDTokenViaOBO = async (aadToken: string): Promise => { const confidentialClientApplication = createConfidentialClientApplication(); // Exchange the incoming access token for another access token try { @@ -42,10 +42,10 @@ export const exchangeAADTokenViaOBO = async (aadToken: string): Promise oboAssertion: aadToken, // The access token that was sent to the middle-tier API. This token must have an audience of the app making this OBO request. scopes: ['user.read'] // Array of scopes the application is requesting access to. }; - const aadTokenResponseViaOBO = await confidentialClientApplication.acquireTokenOnBehalfOf(oboRequest); - return aadTokenResponseViaOBO.accessToken; + const meidTokenResponseViaOBO = await confidentialClientApplication.acquireTokenOnBehalfOf(oboRequest); + return meidTokenResponseViaOBO.accessToken; } catch (error) { - console.log(EXCHANGE_AAD_TOKEN_VIA_OBO_ERROR); + console.log(EXCHANGE_MEID_TOKEN_VIA_OBO_ERROR); throw error; } }; diff --git a/src/services/acsService.ts b/src/services/acsService.ts index bfd25f4..dfcefeb 100644 --- a/src/services/acsService.ts +++ b/src/services/acsService.ts @@ -17,7 +17,7 @@ const CREATE_ACS_TOKEN_ERROR = 'An error occurred when creating an ACS token'; const CREATE_ACS_USER_IDENTITY_TOKEN_ERROR = 'An error occurred when creating an ACS user id and issuing an access token for it in one go'; const DELETE_ACS_USER_IDENTITY_ERROR = 'An error occurred when deleting an ACS user id'; -const EXCHANGE_AAD_TOKEN_ERROR = 'An error occurred when exchanging an AAD token'; +const EXCHANGE_MEID_TOKEN_ERROR = 'An error occurred when exchanging an Microsoft Entra ID token'; /** * Instantiate the identity client using the connection string. @@ -65,24 +65,24 @@ export const createACSToken = async (acsUserId: string): Promise => { const identityClient = createAuthenticatedClient(); try { // Issue an access token for the Teams user that can be used with the Azure Communication Services SDKs. - const clientId = appSettings.azureActiveDirectory.clientId; + const clientId = appSettings.microsoftEntraID.clientId; return await identityClient.getTokenForTeamsUser({ clientId: clientId, - teamsUserAadToken: teamsUserAadToken, + teamsUserAadToken: teamsUserMeidToken, userObjectId: userObjectId }); } catch (error) { - const errorMessage = `${EXCHANGE_AAD_TOKEN_ERROR}: ${error.message}`; + const errorMessage = `${EXCHANGE_MEID_TOKEN_ERROR}: ${error.message}`; console.log(errorMessage); throw new Error(errorMessage); } diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 440c98b..de55e90 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -11,7 +11,7 @@ import { appSettings } from '../appSettings'; import jwtAuthz from 'express-jwt-authz'; // Get an AAD token passed through request header -export const getAADTokenViaRequest = (req: Request): string => { +export const getMEIDTokenViaRequest = (req: Request): string => { return req.headers.authorization.split(' ')[1]; }; @@ -33,7 +33,7 @@ export const checkJwt = jwt.expressjwt({ cache: true, rateLimit: true, jwksRequestsPerMinute: 5, - jwksUri: `https://login.microsoftonline.com/${appSettings.azureActiveDirectory.tenantId}/discovery/keys?appid=${appSettings.azureActiveDirectory.clientId}` // Obtain public signing keys from a well-known URL + jwksUri: `https://login.microsoftonline.com/${appSettings.microsoftEntraID.tenantId}/discovery/keys?appid=${appSettings.microsoftEntraID.clientId}` // Obtain public signing keys from a well-known URL }) as GetVerificationKey, requestProperty: 'user', // Name of the property in the request object where the payload is set. algorithms: ['RS256'] diff --git a/tests/controllers/tokenController/exchangeAADToken.test.ts b/tests/controllers/tokenController/exchangeAADToken.test.ts index 2fc4525..9bd93be 100644 --- a/tests/controllers/tokenController/exchangeAADToken.test.ts +++ b/tests/controllers/tokenController/exchangeAADToken.test.ts @@ -6,26 +6,26 @@ // eslint-disable-next-line @typescript-eslint/triple-slash-reference /// -import { exchangeAADToken } from '../../../src/controllers/tokenController'; +import { exchangeMEIDToken } from '../../../src/controllers/tokenController'; import { mockCommunicationAccessToken, mockAuthorization, mockRequest, mockResponse, mockAuthenticatedRequest, - mockAadUserObjectId, - mockAadTokenWithDelegatedPermissions + mockMeidUserObjectId, + mockMeidTokenWithDelegatedPermissions } from '../../utils/mockData'; import * as acsService from '../../../src/services/acsService'; let getACSTokenForTeamsUserSpy: jest.SpyInstance; -describe('Token Controller - Exchange AAD Token: ', () => { +describe('Token Controller - Exchange Microsoft Entra Token: ', () => { test('when request has no authorization header, it should return an error.', async () => { const req = mockRequest(); const res = mockResponse(); - await exchangeAADToken(req, res, () => { + await exchangeMEIDToken(req, res, () => { return res.status(500); }); @@ -33,15 +33,15 @@ describe('Token Controller - Exchange AAD Token: ', () => { }); test('when failing to get ACS Token for Teams User, it should return an error.', async () => { - const req = mockAuthenticatedRequest(mockAuthorization, mockAadUserObjectId, undefined, { - 'teams-user-aad-token': mockAadTokenWithDelegatedPermissions + const req = mockAuthenticatedRequest(mockAuthorization, mockMeidUserObjectId, undefined, { + 'teams-user-meid-token': mockMeidTokenWithDelegatedPermissions }); const res = mockResponse(); getACSTokenForTeamsUserSpy = jest .spyOn(acsService, 'getACSTokenForTeamsUser') .mockImplementation(async () => new Promise((resolve, reject) => reject(undefined))); - await exchangeAADToken(req, res, () => { + await exchangeMEIDToken(req, res, () => { return res.status(500); }); @@ -51,15 +51,15 @@ describe('Token Controller - Exchange AAD Token: ', () => { }); test('when successful to get ACS Token for Teams User, it should return a response with status 201 and an ACS token object.', async () => { - const req = mockAuthenticatedRequest(mockAuthorization, mockAadUserObjectId, undefined, { - 'teams-user-aad-token': mockAadTokenWithDelegatedPermissions + const req = mockAuthenticatedRequest(mockAuthorization, mockMeidUserObjectId, undefined, { + 'teams-user-aad-token': mockMeidTokenWithDelegatedPermissions }); const res = mockResponse(); getACSTokenForTeamsUserSpy = jest .spyOn(acsService, 'getACSTokenForTeamsUser') .mockImplementation(async () => mockCommunicationAccessToken); - await exchangeAADToken(req, res, () => { + await exchangeMEIDToken(req, res, () => { return res.status(500); }); diff --git a/tests/controllers/tokenController/getACSToken.test.ts b/tests/controllers/tokenController/getACSToken.test.ts index 07f193c..7cd8e7f 100644 --- a/tests/controllers/tokenController/getACSToken.test.ts +++ b/tests/controllers/tokenController/getACSToken.test.ts @@ -7,7 +7,7 @@ /// import { - mockAadToken, + mockMeidToken, mockCommunicationAccessToken, mockAcsUserId, mockAuthorization, @@ -22,7 +22,7 @@ import * as graphService from '../../../src/services/graphService'; let getACSUserIdSpy: jest.SpyInstance; let createACSTokenSpy: jest.SpyInstance; -let exchangeAADTokenViaOBOSpy: jest.SpyInstance; +let exchangeMEIDTokenViaOBOSpy: jest.SpyInstance; describe('Token Controller - Get ACS Token: ', () => { test('when request has no authorization header, it should return an error.', async () => { @@ -36,28 +36,28 @@ describe('Token Controller - Get ACS Token: ', () => { expect(res.status).toHaveBeenCalledWith(500); }); - test('when AAD token via OBO flow fails to be retrieved, it should return an error.', async () => { + test('when Microsoft Entra token via OBO flow fails to be retrieved, it should return an error.', async () => { const req = mockRequest(mockAuthorization); const res = mockResponse(); - exchangeAADTokenViaOBOSpy = jest - .spyOn(aadService, 'exchangeAADTokenViaOBO') + exchangeMEIDTokenViaOBOSpy = jest + .spyOn(aadService, 'exchangeMEIDTokenViaOBO') .mockImplementation(async () => new Promise((resolve, reject) => reject(undefined))); await getACSToken(req, res, () => { return res.status(500); }); - expect(exchangeAADTokenViaOBOSpy).toHaveBeenCalled(); + expect(exchangeMEIDTokenViaOBOSpy).toHaveBeenCalled(); expect(res.status).toHaveBeenCalledWith(500); - exchangeAADTokenViaOBOSpy.mockClear(); + exchangeMEIDTokenViaOBOSpy.mockClear(); }); test('when ACS user ID fails to be retrieved from Graph, it should return an error.', async () => { const req = mockRequest(mockAuthorization); const res = mockResponse(); - exchangeAADTokenViaOBOSpy = jest - .spyOn(aadService, 'exchangeAADTokenViaOBO') - .mockImplementation(async () => mockAadToken); + exchangeMEIDTokenViaOBOSpy = jest + .spyOn(aadService, 'exchangeMEIDTokenViaOBO') + .mockImplementation(async () => mockMeidToken); getACSUserIdSpy = jest .spyOn(graphService, 'getACSUserId') .mockImplementation(async () => new Promise((resolve, reject) => reject(undefined))); @@ -66,19 +66,19 @@ describe('Token Controller - Get ACS Token: ', () => { return res.status(500); }); - expect(exchangeAADTokenViaOBOSpy).toHaveBeenCalled(); + expect(exchangeMEIDTokenViaOBOSpy).toHaveBeenCalled(); expect(getACSUserIdSpy).toHaveBeenCalled(); expect(res.status).toHaveBeenCalledWith(500); - exchangeAADTokenViaOBOSpy.mockClear(); + exchangeMEIDTokenViaOBOSpy.mockClear(); getACSUserIdSpy.mockClear(); }); test('when no ACS user ID is stored in Graph, it should return a 404 error.', async () => { const req = mockRequest(mockAuthorization); const res = mockResponse(); - exchangeAADTokenViaOBOSpy = jest - .spyOn(aadService, 'exchangeAADTokenViaOBO') - .mockImplementation(async () => mockAadToken); + exchangeMEIDTokenViaOBOSpy = jest + .spyOn(aadService, 'exchangeMEIDTokenViaOBO') + .mockImplementation(async () => mockMeidToken); getACSUserIdSpy = jest .spyOn(graphService, 'getACSUserId') .mockImplementation(async () => new Promise((resolve, reject) => resolve(undefined))); @@ -87,19 +87,19 @@ describe('Token Controller - Get ACS Token: ', () => { return res.status(500); }); - expect(exchangeAADTokenViaOBOSpy).toHaveBeenCalled(); + expect(exchangeMEIDTokenViaOBOSpy).toHaveBeenCalled(); expect(getACSUserIdSpy).toHaveBeenCalled(); expect(res.status).toHaveBeenCalledWith(404); - exchangeAADTokenViaOBOSpy.mockClear(); + exchangeMEIDTokenViaOBOSpy.mockClear(); getACSUserIdSpy.mockClear(); }); test('when an ACS user ID is stored in Graph and ACS token fails to be created, it should return an error.', async () => { const req = mockRequest(mockAuthorization); const res = mockResponse(); - exchangeAADTokenViaOBOSpy = jest - .spyOn(aadService, 'exchangeAADTokenViaOBO') - .mockImplementation(async () => mockAadToken); + exchangeMEIDTokenViaOBOSpy = jest + .spyOn(aadService, 'exchangeMEIDTokenViaOBO') + .mockImplementation(async () => mockMeidToken); getACSUserIdSpy = jest.spyOn(graphService, 'getACSUserId').mockImplementation(async () => mockAcsUserId); createACSTokenSpy = jest .spyOn(acsService, 'createACSToken') @@ -109,11 +109,11 @@ describe('Token Controller - Get ACS Token: ', () => { return res.status(500); }); - expect(exchangeAADTokenViaOBOSpy).toHaveBeenCalled(); + expect(exchangeMEIDTokenViaOBOSpy).toHaveBeenCalled(); expect(getACSUserIdSpy).toHaveBeenCalled(); expect(createACSTokenSpy).toHaveBeenCalled(); expect(res.status).toHaveBeenCalledWith(500); - exchangeAADTokenViaOBOSpy.mockClear(); + exchangeMEIDTokenViaOBOSpy.mockClear(); getACSUserIdSpy.mockClear(); createACSTokenSpy.mockClear(); }); @@ -121,9 +121,9 @@ describe('Token Controller - Get ACS Token: ', () => { test('when an ACS user ID is stored in Graph and all succeeds, it should return a response with status 201 and an ACS token object.', async () => { const req = mockRequest(mockAuthorization); const res = mockResponse(); - exchangeAADTokenViaOBOSpy = jest - .spyOn(aadService, 'exchangeAADTokenViaOBO') - .mockImplementation(async () => mockAadToken); + exchangeMEIDTokenViaOBOSpy = jest + .spyOn(aadService, 'exchangeMEIDTokenViaOBO') + .mockImplementation(async () => mockMeidToken); getACSUserIdSpy = jest.spyOn(graphService, 'getACSUserId').mockImplementation(async () => mockAcsUserId); createACSTokenSpy = jest .spyOn(acsService, 'createACSToken') @@ -133,12 +133,12 @@ describe('Token Controller - Get ACS Token: ', () => { return res.status(500); }); - expect(exchangeAADTokenViaOBOSpy).toHaveBeenCalled(); + expect(exchangeMEIDTokenViaOBOSpy).toHaveBeenCalled(); expect(getACSUserIdSpy).toHaveBeenCalled(); expect(createACSTokenSpy).toHaveBeenCalled(); expect(res.status).toHaveBeenCalledWith(201); expect(res.json).toHaveBeenCalledWith(mockCommunicationUserToken); - exchangeAADTokenViaOBOSpy.mockClear(); + exchangeMEIDTokenViaOBOSpy.mockClear(); getACSUserIdSpy.mockClear(); createACSTokenSpy.mockClear(); }); diff --git a/tests/controllers/userController/createACSUser.test.ts b/tests/controllers/userController/createACSUser.test.ts index 1a86032..9f61dfc 100644 --- a/tests/controllers/userController/createACSUser.test.ts +++ b/tests/controllers/userController/createACSUser.test.ts @@ -8,7 +8,7 @@ import { mockAcsUserId, - mockAadToken, + mockMeidToken, mockAuthorization, mockIdentityMapping, mockResponse, @@ -19,7 +19,7 @@ import * as acsService from '../../../src/services/acsService'; import * as aadService from '../../../src/services/aadService'; import * as graphService from '../../../src/services/graphService'; -let exchangeAADTokenViaOBOSpy: jest.SpyInstance; +let exchangeMEIDTokenViaOBOSpy: jest.SpyInstance; let getACSUserIdSpy: jest.SpyInstance; let createACSUserIdentitySpy: jest.SpyInstance; let addIdentityMappingSpy: jest.SpyInstance; @@ -36,28 +36,28 @@ describe('User Controller - Create ACS User: ', () => { expect(res.status).toHaveBeenCalledWith(500); }); - test('when AAD token via OBO flow fails to be retrieved, it should return an error.', async () => { + test('when Microsoft Entra token via OBO flow fails to be retrieved, it should return an error.', async () => { const req = mockRequest(mockAuthorization); const res = mockResponse(); - exchangeAADTokenViaOBOSpy = jest - .spyOn(aadService, 'exchangeAADTokenViaOBO') + exchangeMEIDTokenViaOBOSpy = jest + .spyOn(aadService, 'exchangeMEIDTokenViaOBO') .mockImplementation(async () => new Promise((resolve, reject) => reject(undefined))); await createACSUser(req, res, () => { return res.status(500); }); - expect(exchangeAADTokenViaOBOSpy).toHaveBeenCalled(); + expect(exchangeMEIDTokenViaOBOSpy).toHaveBeenCalled(); expect(res.status).toHaveBeenCalledWith(500); - exchangeAADTokenViaOBOSpy.mockClear(); + exchangeMEIDTokenViaOBOSpy.mockClear(); }); test('when ACS user ID fails to be retrieved from Graph, it should return an error.', async () => { const req = mockRequest(mockAuthorization); const res = mockResponse(); - exchangeAADTokenViaOBOSpy = jest - .spyOn(aadService, 'exchangeAADTokenViaOBO') - .mockImplementation(async () => mockAadToken); + exchangeMEIDTokenViaOBOSpy = jest + .spyOn(aadService, 'exchangeMEIDTokenViaOBO') + .mockImplementation(async () => mockMeidToken); getACSUserIdSpy = jest .spyOn(graphService, 'getACSUserId') .mockImplementation(async () => new Promise((resolve, reject) => reject(undefined))); @@ -66,19 +66,19 @@ describe('User Controller - Create ACS User: ', () => { return res.status(500); }); - expect(exchangeAADTokenViaOBOSpy).toHaveBeenCalled(); + expect(exchangeMEIDTokenViaOBOSpy).toHaveBeenCalled(); expect(getACSUserIdSpy).toHaveBeenCalled(); expect(res.status).toHaveBeenCalledWith(500); - exchangeAADTokenViaOBOSpy.mockClear(); + exchangeMEIDTokenViaOBOSpy.mockClear(); getACSUserIdSpy.mockClear(); }); test('when no ACS user ID is stored in Graph and ACS identity fails to be created, it should return an error.', async () => { const req = mockRequest(mockAuthorization); const res = mockResponse(); - exchangeAADTokenViaOBOSpy = jest - .spyOn(aadService, 'exchangeAADTokenViaOBO') - .mockImplementation(async () => mockAadToken); + exchangeMEIDTokenViaOBOSpy = jest + .spyOn(aadService, 'exchangeMEIDTokenViaOBO') + .mockImplementation(async () => mockMeidToken); getACSUserIdSpy = jest .spyOn(graphService, 'getACSUserId') .mockImplementation(async () => new Promise((resolve, reject) => resolve(undefined))); @@ -90,11 +90,11 @@ describe('User Controller - Create ACS User: ', () => { return res.status(500); }); - expect(exchangeAADTokenViaOBOSpy).toHaveBeenCalled(); + expect(exchangeMEIDTokenViaOBOSpy).toHaveBeenCalled(); expect(getACSUserIdSpy).toHaveBeenCalled(); expect(createACSUserIdentitySpy).toHaveBeenCalled(); expect(res.status).toHaveBeenCalledWith(500); - exchangeAADTokenViaOBOSpy.mockClear(); + exchangeMEIDTokenViaOBOSpy.mockClear(); getACSUserIdSpy.mockClear(); createACSUserIdentitySpy.mockClear(); }); @@ -102,9 +102,9 @@ describe('User Controller - Create ACS User: ', () => { test('when no ACS user ID is stored in Graph and Graph identity mapping fails to be added, it should return an error.', async () => { const req = mockRequest(mockAuthorization); const res = mockResponse(); - exchangeAADTokenViaOBOSpy = jest - .spyOn(aadService, 'exchangeAADTokenViaOBO') - .mockImplementation(async () => mockAadToken); + exchangeMEIDTokenViaOBOSpy = jest + .spyOn(aadService, 'exchangeMEIDTokenViaOBO') + .mockImplementation(async () => mockMeidToken); getACSUserIdSpy = jest .spyOn(graphService, 'getACSUserId') .mockImplementation(async () => new Promise((resolve, reject) => resolve(undefined))); @@ -119,12 +119,12 @@ describe('User Controller - Create ACS User: ', () => { return res.status(500); }); - expect(exchangeAADTokenViaOBOSpy).toHaveBeenCalled(); + expect(exchangeMEIDTokenViaOBOSpy).toHaveBeenCalled(); expect(getACSUserIdSpy).toHaveBeenCalled(); expect(createACSUserIdentitySpy).toHaveBeenCalled(); expect(addIdentityMappingSpy).toHaveBeenCalled(); expect(res.status).toHaveBeenCalledWith(500); - exchangeAADTokenViaOBOSpy.mockClear(); + exchangeMEIDTokenViaOBOSpy.mockClear(); getACSUserIdSpy.mockClear(); createACSUserIdentitySpy.mockClear(); addIdentityMappingSpy.mockClear(); @@ -133,9 +133,9 @@ describe('User Controller - Create ACS User: ', () => { test('when no ACS user ID is stored in Graph and ACS user is successfully created and mapped, it should return response with status 201 and identity mapping object.', async () => { const req = mockRequest(mockAuthorization); const res = mockResponse(); - exchangeAADTokenViaOBOSpy = jest - .spyOn(aadService, 'exchangeAADTokenViaOBO') - .mockImplementation(async () => mockAadToken); + exchangeMEIDTokenViaOBOSpy = jest + .spyOn(aadService, 'exchangeMEIDTokenViaOBO') + .mockImplementation(async () => mockMeidToken); getACSUserIdSpy = jest .spyOn(graphService, 'getACSUserId') .mockImplementation(async () => new Promise((resolve, reject) => resolve(undefined))); @@ -150,13 +150,13 @@ describe('User Controller - Create ACS User: ', () => { return res.status(500); }); - expect(exchangeAADTokenViaOBOSpy).toHaveBeenCalled(); + expect(exchangeMEIDTokenViaOBOSpy).toHaveBeenCalled(); expect(getACSUserIdSpy).toHaveBeenCalled(); expect(createACSUserIdentitySpy).toHaveBeenCalled(); expect(addIdentityMappingSpy).toHaveBeenCalled(); expect(res.status).toHaveBeenCalledWith(201); expect(res.json).toHaveBeenCalledWith(mockIdentityMapping); - exchangeAADTokenViaOBOSpy.mockClear(); + exchangeMEIDTokenViaOBOSpy.mockClear(); getACSUserIdSpy.mockClear(); createACSUserIdentitySpy.mockClear(); addIdentityMappingSpy.mockClear(); @@ -165,18 +165,18 @@ describe('User Controller - Create ACS User: ', () => { test('when an ACS user ID is stored in Graph, it should return response with status 200 and ACS user ID as user identity.', async () => { const req = mockRequest(mockAuthorization); const res = mockResponse(); - exchangeAADTokenViaOBOSpy = jest - .spyOn(aadService, 'exchangeAADTokenViaOBO') - .mockImplementation(async () => mockAadToken); + exchangeMEIDTokenViaOBOSpy = jest + .spyOn(aadService, 'exchangeMEIDTokenViaOBO') + .mockImplementation(async () => mockMeidToken); getACSUserIdSpy = jest.spyOn(graphService, 'getACSUserId').mockImplementation(async () => mockAcsUserId); await createACSUser(req, res, () => {}); - expect(exchangeAADTokenViaOBOSpy).toHaveBeenCalled(); + expect(exchangeMEIDTokenViaOBOSpy).toHaveBeenCalled(); expect(getACSUserIdSpy).toHaveBeenCalled(); expect(res.status).toHaveBeenCalledWith(200); expect(res.json).toHaveBeenCalledWith({ acsUserIdentity: mockAcsUserId }); - exchangeAADTokenViaOBOSpy.mockClear(); + exchangeMEIDTokenViaOBOSpy.mockClear(); getACSUserIdSpy.mockClear(); }); }); diff --git a/tests/controllers/userController/deleteACSUser.test.ts b/tests/controllers/userController/deleteACSUser.test.ts index d3bd42e..1a3741d 100644 --- a/tests/controllers/userController/deleteACSUser.test.ts +++ b/tests/controllers/userController/deleteACSUser.test.ts @@ -6,13 +6,13 @@ // eslint-disable-next-line @typescript-eslint/triple-slash-reference /// -import { mockAcsUserId, mockAadToken, mockAuthorization, mockResponse, mockRequest } from '../../utils/mockData'; +import { mockAcsUserId, mockMeidToken, mockAuthorization, mockResponse, mockRequest } from '../../utils/mockData'; import { deleteACSUser } from '../../../src/controllers/userController'; import * as acsService from '../../../src/services/acsService'; -import * as aadService from '../../../src/services/aadService'; +import * as meidService from '../../../src/services/aadService'; import * as graphService from '../../../src/services/graphService'; -let exchangeAADTokenViaOBOSpy: jest.SpyInstance; +let exchangeMEIDTokenViaOBOSpy: jest.SpyInstance; let getACSUserIdSpy: jest.SpyInstance; let deleteIdentityMappingSpy: jest.SpyInstance; let deleteACSUserIdentitySpy: jest.SpyInstance; @@ -29,28 +29,28 @@ describe('User Controller - Delete ACS User: ', () => { expect(res.status).toHaveBeenCalledWith(500); }); - test('when AAD token via OBO flow fails to be retrieved, it should return an error.', async () => { + test('when Microsoft Entra token via OBO flow fails to be retrieved, it should return an error.', async () => { const req = mockRequest(mockAuthorization); const res = mockResponse(); - exchangeAADTokenViaOBOSpy = jest - .spyOn(aadService, 'exchangeAADTokenViaOBO') + exchangeMEIDTokenViaOBOSpy = jest + .spyOn(meidService, 'exchangeMEIDTokenViaOBO') .mockImplementation(async () => new Promise((resolve, reject) => reject(undefined))); await deleteACSUser(req, res, () => { return res.status(500); }); - expect(exchangeAADTokenViaOBOSpy).toHaveBeenCalled(); + expect(exchangeMEIDTokenViaOBOSpy).toHaveBeenCalled(); expect(res.status).toHaveBeenCalledWith(500); - exchangeAADTokenViaOBOSpy.mockClear(); + exchangeMEIDTokenViaOBOSpy.mockClear(); }); test('when ACS user ID fails to be retrieved from Graph, it should return an error.', async () => { const req = mockRequest(mockAuthorization); const res = mockResponse(); - exchangeAADTokenViaOBOSpy = jest - .spyOn(aadService, 'exchangeAADTokenViaOBO') - .mockImplementation(async () => mockAadToken); + exchangeMEIDTokenViaOBOSpy = jest + .spyOn(meidService, 'exchangeMEIDTokenViaOBO') + .mockImplementation(async () => mockMeidToken); getACSUserIdSpy = jest .spyOn(graphService, 'getACSUserId') .mockImplementation(async () => new Promise((resolve, reject) => reject(undefined))); @@ -59,19 +59,19 @@ describe('User Controller - Delete ACS User: ', () => { return res.status(500); }); - expect(exchangeAADTokenViaOBOSpy).toHaveBeenCalled(); + expect(exchangeMEIDTokenViaOBOSpy).toHaveBeenCalled(); expect(getACSUserIdSpy).toHaveBeenCalled(); expect(res.status).toHaveBeenCalledWith(500); - exchangeAADTokenViaOBOSpy.mockClear(); + exchangeMEIDTokenViaOBOSpy.mockClear(); getACSUserIdSpy.mockClear(); }); test('when Graph identity mapping fails to be deleted, it should return an error.', async () => { const req = mockRequest(mockAuthorization); const res = mockResponse(); - exchangeAADTokenViaOBOSpy = jest - .spyOn(aadService, 'exchangeAADTokenViaOBO') - .mockImplementation(async () => mockAadToken); + exchangeMEIDTokenViaOBOSpy = jest + .spyOn(meidService, 'exchangeMEIDTokenViaOBO') + .mockImplementation(async () => mockMeidToken); getACSUserIdSpy = jest.spyOn(graphService, 'getACSUserId').mockImplementation(async () => mockAcsUserId); deleteIdentityMappingSpy = jest .spyOn(graphService, 'deleteIdentityMapping') @@ -81,11 +81,11 @@ describe('User Controller - Delete ACS User: ', () => { return res.status(500); }); - expect(exchangeAADTokenViaOBOSpy).toHaveBeenCalled(); + expect(exchangeMEIDTokenViaOBOSpy).toHaveBeenCalled(); expect(getACSUserIdSpy).toHaveBeenCalled(); expect(deleteIdentityMappingSpy).toHaveBeenCalled(); expect(res.status).toHaveBeenCalledWith(500); - exchangeAADTokenViaOBOSpy.mockClear(); + exchangeMEIDTokenViaOBOSpy.mockClear(); getACSUserIdSpy.mockClear(); deleteIdentityMappingSpy.mockClear(); }); @@ -93,9 +93,9 @@ describe('User Controller - Delete ACS User: ', () => { test('when ACS user identity fails to be deleted, it should return an error.', async () => { const req = mockRequest(mockAuthorization); const res = mockResponse(); - exchangeAADTokenViaOBOSpy = jest - .spyOn(aadService, 'exchangeAADTokenViaOBO') - .mockImplementation(async () => mockAadToken); + exchangeMEIDTokenViaOBOSpy = jest + .spyOn(meidService, 'exchangeMEIDTokenViaOBO') + .mockImplementation(async () => mockMeidToken); getACSUserIdSpy = jest.spyOn(graphService, 'getACSUserId').mockImplementation(async () => mockAcsUserId); deleteIdentityMappingSpy = jest .spyOn(graphService, 'deleteIdentityMapping') @@ -108,12 +108,12 @@ describe('User Controller - Delete ACS User: ', () => { return res.status(500); }); - expect(exchangeAADTokenViaOBOSpy).toHaveBeenCalled(); + expect(exchangeMEIDTokenViaOBOSpy).toHaveBeenCalled(); expect(getACSUserIdSpy).toHaveBeenCalled(); expect(deleteIdentityMappingSpy).toHaveBeenCalled(); expect(deleteACSUserIdentitySpy).toHaveBeenCalled(); expect(res.status).toHaveBeenCalledWith(500); - exchangeAADTokenViaOBOSpy.mockClear(); + exchangeMEIDTokenViaOBOSpy.mockClear(); getACSUserIdSpy.mockClear(); deleteIdentityMappingSpy.mockClear(); deleteACSUserIdentitySpy.mockClear(); @@ -122,9 +122,9 @@ describe('User Controller - Delete ACS User: ', () => { test('when all succeeds, itshould return a response with status 204.', async () => { const req = mockRequest(mockAuthorization); const res = mockResponse(); - exchangeAADTokenViaOBOSpy = jest - .spyOn(aadService, 'exchangeAADTokenViaOBO') - .mockImplementation(async () => mockAadToken); + exchangeMEIDTokenViaOBOSpy = jest + .spyOn(meidService, 'exchangeMEIDTokenViaOBO') + .mockImplementation(async () => mockMeidToken); getACSUserIdSpy = jest.spyOn(graphService, 'getACSUserId').mockImplementation(async () => mockAcsUserId); deleteIdentityMappingSpy = jest .spyOn(graphService, 'deleteIdentityMapping') @@ -137,12 +137,12 @@ describe('User Controller - Delete ACS User: ', () => { return res.status(500); }); - expect(exchangeAADTokenViaOBOSpy).toHaveBeenCalled(); + expect(exchangeMEIDTokenViaOBOSpy).toHaveBeenCalled(); expect(getACSUserIdSpy).toHaveBeenCalled(); expect(deleteIdentityMappingSpy).toHaveBeenCalled(); expect(deleteACSUserIdentitySpy).toHaveBeenCalled(); expect(res.status).toHaveBeenCalledWith(204); - exchangeAADTokenViaOBOSpy.mockClear(); + exchangeMEIDTokenViaOBOSpy.mockClear(); getACSUserIdSpy.mockClear(); deleteIdentityMappingSpy.mockClear(); deleteACSUserIdentitySpy.mockClear(); diff --git a/tests/controllers/userController/getACSUser.test.ts b/tests/controllers/userController/getACSUser.test.ts index 8da75db..cf4e1a3 100644 --- a/tests/controllers/userController/getACSUser.test.ts +++ b/tests/controllers/userController/getACSUser.test.ts @@ -6,12 +6,12 @@ // eslint-disable-next-line @typescript-eslint/triple-slash-reference /// -import { mockAcsUserId, mockAadToken, mockAuthorization, mockResponse, mockRequest } from '../../utils/mockData'; +import { mockAcsUserId, mockMeidToken, mockAuthorization, mockResponse, mockRequest } from '../../utils/mockData'; import { getACSUser } from '../../../src/controllers/userController'; import * as aadService from '../../../src/services/aadService'; import * as graphService from '../../../src/services/graphService'; -let exchangeAADTokenViaOBOSpy: jest.SpyInstance; +let exchangeMEIDTokenViaOBOSpy: jest.SpyInstance; let getACSUserIdSpy: jest.SpyInstance; describe('User Controller - Get ACS User :', () => { @@ -26,28 +26,28 @@ describe('User Controller - Get ACS User :', () => { expect(res.status).toHaveBeenCalledWith(500); }); - test('when AAD token via OBO flow fails to be retrieved, it should return an error.', async () => { + test('when Microsoft Entra token via OBO flow fails to be retrieved, it should return an error.', async () => { const req = mockRequest(mockAuthorization); const res = mockResponse(); - exchangeAADTokenViaOBOSpy = jest - .spyOn(aadService, 'exchangeAADTokenViaOBO') + exchangeMEIDTokenViaOBOSpy = jest + .spyOn(aadService, 'exchangeMEIDTokenViaOBO') .mockImplementation(async () => new Promise((resolve, reject) => reject(undefined))); await getACSUser(req, res, () => { return res.status(500); }); - expect(exchangeAADTokenViaOBOSpy).toHaveBeenCalled(); + expect(exchangeMEIDTokenViaOBOSpy).toHaveBeenCalled(); expect(res.status).toHaveBeenCalledWith(500); - exchangeAADTokenViaOBOSpy.mockClear(); + exchangeMEIDTokenViaOBOSpy.mockClear(); }); test('when ACS user ID fails to be retrieved from Graph, it should return an error.', async () => { const req = mockRequest(mockAuthorization); const res = mockResponse(); - exchangeAADTokenViaOBOSpy = jest - .spyOn(aadService, 'exchangeAADTokenViaOBO') - .mockImplementation(async () => mockAadToken); + exchangeMEIDTokenViaOBOSpy = jest + .spyOn(aadService, 'exchangeMEIDTokenViaOBO') + .mockImplementation(async () => mockMeidToken); getACSUserIdSpy = jest .spyOn(graphService, 'getACSUserId') .mockImplementation(async () => new Promise((resolve, reject) => reject(undefined))); @@ -56,19 +56,19 @@ describe('User Controller - Get ACS User :', () => { return res.status(500); }); - expect(exchangeAADTokenViaOBOSpy).toHaveBeenCalled(); + expect(exchangeMEIDTokenViaOBOSpy).toHaveBeenCalled(); expect(getACSUserIdSpy).toHaveBeenCalled(); expect(res.status).toHaveBeenCalledWith(500); - exchangeAADTokenViaOBOSpy.mockClear(); + exchangeMEIDTokenViaOBOSpy.mockClear(); getACSUserIdSpy.mockClear(); }); test('when no ACS user ID is stored in Graph, it should return a 404 error.', async () => { const req = mockRequest(mockAuthorization); const res = mockResponse(); - exchangeAADTokenViaOBOSpy = jest - .spyOn(aadService, 'exchangeAADTokenViaOBO') - .mockImplementation(async () => mockAadToken); + exchangeMEIDTokenViaOBOSpy = jest + .spyOn(aadService, 'exchangeMEIDTokenViaOBO') + .mockImplementation(async () => mockMeidToken); getACSUserIdSpy = jest .spyOn(graphService, 'getACSUserId') .mockImplementation(async () => new Promise((resolve, reject) => resolve(undefined))); @@ -77,28 +77,28 @@ describe('User Controller - Get ACS User :', () => { return res.status(500); }); - expect(exchangeAADTokenViaOBOSpy).toHaveBeenCalled(); + expect(exchangeMEIDTokenViaOBOSpy).toHaveBeenCalled(); expect(getACSUserIdSpy).toHaveBeenCalled(); expect(res.status).toHaveBeenCalledWith(404); - exchangeAADTokenViaOBOSpy.mockClear(); + exchangeMEIDTokenViaOBOSpy.mockClear(); getACSUserIdSpy.mockClear(); }); test('when an ACS user ID is stored in Graph and all succeeds, it should return a response with status 200 and acsUserIdentity object.', async () => { const req = mockRequest(mockAuthorization); const res = mockResponse(); - exchangeAADTokenViaOBOSpy = jest - .spyOn(aadService, 'exchangeAADTokenViaOBO') - .mockImplementation(async () => mockAadToken); + exchangeMEIDTokenViaOBOSpy = jest + .spyOn(aadService, 'exchangeMEIDTokenViaOBO') + .mockImplementation(async () => mockMeidToken); getACSUserIdSpy = jest.spyOn(graphService, 'getACSUserId').mockImplementation(async () => mockAcsUserId); await getACSUser(req, res, () => {}); - expect(exchangeAADTokenViaOBOSpy).toHaveBeenCalled(); + expect(exchangeMEIDTokenViaOBOSpy).toHaveBeenCalled(); expect(getACSUserIdSpy).toHaveBeenCalled(); expect(res.status).toHaveBeenCalledWith(200); expect(res.json).toHaveBeenCalledWith({ acsUserIdentity: mockAcsUserId }); - exchangeAADTokenViaOBOSpy.mockClear(); + exchangeMEIDTokenViaOBOSpy.mockClear(); getACSUserIdSpy.mockClear(); }); }); diff --git a/tests/services/aadService/exchangeAADTokenViaOBO.test.ts b/tests/services/aadService/exchangeAADTokenViaOBO.test.ts index c625089..cc7ff04 100644 --- a/tests/services/aadService/exchangeAADTokenViaOBO.test.ts +++ b/tests/services/aadService/exchangeAADTokenViaOBO.test.ts @@ -7,8 +7,8 @@ /// import { Configuration, ConfidentialClientApplication, OnBehalfOfRequest } from '@azure/msal-node'; -import { mockAadToken } from '../../utils/mockData'; -import * as aadService from '../../../src/services/aadService'; +import { mockMeidToken } from '../../utils/mockData'; +import * as meidService from '../../../src/services/aadService'; const mockConfidentialClientApplication = ( msalConfig?: Configuration, @@ -20,7 +20,7 @@ const mockConfidentialClientApplication = ( if (!oboRequest.oboAssertion || !isOboResolved) { return new Promise((resolve, reject) => reject(null)); } - return new Promise((resolve, reject) => resolve({ accessToken: mockAadToken })); + return new Promise((resolve, reject) => resolve({ accessToken: mockMeidToken })); }; return !msalConfig ? undefined : (clientApp as ConfidentialClientApplication); }; @@ -35,15 +35,15 @@ const mockMsalConfig: Configuration = { let createConfidentialClientApplicationSpy: jest.SpyInstance; -describe('AAD Service - Exchange AAD Token Via OBO: ', () => { +describe('Microsoft Entra ID Service - Exchange Microsoft Entra Token Via OBO: ', () => { test('when Confidential Client Application fails to be created, it should throw an error.', async () => { createConfidentialClientApplicationSpy = jest - .spyOn(aadService, 'createConfidentialClientApplication') + .spyOn(meidService, 'createConfidentialClientApplication') .mockImplementation(() => mockConfidentialClientApplication()); let mockError: undefined | String = undefined; try { - await aadService.exchangeAADTokenViaOBO(mockAadToken); + await meidService.exchangeMEIDTokenViaOBO(mockMeidToken); } catch { mockError = 'error'; } @@ -55,13 +55,13 @@ describe('AAD Service - Exchange AAD Token Via OBO: ', () => { test('when OBO token failed to be acquired, it should throw an error.', async () => { createConfidentialClientApplicationSpy = jest - .spyOn(aadService, 'createConfidentialClientApplication') + .spyOn(meidService, 'createConfidentialClientApplication') .mockImplementation(() => mockConfidentialClientApplication(mockMsalConfig)); let mockError: undefined | String = undefined; let token: string; try { - token = await aadService.exchangeAADTokenViaOBO(mockAadToken); + token = await meidService.exchangeMEIDTokenViaOBO(mockMeidToken); } catch { mockError = 'error'; } @@ -73,20 +73,20 @@ describe('AAD Service - Exchange AAD Token Via OBO: ', () => { test('when all succeeds, it should return mock token.', async () => { createConfidentialClientApplicationSpy = jest - .spyOn(aadService, 'createConfidentialClientApplication') + .spyOn(meidService, 'createConfidentialClientApplication') .mockImplementation(() => mockConfidentialClientApplication(mockMsalConfig, true)); let mockError: undefined | String = undefined; let token: string = ''; try { - token = await aadService.exchangeAADTokenViaOBO(mockAadToken); + token = await meidService.exchangeMEIDTokenViaOBO(mockMeidToken); } catch { mockError = 'error'; } expect(createConfidentialClientApplicationSpy).toHaveBeenCalled(); expect(mockError).toBeFalsy(); - expect(token).toBe(mockAadToken); + expect(token).toBe(mockMeidToken); createConfidentialClientApplicationSpy.mockClear(); }); }); diff --git a/tests/services/acsService/getACSTokenForTeamsUser.test.ts b/tests/services/acsService/getACSTokenForTeamsUser.test.ts index 9fb06a9..97031a8 100644 --- a/tests/services/acsService/getACSTokenForTeamsUser.test.ts +++ b/tests/services/acsService/getACSTokenForTeamsUser.test.ts @@ -8,7 +8,7 @@ import { CommunicationIdentityClient } from '@azure/communication-identity'; import * as acsService from '../../../src/services/acsService'; -import { mockCommunicationAccessToken, mockAadToken, mockAcsUserId, mockAadUserObjectId } from '../../utils/mockData'; +import { mockCommunicationAccessToken, mockMeidToken, mockAcsUserId, mockMeidUserObjectId } from '../../utils/mockData'; const mockCommunicationIdentityClient = ( isCreateClientResolved?: boolean, @@ -35,7 +35,7 @@ describe('ACS Service - Get ACS Token For Teams User: ', () => { let mockError: undefined | String = undefined; try { - await acsService.getACSTokenForTeamsUser(mockAadToken, mockAadUserObjectId); + await acsService.getACSTokenForTeamsUser(mockMeidToken, mockMeidUserObjectId); } catch { mockError = 'error'; } @@ -52,7 +52,7 @@ describe('ACS Service - Get ACS Token For Teams User: ', () => { let mockError: undefined | String = undefined; let accessToken; try { - accessToken = await acsService.getACSTokenForTeamsUser(mockAadToken, mockAadUserObjectId); + accessToken = await acsService.getACSTokenForTeamsUser(mockMeidToken, mockMeidUserObjectId); } catch { mockError = 'error'; } @@ -69,7 +69,7 @@ describe('ACS Service - Get ACS Token For Teams User: ', () => { let mockError: undefined | String = undefined; let accessToken; try { - accessToken = await acsService.getACSTokenForTeamsUser(mockAadToken, mockAadUserObjectId); + accessToken = await acsService.getACSTokenForTeamsUser(mockMeidToken, mockMeidUserObjectId); } catch { mockError = 'error'; } diff --git a/tests/utils/mockData.ts b/tests/utils/mockData.ts index d0125f0..dcdd628 100644 --- a/tests/utils/mockData.ts +++ b/tests/utils/mockData.ts @@ -55,10 +55,10 @@ export const mockResponse = (): Response => { }; export const mockAcsUserId = 'mock-acs-user-id'; -export const mockAadToken = 'mock-aad-token'; -export const mockAuthorization = `mock-authorization-header ${mockAadToken}`; -export const mockAadUserObjectId = 'mock-aad-user-object-id'; -export const mockAadTokenWithDelegatedPermissions = 'mock-aad-token-with-delegated-permissions'; +export const mockMeidToken = 'mock-meid-token'; +export const mockAuthorization = `mock-authorization-header ${mockMeidToken}`; +export const mockMeidUserObjectId = 'mock-meid-user-object-id'; +export const mockMeidTokenWithDelegatedPermissions = 'mock-meid-token-with-delegated-permissions'; export const mockIdentityMapping = { acsUserIdentity: 'mock-identity-mapping' }; export const mockCommunicationUserIdentifier: CommunicationUserIdentifier = { communicationUserId: 'mock-user-id'