-
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathPlatformWebhooksEndpointDetails.test.tsx
More file actions
101 lines (78 loc) · 3.49 KB
/
Copy pathPlatformWebhooksEndpointDetails.test.tsx
File metadata and controls
101 lines (78 loc) · 3.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import { render, screen, waitFor } from '@testing-library/react'
import userEvent from '@testing-library/user-event'
import type { ComponentProps } from 'react'
import { describe, expect, it, vi } from 'vitest'
import { PLATFORM_WEBHOOKS_MOCK_DATA } from './PlatformWebhooks.mock'
import { PlatformWebhooksEndpointDetails } from './PlatformWebhooksEndpointDetails'
vi.mock('components/ui/DataTable/DataTableColumn/DataTableColumnStatusCode', () => ({
DataTableColumnStatusCode: ({ value }: { value: number }) => <span>{value}</span>,
}))
vi.mock('ui-patterns', async () => {
const actual = await vi.importActual<typeof import('ui-patterns')>('ui-patterns')
return {
...actual,
TimestampInfo: ({ utcTimestamp, className }: { utcTimestamp: string; className?: string }) => (
<span className={className}>{utcTimestamp}</span>
),
}
})
describe('PlatformWebhooksEndpointDetails', () => {
const selectedEndpoint = PLATFORM_WEBHOOKS_MOCK_DATA.organization.endpoints[0]
const allDeliveries = PLATFORM_WEBHOOKS_MOCK_DATA.organization.deliveries.filter(
(delivery) => delivery.endpointId === selectedEndpoint.id
)
const renderComponent = (
props?: Partial<ComponentProps<typeof PlatformWebhooksEndpointDetails>>
) =>
render(
<PlatformWebhooksEndpointDetails
deliverySearch=""
filteredDeliveries={allDeliveries}
selectedEndpoint={selectedEndpoint}
onDeliverySearchChange={vi.fn()}
onOpenDelivery={vi.fn()}
{...props}
/>
)
it('renders paginated deliveries with previous and next controls', async () => {
const user = userEvent.setup()
renderComponent()
expect(screen.getByText('Showing 1 to 5 of 12 deliveries')).toBeInTheDocument()
expect(screen.queryByText('organization.member_removed')).not.toBeInTheDocument()
await user.click(screen.getByLabelText('Next page'))
expect(screen.getByText('Showing 6 to 10 of 12 deliveries')).toBeInTheDocument()
expect(screen.getByText('organization.member_removed')).toBeInTheDocument()
await user.click(screen.getByLabelText('Previous page'))
expect(screen.getByText('Showing 1 to 5 of 12 deliveries')).toBeInTheDocument()
expect(screen.queryByText('organization.member_removed')).not.toBeInTheDocument()
})
it('sorts deliveries by event type from the header', async () => {
const user = userEvent.setup()
renderComponent()
await user.click(screen.getByRole('button', { name: 'Event type' }))
expect(screen.getAllByRole('row')[1]).toHaveTextContent('organization.member_invited')
await user.click(screen.getByRole('button', { name: 'Event type' }))
expect(screen.getAllByRole('row')[1]).toHaveTextContent('project.updated')
})
it('resets to the first page when the delivery search changes', async () => {
const user = userEvent.setup()
const projectDeliveries = allDeliveries.filter((delivery) =>
delivery.eventType.includes('project')
)
const { rerender } = renderComponent()
await user.click(screen.getByLabelText('Next page'))
expect(screen.getByText('Showing 6 to 10 of 12 deliveries')).toBeInTheDocument()
rerender(
<PlatformWebhooksEndpointDetails
deliverySearch="project"
filteredDeliveries={projectDeliveries}
selectedEndpoint={selectedEndpoint}
onDeliverySearchChange={vi.fn()}
onOpenDelivery={vi.fn()}
/>
)
await waitFor(() => {
expect(screen.getByText('Showing 1 to 5 of 8 deliveries')).toBeInTheDocument()
})
})
})