From baa94eeef5cdd9be82678404f732d43e5b916138 Mon Sep 17 00:00:00 2001 From: Brendan Chen Date: Mon, 10 Feb 2025 13:30:29 -0800 Subject: [PATCH] update tests and implementation ofr getAPNsFullUrlToUse --- src/services/NotificationService.ts | 24 +++++++++++++++---- .../services/NotificationServiceTests.test.ts | 17 ++++++------- 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/src/services/NotificationService.ts b/src/services/NotificationService.ts index c6d7711..a6b9162 100644 --- a/src/services/NotificationService.ts +++ b/src/services/NotificationService.ts @@ -11,6 +11,12 @@ export interface ScheduledNotificationData { stopId: string; } +interface APNsUrl { + fullUrl: string; + path: string; + host: string; +} + export class NotificationService { public readonly secondsThresholdForNotificationToFire = 300; @@ -162,17 +168,25 @@ export class NotificationService { } } - public static getAPNsFullUrlToUse(deviceId: string) { + public static getAPNsFullUrlToUse(deviceId: string): APNsUrl { // Construct the fetch request const devBaseUrl = "https://api.development.push.apple.com" const prodBaseUrl = "https://api.push.apple.com" - const path = "/3/device/" + deviceId; - let urlToUse = prodBaseUrl + path; + let hostToUse = prodBaseUrl; if (process.env.NODE_ENV !== "production") { - urlToUse = devBaseUrl + path; + hostToUse = devBaseUrl; } - return urlToUse; + + const path = "/3/device/" + deviceId; + const fullUrl = hostToUse + path; + + const constructedObject = { + fullUrl, + host: hostToUse, + path, + } + return constructedObject; } private async etaSubscriberCallback(eta: IEta) { diff --git a/test/services/NotificationServiceTests.test.ts b/test/services/NotificationServiceTests.test.ts index cf5308a..78ffbd3 100644 --- a/test/services/NotificationServiceTests.test.ts +++ b/test/services/NotificationServiceTests.test.ts @@ -185,21 +185,22 @@ describe("NotificationService", () => { process.env.NODE_ENV = 'production'; const deviceId = 'testDeviceId'; const result = NotificationService.getAPNsFullUrlToUse(deviceId); - expect(result).toBe(`https://api.push.apple.com/3/device/${deviceId}`); + + const { fullUrl, host, path } = result; + expect(fullUrl).toBe(`https://api.push.apple.com/3/device/${deviceId}`); + expect(host).toBe("https://api.push.apple.com"); + expect(path).toBe(`/3/device/${deviceId}`); }); it('should return the sandbox URL when NODE_ENV is not set to "production"', () => { process.env.NODE_ENV = 'development'; const deviceId = 'testDeviceId'; const result = NotificationService.getAPNsFullUrlToUse(deviceId); - expect(result).toBe(`https://api.sandbox.push.apple.com/3/device/${deviceId}`); - }); - it('should append the correct device ID to the URL', () => { - process.env.NODE_ENV = 'production'; - const deviceId = 'device123'; - const result = NotificationService.getAPNsFullUrlToUse(deviceId); - expect(result).toBe(`https://api.push.apple.com/3/device/${deviceId}`); + const { fullUrl, host, path } = result; + expect(fullUrl).toBe(`https://api.development.push.apple.com/3/device/${deviceId}`); + expect(host).toBe("https://api.development.push.apple.com"); + expect(path).toBe(`/3/device/${deviceId}`); }); });