mirror of
https://github.com/brendan-ch/project-inter-server.git
synced 2026-04-17 07:50:31 +00:00
89 lines
2.7 KiB
TypeScript
89 lines
2.7 KiB
TypeScript
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";
|
|
import { IEta } from "../../src/entities/entities";
|
|
|
|
jest.mock("fs");
|
|
|
|
const sampleKey = `-----BEGIN PRIVATE KEY-----
|
|
MIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQgsrmSAZIagOfCP8sB
|
|
Wi2CBXG1Oo7v1bispIZCwIr4RDegCgYIKoZIzj0DAQehRANCAATZHxV2wQJLMBq+
|
|
ya+yfGi3g2ZUv6hrfe+j08ytekPHjXS0qzJoVELzKHa6EL9YAoZDXBtB6h+fGhXe
|
|
SOcONbaf
|
|
-----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 () => {
|
|
// Arrange
|
|
const eta: IEta = {
|
|
shuttleId: "1",
|
|
stopId: "1",
|
|
secondsRemaining: 120,
|
|
};
|
|
|
|
// Act
|
|
await notificationService.scheduleNotification({
|
|
deviceId: "1",
|
|
shuttleId: eta.shuttleId,
|
|
stopId: eta.stopId,
|
|
});
|
|
await repository.addOrUpdateEta(eta);
|
|
|
|
// Assert
|
|
// ...that notification (fetch request) was sent
|
|
});
|
|
|
|
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 () => {
|
|
|
|
});
|
|
})
|
|
});
|