From 59fc66e090b7da2249626ef0850e6dff96e82c6e Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Fri, 30 Jan 2026 08:05:40 -0500 Subject: [PATCH 1/2] refactor: split metrics into individual components Signed-off-by: Adam Setch --- .../components/metrics/CommentsPill.test.tsx | 39 + .../components/metrics/CommentsPill.tsx | 29 + .../components/metrics/LabelsPill.test.tsx | 17 + .../components/metrics/LabelsPill.tsx | 34 + .../metrics/LinkedIssuesPill.test.tsx | 28 + .../components/metrics/LinkedIssuesPill.tsx | 35 + .../components/metrics/MetricGroup.test.tsx | 208 - .../components/metrics/MetricGroup.tsx | 171 +- .../components/metrics/MetricPill.test.tsx | 4 + .../components/metrics/MilestonePill.test.tsx | 36 + .../components/metrics/MilestonePill.tsx | 30 + .../components/metrics/ReactionsPill.test.tsx | 50 + .../components/metrics/ReactionsPill.tsx | 68 + .../components/metrics/ReviewsPill.test.tsx | 21 + .../components/metrics/ReviewsPill.tsx | 38 + .../__snapshots__/CommentsPill.test.tsx.snap | 466 ++ .../__snapshots__/LabelsPill.test.tsx.snap | 192 + .../LinkedIssuesPill.test.tsx.snap | 395 + .../__snapshots__/MetricGroup.test.tsx.snap | 6581 ----------------- .../__snapshots__/MilestonePill.test.tsx.snap | 363 + .../__snapshots__/ReactionsPill.test.tsx.snap | 383 + .../__snapshots__/ReviewsPill.test.tsx.snap | 381 + 22 files changed, 2633 insertions(+), 6936 deletions(-) create mode 100644 src/renderer/components/metrics/CommentsPill.test.tsx create mode 100644 src/renderer/components/metrics/CommentsPill.tsx create mode 100644 src/renderer/components/metrics/LabelsPill.test.tsx create mode 100644 src/renderer/components/metrics/LabelsPill.tsx create mode 100644 src/renderer/components/metrics/LinkedIssuesPill.test.tsx create mode 100644 src/renderer/components/metrics/LinkedIssuesPill.tsx create mode 100644 src/renderer/components/metrics/MilestonePill.test.tsx create mode 100644 src/renderer/components/metrics/MilestonePill.tsx create mode 100644 src/renderer/components/metrics/ReactionsPill.test.tsx create mode 100644 src/renderer/components/metrics/ReactionsPill.tsx create mode 100644 src/renderer/components/metrics/ReviewsPill.test.tsx create mode 100644 src/renderer/components/metrics/ReviewsPill.tsx create mode 100644 src/renderer/components/metrics/__snapshots__/CommentsPill.test.tsx.snap create mode 100644 src/renderer/components/metrics/__snapshots__/LabelsPill.test.tsx.snap create mode 100644 src/renderer/components/metrics/__snapshots__/LinkedIssuesPill.test.tsx.snap create mode 100644 src/renderer/components/metrics/__snapshots__/MilestonePill.test.tsx.snap create mode 100644 src/renderer/components/metrics/__snapshots__/ReactionsPill.test.tsx.snap create mode 100644 src/renderer/components/metrics/__snapshots__/ReviewsPill.test.tsx.snap diff --git a/src/renderer/components/metrics/CommentsPill.test.tsx b/src/renderer/components/metrics/CommentsPill.test.tsx new file mode 100644 index 000000000..58d0eaa6d --- /dev/null +++ b/src/renderer/components/metrics/CommentsPill.test.tsx @@ -0,0 +1,39 @@ +import { renderWithAppContext } from '../../__helpers__/test-utils'; +import { mockGitifyNotification } from '../../__mocks__/notifications-mocks'; + +import { CommentsPill } from './CommentsPill'; + +describe('renderer/components/metrics/CommentsPill.tsx', () => { + it('renders with no comments (null)', () => { + const mockNotification = { ...mockGitifyNotification }; + mockNotification.subject.commentCount = null; + + const tree = renderWithAppContext( + , + ); + + expect(tree).toMatchSnapshot(); + }); + + it('renders with 1 comment', () => { + const mockNotification = { ...mockGitifyNotification }; + mockNotification.subject.commentCount = 1; + + const tree = renderWithAppContext( + , + ); + + expect(tree).toMatchSnapshot(); + }); + + it('renders with multiple comments', () => { + const mockNotification = { ...mockGitifyNotification }; + mockNotification.subject.commentCount = 2; + + const tree = renderWithAppContext( + , + ); + + expect(tree).toMatchSnapshot(); + }); +}); diff --git a/src/renderer/components/metrics/CommentsPill.tsx b/src/renderer/components/metrics/CommentsPill.tsx new file mode 100644 index 000000000..310883965 --- /dev/null +++ b/src/renderer/components/metrics/CommentsPill.tsx @@ -0,0 +1,29 @@ +import type { FC } from 'react'; + +import { CommentIcon } from '@primer/octicons-react'; + +import { IconColor } from '../../types'; + +import { formatMetricDescription } from '../../utils/notifications/formatters'; +import { MetricPill } from './MetricPill'; + +export interface CommentsPillProps { + commentCount: number; +} + +export const CommentsPill: FC = ({ commentCount }) => { + if (!commentCount) { + return null; + } + + const description = formatMetricDescription(commentCount, 'comment'); + + return ( + + ); +}; diff --git a/src/renderer/components/metrics/LabelsPill.test.tsx b/src/renderer/components/metrics/LabelsPill.test.tsx new file mode 100644 index 000000000..9e0b0207f --- /dev/null +++ b/src/renderer/components/metrics/LabelsPill.test.tsx @@ -0,0 +1,17 @@ +import { renderWithAppContext } from '../../__helpers__/test-utils'; +import { mockGitifyNotification } from '../../__mocks__/notifications-mocks'; + +import { LabelsPill } from './LabelsPill'; + +describe('renderer/components/metrics/LabelsPill.tsx', () => { + it('renders labels pill', () => { + const mockNotification = { ...mockGitifyNotification }; + mockNotification.subject.labels = ['enhancement', 'good-first-issue']; + + const tree = renderWithAppContext( + , + ); + + expect(tree).toMatchSnapshot(); + }); +}); diff --git a/src/renderer/components/metrics/LabelsPill.tsx b/src/renderer/components/metrics/LabelsPill.tsx new file mode 100644 index 000000000..0a5c91158 --- /dev/null +++ b/src/renderer/components/metrics/LabelsPill.tsx @@ -0,0 +1,34 @@ +import type { FC } from 'react'; + +import { TagIcon } from '@primer/octicons-react'; + +import { IconColor } from '../../types'; + +import { formatMetricDescription } from '../../utils/notifications/formatters'; +import { MetricPill } from './MetricPill'; + +export interface LabelsPillProps { + labels: string[]; +} + +export const LabelsPill: FC = ({ labels }) => { + if (!labels?.length) { + return null; + } + + const description = formatMetricDescription( + labels.length, + 'label', + (count, noun) => + `${count} ${noun}: ${labels.map((label) => `🏷️ ${label}`).join(', ')}`, + ); + + return ( + + ); +}; diff --git a/src/renderer/components/metrics/LinkedIssuesPill.test.tsx b/src/renderer/components/metrics/LinkedIssuesPill.test.tsx new file mode 100644 index 000000000..8b2d90d2f --- /dev/null +++ b/src/renderer/components/metrics/LinkedIssuesPill.test.tsx @@ -0,0 +1,28 @@ +import { renderWithAppContext } from '../../__helpers__/test-utils'; +import { mockGitifyNotification } from '../../__mocks__/notifications-mocks'; + +import { LinkedIssuesPill } from './LinkedIssuesPill'; + +describe('renderer/components/metrics/LinkedIssuesPill.tsx', () => { + it('renders when linked to one issue/pr', () => { + const mockNotification = { ...mockGitifyNotification }; + mockNotification.subject.linkedIssues = ['#1']; + + const tree = renderWithAppContext( + , + ); + + expect(tree).toMatchSnapshot(); + }); + + it('renders when linked to multiple issues/prs', () => { + const mockNotification = { ...mockGitifyNotification }; + mockNotification.subject.linkedIssues = ['#1', '#2']; + + const tree = renderWithAppContext( + , + ); + + expect(tree).toMatchSnapshot(); + }); +}); diff --git a/src/renderer/components/metrics/LinkedIssuesPill.tsx b/src/renderer/components/metrics/LinkedIssuesPill.tsx new file mode 100644 index 000000000..f5c82bc04 --- /dev/null +++ b/src/renderer/components/metrics/LinkedIssuesPill.tsx @@ -0,0 +1,35 @@ +import type { FC } from 'react'; + +import { IssueOpenedIcon } from '@primer/octicons-react'; + +import { IconColor } from '../../types'; + +import { formatMetricDescription } from '../../utils/notifications/formatters'; +import { MetricPill } from './MetricPill'; + +export interface LinkedIssuesPillProps { + linkedIssues: string[]; +} + +export const LinkedIssuesPill: FC = ({ + linkedIssues, +}) => { + if (!linkedIssues?.length) { + return null; + } + + const description = formatMetricDescription( + linkedIssues.length, + 'issue', + (count, noun) => `Linked to ${count} ${noun}: ${linkedIssues.join(', ')}`, + ); + + return ( + + ); +}; diff --git a/src/renderer/components/metrics/MetricGroup.test.tsx b/src/renderer/components/metrics/MetricGroup.test.tsx index 4e3f2cda8..e94a216cc 100644 --- a/src/renderer/components/metrics/MetricGroup.test.tsx +++ b/src/renderer/components/metrics/MetricGroup.test.tsx @@ -2,15 +2,12 @@ import { renderWithAppContext } from '../../__helpers__/test-utils'; import { mockGitifyNotification } from '../../__mocks__/notifications-mocks'; import { mockSettings } from '../../__mocks__/state-mocks'; -import type { GitifyMilestone } from '../../types'; - import { MetricGroup, type MetricGroupProps } from './MetricGroup'; describe('renderer/components/metrics/MetricGroup.tsx', () => { describe('showPills disabled', () => { it('should not render any pills when showPills is disabled', async () => { const mockNotification = mockGitifyNotification; - const props: MetricGroupProps = { notification: mockNotification, }; @@ -18,212 +15,7 @@ describe('renderer/components/metrics/MetricGroup.tsx', () => { const tree = renderWithAppContext(, { settings: { ...mockSettings, showPills: false }, }); - expect(tree).toMatchSnapshot(); - }); - }); - - describe('linked issue pills', () => { - it('should render issues pill when linked to one issue/pr', async () => { - const mockNotification = mockGitifyNotification; - mockNotification.subject.linkedIssues = ['#1']; - - const props: MetricGroupProps = { - notification: mockNotification, - }; - - const tree = renderWithAppContext(); - expect(tree).toMatchSnapshot(); - }); - - it('should render issues pill when linked to multiple issues/prs', async () => { - const mockNotification = mockGitifyNotification; - mockNotification.subject.linkedIssues = ['#1', '#2']; - - const props: MetricGroupProps = { - notification: mockNotification, - }; - - const tree = renderWithAppContext(); - expect(tree).toMatchSnapshot(); - }); - }); - - describe('reactions pills', () => { - it('should render reaction pill when one reaction', async () => { - const mockNotification = mockGitifyNotification; - mockNotification.subject.reactionsCount = 1; - mockNotification.subject.reactionGroups = [ - { - content: 'ROCKET', - reactors: { - totalCount: 1, - }, - }, - ]; - - const props: MetricGroupProps = { - notification: mockNotification, - }; - - const tree = renderWithAppContext(); - expect(tree).toMatchSnapshot(); - }); - - it('should render reaction pill when multiple reactions', async () => { - const mockNotification = mockGitifyNotification; - mockNotification.subject.reactionsCount = 53; - mockNotification.subject.reactionGroups = [ - { - content: 'THUMBS_UP', - reactors: { - totalCount: 1, - }, - }, - { - content: 'THUMBS_DOWN', - reactors: { - totalCount: 1, - }, - }, - { - content: 'LAUGH', - reactors: { - totalCount: 2, - }, - }, - { - content: 'HOORAY', - reactors: { - totalCount: 3, - }, - }, - { - content: 'CONFUSED', - reactors: { - totalCount: 5, - }, - }, - { - content: 'ROCKET', - reactors: { - totalCount: 8, - }, - }, - { - content: 'EYES', - reactors: { - totalCount: 13, - }, - }, - { - content: 'HEART', - reactors: { - totalCount: 21, - }, - }, - ]; - - const props: MetricGroupProps = { - notification: mockNotification, - }; - - const tree = renderWithAppContext(); - expect(tree).toMatchSnapshot(); - }); - - it('should render issues pill when linked to multiple issues/prs', async () => { - const mockNotification = mockGitifyNotification; - mockNotification.subject.linkedIssues = ['#1', '#2']; - - const props: MetricGroupProps = { - notification: mockNotification, - }; - - const tree = renderWithAppContext(); - expect(tree).toMatchSnapshot(); - }); - }); - - describe('comment pills', () => { - it('should render when no comments', async () => { - const mockNotification = mockGitifyNotification; - mockNotification.subject.commentCount = null; - - const props: MetricGroupProps = { - notification: mockNotification, - }; - - const tree = renderWithAppContext(); - expect(tree).toMatchSnapshot(); - }); - - it('should render when 1 comment', async () => { - const mockNotification = mockGitifyNotification; - mockNotification.subject.commentCount = 1; - - const props: MetricGroupProps = { - notification: mockNotification, - }; - - const tree = renderWithAppContext(); - expect(tree).toMatchSnapshot(); - }); - - it('should render when more than 1 comments', async () => { - const mockNotification = mockGitifyNotification; - mockNotification.subject.commentCount = 2; - - const props: MetricGroupProps = { - notification: mockNotification, - }; - - const tree = renderWithAppContext(); - expect(tree).toMatchSnapshot(); - }); - }); - - describe('label pills', () => { - it('should render labels pill', async () => { - const mockNotification = mockGitifyNotification; - mockNotification.subject.labels = ['enhancement', 'good-first-issue']; - - const props: MetricGroupProps = { - notification: mockNotification, - }; - - const tree = renderWithAppContext(); - expect(tree).toMatchSnapshot(); - }); - }); - - describe('milestone pills', () => { - it('should render open milestone pill', async () => { - const mockNotification = mockGitifyNotification; - mockNotification.subject.milestone = { - title: 'Milestone 1', - state: 'OPEN', - } as GitifyMilestone; - - const props: MetricGroupProps = { - notification: mockNotification, - }; - - const tree = renderWithAppContext(); - expect(tree).toMatchSnapshot(); - }); - - it('should render closed milestone pill', async () => { - const mockNotification = mockGitifyNotification; - mockNotification.subject.milestone = { - title: 'Milestone 1', - state: 'CLOSED', - } as GitifyMilestone; - - const props: MetricGroupProps = { - notification: mockNotification, - }; - const tree = renderWithAppContext(); expect(tree).toMatchSnapshot(); }); }); diff --git a/src/renderer/components/metrics/MetricGroup.tsx b/src/renderer/components/metrics/MetricGroup.tsx index 07a150f45..7661be473 100644 --- a/src/renderer/components/metrics/MetricGroup.tsx +++ b/src/renderer/components/metrics/MetricGroup.tsx @@ -1,168 +1,45 @@ import type { FC } from 'react'; -import { - CommentIcon, - IssueOpenedIcon, - MilestoneIcon, - SmileyIcon, - TagIcon, -} from '@primer/octicons-react'; - import { useAppContext } from '../../hooks/useAppContext'; -import { type GitifyNotification, IconColor } from '../../types'; +import type { GitifyNotification } from '../../types'; -import { getPullRequestReviewIcon } from '../../utils/icons'; -import { formatMetricDescription } from '../../utils/notifications/formatters'; -import { MetricPill } from './MetricPill'; +import { CommentsPill } from './CommentsPill'; +import { LabelsPill } from './LabelsPill'; +import { LinkedIssuesPill } from './LinkedIssuesPill'; +import { MilestonePill } from './MilestonePill'; +import { ReactionsPill } from './ReactionsPill'; +import { ReviewsPill } from './ReviewsPill'; export interface MetricGroupProps { notification: GitifyNotification; } -export const MetricGroup: FC = ({ - notification, -}: MetricGroupProps) => { +export const MetricGroup: FC = ({ notification }) => { const { settings } = useAppContext(); - const linkedIssues = notification.subject.linkedIssues ?? []; - const hasLinkedIssues = linkedIssues.length > 0; - const linkedIssuesPillDescription = formatMetricDescription( - linkedIssues.length, - 'issue', - (count, noun) => { - return `Linked to ${count} ${noun}: ${linkedIssues.join(', ')}`; - }, - ); - - const reactionCount = notification.subject.reactionsCount ?? 0; - const reactionGroups = notification.subject.reactionGroups ?? []; - const hasReactions = reactionCount > 0; - const hasMultipleReactions = - reactionGroups.filter((rg) => rg.reactors.totalCount > 0).length > 1; - const reactionEmojiMap: Record = { - THUMBS_UP: '👍', - THUMBS_DOWN: '👎', - LAUGH: '😆', - HOORAY: '🎉', - CONFUSED: '😕', - ROCKET: '🚀', - EYES: '👀', - HEART: '❤️', - }; - - const reactionPillDescription = formatMetricDescription( - reactionCount, - 'reaction', - (count, noun) => { - const formatted = reactionGroups - .map((rg) => { - const emoji = reactionEmojiMap[rg.content]; - if (!emoji || !rg.reactors.totalCount) { - return ''; - } - - return `${emoji} ${hasMultipleReactions ? rg.reactors.totalCount : ''}`.trim(); - }) - .filter(Boolean) - .join(' '); - - return `${count} ${noun}: ${formatted}`; - }, - ); - - const commentCount = notification.subject.commentCount ?? 0; - const hasComments = commentCount > 0; - const commentsPillDescription = formatMetricDescription( - commentCount, - 'comment', - ); - - const labels = notification.subject.labels ?? []; - const labelsCount = labels.length; - const hasLabels = labelsCount > 0; - const labelsPillDescription = formatMetricDescription( - labelsCount, - 'label', - (count, noun) => { - const formatted = labels - .map((label) => { - return `🏷️ ${label}`.trim(); - }) - .join(', '); - - return `${count} ${noun}: ${formatted}`; - }, - ); - - const milestone = notification.subject.milestone; + if (!settings.showPills) { + return null; + } return ( - settings.showPills && ( -
- {hasLinkedIssues && ( - - )} - - {hasReactions && ( - - )} +
+ - {notification.subject.reviews?.map((review) => { - const icon = getPullRequestReviewIcon(review); - if (!icon) { - return null; - } + - return ( - - ); - })} + - {hasComments && ( - - )} + - {hasLabels && ( - - )} + - {milestone && ( - - )} -
- ) + +
); }; diff --git a/src/renderer/components/metrics/MetricPill.test.tsx b/src/renderer/components/metrics/MetricPill.test.tsx index 428bef0de..e4abfcf7b 100644 --- a/src/renderer/components/metrics/MetricPill.test.tsx +++ b/src/renderer/components/metrics/MetricPill.test.tsx @@ -14,7 +14,9 @@ describe('renderer/components/metrics/MetricPill.tsx', () => { icon: MarkGithubIcon, color: IconColor.GREEN, }; + const tree = renderWithAppContext(); + expect(tree).toMatchSnapshot(); }); @@ -24,7 +26,9 @@ describe('renderer/components/metrics/MetricPill.tsx', () => { icon: MarkGithubIcon, color: IconColor.GREEN, }; + const tree = renderWithAppContext(); + expect(tree).toMatchSnapshot(); }); }); diff --git a/src/renderer/components/metrics/MilestonePill.test.tsx b/src/renderer/components/metrics/MilestonePill.test.tsx new file mode 100644 index 000000000..4d9c65f01 --- /dev/null +++ b/src/renderer/components/metrics/MilestonePill.test.tsx @@ -0,0 +1,36 @@ +import { renderWithAppContext } from '../../__helpers__/test-utils'; +import { mockGitifyNotification } from '../../__mocks__/notifications-mocks'; + +import type { GitifyMilestone } from '../../types'; + +import { MilestonePill } from './MilestonePill'; + +describe('renderer/components/metrics/MilestonePill.tsx', () => { + it('renders open milestone pill', () => { + const mockNotification = { ...mockGitifyNotification }; + mockNotification.subject.milestone = { + title: 'Milestone 1', + state: 'OPEN', + } as GitifyMilestone; + + const tree = renderWithAppContext( + , + ); + + expect(tree).toMatchSnapshot(); + }); + + it('renders closed milestone pill', () => { + const mockNotification = { ...mockGitifyNotification }; + mockNotification.subject.milestone = { + title: 'Milestone 1', + state: 'CLOSED', + } as GitifyMilestone; + + const tree = renderWithAppContext( + , + ); + + expect(tree).toMatchSnapshot(); + }); +}); diff --git a/src/renderer/components/metrics/MilestonePill.tsx b/src/renderer/components/metrics/MilestonePill.tsx new file mode 100644 index 000000000..431693fb0 --- /dev/null +++ b/src/renderer/components/metrics/MilestonePill.tsx @@ -0,0 +1,30 @@ +import type { FC } from 'react'; + +import { MilestoneIcon } from '@primer/octicons-react'; + +import { IconColor } from '../../types'; + +import { MetricPill } from './MetricPill'; + +export interface Milestone { + title: string; + state: string; +} + +export interface MilestonePillProps { + milestone: Milestone; +} + +export const MilestonePill: FC = ({ milestone }) => { + if (!milestone) { + return null; + } + + return ( + + ); +}; diff --git a/src/renderer/components/metrics/ReactionsPill.test.tsx b/src/renderer/components/metrics/ReactionsPill.test.tsx new file mode 100644 index 000000000..eca202c1a --- /dev/null +++ b/src/renderer/components/metrics/ReactionsPill.test.tsx @@ -0,0 +1,50 @@ +import { renderWithAppContext } from '../../__helpers__/test-utils'; +import { mockGitifyNotification } from '../../__mocks__/notifications-mocks'; + +import { ReactionsPill } from './ReactionsPill'; + +describe('renderer/components/metrics/ReactionsPill.tsx', () => { + it('renders when one reaction', () => { + const mockNotification = { ...mockGitifyNotification }; + mockNotification.subject.reactionsCount = 1; + mockNotification.subject.reactionGroups = [ + { + content: 'ROCKET', + reactors: { totalCount: 1 }, + }, + ]; + + const tree = renderWithAppContext( + , + ); + + expect(tree).toMatchSnapshot(); + }); + + it('renders when multiple reactions', () => { + const mockNotification = { ...mockGitifyNotification }; + mockNotification.subject.reactionsCount = 53; + mockNotification.subject.reactionGroups = [ + { content: 'THUMBS_UP', reactors: { totalCount: 1 } }, + { content: 'THUMBS_DOWN', reactors: { totalCount: 1 } }, + { content: 'LAUGH', reactors: { totalCount: 2 } }, + { content: 'HOORAY', reactors: { totalCount: 3 } }, + { content: 'CONFUSED', reactors: { totalCount: 5 } }, + { content: 'ROCKET', reactors: { totalCount: 8 } }, + { content: 'EYES', reactors: { totalCount: 13 } }, + { content: 'HEART', reactors: { totalCount: 21 } }, + ]; + + const tree = renderWithAppContext( + , + ); + + expect(tree).toMatchSnapshot(); + }); +}); diff --git a/src/renderer/components/metrics/ReactionsPill.tsx b/src/renderer/components/metrics/ReactionsPill.tsx new file mode 100644 index 000000000..3fd4552c6 --- /dev/null +++ b/src/renderer/components/metrics/ReactionsPill.tsx @@ -0,0 +1,68 @@ +import type { FC } from 'react'; + +import { SmileyIcon } from '@primer/octicons-react'; + +import { IconColor } from '../../types'; + +import { formatMetricDescription } from '../../utils/notifications/formatters'; +import { MetricPill } from './MetricPill'; + +export interface ReactionGroup { + content: string; + reactors: { totalCount: number }; +} + +export interface ReactionsPillProps { + reactionsCount: number; + reactionGroups: ReactionGroup[]; +} + +const reactionEmojiMap: Record = { + THUMBS_UP: '👍', + THUMBS_DOWN: '👎', + LAUGH: '😆', + HOORAY: '🎉', + CONFUSED: '😕', + ROCKET: '🚀', + EYES: '👀', + HEART: '❤️', +}; + +export const ReactionsPill: FC = ({ + reactionsCount, + reactionGroups, +}) => { + if (!reactionsCount) { + return null; + } + + const hasMultipleReactions = + reactionGroups.filter((rg) => rg.reactors.totalCount > 0).length > 1; + + const description = formatMetricDescription( + reactionsCount, + 'reaction', + (count, noun) => { + const formatted = reactionGroups + .map((rg) => { + const emoji = reactionEmojiMap[rg.content]; + if (!emoji || !rg.reactors.totalCount) { + return ''; + } + return `${emoji} ${hasMultipleReactions ? rg.reactors.totalCount : ''}`.trim(); + }) + .filter(Boolean) + .join(' '); + return `${count} ${noun}: ${formatted}`; + }, + ); + + return ( + + ); +}; diff --git a/src/renderer/components/metrics/ReviewsPill.test.tsx b/src/renderer/components/metrics/ReviewsPill.test.tsx new file mode 100644 index 000000000..b75cef4b8 --- /dev/null +++ b/src/renderer/components/metrics/ReviewsPill.test.tsx @@ -0,0 +1,21 @@ +import { renderWithAppContext } from '../../__helpers__/test-utils'; +import { mockGitifyNotification } from '../../__mocks__/notifications-mocks'; + +import { ReviewsPill } from './ReviewsPill'; + +describe('renderer/components/metrics/ReviewsPill.tsx', () => { + it('renders review pills when reviews exist', () => { + const mockNotification = { ...mockGitifyNotification }; + const reviews = mockNotification.subject.reviews; + + const tree = renderWithAppContext(); + + expect(tree).toMatchSnapshot(); + }); + + it('renders nothing when no reviews', () => { + const tree = renderWithAppContext(); + + expect(tree).toMatchSnapshot(); + }); +}); diff --git a/src/renderer/components/metrics/ReviewsPill.tsx b/src/renderer/components/metrics/ReviewsPill.tsx new file mode 100644 index 000000000..e53d9faea --- /dev/null +++ b/src/renderer/components/metrics/ReviewsPill.tsx @@ -0,0 +1,38 @@ +import type { FC } from 'react'; + +import type { GitifyPullRequestReview } from '../../types'; + +import { getPullRequestReviewIcon } from '../../utils/icons'; +import { MetricPill } from './MetricPill'; + +export interface ReviewsPillProps { + reviews: GitifyPullRequestReview[]; +} + +export const ReviewsPill: FC = ({ reviews }) => { + if (!reviews?.length) { + return null; + } + + return ( + <> + {reviews.map((review) => { + const icon = getPullRequestReviewIcon(review); + + if (!icon) { + return null; + } + + return ( + + ); + })} + + ); +}; diff --git a/src/renderer/components/metrics/__snapshots__/CommentsPill.test.tsx.snap b/src/renderer/components/metrics/__snapshots__/CommentsPill.test.tsx.snap new file mode 100644 index 000000000..fc651456c --- /dev/null +++ b/src/renderer/components/metrics/__snapshots__/CommentsPill.test.tsx.snap @@ -0,0 +1,466 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`renderer/components/metrics/CommentsPill.tsx renders with 1 comment 1`] = ` +{ + "asFragment": [Function], + "baseElement": +
+
+
+ + +
+
+
+ , + "container":
+
+
+ + +
+
+
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} +`; + +exports[`renderer/components/metrics/CommentsPill.tsx renders with multiple comments 1`] = ` +{ + "asFragment": [Function], + "baseElement": +
+
+
+ + +
+
+
+ , + "container":
+
+
+ + +
+
+
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} +`; + +exports[`renderer/components/metrics/CommentsPill.tsx renders with no comments (null) 1`] = ` +{ + "asFragment": [Function], + "baseElement": +
+
+
+
+
+ , + "container":
+
+
+
+
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} +`; diff --git a/src/renderer/components/metrics/__snapshots__/LabelsPill.test.tsx.snap b/src/renderer/components/metrics/__snapshots__/LabelsPill.test.tsx.snap new file mode 100644 index 000000000..4599aca25 --- /dev/null +++ b/src/renderer/components/metrics/__snapshots__/LabelsPill.test.tsx.snap @@ -0,0 +1,192 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`renderer/components/metrics/LabelsPill.tsx renders labels pill 1`] = ` +{ + "asFragment": [Function], + "baseElement": +
+
+
+ + +
+
+
+ , + "container":
+
+
+ + +
+
+
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} +`; diff --git a/src/renderer/components/metrics/__snapshots__/LinkedIssuesPill.test.tsx.snap b/src/renderer/components/metrics/__snapshots__/LinkedIssuesPill.test.tsx.snap new file mode 100644 index 000000000..7b2c0d270 --- /dev/null +++ b/src/renderer/components/metrics/__snapshots__/LinkedIssuesPill.test.tsx.snap @@ -0,0 +1,395 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`renderer/components/metrics/LinkedIssuesPill.tsx renders when linked to multiple issues/prs 1`] = ` +{ + "asFragment": [Function], + "baseElement": +
+
+
+ + +
+
+
+ , + "container":
+
+
+ + +
+
+
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} +`; + +exports[`renderer/components/metrics/LinkedIssuesPill.tsx renders when linked to one issue/pr 1`] = ` +{ + "asFragment": [Function], + "baseElement": +
+
+
+ + +
+
+
+ , + "container":
+
+
+ + +
+
+
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} +`; diff --git a/src/renderer/components/metrics/__snapshots__/MetricGroup.test.tsx.snap b/src/renderer/components/metrics/__snapshots__/MetricGroup.test.tsx.snap index 0766a3935..129cb3ca4 100644 --- a/src/renderer/components/metrics/__snapshots__/MetricGroup.test.tsx.snap +++ b/src/renderer/components/metrics/__snapshots__/MetricGroup.test.tsx.snap @@ -1,6586 +1,5 @@ // Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing -exports[`renderer/components/metrics/MetricGroup.tsx comment pills should render when 1 comment 1`] = ` -{ - "asFragment": [Function], - "baseElement": -
-
-
-
- - - - - - - - - - -
-
-
-
- , - "container":
-
-
-
- - - - - - - - - - -
-
-
-
, - "debug": [Function], - "findAllByAltText": [Function], - "findAllByDisplayValue": [Function], - "findAllByLabelText": [Function], - "findAllByPlaceholderText": [Function], - "findAllByRole": [Function], - "findAllByTestId": [Function], - "findAllByText": [Function], - "findAllByTitle": [Function], - "findByAltText": [Function], - "findByDisplayValue": [Function], - "findByLabelText": [Function], - "findByPlaceholderText": [Function], - "findByRole": [Function], - "findByTestId": [Function], - "findByText": [Function], - "findByTitle": [Function], - "getAllByAltText": [Function], - "getAllByDisplayValue": [Function], - "getAllByLabelText": [Function], - "getAllByPlaceholderText": [Function], - "getAllByRole": [Function], - "getAllByTestId": [Function], - "getAllByText": [Function], - "getAllByTitle": [Function], - "getByAltText": [Function], - "getByDisplayValue": [Function], - "getByLabelText": [Function], - "getByPlaceholderText": [Function], - "getByRole": [Function], - "getByTestId": [Function], - "getByText": [Function], - "getByTitle": [Function], - "queryAllByAltText": [Function], - "queryAllByDisplayValue": [Function], - "queryAllByLabelText": [Function], - "queryAllByPlaceholderText": [Function], - "queryAllByRole": [Function], - "queryAllByTestId": [Function], - "queryAllByText": [Function], - "queryAllByTitle": [Function], - "queryByAltText": [Function], - "queryByDisplayValue": [Function], - "queryByLabelText": [Function], - "queryByPlaceholderText": [Function], - "queryByRole": [Function], - "queryByTestId": [Function], - "queryByText": [Function], - "queryByTitle": [Function], - "rerender": [Function], - "unmount": [Function], -} -`; - -exports[`renderer/components/metrics/MetricGroup.tsx comment pills should render when more than 1 comments 1`] = ` -{ - "asFragment": [Function], - "baseElement": -
-
-
-
- - - - - - - - - - -
-
-
-
- , - "container":
-
-
-
- - - - - - - - - - -
-
-
-
, - "debug": [Function], - "findAllByAltText": [Function], - "findAllByDisplayValue": [Function], - "findAllByLabelText": [Function], - "findAllByPlaceholderText": [Function], - "findAllByRole": [Function], - "findAllByTestId": [Function], - "findAllByText": [Function], - "findAllByTitle": [Function], - "findByAltText": [Function], - "findByDisplayValue": [Function], - "findByLabelText": [Function], - "findByPlaceholderText": [Function], - "findByRole": [Function], - "findByTestId": [Function], - "findByText": [Function], - "findByTitle": [Function], - "getAllByAltText": [Function], - "getAllByDisplayValue": [Function], - "getAllByLabelText": [Function], - "getAllByPlaceholderText": [Function], - "getAllByRole": [Function], - "getAllByTestId": [Function], - "getAllByText": [Function], - "getAllByTitle": [Function], - "getByAltText": [Function], - "getByDisplayValue": [Function], - "getByLabelText": [Function], - "getByPlaceholderText": [Function], - "getByRole": [Function], - "getByTestId": [Function], - "getByText": [Function], - "getByTitle": [Function], - "queryAllByAltText": [Function], - "queryAllByDisplayValue": [Function], - "queryAllByLabelText": [Function], - "queryAllByPlaceholderText": [Function], - "queryAllByRole": [Function], - "queryAllByTestId": [Function], - "queryAllByText": [Function], - "queryAllByTitle": [Function], - "queryByAltText": [Function], - "queryByDisplayValue": [Function], - "queryByLabelText": [Function], - "queryByPlaceholderText": [Function], - "queryByRole": [Function], - "queryByTestId": [Function], - "queryByText": [Function], - "queryByTitle": [Function], - "rerender": [Function], - "unmount": [Function], -} -`; - -exports[`renderer/components/metrics/MetricGroup.tsx comment pills should render when no comments 1`] = ` -{ - "asFragment": [Function], - "baseElement": -
-
-
-
- - - - - - - - -
-
-
-
- , - "container":
-
-
-
- - - - - - - - -
-
-
-
, - "debug": [Function], - "findAllByAltText": [Function], - "findAllByDisplayValue": [Function], - "findAllByLabelText": [Function], - "findAllByPlaceholderText": [Function], - "findAllByRole": [Function], - "findAllByTestId": [Function], - "findAllByText": [Function], - "findAllByTitle": [Function], - "findByAltText": [Function], - "findByDisplayValue": [Function], - "findByLabelText": [Function], - "findByPlaceholderText": [Function], - "findByRole": [Function], - "findByTestId": [Function], - "findByText": [Function], - "findByTitle": [Function], - "getAllByAltText": [Function], - "getAllByDisplayValue": [Function], - "getAllByLabelText": [Function], - "getAllByPlaceholderText": [Function], - "getAllByRole": [Function], - "getAllByTestId": [Function], - "getAllByText": [Function], - "getAllByTitle": [Function], - "getByAltText": [Function], - "getByDisplayValue": [Function], - "getByLabelText": [Function], - "getByPlaceholderText": [Function], - "getByRole": [Function], - "getByTestId": [Function], - "getByText": [Function], - "getByTitle": [Function], - "queryAllByAltText": [Function], - "queryAllByDisplayValue": [Function], - "queryAllByLabelText": [Function], - "queryAllByPlaceholderText": [Function], - "queryAllByRole": [Function], - "queryAllByTestId": [Function], - "queryAllByText": [Function], - "queryAllByTitle": [Function], - "queryByAltText": [Function], - "queryByDisplayValue": [Function], - "queryByLabelText": [Function], - "queryByPlaceholderText": [Function], - "queryByRole": [Function], - "queryByTestId": [Function], - "queryByText": [Function], - "queryByTitle": [Function], - "rerender": [Function], - "unmount": [Function], -} -`; - -exports[`renderer/components/metrics/MetricGroup.tsx label pills should render labels pill 1`] = ` -{ - "asFragment": [Function], - "baseElement": -
-
-
-
- - - - - - - - - - - - -
-
-
-
- , - "container":
-
-
-
- - - - - - - - - - - - -
-
-
-
, - "debug": [Function], - "findAllByAltText": [Function], - "findAllByDisplayValue": [Function], - "findAllByLabelText": [Function], - "findAllByPlaceholderText": [Function], - "findAllByRole": [Function], - "findAllByTestId": [Function], - "findAllByText": [Function], - "findAllByTitle": [Function], - "findByAltText": [Function], - "findByDisplayValue": [Function], - "findByLabelText": [Function], - "findByPlaceholderText": [Function], - "findByRole": [Function], - "findByTestId": [Function], - "findByText": [Function], - "findByTitle": [Function], - "getAllByAltText": [Function], - "getAllByDisplayValue": [Function], - "getAllByLabelText": [Function], - "getAllByPlaceholderText": [Function], - "getAllByRole": [Function], - "getAllByTestId": [Function], - "getAllByText": [Function], - "getAllByTitle": [Function], - "getByAltText": [Function], - "getByDisplayValue": [Function], - "getByLabelText": [Function], - "getByPlaceholderText": [Function], - "getByRole": [Function], - "getByTestId": [Function], - "getByText": [Function], - "getByTitle": [Function], - "queryAllByAltText": [Function], - "queryAllByDisplayValue": [Function], - "queryAllByLabelText": [Function], - "queryAllByPlaceholderText": [Function], - "queryAllByRole": [Function], - "queryAllByTestId": [Function], - "queryAllByText": [Function], - "queryAllByTitle": [Function], - "queryByAltText": [Function], - "queryByDisplayValue": [Function], - "queryByLabelText": [Function], - "queryByPlaceholderText": [Function], - "queryByRole": [Function], - "queryByTestId": [Function], - "queryByText": [Function], - "queryByTitle": [Function], - "rerender": [Function], - "unmount": [Function], -} -`; - -exports[`renderer/components/metrics/MetricGroup.tsx linked issue pills should render issues pill when linked to multiple issues/prs 1`] = ` -{ - "asFragment": [Function], - "baseElement": -
-
-
-
- - - - - - -
-
-
-
- , - "container":
-
-
-
- - - - - - -
-
-
-
, - "debug": [Function], - "findAllByAltText": [Function], - "findAllByDisplayValue": [Function], - "findAllByLabelText": [Function], - "findAllByPlaceholderText": [Function], - "findAllByRole": [Function], - "findAllByTestId": [Function], - "findAllByText": [Function], - "findAllByTitle": [Function], - "findByAltText": [Function], - "findByDisplayValue": [Function], - "findByLabelText": [Function], - "findByPlaceholderText": [Function], - "findByRole": [Function], - "findByTestId": [Function], - "findByText": [Function], - "findByTitle": [Function], - "getAllByAltText": [Function], - "getAllByDisplayValue": [Function], - "getAllByLabelText": [Function], - "getAllByPlaceholderText": [Function], - "getAllByRole": [Function], - "getAllByTestId": [Function], - "getAllByText": [Function], - "getAllByTitle": [Function], - "getByAltText": [Function], - "getByDisplayValue": [Function], - "getByLabelText": [Function], - "getByPlaceholderText": [Function], - "getByRole": [Function], - "getByTestId": [Function], - "getByText": [Function], - "getByTitle": [Function], - "queryAllByAltText": [Function], - "queryAllByDisplayValue": [Function], - "queryAllByLabelText": [Function], - "queryAllByPlaceholderText": [Function], - "queryAllByRole": [Function], - "queryAllByTestId": [Function], - "queryAllByText": [Function], - "queryAllByTitle": [Function], - "queryByAltText": [Function], - "queryByDisplayValue": [Function], - "queryByLabelText": [Function], - "queryByPlaceholderText": [Function], - "queryByRole": [Function], - "queryByTestId": [Function], - "queryByText": [Function], - "queryByTitle": [Function], - "rerender": [Function], - "unmount": [Function], -} -`; - -exports[`renderer/components/metrics/MetricGroup.tsx linked issue pills should render issues pill when linked to one issue/pr 1`] = ` -{ - "asFragment": [Function], - "baseElement": -
-
-
-
- - - - - - -
-
-
-
- , - "container":
-
-
-
- - - - - - -
-
-
-
, - "debug": [Function], - "findAllByAltText": [Function], - "findAllByDisplayValue": [Function], - "findAllByLabelText": [Function], - "findAllByPlaceholderText": [Function], - "findAllByRole": [Function], - "findAllByTestId": [Function], - "findAllByText": [Function], - "findAllByTitle": [Function], - "findByAltText": [Function], - "findByDisplayValue": [Function], - "findByLabelText": [Function], - "findByPlaceholderText": [Function], - "findByRole": [Function], - "findByTestId": [Function], - "findByText": [Function], - "findByTitle": [Function], - "getAllByAltText": [Function], - "getAllByDisplayValue": [Function], - "getAllByLabelText": [Function], - "getAllByPlaceholderText": [Function], - "getAllByRole": [Function], - "getAllByTestId": [Function], - "getAllByText": [Function], - "getAllByTitle": [Function], - "getByAltText": [Function], - "getByDisplayValue": [Function], - "getByLabelText": [Function], - "getByPlaceholderText": [Function], - "getByRole": [Function], - "getByTestId": [Function], - "getByText": [Function], - "getByTitle": [Function], - "queryAllByAltText": [Function], - "queryAllByDisplayValue": [Function], - "queryAllByLabelText": [Function], - "queryAllByPlaceholderText": [Function], - "queryAllByRole": [Function], - "queryAllByTestId": [Function], - "queryAllByText": [Function], - "queryAllByTitle": [Function], - "queryByAltText": [Function], - "queryByDisplayValue": [Function], - "queryByLabelText": [Function], - "queryByPlaceholderText": [Function], - "queryByRole": [Function], - "queryByTestId": [Function], - "queryByText": [Function], - "queryByTitle": [Function], - "rerender": [Function], - "unmount": [Function], -} -`; - -exports[`renderer/components/metrics/MetricGroup.tsx milestone pills should render closed milestone pill 1`] = ` -{ - "asFragment": [Function], - "baseElement": -
-
-
-
- - - - - - - - - - - - - - -
-
-
-
- , - "container":
-
-
-
- - - - - - - - - - - - - - -
-
-
-
, - "debug": [Function], - "findAllByAltText": [Function], - "findAllByDisplayValue": [Function], - "findAllByLabelText": [Function], - "findAllByPlaceholderText": [Function], - "findAllByRole": [Function], - "findAllByTestId": [Function], - "findAllByText": [Function], - "findAllByTitle": [Function], - "findByAltText": [Function], - "findByDisplayValue": [Function], - "findByLabelText": [Function], - "findByPlaceholderText": [Function], - "findByRole": [Function], - "findByTestId": [Function], - "findByText": [Function], - "findByTitle": [Function], - "getAllByAltText": [Function], - "getAllByDisplayValue": [Function], - "getAllByLabelText": [Function], - "getAllByPlaceholderText": [Function], - "getAllByRole": [Function], - "getAllByTestId": [Function], - "getAllByText": [Function], - "getAllByTitle": [Function], - "getByAltText": [Function], - "getByDisplayValue": [Function], - "getByLabelText": [Function], - "getByPlaceholderText": [Function], - "getByRole": [Function], - "getByTestId": [Function], - "getByText": [Function], - "getByTitle": [Function], - "queryAllByAltText": [Function], - "queryAllByDisplayValue": [Function], - "queryAllByLabelText": [Function], - "queryAllByPlaceholderText": [Function], - "queryAllByRole": [Function], - "queryAllByTestId": [Function], - "queryAllByText": [Function], - "queryAllByTitle": [Function], - "queryByAltText": [Function], - "queryByDisplayValue": [Function], - "queryByLabelText": [Function], - "queryByPlaceholderText": [Function], - "queryByRole": [Function], - "queryByTestId": [Function], - "queryByText": [Function], - "queryByTitle": [Function], - "rerender": [Function], - "unmount": [Function], -} -`; - -exports[`renderer/components/metrics/MetricGroup.tsx milestone pills should render open milestone pill 1`] = ` -{ - "asFragment": [Function], - "baseElement": -
-
-
-
- - - - - - - - - - - - - - -
-
-
-
- , - "container":
-
-
-
- - - - - - - - - - - - - - -
-
-
-
, - "debug": [Function], - "findAllByAltText": [Function], - "findAllByDisplayValue": [Function], - "findAllByLabelText": [Function], - "findAllByPlaceholderText": [Function], - "findAllByRole": [Function], - "findAllByTestId": [Function], - "findAllByText": [Function], - "findAllByTitle": [Function], - "findByAltText": [Function], - "findByDisplayValue": [Function], - "findByLabelText": [Function], - "findByPlaceholderText": [Function], - "findByRole": [Function], - "findByTestId": [Function], - "findByText": [Function], - "findByTitle": [Function], - "getAllByAltText": [Function], - "getAllByDisplayValue": [Function], - "getAllByLabelText": [Function], - "getAllByPlaceholderText": [Function], - "getAllByRole": [Function], - "getAllByTestId": [Function], - "getAllByText": [Function], - "getAllByTitle": [Function], - "getByAltText": [Function], - "getByDisplayValue": [Function], - "getByLabelText": [Function], - "getByPlaceholderText": [Function], - "getByRole": [Function], - "getByTestId": [Function], - "getByText": [Function], - "getByTitle": [Function], - "queryAllByAltText": [Function], - "queryAllByDisplayValue": [Function], - "queryAllByLabelText": [Function], - "queryAllByPlaceholderText": [Function], - "queryAllByRole": [Function], - "queryAllByTestId": [Function], - "queryAllByText": [Function], - "queryAllByTitle": [Function], - "queryByAltText": [Function], - "queryByDisplayValue": [Function], - "queryByLabelText": [Function], - "queryByPlaceholderText": [Function], - "queryByRole": [Function], - "queryByTestId": [Function], - "queryByText": [Function], - "queryByTitle": [Function], - "rerender": [Function], - "unmount": [Function], -} -`; - -exports[`renderer/components/metrics/MetricGroup.tsx reactions pills should render issues pill when linked to multiple issues/prs 1`] = ` -{ - "asFragment": [Function], - "baseElement": -
-
-
-
- - - - - - - - -
-
-
-
- , - "container":
-
-
-
- - - - - - - - -
-
-
-
, - "debug": [Function], - "findAllByAltText": [Function], - "findAllByDisplayValue": [Function], - "findAllByLabelText": [Function], - "findAllByPlaceholderText": [Function], - "findAllByRole": [Function], - "findAllByTestId": [Function], - "findAllByText": [Function], - "findAllByTitle": [Function], - "findByAltText": [Function], - "findByDisplayValue": [Function], - "findByLabelText": [Function], - "findByPlaceholderText": [Function], - "findByRole": [Function], - "findByTestId": [Function], - "findByText": [Function], - "findByTitle": [Function], - "getAllByAltText": [Function], - "getAllByDisplayValue": [Function], - "getAllByLabelText": [Function], - "getAllByPlaceholderText": [Function], - "getAllByRole": [Function], - "getAllByTestId": [Function], - "getAllByText": [Function], - "getAllByTitle": [Function], - "getByAltText": [Function], - "getByDisplayValue": [Function], - "getByLabelText": [Function], - "getByPlaceholderText": [Function], - "getByRole": [Function], - "getByTestId": [Function], - "getByText": [Function], - "getByTitle": [Function], - "queryAllByAltText": [Function], - "queryAllByDisplayValue": [Function], - "queryAllByLabelText": [Function], - "queryAllByPlaceholderText": [Function], - "queryAllByRole": [Function], - "queryAllByTestId": [Function], - "queryAllByText": [Function], - "queryAllByTitle": [Function], - "queryByAltText": [Function], - "queryByDisplayValue": [Function], - "queryByLabelText": [Function], - "queryByPlaceholderText": [Function], - "queryByRole": [Function], - "queryByTestId": [Function], - "queryByText": [Function], - "queryByTitle": [Function], - "rerender": [Function], - "unmount": [Function], -} -`; - -exports[`renderer/components/metrics/MetricGroup.tsx reactions pills should render reaction pill when multiple reactions 1`] = ` -{ - "asFragment": [Function], - "baseElement": -
-
-
-
- - - - - - - - -
-
-
-
- , - "container":
-
-
-
- - - - - - - - -
-
-
-
, - "debug": [Function], - "findAllByAltText": [Function], - "findAllByDisplayValue": [Function], - "findAllByLabelText": [Function], - "findAllByPlaceholderText": [Function], - "findAllByRole": [Function], - "findAllByTestId": [Function], - "findAllByText": [Function], - "findAllByTitle": [Function], - "findByAltText": [Function], - "findByDisplayValue": [Function], - "findByLabelText": [Function], - "findByPlaceholderText": [Function], - "findByRole": [Function], - "findByTestId": [Function], - "findByText": [Function], - "findByTitle": [Function], - "getAllByAltText": [Function], - "getAllByDisplayValue": [Function], - "getAllByLabelText": [Function], - "getAllByPlaceholderText": [Function], - "getAllByRole": [Function], - "getAllByTestId": [Function], - "getAllByText": [Function], - "getAllByTitle": [Function], - "getByAltText": [Function], - "getByDisplayValue": [Function], - "getByLabelText": [Function], - "getByPlaceholderText": [Function], - "getByRole": [Function], - "getByTestId": [Function], - "getByText": [Function], - "getByTitle": [Function], - "queryAllByAltText": [Function], - "queryAllByDisplayValue": [Function], - "queryAllByLabelText": [Function], - "queryAllByPlaceholderText": [Function], - "queryAllByRole": [Function], - "queryAllByTestId": [Function], - "queryAllByText": [Function], - "queryAllByTitle": [Function], - "queryByAltText": [Function], - "queryByDisplayValue": [Function], - "queryByLabelText": [Function], - "queryByPlaceholderText": [Function], - "queryByRole": [Function], - "queryByTestId": [Function], - "queryByText": [Function], - "queryByTitle": [Function], - "rerender": [Function], - "unmount": [Function], -} -`; - -exports[`renderer/components/metrics/MetricGroup.tsx reactions pills should render reaction pill when one reaction 1`] = ` -{ - "asFragment": [Function], - "baseElement": -
-
-
-
- - - - - - - - -
-
-
-
- , - "container":
-
-
-
- - - - - - - - -
-
-
-
, - "debug": [Function], - "findAllByAltText": [Function], - "findAllByDisplayValue": [Function], - "findAllByLabelText": [Function], - "findAllByPlaceholderText": [Function], - "findAllByRole": [Function], - "findAllByTestId": [Function], - "findAllByText": [Function], - "findAllByTitle": [Function], - "findByAltText": [Function], - "findByDisplayValue": [Function], - "findByLabelText": [Function], - "findByPlaceholderText": [Function], - "findByRole": [Function], - "findByTestId": [Function], - "findByText": [Function], - "findByTitle": [Function], - "getAllByAltText": [Function], - "getAllByDisplayValue": [Function], - "getAllByLabelText": [Function], - "getAllByPlaceholderText": [Function], - "getAllByRole": [Function], - "getAllByTestId": [Function], - "getAllByText": [Function], - "getAllByTitle": [Function], - "getByAltText": [Function], - "getByDisplayValue": [Function], - "getByLabelText": [Function], - "getByPlaceholderText": [Function], - "getByRole": [Function], - "getByTestId": [Function], - "getByText": [Function], - "getByTitle": [Function], - "queryAllByAltText": [Function], - "queryAllByDisplayValue": [Function], - "queryAllByLabelText": [Function], - "queryAllByPlaceholderText": [Function], - "queryAllByRole": [Function], - "queryAllByTestId": [Function], - "queryAllByText": [Function], - "queryAllByTitle": [Function], - "queryByAltText": [Function], - "queryByDisplayValue": [Function], - "queryByLabelText": [Function], - "queryByPlaceholderText": [Function], - "queryByRole": [Function], - "queryByTestId": [Function], - "queryByText": [Function], - "queryByTitle": [Function], - "rerender": [Function], - "unmount": [Function], -} -`; - exports[`renderer/components/metrics/MetricGroup.tsx showPills disabled should not render any pills when showPills is disabled 1`] = ` { "asFragment": [Function], diff --git a/src/renderer/components/metrics/__snapshots__/MilestonePill.test.tsx.snap b/src/renderer/components/metrics/__snapshots__/MilestonePill.test.tsx.snap new file mode 100644 index 000000000..2e40d9fc1 --- /dev/null +++ b/src/renderer/components/metrics/__snapshots__/MilestonePill.test.tsx.snap @@ -0,0 +1,363 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`renderer/components/metrics/MilestonePill.tsx renders closed milestone pill 1`] = ` +{ + "asFragment": [Function], + "baseElement": +
+
+
+ + +
+
+
+ , + "container":
+
+
+ + +
+
+
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} +`; + +exports[`renderer/components/metrics/MilestonePill.tsx renders open milestone pill 1`] = ` +{ + "asFragment": [Function], + "baseElement": +
+
+
+ + +
+
+
+ , + "container":
+
+
+ + +
+
+
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} +`; diff --git a/src/renderer/components/metrics/__snapshots__/ReactionsPill.test.tsx.snap b/src/renderer/components/metrics/__snapshots__/ReactionsPill.test.tsx.snap new file mode 100644 index 000000000..0380b66d9 --- /dev/null +++ b/src/renderer/components/metrics/__snapshots__/ReactionsPill.test.tsx.snap @@ -0,0 +1,383 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`renderer/components/metrics/ReactionsPill.tsx renders when multiple reactions 1`] = ` +{ + "asFragment": [Function], + "baseElement": +
+
+
+ + +
+
+
+ , + "container":
+
+
+ + +
+
+
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} +`; + +exports[`renderer/components/metrics/ReactionsPill.tsx renders when one reaction 1`] = ` +{ + "asFragment": [Function], + "baseElement": +
+
+
+ + +
+
+
+ , + "container":
+
+
+ + +
+
+
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} +`; diff --git a/src/renderer/components/metrics/__snapshots__/ReviewsPill.test.tsx.snap b/src/renderer/components/metrics/__snapshots__/ReviewsPill.test.tsx.snap new file mode 100644 index 000000000..e7fe93ba8 --- /dev/null +++ b/src/renderer/components/metrics/__snapshots__/ReviewsPill.test.tsx.snap @@ -0,0 +1,381 @@ +// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing + +exports[`renderer/components/metrics/ReviewsPill.tsx renders nothing when no reviews 1`] = ` +{ + "asFragment": [Function], + "baseElement": +
+
+
+
+
+ , + "container":
+
+
+
+
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} +`; + +exports[`renderer/components/metrics/ReviewsPill.tsx renders review pills when reviews exist 1`] = ` +{ + "asFragment": [Function], + "baseElement": +
+
+
+ + + + +
+
+
+ , + "container":
+
+
+ + + + +
+
+
, + "debug": [Function], + "findAllByAltText": [Function], + "findAllByDisplayValue": [Function], + "findAllByLabelText": [Function], + "findAllByPlaceholderText": [Function], + "findAllByRole": [Function], + "findAllByTestId": [Function], + "findAllByText": [Function], + "findAllByTitle": [Function], + "findByAltText": [Function], + "findByDisplayValue": [Function], + "findByLabelText": [Function], + "findByPlaceholderText": [Function], + "findByRole": [Function], + "findByTestId": [Function], + "findByText": [Function], + "findByTitle": [Function], + "getAllByAltText": [Function], + "getAllByDisplayValue": [Function], + "getAllByLabelText": [Function], + "getAllByPlaceholderText": [Function], + "getAllByRole": [Function], + "getAllByTestId": [Function], + "getAllByText": [Function], + "getAllByTitle": [Function], + "getByAltText": [Function], + "getByDisplayValue": [Function], + "getByLabelText": [Function], + "getByPlaceholderText": [Function], + "getByRole": [Function], + "getByTestId": [Function], + "getByText": [Function], + "getByTitle": [Function], + "queryAllByAltText": [Function], + "queryAllByDisplayValue": [Function], + "queryAllByLabelText": [Function], + "queryAllByPlaceholderText": [Function], + "queryAllByRole": [Function], + "queryAllByTestId": [Function], + "queryAllByText": [Function], + "queryAllByTitle": [Function], + "queryByAltText": [Function], + "queryByDisplayValue": [Function], + "queryByLabelText": [Function], + "queryByPlaceholderText": [Function], + "queryByRole": [Function], + "queryByTestId": [Function], + "queryByText": [Function], + "queryByTitle": [Function], + "rerender": [Function], + "unmount": [Function], +} +`; From 265bc871a2006759fcdd36f03e2fc88f2eae0ccb Mon Sep 17 00:00:00 2001 From: Adam Setch Date: Fri, 30 Jan 2026 09:55:15 -0500 Subject: [PATCH 2/2] refactor: split metrics into individual components Signed-off-by: Adam Setch --- src/renderer/components/metrics/LabelsPill.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/renderer/components/metrics/LabelsPill.tsx b/src/renderer/components/metrics/LabelsPill.tsx index 0a5c91158..42443a1b2 100644 --- a/src/renderer/components/metrics/LabelsPill.tsx +++ b/src/renderer/components/metrics/LabelsPill.tsx @@ -19,8 +19,11 @@ export const LabelsPill: FC = ({ labels }) => { const description = formatMetricDescription( labels.length, 'label', - (count, noun) => - `${count} ${noun}: ${labels.map((label) => `🏷️ ${label}`).join(', ')}`, + (count, noun) => { + const formatted = labels.map((label) => `🏷️ ${label}`).join(', '); + + return `${count} ${noun}: ${formatted}`; + }, ); return (