-
Notifications
You must be signed in to change notification settings - Fork 450
Expand file tree
/
Copy pathuseCustomPages.test.tsx
More file actions
84 lines (74 loc) · 2.8 KB
/
useCustomPages.test.tsx
File metadata and controls
84 lines (74 loc) · 2.8 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
import { renderHook } from '@testing-library/react';
import React from 'react';
import { describe, expect, it, vi } from 'vitest';
import { OrganizationProfilePage } from '../../components/uiComponents';
import { useOrganizationProfileCustomPages } from '../useCustomPages';
vi.mock('@clerk/shared', () => ({
logErrorInDevMode: vi.fn(),
}));
describe('useOrganizationProfileCustomPages', () => {
it('uses separate portals for duplicate non-keyed custom pages', () => {
const children = [
React.createElement(
OrganizationProfilePage,
{
label: 'Duplicate',
labelIcon: <div>First icon</div>,
url: 'duplicate',
},
<div>First content</div>,
),
React.createElement(
OrganizationProfilePage,
{
label: 'Duplicate',
labelIcon: <div>Second icon</div>,
url: 'duplicate',
},
<div>Second content</div>,
),
];
const { result } = renderHook(() => useOrganizationProfileCustomPages(children));
expect(result.current.customPages).toHaveLength(2);
expect(result.current.customPagesPortals).toHaveLength(4);
expect(result.current.customPagesPortals[0]).not.toBe(result.current.customPagesPortals[2]);
expect(result.current.customPagesPortals[1]).not.toBe(result.current.customPagesPortals[3]);
});
it('keeps portal identity with the logical custom page when inserting before it', () => {
const firstPage = (
<OrganizationProfilePage
key='first'
label='First page'
labelIcon={<div>First icon</div>}
url='first'
>
<div>First content</div>
</OrganizationProfilePage>
);
const secondPage = (
<OrganizationProfilePage
key='second'
label='Second page'
labelIcon={<div>Second icon</div>}
url='second'
>
<div>Second content</div>
</OrganizationProfilePage>
);
const makeChildren = (includeFirstPage: boolean) => (includeFirstPage ? [firstPage, secondPage] : [secondPage]);
const { result, rerender } = renderHook(
({ includeFirstPage }) => useOrganizationProfileCustomPages(makeChildren(includeFirstPage)),
{
initialProps: { includeFirstPage: false },
},
);
const secondPageContentPortal = result.current.customPagesPortals[0];
const secondPageIconPortal = result.current.customPagesPortals[1];
rerender({ includeFirstPage: true });
expect(result.current.customPages).toHaveLength(2);
expect(result.current.customPagesPortals[0]).not.toBe(secondPageContentPortal);
expect(result.current.customPagesPortals[1]).not.toBe(secondPageIconPortal);
expect(result.current.customPagesPortals[2]).toBe(secondPageContentPortal);
expect(result.current.customPagesPortals[3]).toBe(secondPageIconPortal);
});
});