update tests to wait for the publisher event to be sent

This commit is contained in:
2025-02-03 23:20:42 -08:00
parent b3b4b71e22
commit 602ccf8139

View File

@@ -19,19 +19,27 @@ SOcONbaf
* Wait for a condition to become true until the timeout
* is hit.
* @param condition
* @param timeout
* @param interval
* @param timeoutMilliseconds
* @param intervalMilliseconds
*/
async function waitForCondition(condition: () => boolean, timeout = 5000, interval = 500) {
async function waitForCondition(condition: () => boolean, timeoutMilliseconds = 5000, intervalMilliseconds = 500) {
const startTime = Date.now();
while (!condition()) {
if (Date.now() - startTime > timeout) {
if (Date.now() - startTime > timeoutMilliseconds) {
throw new Error("Timeout waiting for condition");
}
await new Promise((resolve) => setTimeout(resolve, interval));
await new Promise((resolve) => setTimeout(resolve, intervalMilliseconds));
}
}
/**
* Wait for a specified number of milliseconds.
* @param ms
*/
async function waitForMilliseconds(ms: number): Promise<void> {
await new Promise((resolve) => setTimeout(resolve, ms));
}
describe("NotificationService", () => {
let repository: UnoptimizedInMemoryRepository
let notificationService: NotificationService;
@@ -130,11 +138,30 @@ describe("NotificationService", () => {
expect(isSecondNotificationScheduled).toBe(false);
});
it("doesn't send notification if seconds threshold not exceeded", async () => {
// Arrange
const shuttle = await addMockShuttleToRepository(repository, "1");
const stop = await addMockStopToRepository(repository, "1");
const { eta, notificationData1 } = generateNotificationDataAndEta(shuttle, stop);
eta.secondsRemaining = notificationService.secondsThresholdForNotificationToFire + 100;
updateGlobalFetchMockJson({});
// Act
await notificationService.scheduleNotification(notificationData1);
await repository.addOrUpdateEta(eta);
// Assert
await waitForMilliseconds(500);
const isNotificationScheduled = notificationService.isNotificationScheduled(notificationData1);
expect(isNotificationScheduled).toBe(true);
});
it("leaves notification in array if delivery unsuccessful", async () => {
// Arrange
const shuttle = await addMockShuttleToRepository(repository, "1");
const stop = await addMockStopToRepository(repository, "1");
const { eta, notificationData1, notificationData2 } = generateNotificationDataAndEta(shuttle, stop)
const { eta, notificationData1 } = generateNotificationDataAndEta(shuttle, stop)
updateGlobalFetchMockJson({}, 400);
@@ -145,7 +172,9 @@ describe("NotificationService", () => {
// Assert
// The notification should stay scheduled to be retried once
// the ETA updates again
expect(notificationService.isNotificationScheduled(notificationData1)).toBe(true);
await waitForMilliseconds(500);
const isNotificationScheduled = notificationService.isNotificationScheduled(notificationData1);
expect(isNotificationScheduled).toBe(true);
});
});