diff --git a/src/__mocks__/mockedData.ts b/src/__mocks__/mockedData.ts index f035be230..fc70b37cf 100644 --- a/src/__mocks__/mockedData.ts +++ b/src/__mocks__/mockedData.ts @@ -426,7 +426,6 @@ export const mockedGraphQLResponse: GraphQLSearch = { search: { nodes: [ { - viewerSubscription: 'SUBSCRIBED', title: '1.16.0', isAnswered: false, stateReason: 'OPEN', @@ -439,20 +438,6 @@ export const mockedGraphQLResponse: GraphQLSearch = { }, comments: mockDiscussionComments, }, - { - viewerSubscription: 'IGNORED', - title: '1.16.0', - isAnswered: false, - stateReason: 'ANSWERED', - url: 'https://github.com/gitify-app/notifications-test/discussions/123', - author: { - login: 'discussion-creator', - url: 'https://github.com/discussion-creator', - avatar_url: 'https://avatars.githubusercontent.com/u/123456789?v=4', - type: 'User', - }, - comments: mockDiscussionComments, - }, ], }, }, diff --git a/src/hooks/useNotifications.test.ts b/src/hooks/useNotifications.test.ts index 053cf0cdf..11b96b296 100644 --- a/src/hooks/useNotifications.test.ts +++ b/src/hooks/useNotifications.test.ts @@ -319,7 +319,6 @@ describe('hooks/useNotifications.ts', () => { nodes: [ { title: 'This is a Discussion.', - viewerSubscription: 'SUBSCRIBED', stateReason: null, isAnswered: true, url: 'https://github.com/gitify-app/notifications-test/discussions/612', diff --git a/src/typesGitHub.ts b/src/typesGitHub.ts index 397dc2e92..3dcbac6a4 100644 --- a/src/typesGitHub.ts +++ b/src/typesGitHub.ts @@ -59,8 +59,6 @@ export type StateType = | IssueStateReasonType | PullRequestStateType; -export type ViewerSubscription = 'IGNORED' | 'SUBSCRIBED' | 'UNSUBSCRIBED'; - export type CheckSuiteStatus = | 'action_required' | 'cancelled' @@ -450,7 +448,6 @@ export interface GraphQLSearch { } export interface Discussion { - viewerSubscription: ViewerSubscription; title: string; stateReason: DiscussionStateType; isAnswered: boolean; diff --git a/src/utils/api/client.ts b/src/utils/api/client.ts index 3401851dc..432e98d77 100644 --- a/src/utils/api/client.ts +++ b/src/utils/api/client.ts @@ -20,7 +20,8 @@ import { apiRequestAuth } from './request'; import { print } from 'graphql/language/printer'; import Constants from '../constants'; import { QUERY_SEARCH_DISCUSSIONS } from './graphql/discussions'; -import { formatSearchQueryString, getGitHubAPIBaseUrl } from './utils'; +import { formatAsGitHubSearchSyntax } from './graphql/utils'; +import { getGitHubAPIBaseUrl } from './utils'; /** * Get Hypermedia links to resources accessible in GitHub's REST API @@ -249,12 +250,11 @@ export async function searchDiscussions( return apiRequestAuth(Constants.GITHUB_API_GRAPHQL_URL, 'POST', token, { query: print(QUERY_SEARCH_DISCUSSIONS), variables: { - queryStatement: formatSearchQueryString( + queryStatement: formatAsGitHubSearchSyntax( notification.repository.full_name, notification.subject.title, - notification.updated_at, ), - firstDiscussions: 10, + firstDiscussions: 1, lastComments: 1, lastReplies: 1, }, diff --git a/src/utils/api/graphql/discussions.ts b/src/utils/api/graphql/discussions.ts index 3679367dd..fe6d2aa1c 100644 --- a/src/utils/api/graphql/discussions.ts +++ b/src/utils/api/graphql/discussions.ts @@ -31,7 +31,6 @@ export const QUERY_SEARCH_DISCUSSIONS = gql` search(query:$queryStatement, type: DISCUSSION, first: $firstDiscussions) { nodes { ... on Discussion { - viewerSubscription title stateReason isAnswered diff --git a/src/utils/api/graphql/utils.test.ts b/src/utils/api/graphql/utils.test.ts new file mode 100644 index 000000000..5d1439888 --- /dev/null +++ b/src/utils/api/graphql/utils.test.ts @@ -0,0 +1,11 @@ +import { formatAsGitHubSearchSyntax } from './utils'; + +describe('utils/api/graphql/utils.ts', () => { + describe('formatAsGitHubCodeSearchSyntax', () => { + test('formats search query string correctly', () => { + const result = formatAsGitHubSearchSyntax('exampleRepo', 'exampleTitle'); + + expect(result).toBe('exampleTitle in:title repo:exampleRepo'); + }); + }); +}); diff --git a/src/utils/api/graphql/utils.ts b/src/utils/api/graphql/utils.ts new file mode 100644 index 000000000..6cc36a0d7 --- /dev/null +++ b/src/utils/api/graphql/utils.ts @@ -0,0 +1,6 @@ +export function formatAsGitHubSearchSyntax( + repo: string, + title: string, +): string { + return `${title} in:title repo:${repo}`; +} diff --git a/src/utils/api/utils.test.ts b/src/utils/api/utils.test.ts index 54af2e1ea..551b3caf6 100644 --- a/src/utils/api/utils.test.ts +++ b/src/utils/api/utils.test.ts @@ -1,8 +1,4 @@ -import { - addHours, - formatSearchQueryString, - getGitHubAPIBaseUrl, -} from './utils'; +import { getGitHubAPIBaseUrl } from './utils'; describe('utils/api/utils.ts', () => { describe('generateGitHubAPIUrl', () => { @@ -16,30 +12,4 @@ describe('utils/api/utils.ts', () => { expect(result.toString()).toBe('https://github.manos.im/api/v3/'); }); }); - - describe('formatSearchQueryString', () => { - test('formats search query string correctly', () => { - const result = formatSearchQueryString( - 'exampleRepo', - 'exampleTitle', - '2024-02-20T12:00:00.000Z', - ); - - expect(result).toBe( - 'exampleTitle in:title repo:exampleRepo updated:>2024-02-20T10:00:00.000Z', - ); - }); - }); - - describe('addHours', () => { - test('adds hours correctly for positive values', () => { - const result = addHours('2024-02-20T12:00:00.000Z', 3); - expect(result).toBe('2024-02-20T15:00:00.000Z'); - }); - - test('adds hours correctly for negative values', () => { - const result = addHours('2024-02-20T12:00:00.000Z', -2); - expect(result).toBe('2024-02-20T10:00:00.000Z'); - }); - }); }); diff --git a/src/utils/api/utils.ts b/src/utils/api/utils.ts index 954704b07..3b35b300e 100644 --- a/src/utils/api/utils.ts +++ b/src/utils/api/utils.ts @@ -10,15 +10,3 @@ export function getGitHubAPIBaseUrl(hostname: string): URL { } return url; } - -export function formatSearchQueryString( - repo: string, - title: string, - lastUpdated: string, -): string { - return `${title} in:title repo:${repo} updated:>${addHours(lastUpdated, -2)}`; -} - -export function addHours(date: string, hours: number): string { - return new Date(new Date(date).getTime() + hours * 36e5).toISOString(); -} diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts index b6501bd61..ac4cc52c5 100644 --- a/src/utils/helpers.ts +++ b/src/utils/helpers.ts @@ -99,9 +99,7 @@ async function getDiscussionUrl( if (discussion) { url.href = discussion.url; - const comments = discussion.comments.nodes; - - const latestComment = getLatestDiscussionComment(comments); + const latestComment = getLatestDiscussionComment(discussion.comments.nodes); if (latestComment) { url.hash = `#discussioncomment-${latestComment.databaseId}`; @@ -118,18 +116,7 @@ export async function fetchDiscussion( try { const response = await searchDiscussions(notification, token); - let discussions = - response.data?.data.search.nodes.filter( - (discussion) => discussion.title === notification.subject.title, - ) || []; - - if (discussions.length > 1) { - discussions = discussions.filter( - (discussion) => discussion.viewerSubscription === 'SUBSCRIBED', - ); - } - - return discussions[0]; + return response.data?.data.search.nodes[0] ?? null; } catch (err) {} } diff --git a/src/utils/subject.test.ts b/src/utils/subject.test.ts index 560252ba3..de6e5e4b0 100644 --- a/src/utils/subject.test.ts +++ b/src/utils/subject.test.ts @@ -12,7 +12,6 @@ import type { DiscussionStateType, Notification, Repository, - ViewerSubscription, } from '../typesGitHub'; import { getCheckSuiteAttributes, @@ -239,7 +238,7 @@ describe('utils/subject.ts', () => { .reply(200, { data: { search: { - nodes: [mockDiscussionNode('SUBSCRIBED', null, true)], + nodes: [mockDiscussionNode(null, true)], }, }, }); @@ -266,7 +265,7 @@ describe('utils/subject.ts', () => { .reply(200, { data: { search: { - nodes: [mockDiscussionNode('SUBSCRIBED', 'DUPLICATE', false)], + nodes: [mockDiscussionNode('DUPLICATE', false)], }, }, }); @@ -293,7 +292,7 @@ describe('utils/subject.ts', () => { .reply(200, { data: { search: { - nodes: [mockDiscussionNode('SUBSCRIBED', null, false)], + nodes: [mockDiscussionNode(null, false)], }, }, }); @@ -320,7 +319,7 @@ describe('utils/subject.ts', () => { .reply(200, { data: { search: { - nodes: [mockDiscussionNode('SUBSCRIBED', 'OUTDATED', false)], + nodes: [mockDiscussionNode('OUTDATED', false)], }, }, }); @@ -347,7 +346,7 @@ describe('utils/subject.ts', () => { .reply(200, { data: { search: { - nodes: [mockDiscussionNode('SUBSCRIBED', 'REOPENED', false)], + nodes: [mockDiscussionNode('REOPENED', false)], }, }, }); @@ -374,7 +373,7 @@ describe('utils/subject.ts', () => { .reply(200, { data: { search: { - nodes: [mockDiscussionNode('SUBSCRIBED', 'RESOLVED', true)], + nodes: [mockDiscussionNode('RESOLVED', true)], }, }, }); @@ -394,36 +393,6 @@ describe('utils/subject.ts', () => { }, }); }); - - it('filtered response by subscribed', async () => { - nock('https://api.github.com') - .post('/graphql') - .reply(200, { - data: { - search: { - nodes: [ - mockDiscussionNode('SUBSCRIBED', null, false), - mockDiscussionNode('IGNORED', null, true), - ], - }, - }, - }); - - const result = await getGitifySubjectDetails( - mockNotification, - mockAccounts.token, - ); - - expect(result).toEqual({ - state: 'OPEN', - user: { - login: mockDiscussionAuthor.login, - html_url: mockDiscussionAuthor.url, - avatar_url: mockDiscussionAuthor.avatar_url, - type: mockDiscussionAuthor.type, - }, - }); - }); }); describe('Issues', () => { @@ -1176,14 +1145,12 @@ describe('utils/subject.ts', () => { }); function mockDiscussionNode( - subscription: ViewerSubscription, state: DiscussionStateType, isAnswered: boolean, ): Discussion { return { title: 'This is a mocked discussion', url: 'https://github.com/gitify-app/notifications-test/discussions/1', - viewerSubscription: subscription, stateReason: state, isAnswered: isAnswered, author: mockDiscussionAuthor,