Skip to content

Commit 681f05a

Browse files
VIA-629 AJ/EO Add testing headers functionality for open campaigns only in prod environment
1 parent 72bac5d commit 681f05a

File tree

2 files changed

+73
-31
lines changed

2 files changed

+73
-31
lines changed

src/utils/date.test.ts

Lines changed: 65 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -122,39 +122,77 @@ describe("utils-date", () => {
122122
});
123123

124124
describe("getNow", () => {
125+
const ENVIRONMENT = process.env;
125126
const fakeDateInSystem = "2000-01-01T01:01:01Z";
126127
const fakeDateInHeader = "1212-12-12T12:12:12Z";
127128

128129
beforeEach(() => {
129-
jest.useFakeTimers();
130-
jest.setSystemTime(new Date(fakeDateInSystem));
131-
});
132-
133-
it("should return current date by default", async () => {
134-
expect(await getNow()).toEqual(new Date(fakeDateInSystem));
135-
});
136-
137-
it("should return date set in the header, when it is valid", async () => {
138-
const mockHeaders = {
139-
get: jest.fn(() => {
140-
return fakeDateInHeader;
141-
}),
142-
};
143-
(headers as jest.Mock).mockResolvedValue(mockHeaders);
144-
145-
expect(await getNow()).toEqual(new Date(fakeDateInHeader));
130+
jest.resetModules();
131+
process.env = { ...ENVIRONMENT };
146132
});
147133

148-
it("should return current date when date set in the header is malformed", async () => {
149-
const fakeDateInHeaderInvalid = "invalid-date";
150-
const mockHeaders = {
151-
get: jest.fn(() => {
152-
return fakeDateInHeaderInvalid;
153-
}),
154-
};
155-
(headers as jest.Mock).mockResolvedValue(mockHeaders);
156-
157-
expect(await getNow()).toEqual(new Date(fakeDateInSystem));
134+
afterAll(() => {
135+
process.env = ENVIRONMENT;
136+
});
137+
138+
describe("getNow in non-production environments", () => {
139+
beforeEach(() => {
140+
jest.useFakeTimers();
141+
jest.setSystemTime(new Date(fakeDateInSystem));
142+
});
143+
144+
it("should return current date by default", async () => {
145+
expect(await getNow()).toEqual(new Date(fakeDateInSystem));
146+
});
147+
148+
it("should return date set in the header, when it is valid", async () => {
149+
const mockHeaders = {
150+
get: jest.fn(() => {
151+
return fakeDateInHeader;
152+
}),
153+
};
154+
(headers as jest.Mock).mockResolvedValue(mockHeaders);
155+
156+
expect(await getNow()).toEqual(new Date(fakeDateInHeader));
157+
});
158+
159+
it("should return current date when date set in the header is malformed", async () => {
160+
const fakeDateInHeaderInvalid = "invalid-date";
161+
const mockHeaders = {
162+
get: jest.fn(() => {
163+
return fakeDateInHeaderInvalid;
164+
}),
165+
};
166+
(headers as jest.Mock).mockResolvedValue(mockHeaders);
167+
168+
expect(await getNow()).toEqual(new Date(fakeDateInSystem));
169+
});
170+
});
171+
172+
describe("getNow in production environment", () => {
173+
beforeEach(() => {
174+
jest.useFakeTimers();
175+
jest.setSystemTime(new Date(fakeDateInSystem));
176+
});
177+
178+
it("should return current date by default in production environment", async () => {
179+
process.env.DEPLOY_ENVIRONMENT = "prod";
180+
expect(await getNow()).toEqual(new Date(fakeDateInSystem));
181+
});
182+
183+
it("should not check headers when environment is production", async () => {
184+
process.env.DEPLOY_ENVIRONMENT = "prod";
185+
186+
const mockHeaders = {
187+
get: jest.fn(() => {
188+
return fakeDateInHeader;
189+
}),
190+
};
191+
(headers as jest.Mock).mockResolvedValue(mockHeaders);
192+
193+
expect(await getNow()).toEqual(new Date(fakeDateInSystem));
194+
expect(headers).not.toHaveBeenCalled();
195+
});
158196
});
159197
});
160198
});

src/utils/date.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,15 @@ const calculateAge = (date: string): Age => {
4040
};
4141

4242
const getNow = async (): Promise<Date> => {
43-
try {
44-
const headersList = await headers();
45-
return UtcDateTimeFromStringSchema.safeParse(headersList.get("x-e2e-datetime")).data ?? new Date();
46-
} catch {
43+
if (process.env.DEPLOY_ENVIRONMENT === "prod") {
4744
return new Date();
45+
} else {
46+
try {
47+
const headersList = await headers();
48+
return UtcDateTimeFromStringSchema.safeParse(headersList.get("x-e2e-datetime")).data ?? new Date();
49+
} catch {
50+
return new Date();
51+
}
4852
}
4953
};
5054

0 commit comments

Comments
 (0)