import { beforeEach, describe, expect, it, jest } from "@jest/globals"; import { NotificationService } from "../../src/services/NotificationService"; import { UnoptimizedInMemoryRepository } from "../../src/repositories/UnoptimizedInMemoryRepository"; import fs from "fs"; jest.mock("fs"); const sampleKey = `-----BEGIN PRIVATE KEY----- 9EKORECHU09 eouEUHKCREOFA12409kOHKOEU9125ADABOU098AOEBAOEI15bhao XAOECR15bAAOECxrU91bAOEIAOERix145AOERDIIAOUX15997124xARODEARi119 7k5AOEX151509KBRACOUDIAURCL1IAEO91245bAOECHDUAOE90kAOEB15139KAOA 19ax15qu -----END PRIVATE KEY-----` describe("NotificationService", () => { let repository: UnoptimizedInMemoryRepository let notificationService: NotificationService; beforeEach(() => { repository = new UnoptimizedInMemoryRepository(); notificationService = new NotificationService(repository); // Ensure that tests don't hit the server process.env = { ...process.env, APNS_KEY_ID: "1", APNS_TEAM_ID: "1", APNS_KEY_PATH: "./dummy-path.p8" }; (fs.readFileSync as jest.Mock).mockReturnValue(sampleKey); }) describe("reloadAPNsTokenIfTimePassed", () => { it("reloads the token if token hasn't been generated yet", async () => { notificationService.reloadAPNsTokenIfTimePassed(); expect(notificationService.lastRefreshedTimeMs).toBeDefined(); }); it("doesn't reload the token if last refreshed time is recent", async () => { notificationService.reloadAPNsTokenIfTimePassed(); const lastRefreshedTimeMs = notificationService.lastRefreshedTimeMs; notificationService.reloadAPNsTokenIfTimePassed(); // Expect no change to have occurred expect(lastRefreshedTimeMs).toEqual(notificationService.lastRefreshedTimeMs); }); }) describe("scheduleNotification", () => { it("sends a notification to given shuttle/stop ID when changed", async () => { }); it("clears the notification after delivering successfully", async () => { }); }); describe("cancelNotification", () => { it("stops notification from sending to given shuttle/stop ID", async () => { }); }); describe("cancelAllNotifications", () => { it("clears all notifications scheduled to be sent", async () => { }); }) });