Skip to content

Commit 9109f0f

Browse files
authoredMar 14, 2025··
test(core): enhance tests for useActiveReleases and add ReleaseDocumentPreview tests (#8944)
1 parent 605be41 commit 9109f0f

File tree

4 files changed

+135
-6
lines changed

4 files changed

+135
-6
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1-
import {type Mock, type Mocked, vi} from 'vitest'
1+
import {type Mock, vi} from 'vitest'
22

3+
import {type ReleaseDocument} from '../../types'
34
import {useActiveReleases} from '../../useActiveReleases'
45

5-
export const useActiveReleasesMockReturn: Mocked<ReturnType<typeof useActiveReleases>> = {
6-
data: [],
7-
dispatch: vi.fn(),
8-
error: undefined,
6+
export const useActiveReleasesMockReturn = {
7+
data: [] as ReleaseDocument[],
8+
error: undefined as Error | undefined,
99
loading: false,
10+
dispatch: vi.fn(),
1011
}
1112

1213
export const mockUseActiveReleases = useActiveReleases as Mock<typeof useActiveReleases>

‎packages/sanity/src/core/releases/tool/components/ReleaseDocumentPreview.tsx

-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ export function ReleaseDocumentPreview({
3232
releaseState,
3333
documentRevision,
3434
layout,
35-
hasValidationError,
3635
}: ReleaseDocumentPreviewProps) {
3736
const documentPresence = useDocumentPresence(documentId)
3837

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
import {render, screen, waitFor} from '@testing-library/react'
2+
import {type ComponentProps} from 'react'
3+
import {describe, expect, it, vi} from 'vitest'
4+
5+
import {createTestProvider} from '../../../../../../test/testUtils/TestProvider'
6+
import {activeASAPRelease, activeScheduledRelease} from '../../../__fixtures__/release.fixture'
7+
import {releasesUsEnglishLocaleBundle} from '../../../i18n'
8+
import {ReleaseDocumentPreview} from '../ReleaseDocumentPreview'
9+
10+
interface DocumentPresenceData {
11+
user: string
12+
sessionId: string
13+
lastActiveAt: string
14+
}
15+
16+
const mockDocumentPresence: DocumentPresenceData[] = []
17+
18+
vi.mock('../../../../preview/components/SanityDefaultPreview', () => ({
19+
SanityDefaultPreview: vi.fn(({isPlaceholder, title, subtitle, status}) => (
20+
<div data-ui={isPlaceholder ? 'Placeholder' : 'Preview'}>
21+
{!isPlaceholder && title && <div>{title}</div>}
22+
{!isPlaceholder && subtitle && <div>{subtitle}</div>}
23+
{status}
24+
</div>
25+
)),
26+
}))
27+
28+
vi.mock('sanity/router', () => ({
29+
useRouter: vi.fn(() => ({
30+
navigate: vi.fn(),
31+
state: {},
32+
resolveIntentLink: vi.fn(() => '#'),
33+
resolvePathFromState: vi.fn(),
34+
})),
35+
IntentLink: vi
36+
.fn()
37+
.mockImplementation(({children, searchParams}) => (
38+
<a data-search-params={JSON.stringify(searchParams)}>{children}</a>
39+
)),
40+
route: {
41+
create: vi.fn(() => ({
42+
path: vi.fn(),
43+
})),
44+
},
45+
}))
46+
47+
vi.mock('../../../../store/_legacy/presence/useDocumentPresence', () => ({
48+
useDocumentPresence: vi.fn(() => mockDocumentPresence),
49+
}))
50+
51+
const mockPreviewValues = {
52+
title: 'Test Document',
53+
subtitle: 'Test Subtitle',
54+
media: null,
55+
}
56+
57+
const renderTest = async (props: ComponentProps<typeof ReleaseDocumentPreview>) => {
58+
const wrapper = await createTestProvider({
59+
resources: [releasesUsEnglishLocaleBundle],
60+
})
61+
62+
const rendered = render(<ReleaseDocumentPreview {...props} />, {wrapper})
63+
64+
await waitFor(() => {
65+
expect(screen.queryByTestId('loading-block')).not.toBeInTheDocument()
66+
})
67+
68+
return rendered
69+
}
70+
71+
describe('ReleaseDocumentPreview', () => {
72+
it('renders with default props', async () => {
73+
await renderTest({
74+
documentId: 'doc123',
75+
documentTypeName: 'post',
76+
releaseId: activeASAPRelease._id,
77+
previewValues: mockPreviewValues,
78+
isLoading: false,
79+
})
80+
81+
expect(screen.getByText('Test Document')).toBeInTheDocument()
82+
expect(screen.getByText('Test Subtitle')).toBeInTheDocument()
83+
})
84+
85+
it('renders in loading state', async () => {
86+
const {container} = await renderTest({
87+
documentId: 'doc123',
88+
documentTypeName: 'post',
89+
releaseId: activeASAPRelease._id,
90+
previewValues: mockPreviewValues,
91+
isLoading: true,
92+
})
93+
94+
expect(container.querySelector('[data-ui="Placeholder"]')).toBeInTheDocument()
95+
})
96+
97+
it('creates link with published perspective when release state is published', async () => {
98+
const {container} = await renderTest({
99+
documentId: 'doc123',
100+
documentTypeName: 'post',
101+
releaseId: activeASAPRelease._id,
102+
previewValues: mockPreviewValues,
103+
isLoading: false,
104+
releaseState: 'published',
105+
})
106+
107+
const link = container.querySelector('a')
108+
const searchParams = JSON.parse(link.getAttribute('data-search-params'))
109+
expect(searchParams).toContainEqual(['perspective', 'published'])
110+
})
111+
112+
it('creates link with release ID perspective when release state is not published', async () => {
113+
const {container} = await renderTest({
114+
documentId: 'doc123',
115+
documentTypeName: 'post',
116+
releaseId: activeScheduledRelease._id,
117+
previewValues: mockPreviewValues,
118+
isLoading: false,
119+
releaseState: 'active',
120+
})
121+
122+
const link = container.querySelector('a')
123+
const searchParams = JSON.parse(link.getAttribute('data-search-params'))
124+
expect(searchParams).toContainEqual(['perspective', 'rActive'])
125+
})
126+
})

‎packages/sanity/src/core/releases/tool/detail/__tests__/ReleaseDetail.test.tsx

+3
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,7 @@ describe('after releases have loaded', () => {
200200
validation: {...documentsInRelease.validation, isValidating: true},
201201
},
202202
],
203+
error: null,
203204
})
204205
mockUseReleasePermissions.mockReturnValue(useReleasesPermissionsMockReturnTrue)
205206

@@ -221,6 +222,7 @@ describe('after releases have loaded', () => {
221222
mockUseBundleDocuments.mockReturnValue({
222223
loading: false,
223224
results: [documentsInRelease],
225+
error: null,
224226
})
225227
mockUseReleasePermissions.mockReturnValue(useReleasesPermissionsMockReturnTrue)
226228

@@ -284,6 +286,7 @@ describe('after releases have loaded', () => {
284286
},
285287
},
286288
],
289+
error: null,
287290
})
288291
mockUseReleasePermissions.mockReturnValue(useReleasesPermissionsMockReturnTrue)
289292

0 commit comments

Comments
 (0)
Please sign in to comment.