Repository: gitify-app/gitify
Pull request #791 (2024-02-18 21:49:26)

refactor: is enterprise host fn
Consolidate `isEnterprise` logic


Patch:
diff --git a/src/hooks/useNotifications.ts b/src/hooks/useNotifications.ts
index 5634d259..20d1ae88 100644
--- a/src/hooks/useNotifications.ts
+++ b/src/hooks/useNotifications.ts
@@ -8,6 +8,7 @@ import { apiRequestAuth } from '../utils/api-requests';
 import {
   getEnterpriseAccountToken,
   generateGitHubAPIUrl,
+  isEnterpriseHost,
 } from '../utils/helpers';
 import { removeNotification } from '../utils/remove-notification';
 import {
@@ -130,9 +131,9 @@ export const useNotifications = (colors: boolean): NotificationsState => {
                           ) {
                             return notification;
                           }
-                          const isEnterprise =
-                            accountNotifications.hostname !==
-                            Constants.DEFAULT_AUTH_OPTIONS.hostname;
+                          const isEnterprise = isEnterpriseHost(
+                            accountNotifications.hostname,
+                          );
                           const token = isEnterprise
                             ? getEnterpriseAccountToken(
                                 accountNotifications.hostname,
@@ -192,7 +193,7 @@ export const useNotifications = (colors: boolean): NotificationsState => {
     async (accounts, id, hostname) => {
       setIsFetching(true);
 
-      const isEnterprise = hostname !== Constants.DEFAULT_AUTH_OPTIONS.hostname;
+      const isEnterprise = isEnterpriseHost(hostname);
       const token = isEnterprise
         ? getEnterpriseAccountToken(hostname, accounts.enterpriseAccounts)
         : accounts.token;
@@ -225,7 +226,7 @@ export const useNotifications = (colors: boolean): NotificationsState => {
     async (accounts, id, hostname) => {
       setIsFetching(true);
 
-      const isEnterprise = hostname !== Constants.DEFAULT_AUTH_OPTIONS.hostname;
+      const isEnterprise = isEnterpriseHost(hostname);
       const token = isEnterprise
         ? getEnterpriseAccountToken(hostname, accounts.enterpriseAccounts)
         : accounts.token;
@@ -258,7 +259,7 @@ export const useNotifications = (colors: boolean): NotificationsState => {
     async (accounts, id, hostname) => {
       setIsFetching(true);
 
-      const isEnterprise = hostname !== Constants.DEFAULT_AUTH_OPTIONS.hostname;
+      const isEnterprise = isEnterpriseHost(hostname);
       const token = isEnterprise
         ? getEnterpriseAccountToken(hostname, accounts.enterpriseAccounts)
         : accounts.token;
@@ -284,7 +285,7 @@ export const useNotifications = (colors: boolean): NotificationsState => {
     async (accounts, repoSlug, hostname) => {
       setIsFetching(true);
 
-      const isEnterprise = hostname !== Constants.DEFAULT_AUTH_OPTIONS.hostname;
+      const isEnterprise = isEnterpriseHost(hostname);
       const token = isEnterprise
         ? getEnterpriseAccountToken(hostname, accounts.enterpriseAccounts)
         : accounts.token;
diff --git a/src/utils/auth.ts b/src/utils/auth.ts
index 96d83242..f46ccc7e 100644
--- a/src/utils/auth.ts
+++ b/src/utils/auth.ts
@@ -1,6 +1,6 @@
 import { BrowserWindow } from '@electron/remote';
 
-import { generateGitHubAPIUrl } from './helpers';
+import { generateGitHubAPIUrl, isEnterpriseHost } from './helpers';
 import { apiRequest, apiRequestAuth } from '../utils/api-requests';
 import { AuthResponse, AuthState, AuthTokenResponse } from '../types';
 import { Constants } from '../utils/constants';
@@ -114,7 +114,7 @@ export const addAccount = (
   hostname,
   user?: User,
 ): AuthState => {
-  if (hostname === Constants.DEFAULT_AUTH_OPTIONS.hostname) {
+  if (!isEnterpriseHost(hostname)) {
     return {
       ...accounts,
       token,
diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts
index 708aac3a..e84fd3a5 100644
--- a/src/utils/helpers.ts
+++ b/src/utils/helpers.ts
@@ -15,8 +15,12 @@ export function getEnterpriseAccountToken(
   return accounts.find((obj) => obj.hostname === hostname).token;
 }
 
+export function isEnterpriseHost(hostname: string): boolean {
+  return !hostname.endsWith(Constants.DEFAULT_AUTH_OPTIONS.hostname);
+}
+
 export function generateGitHubAPIUrl(hostname) {
-  const isEnterprise = hostname !== Constants.DEFAULT_AUTH_OPTIONS.hostname;
+  const isEnterprise = isEnterpriseHost(hostname);
   return isEnterprise
     ? `https://${hostname}/api/v3/`
     : `https://api.${hostname}/`;
@@ -39,8 +43,7 @@ export function generateGitHubWebUrl(
   comment: string = '',
 ) {
   const { hostname } = new URL(url);
-  const isEnterprise =
-    hostname !== `api.${Constants.DEFAULT_AUTH_OPTIONS.hostname}`;
+  const isEnterprise = isEnterpriseHost(hostname);
 
   let newUrl: string = isEnterprise
     ? url.replace(`${hostname}/api/v3/repos`, hostname)


Test patch:
diff --git a/src/utils/helpers.test.ts b/src/utils/helpers.test.ts
index f9a60b45..ebaa908e 100644
--- a/src/utils/helpers.test.ts
+++ b/src/utils/helpers.test.ts
@@ -4,6 +4,7 @@ import {
   generateNotificationReferrerId,
   getCommentId,
   getLatestDiscussionCommentId,
+  isEnterpriseHost,
 } from './helpers';
 import {
   mockedSingleNotification,
@@ -23,6 +24,18 @@ const URL = {
 };
 
 describe('utils/helpers.ts', () => {
+  describe('isEnterpriseHost', () => {
+    it('should return true for enterprise host', () => {
+      expect(isEnterpriseHost('github.manos.im')).toBe(true);
+      expect(isEnterpriseHost('api.github.manos.im')).toBe(true);
+    });
+
+    it('should return false for non-enterprise host', () => {
+      expect(isEnterpriseHost('github.com')).toBe(false);
+      expect(isEnterpriseHost('api.github.com')).toBe(false);
+    });
+  });
+
   describe('generateNotificationReferrerId', () => {
     it('should generate the notification_referrer_id', () => {
       const referrerId = generateNotificationReferrerId(