Skip to content

Commit

Permalink
AUT-2578: Introduce test for check reauth user service
Browse files Browse the repository at this point in the history
This also introduces a common test helper for service tests, since there will be a lot of repetition as we add these tests
  • Loading branch information
BeckaL committed May 17, 2024
1 parent 2f51cf8 commit c26fc3d
Show file tree
Hide file tree
Showing 8 changed files with 572 additions and 12 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
import { describe } from "mocha";
import sinon, { SinonStub } from "sinon";
import { AccountInterventionsInterface } from "../types";
import { accountInterventionService } from "../account-intervention-service";
import {
checkApiCallMadeWithExpectedBodyAndHeaders,
commonVariables,
expectedHeadersFromCommonVarsWithoutSecurityHeaders,
resetApiKeyAndBaseUrlEnvVars,
setupApiKeyAndBaseUrlEnvVars,
} from "../../../../test/helpers/service-test-helper";
import { API_ENDPOINTS } from "../../../app.constants";
import { Http } from "../../../utils/http";

describe("account interventions service", () => {
const httpInstance = new Http();
const service: AccountInterventionsInterface =
accountInterventionService(httpInstance);
let postStub: SinonStub;

beforeEach(() => {
setupApiKeyAndBaseUrlEnvVars();
postStub = sinon.stub(httpInstance.client, "post");
});

afterEach(() => {
postStub.reset();
resetApiKeyAndBaseUrlEnvVars();
});

it("successfully calls the API to check a user's account interventions status", async () => {
const axiosResponse = Promise.resolve({
data: {},
status: 200,
statusText: "OK",
});
postStub.resolves(axiosResponse);
const { sessionId, clientSessionId, email, ip, diPersistentSessionId } =
commonVariables;

const underTest = () =>
service.accountInterventionStatus(
sessionId,
email,
ip,
clientSessionId,
diPersistentSessionId
);

const expectedApiCallDetails = {
expectedPath: API_ENDPOINTS.ACCOUNT_INTERVENTIONS,
expectedHeaders: expectedHeadersFromCommonVarsWithoutSecurityHeaders,
expectedBody: { email: commonVariables.email },
};

await checkApiCallMadeWithExpectedBodyAndHeaders(
underTest,
postStub,
true,
expectedApiCallDetails
);
});
});
Original file line number Diff line number Diff line change
@@ -1,22 +1,67 @@
import { expect } from "chai";
import { describe } from "mocha";

import { supportReauthentication } from "../../../config";
import { Http } from "../../../utils/http";
import { sinon } from "../../../../test/utils/test-utils";
import { API_ENDPOINTS } from "../../../app.constants";
import { SinonStub } from "sinon";
import { checkReauthUsersService } from "../check-reauth-users-service";
import { CheckReauthServiceInterface } from "../types";
import {
checkApiCallMadeWithExpectedBodyAndHeaders,
commonVariables,
expectedHeadersFromCommonVarsWithoutSecurityHeaders,
resetApiKeyAndBaseUrlEnvVars,
setupApiKeyAndBaseUrlEnvVars,
} from "../../../../test/helpers/service-test-helper";

describe("re-authentication service", () => {
describe("with auth re-authentication feature flag on", () => {
it("should return true", async () => {
process.env.SUPPORT_REAUTHENTICATION = "1";
const httpInstance = new Http();
const service: CheckReauthServiceInterface =
checkReauthUsersService(httpInstance);
const SUBJECT = "123";
let postStub: SinonStub;

expect(supportReauthentication()).to.be.true;
});
beforeEach(() => {
setupApiKeyAndBaseUrlEnvVars();
postStub = sinon.stub(httpInstance.client, "post");
});

describe("with auth re-authentication feature flag off", () => {
it("should return false", async () => {
process.env.SUPPORT_REAUTHENTICATION = "0";
afterEach(() => {
postStub.reset();
resetApiKeyAndBaseUrlEnvVars();
});

expect(supportReauthentication()).to.be.false;
it("successfully calls the API to check a reauth user", async () => {
const axiosResponse = Promise.resolve({
data: {},
status: 200,
statusText: "OK",
});
postStub.resolves(axiosResponse);
const { sessionId, email, ip, clientSessionId, diPersistentSessionId } =
commonVariables;

const underTest = () =>
service.checkReauthUsers(
sessionId,
email,
SUBJECT,
ip,
clientSessionId,
diPersistentSessionId
);

const expectedApiCallDetails = {
expectedPath: API_ENDPOINTS.CHECK_REAUTH_USER,
expectedHeaders: expectedHeadersFromCommonVarsWithoutSecurityHeaders,
expectedBody: { email: commonVariables.email, rpPairwiseId: SUBJECT },
validateStatus: true,
};

await checkApiCallMadeWithExpectedBodyAndHeaders(
underTest,
postStub,
true,
expectedApiCallDetails
);
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
import { describe } from "mocha";
import sinon, { SinonStub } from "sinon";
import { Http } from "../../../../utils/http";
import { AccountRecoveryInterface } from "../types";
import { accountRecoveryService } from "../account-recovery-service";
import {
checkApiCallMadeWithExpectedBodyAndHeaders,
commonVariables,
expectedHeadersFromCommonVarsWithoutSecurityHeaders,
resetApiKeyAndBaseUrlEnvVars,
setupApiKeyAndBaseUrlEnvVars,
} from "../../../../../test/helpers/service-test-helper";
import { API_ENDPOINTS } from "../../../../app.constants";

describe("account recovery service", () => {
const httpInstance = new Http();
const service: AccountRecoveryInterface =
accountRecoveryService(httpInstance);
let postStub: SinonStub;

beforeEach(() => {
setupApiKeyAndBaseUrlEnvVars();
postStub = sinon.stub(httpInstance.client, "post");
});

afterEach(() => {
postStub.reset();
resetApiKeyAndBaseUrlEnvVars();
});

it("successfully calls the API to perform an account recovery request", async () => {
const axiosResponse = Promise.resolve({
data: {},
status: 200,
statusText: "OK",
});
postStub.resolves(axiosResponse);
const { sessionId, clientSessionId, email, ip, diPersistentSessionId } =
commonVariables;

const underTest = () =>
service.accountRecovery(
sessionId,
clientSessionId,
email,
ip,
diPersistentSessionId
);

const expectedApiCallDetails = {
expectedPath: API_ENDPOINTS.ACCOUNT_RECOVERY,
expectedHeaders: expectedHeadersFromCommonVarsWithoutSecurityHeaders,
expectedBody: { email: commonVariables.email },
};

await checkApiCallMadeWithExpectedBodyAndHeaders(
underTest,
postStub,
true,
expectedApiCallDetails
);
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
import { describe } from "mocha";
import sinon, { SinonStub } from "sinon";
import { Http } from "../../../../utils/http";
import {
checkApiCallMadeWithExpectedBodyAndHeaders,
commonVariables,
expectedHeadersFromCommonVarsWithoutSecurityHeaders,
resetApiKeyAndBaseUrlEnvVars,
setupApiKeyAndBaseUrlEnvVars,
} from "../../../../../test/helpers/service-test-helper";
import { API_ENDPOINTS, NOTIFICATION_TYPE } from "../../../../app.constants";
import { SendNotificationServiceInterface } from "../types";
import { sendNotificationService } from "../send-notification-service";
import { JOURNEY_TYPE } from "../../constants";

describe("send notification service", () => {
let postStub: SinonStub;
let service: SendNotificationServiceInterface;
const axiosResponse = Promise.resolve({
data: {},
status: 200,
statusText: "OK",
});
const { sessionId, clientSessionId, email, ip, diPersistentSessionId } =
commonVariables;
const notificationType = NOTIFICATION_TYPE.VERIFY_EMAIL;
const userLanguage = "cy";
const expectedHeaders = {
...expectedHeadersFromCommonVarsWithoutSecurityHeaders,
"User-Language": userLanguage,
};

beforeEach(() => {
const httpInstance = new Http();
service = sendNotificationService(httpInstance);
postStub = sinon.stub(httpInstance.client, "post");
setupApiKeyAndBaseUrlEnvVars();
postStub.resolves(axiosResponse);
});

afterEach(() => {
postStub.reset();
resetApiKeyAndBaseUrlEnvVars();
});

it("successfully calls the API to send a notification", async () => {
const underTest = () =>
service.sendNotification(
sessionId,
clientSessionId,
email,
notificationType,
ip,
diPersistentSessionId,
userLanguage
);

const expectedApiCallDetails = {
expectedPath: API_ENDPOINTS.SEND_NOTIFICATION,
expectedHeaders,
expectedBody: { email, notificationType },
validateStatus: true,
};

await checkApiCallMadeWithExpectedBodyAndHeaders(
underTest,
postStub,
true,
expectedApiCallDetails
);
});

it("adds the additional details to the payload when these are included", async () => {
const journeyType = JOURNEY_TYPE.CREATE_ACCOUNT;
const phoneNumber = "123456";
const requestNewCode = true;
const underTest = () =>
service.sendNotification(
sessionId,
clientSessionId,
email,
notificationType,
ip,
diPersistentSessionId,
userLanguage,
journeyType,
phoneNumber,
requestNewCode
);

const expectedApiCallDetails = {
expectedPath: API_ENDPOINTS.SEND_NOTIFICATION,
expectedHeaders,
expectedBody: {
email,
notificationType,
journeyType,
phoneNumber,
requestNewCode,
},
validateStatus: true,
};

await checkApiCallMadeWithExpectedBodyAndHeaders(
underTest,
postStub,
true,
expectedApiCallDetails
);
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
import { describe } from "mocha";
import sinon, { SinonStub } from "sinon";
import { Http } from "../../../../utils/http";
import { UpdateProfileServiceInterface, UpdateType } from "../types";
import {
checkApiCallMadeWithExpectedBodyAndHeaders,
commonVariables,
expectedHeadersFromCommonVarsWithoutSecurityHeaders,
resetApiKeyAndBaseUrlEnvVars,
setupApiKeyAndBaseUrlEnvVars,
} from "../../../../../test/helpers/service-test-helper";
import { API_ENDPOINTS, HTTP_STATUS_CODES } from "../../../../app.constants";
import { updateProfileService } from "../update-profile-service";

describe("update profile service", () => {
const httpInstance = new Http();
const service: UpdateProfileServiceInterface =
updateProfileService(httpInstance);
let postStub: SinonStub;

beforeEach(() => {
setupApiKeyAndBaseUrlEnvVars();
postStub = sinon.stub(httpInstance.client, "post");
});

afterEach(() => {
postStub.reset();
resetApiKeyAndBaseUrlEnvVars();
});

it("successfully calls the API to update a profile", async () => {
const axiosResponse = Promise.resolve({
data: {},
status: HTTP_STATUS_CODES.NO_CONTENT,
statusText: "OK",
});
postStub.resolves(axiosResponse);
const { sessionId, clientSessionId, email, ip, diPersistentSessionId } =
commonVariables;
const profileInformation = true;
const updateProfileType = UpdateType.CAPTURE_CONSENT;

const underTest = () =>
service.updateProfile(
sessionId,
clientSessionId,
email,
{ profileInformation, updateProfileType },
ip,
diPersistentSessionId
);

const expectedApiCallDetails = {
expectedPath: API_ENDPOINTS.UPDATE_PROFILE,
expectedHeaders: expectedHeadersFromCommonVarsWithoutSecurityHeaders,
expectedBody: { email, profileInformation, updateProfileType },
};

await checkApiCallMadeWithExpectedBodyAndHeaders(
underTest,
postStub,
true,
expectedApiCallDetails
);
});
});
Loading

0 comments on commit c26fc3d

Please sign in to comment.