diff --git a/src/renderer/components/filters/__snapshots__/SubjectTypeFilter.test.tsx.snap b/src/renderer/components/filters/__snapshots__/SubjectTypeFilter.test.tsx.snap index 9a57e6cbb..1a5ce7615 100644 --- a/src/renderer/components/filters/__snapshots__/SubjectTypeFilter.test.tsx.snap +++ b/src/renderer/components/filters/__snapshots__/SubjectTypeFilter.test.tsx.snap @@ -87,6 +87,33 @@ exports[`renderer/components/filters/SubjectTypeFilter.tsx > should render itsel data-padding="none" data-wrap="nowrap" > +
+ + + + 0 + +
General > should render itself & its chil data-padding="none" data-wrap="nowrap" > +
+ + + + 0 + +
= { Release: { title: 'Release', }, + RepositoryAdvisory: { + title: 'Advisory', + }, RepositoryDependabotAlertsThread: { title: 'Dependabot Alert', }, diff --git a/src/renderer/utils/notifications/handlers/index.test.ts b/src/renderer/utils/notifications/handlers/index.test.ts index bd260b3a5..64148b263 100644 --- a/src/renderer/utils/notifications/handlers/index.test.ts +++ b/src/renderer/utils/notifications/handlers/index.test.ts @@ -11,6 +11,7 @@ import { createNotificationHandler } from './index'; import { issueHandler } from './issue'; import { pullRequestHandler } from './pullRequest'; import { releaseHandler } from './release'; +import { repositoryAdvisoryHandler } from './repositoryAdvisory'; import { repositoryDependabotAlertsThreadHandler } from './repositoryDependabotAlertsThread'; import { repositoryInvitationHandler } from './repositoryInvitation'; import { repositoryVulnerabilityAlertHandler } from './repositoryVulnerabilityAlert'; @@ -25,6 +26,7 @@ describe('renderer/utils/notifications/handlers/index.ts', () => { Issue: issueHandler, PullRequest: pullRequestHandler, Release: releaseHandler, + RepositoryAdvisory: repositoryAdvisoryHandler, RepositoryDependabotAlertsThread: repositoryDependabotAlertsThreadHandler, RepositoryInvitation: repositoryInvitationHandler, RepositoryVulnerabilityAlert: repositoryVulnerabilityAlertHandler, diff --git a/src/renderer/utils/notifications/handlers/index.ts b/src/renderer/utils/notifications/handlers/index.ts index 5b333f18c..0697d937d 100644 --- a/src/renderer/utils/notifications/handlers/index.ts +++ b/src/renderer/utils/notifications/handlers/index.ts @@ -8,6 +8,7 @@ import { discussionHandler } from './discussion'; import { issueHandler } from './issue'; import { pullRequestHandler } from './pullRequest'; import { releaseHandler } from './release'; +import { repositoryAdvisoryHandler } from './repositoryAdvisory'; import { repositoryDependabotAlertsThreadHandler } from './repositoryDependabotAlertsThread'; import { repositoryInvitationHandler } from './repositoryInvitation'; import { repositoryVulnerabilityAlertHandler } from './repositoryVulnerabilityAlert'; @@ -29,6 +30,8 @@ export function createNotificationHandler( return pullRequestHandler; case 'Release': return releaseHandler; + case 'RepositoryAdvisory': + return repositoryAdvisoryHandler; case 'RepositoryDependabotAlertsThread': return repositoryDependabotAlertsThreadHandler; case 'RepositoryInvitation': @@ -49,6 +52,7 @@ export const handlers = { issueHandler, pullRequestHandler, releaseHandler, + repositoryAdvisoryHandler, repositoryDependabotAlertsThreadHandler, repositoryInvitationHandler, repositoryVulnerabilityAlertHandler, diff --git a/src/renderer/utils/notifications/handlers/repositoryAdvisory.test.ts b/src/renderer/utils/notifications/handlers/repositoryAdvisory.test.ts new file mode 100644 index 000000000..7d4799009 --- /dev/null +++ b/src/renderer/utils/notifications/handlers/repositoryAdvisory.test.ts @@ -0,0 +1,34 @@ +import { mockPartialGitifyNotification } from '../../../__mocks__/notifications-mocks'; + +import type { GitifyNotification, Link } from '../../../types'; + +import { repositoryAdvisoryHandler } from './repositoryAdvisory'; + +describe('renderer/utils/notifications/handlers/repositoryAdvisory.ts', () => { + it('iconType', () => { + const mockNotification = mockPartialGitifyNotification({ + type: 'RepositoryAdvisory', + }); + + expect( + repositoryAdvisoryHandler.iconType(mockNotification).displayName, + ).toBe('AlertIcon'); + }); + + it('defaultUrl', () => { + const mockHtmlUrl = + 'https://github.com/gitify-app/notifications-test' as Link; + + expect( + repositoryAdvisoryHandler.defaultUrl({ + repository: { + htmlUrl: mockHtmlUrl, + }, + } as GitifyNotification), + ).toEqual(`${mockHtmlUrl}/security/advisories`); + }); + + it('defaultUserType', () => { + expect(repositoryAdvisoryHandler.defaultUserType()).toEqual('Bot'); + }); +}); diff --git a/src/renderer/utils/notifications/handlers/repositoryAdvisory.ts b/src/renderer/utils/notifications/handlers/repositoryAdvisory.ts new file mode 100644 index 000000000..2bcbefe77 --- /dev/null +++ b/src/renderer/utils/notifications/handlers/repositoryAdvisory.ts @@ -0,0 +1,27 @@ +import type { FC } from 'react'; + +import { AlertIcon, type OcticonProps } from '@primer/octicons-react'; + +import type { GitifyNotification, Link, UserType } from '../../../types'; + +import { DefaultHandler, defaultHandler } from './default'; + +class RepositoryAdvisoryHandler extends DefaultHandler { + readonly type = 'RepositoryAdvisory'; + + iconType(_notification: GitifyNotification): FC { + return AlertIcon; + } + + defaultUrl(notification: GitifyNotification): Link { + const url = new URL(defaultHandler.defaultUrl(notification)); + url.pathname += '/security/advisories'; + return url.href as Link; + } + + defaultUserType(): UserType { + return 'Bot'; + } +} + +export const repositoryAdvisoryHandler = new RepositoryAdvisoryHandler();