Skip to content

Commit 4b54b8e

Browse files
committed
refactor: environment requirements email
1 parent 1f552f9 commit 4b54b8e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+2121
-711
lines changed

api/src/api/environmentPermitEmailRouter.test.ts

Lines changed: 0 additions & 57 deletions
This file was deleted.

api/src/api/environmentPermitEmailRouter.ts

Lines changed: 0 additions & 29 deletions
This file was deleted.
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
import { environmentRequirementsEmailRouter } from "@api/environmentRequirementsEmailRouter";
2+
import { EnvironmentRequirementsEmailMetaData } from "@businessnjgovnavigator/shared";
3+
import { PowerAutomateEmailClient } from "@domain/types";
4+
import { setupExpress } from "@libs/express";
5+
import { DummyLogWriter, LogWriterType } from "@libs/logWriter";
6+
import { Express } from "express";
7+
import { StatusCodes } from "http-status-codes";
8+
import request from "supertest";
9+
10+
describe("environmentRequirementsEmailRouter", () => {
11+
let app: Express;
12+
let logger: LogWriterType;
13+
let stubEnvReqEmailClient: jest.Mocked<PowerAutomateEmailClient>;
14+
15+
beforeEach(() => {
16+
jest.resetAllMocks();
17+
logger = DummyLogWriter;
18+
stubEnvReqEmailClient = {
19+
sendEmail: jest.fn(),
20+
health: jest.fn(),
21+
};
22+
23+
app = setupExpress(false);
24+
app.use(environmentRequirementsEmailRouter(stubEnvReqEmailClient, logger));
25+
});
26+
27+
const emailMetaData: EnvironmentRequirementsEmailMetaData = {
28+
email: "test@gmail.com",
29+
userName: "test-user",
30+
businessName: "Test Business",
31+
industry: "Test Industry",
32+
location: "Test Location",
33+
phase: "FORMED",
34+
naicsCode: "123456",
35+
questionnaireResponses: "<ul><li>Test Response</li></ul>",
36+
};
37+
38+
it("sends a request with emailMetaData and returns a success response", async () => {
39+
stubEnvReqEmailClient.sendEmail.mockResolvedValue({
40+
statusCode: StatusCodes.OK,
41+
message: "Email confirmation successfully sent",
42+
});
43+
44+
const response = await request(app)
45+
.post("/environment-requirements-email")
46+
.send({ emailMetaData });
47+
48+
expect(stubEnvReqEmailClient.sendEmail).toHaveBeenCalledWith(emailMetaData);
49+
expect(response.status).toEqual(StatusCodes.OK);
50+
expect(response.body).toEqual("SUCCESS");
51+
});
52+
53+
it("throws an error if status is not 200", async () => {
54+
stubEnvReqEmailClient.sendEmail.mockResolvedValue({
55+
statusCode: StatusCodes.FORBIDDEN,
56+
message: "Auth Failed",
57+
});
58+
59+
const response = await request(app)
60+
.post("/environment-requirements-email")
61+
.send({ emailMetaData });
62+
63+
expect(stubEnvReqEmailClient.sendEmail).toHaveBeenCalledWith(emailMetaData);
64+
expect(response.status).toEqual(StatusCodes.INTERNAL_SERVER_ERROR);
65+
expect(response.body).toEqual("FAILED");
66+
});
67+
68+
it("handles error if request fails", async () => {
69+
const errorMessage = "Failed to send email";
70+
stubEnvReqEmailClient.sendEmail.mockRejectedValue(new Error(errorMessage));
71+
72+
const response = await request(app)
73+
.post("/environment-requirements-email")
74+
.send({ emailMetaData });
75+
76+
expect(stubEnvReqEmailClient.sendEmail).toHaveBeenCalledWith(emailMetaData);
77+
expect(response.status).toEqual(StatusCodes.INTERNAL_SERVER_ERROR);
78+
expect(response.body).toEqual("FAILED");
79+
});
80+
});
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { PowerAutomateEmailClient } from "@domain/types";
2+
import type { LogWriterType } from "@libs/logWriter";
3+
import { Router } from "express";
4+
import { StatusCodes } from "http-status-codes";
5+
6+
export const environmentRequirementsEmailRouter = (
7+
powerAutomateClient: PowerAutomateEmailClient,
8+
logger: LogWriterType,
9+
): Router => {
10+
const router = Router();
11+
12+
router.post("/environment-requirements-email", async (req, res) => {
13+
const { emailMetaData } = req.body;
14+
15+
try {
16+
const response = await powerAutomateClient.sendEmail(emailMetaData);
17+
logger.LogInfo(response.message);
18+
if (response.statusCode === 200) {
19+
const status = StatusCodes.OK;
20+
res.status(status).json("SUCCESS");
21+
} else {
22+
const status = StatusCodes.INTERNAL_SERVER_ERROR;
23+
logger.LogError(`Failed to send Environment Requirements email: ${response.message}`);
24+
res.status(status).json("FAILED");
25+
}
26+
} catch (error) {
27+
const status = StatusCodes.INTERNAL_SERVER_ERROR;
28+
const errorMessage = error instanceof Error ? error.message : String(error);
29+
logger.LogError(errorMessage);
30+
res.status(status).json("FAILED");
31+
}
32+
});
33+
34+
return router;
35+
};

api/src/client/ApiEnvPermitEmailClient.test.ts

Lines changed: 0 additions & 76 deletions
This file was deleted.

api/src/client/ApiEnvPermitEmailClient.ts

Lines changed: 0 additions & 41 deletions
This file was deleted.

0 commit comments

Comments
 (0)