Skip to content

Commit 6b15882

Browse files
feat: show right schema for dev and non-dev conditions (#2467)
* feat: enhance request handling for OOO types and update tests * added support for transforming OOO request data based on the development environment * updated unit tests to verify behavior for both old and new schemas regarding request states * included a temporary note for future database cleanup of old OOO requests * feat: implement transformation functions for OOO requests and update related tests * added functions to transform old and new OOO request schemas * updated request handling logic to utilize new transformation functions based on the development environment * modified unit tests to reflect changes in request status handling * included a temporary note regarding future cleanup of old OOO requests in the database * fix:reverse-dev-schema * refactor/moved-logic-uitls-fixed-type * fix/types-in-tests * Update models/requests.ts Co-authored-by: Anuj Chhikara <[email protected]> --------- Co-authored-by: Anuj Chhikara <[email protected]>
1 parent 3b70472 commit 6b15882

File tree

5 files changed

+116
-11
lines changed

5 files changed

+116
-11
lines changed

models/requests.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
import firestore from "../utils/firestore";
2+
import type { OooStatusRequest } from "../types/oooRequest";
23
const requestModel = firestore.collection("requests");
3-
import { REQUEST_ALREADY_APPROVED, REQUEST_ALREADY_REJECTED, REQUEST_STATE } from "../constants/requests";
4+
import { REQUEST_ALREADY_APPROVED, REQUEST_ALREADY_REJECTED, REQUEST_STATE, REQUEST_TYPE } from "../constants/requests";
45
import {
56
ERROR_WHILE_FETCHING_REQUEST,
67
ERROR_WHILE_CREATING_REQUEST,
78
ERROR_WHILE_UPDATING_REQUEST,
89
REQUEST_DOES_NOT_EXIST,
910
} from "../constants/requests";
1011
import { getUserId } from "../utils/users";
12+
import { transformRequestResponse } from "../utils/requests";
1113
const SIZE = 5;
1214

15+
1316
export const createRequest = async (body: any) => {
1417
try {
1518
const requestBody: any = {
@@ -149,6 +152,8 @@ export const getRequests = async (query: any) => {
149152
return null;
150153
}
151154

155+
allRequests = transformRequestResponse(allRequests, dev);
156+
152157
return {
153158
allRequests,
154159
prev: prevDoc.empty ? null : prevDoc.docs[0].id,

test/integration/requests.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -579,7 +579,7 @@ describe("/requests OOO", function () {
579579
it("should return all requests", function (done) {
580580
chai
581581
.request(app)
582-
.get("/requests")
582+
.get("/requests?dev=true")
583583
.end(function (err, res) {
584584
expect(res).to.have.status(200);
585585
expect(res.body.data).to.have.lengthOf(2);

test/unit/models/requests.test.ts

Lines changed: 34 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
import { REQUEST_STATE, REQUEST_TYPE } from "../../../constants/requests";
1212
import userDataFixture from "./../../fixtures/user/user";
1313
import addUser from "../../utils/addUser";
14+
import { oldOooStatusRequest, OooStatusRequest } from "../../../types/oooRequest";
1415
const userData = userDataFixture();
1516

1617
let testUserId: string;
@@ -46,8 +47,8 @@ describe("models/oooRequests", () => {
4647

4748
describe("updateRequest", () => {
4849
it("should update an existing OOO request", async () => {
49-
const oooRequest: any = await createRequest(createOooStatusRequests);
50-
const updatedOooRequest: any = await updateRequest(
50+
const oooRequest: oldOooStatusRequest = await createRequest(createOooStatusRequests);
51+
const updatedOooRequest: oldOooStatusRequest = await updateRequest(
5152
oooRequest.id,
5253
updateOooApprovedRequests,
5354
updateOooApprovedRequests.lastModifiedBy
@@ -112,17 +113,42 @@ describe("models/oooRequests", () => {
112113
expect(oooRequestData.allRequests).to.be.have.length(2);
113114
});
114115

115-
it("Should return a list of all the requests with specified state - APPROVED", async () => {
116-
const oooRequest: any = await createRequest(createOooStatusRequests);
117-
await updateRequest(oooRequest.id, updateOooApprovedRequests, updateOooApprovedRequests.lastModifiedBy, REQUEST_TYPE.OOO)
116+
it("Should return APPROVED state in old schema when dev=false", async () => {
117+
const oooRequest: OooStatusRequest = await createRequest(createOooStatusRequests);
118+
await updateRequest(
119+
oooRequest.id,
120+
updateOooApprovedRequests,
121+
updateOooApprovedRequests.lastModifiedBy,
122+
REQUEST_TYPE.OOO
123+
);
124+
const query = { dev: "false", status: REQUEST_STATE.APPROVED };
125+
const oooRequestData = await getRequests(query);
126+
expect(oooRequestData.allRequests[0].status).to.be.equal(REQUEST_STATE.APPROVED);
127+
});
128+
129+
it("Should return APPROVED status in new schema when dev=true", async () => {
130+
const oooRequest: OooStatusRequest = await createRequest(createOooStatusRequests);
131+
await updateRequest(
132+
oooRequest.id,
133+
updateOooApprovedRequests,
134+
updateOooApprovedRequests.lastModifiedBy,
135+
REQUEST_TYPE.OOO
136+
);
118137
const query = { dev: "true", state: REQUEST_STATE.APPROVED };
119138
const oooRequestData = await getRequests(query);
120139
expect(oooRequestData.allRequests[0].state).to.be.equal(REQUEST_STATE.APPROVED);
121140
});
122141

123-
it("Should return a list of all the requests with specified state - PENDING", async () => {
142+
it("Should return PENDING state in old schema when dev=false", async () => {
143+
await createRequest(createOooStatusRequests);
144+
const query = { dev: "false", status: REQUEST_STATE.PENDING };
145+
const oooRequestData = await getRequests(query);
146+
expect(oooRequestData.allRequests[0].status).to.be.equal(REQUEST_STATE.PENDING);
147+
});
148+
149+
it("Should return PENDING status in new schema when dev=true", async () => {
124150
await createRequest(createOooStatusRequests);
125-
const query = { dev: "true", state: REQUEST_STATE.PENDING };
151+
const query = { dev: "true", status: REQUEST_STATE.PENDING };
126152
const oooRequestData = await getRequests(query);
127153
expect(oooRequestData.allRequests[0].state).to.be.equal(REQUEST_STATE.PENDING);
128154
});
@@ -144,7 +170,7 @@ describe("models/oooRequests", () => {
144170
});
145171

146172
it("Should return empty array if no data is found", async () => {
147-
const query = { dev: "true", state: REQUEST_STATE.PENDING };
173+
const query = { dev: "true", status: REQUEST_STATE.PENDING };
148174
const oooRequestData = await getRequests(query);
149175
expect(oooRequestData).to.be.equal(null);
150176
});

types/oooRequest.d.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,24 @@ export type OooStatusRequest = {
1313
status: REQUEST_STATE;
1414
lastModifiedBy: string | null;
1515
requestedBy: string;
16-
userId: string;
1716
createdAt: Timestamp;
1817
updatedAt: Timestamp;
1918
comment: string | null;
2019
};
20+
21+
export type oldOooStatusRequest = {
22+
id: string;
23+
type: REQUEST_TYPE.OOO;
24+
from: number;
25+
until: number;
26+
message: string;
27+
state: REQUEST_STATE;
28+
lastModifiedBy: string | null;
29+
requestedBy: string;
30+
reason: string | null;
31+
createdAt: Timestamp;
32+
updatedAt: Timestamp;
33+
};
2134
export type OooStatusRequestBody = {
2235
from: number;
2336
until: number;

utils/requests.ts

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
import { REQUEST_TYPE } from "../constants/requests";
2+
import { OooStatusRequest, oldOooStatusRequest } from "../types/oooRequest";
3+
14
/**
25
* Calculates the new deadline based on the current date, the old end date, and the additional duration in milliseconds.
36
*
@@ -31,4 +34,62 @@ export const convertDateStringToMilliseconds = (date: string): { isDate: boolean
3134
isDate: true,
3235
milliseconds,
3336
};
37+
};
38+
39+
export const oldOOOSchema = (request: OooStatusRequest) => ({
40+
id: request.id,
41+
type: request.type,
42+
from: request.from,
43+
until: request.until,
44+
message: request.reason,
45+
state: request.status,
46+
lastModifiedBy: request.lastModifiedBy ?? "",
47+
requestedBy: request.requestedBy,
48+
reason: request.comment ?? "",
49+
createdAt: request.createdAt,
50+
updatedAt: request.updatedAt,
51+
});
52+
53+
export const newOOOSchema = (request: oldOooStatusRequest) => ({
54+
id: request.id,
55+
type: request.type,
56+
from: request.from,
57+
until: request.until,
58+
reason: request.message,
59+
status: request.state,
60+
lastModifiedBy: request.lastModifiedBy ?? null,
61+
requestedBy: request.requestedBy,
62+
comment: request.reason ?? null,
63+
createdAt: request.createdAt,
64+
updatedAt: request.updatedAt,
65+
});
66+
67+
/**
68+
* Transforms request responses based on request type and dev flag
69+
* @param {boolean} dev - Development flag to determine transformation logic
70+
*/
71+
export const transformRequestResponse = (allRequests: (OooStatusRequest | oldOooStatusRequest)[], dev: boolean = false): (OooStatusRequest | oldOooStatusRequest)[] => {
72+
const transformedRequests: (OooStatusRequest | oldOooStatusRequest)[] = [];
73+
74+
for (const request of allRequests) {
75+
if (request.type === REQUEST_TYPE.OOO) {
76+
if (dev) {
77+
if ('status' in request) {
78+
transformedRequests.push(oldOOOSchema(request as OooStatusRequest));
79+
} else {
80+
transformedRequests.push(request);
81+
}
82+
} else {
83+
if ('state' in request) {
84+
transformedRequests.push(newOOOSchema(request as oldOooStatusRequest));
85+
} else {
86+
transformedRequests.push(request);
87+
}
88+
}
89+
} else {
90+
transformedRequests.push(request);
91+
}
92+
}
93+
94+
return transformedRequests;
3495
};

0 commit comments

Comments
 (0)