Skip to content

Commit 15956b3

Browse files
test: adding new ut for new team members table an its components
1 parent ad413a3 commit 15956b3

21 files changed

Lines changed: 2392 additions & 23 deletions

src/authz-module/authz-home/index.test.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ jest.mock('@openedx/paragon', () => ({
1616
Tabs: ({ children }: { children: React.ReactNode }) => <div data-testid="tabs">{children}</div>,
1717
}));
1818

19+
jest.mock('@src/authz-module/team-members/TeamMembersTable', () => function MockTeamMembersTable() {
20+
return <div>Team Members Table Content</div>;
21+
});
22+
1923
describe('AuthzHome', () => {
2024
it('renders without crashing', () => {
2125
renderWrapper(<AuthzHome />);
@@ -37,4 +41,9 @@ describe('AuthzHome', () => {
3741
renderWrapper(<AuthzHome />);
3842
expect(screen.getByTestId('roles-permissions')).toBeInTheDocument();
3943
});
44+
45+
it('renders the TeamMembersTable component in the team members tab', () => {
46+
renderWrapper(<AuthzHome />);
47+
expect(screen.getByText('Team Members Table Content')).toBeInTheDocument();
48+
});
4049
});

src/authz-module/authz-home/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ const AuthzHome = () => {
1414
const [searchParams] = useSearchParams();
1515
const presetScope = searchParams.get('scope') || undefined;
1616

17-
const rootBreadcrumb = intl.formatMessage(messages['authz.breadcrumb.root']) || '';
17+
const rootBreadcrumb = intl.formatMessage(messages['authz.breadcrumb.root']);
1818
const pageTitle = intl.formatMessage(messages['authz.manage.page.title']);
1919

2020
return (
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
import { screen } from '@testing-library/react';
2+
import userEvent from '@testing-library/user-event';
3+
import { useNavigate } from 'react-router-dom';
4+
import { initializeMockApp } from '@edx/frontend-platform/testing';
5+
import { renderWrapper } from '@src/setupTest';
6+
import AddRoleButton from './AddRoleButton';
7+
8+
// Mock react-router-dom navigation
9+
jest.mock('react-router-dom', () => ({
10+
...jest.requireActual('react-router-dom'),
11+
useNavigate: jest.fn(),
12+
}));
13+
14+
describe('AddRoleButton', () => {
15+
const mockNavigate = jest.fn();
16+
17+
beforeAll(() => {
18+
initializeMockApp({
19+
authenticatedUser: {
20+
userId: 1,
21+
username: 'testuser',
22+
23+
},
24+
});
25+
});
26+
27+
beforeEach(() => {
28+
(useNavigate as jest.Mock).mockReturnValue(mockNavigate);
29+
});
30+
31+
afterEach(() => {
32+
jest.clearAllMocks();
33+
});
34+
35+
describe('rendering', () => {
36+
it('renders the assign role button with correct text', () => {
37+
renderWrapper(<AddRoleButton />);
38+
39+
const button = screen.getByRole('button', { name: /assign role/i });
40+
expect(button).toBeInTheDocument();
41+
});
42+
43+
it('displays the plus icon', () => {
44+
renderWrapper(<AddRoleButton />);
45+
46+
const button = screen.getByRole('button', { name: /assign role/i });
47+
expect(button.querySelector('svg')).toBeInTheDocument();
48+
});
49+
50+
it('renders correctly when presetUsername is provided', () => {
51+
renderWrapper(<AddRoleButton presetUsername="testuser123" />);
52+
53+
const button = screen.getByRole('button', { name: /assign role/i });
54+
expect(button).toBeInTheDocument();
55+
});
56+
});
57+
58+
describe('navigation behavior', () => {
59+
it('navigates to assign role page without username when clicked', async () => {
60+
const user = userEvent.setup();
61+
renderWrapper(<AddRoleButton />);
62+
63+
const button = screen.getByRole('button', { name: /assign role/i });
64+
await user.click(button);
65+
66+
expect(mockNavigate).toHaveBeenCalledTimes(1);
67+
expect(mockNavigate).toHaveBeenCalledWith('/authz/assign-role');
68+
});
69+
70+
it('navigates to assign role page with username query parameter when presetUsername is provided', async () => {
71+
const user = userEvent.setup();
72+
const presetUsername = 'john.doe';
73+
renderWrapper(<AddRoleButton presetUsername={presetUsername} />);
74+
75+
const button = screen.getByRole('button', { name: /assign role/i });
76+
await user.click(button);
77+
78+
expect(mockNavigate).toHaveBeenCalledTimes(1);
79+
expect(mockNavigate).toHaveBeenCalledWith(`/authz/assign-role?username=${presetUsername}`);
80+
});
81+
82+
it('handles special characters in presetUsername correctly', async () => {
83+
const user = userEvent.setup();
84+
const presetUsername = '[email protected]';
85+
renderWrapper(<AddRoleButton presetUsername={presetUsername} />);
86+
87+
const button = screen.getByRole('button', { name: /assign role/i });
88+
await user.click(button);
89+
90+
expect(mockNavigate).toHaveBeenCalledTimes(1);
91+
expect(mockNavigate).toHaveBeenCalledWith(`/authz/assign-role?username=${presetUsername}`);
92+
});
93+
});
94+
95+
describe('user interactions', () => {
96+
it('responds to keyboard navigation', async () => {
97+
const user = userEvent.setup();
98+
renderWrapper(<AddRoleButton />);
99+
100+
const button = screen.getByRole('button', { name: /assign role/i });
101+
102+
await user.tab();
103+
expect(button).toHaveFocus();
104+
105+
await user.keyboard('{Enter}');
106+
expect(mockNavigate).toHaveBeenCalledWith('/authz/assign-role');
107+
});
108+
109+
it('responds to spacebar activation', async () => {
110+
const user = userEvent.setup();
111+
renderWrapper(<AddRoleButton />);
112+
113+
const button = screen.getByRole('button', { name: /assign role/i });
114+
button.focus();
115+
116+
await user.keyboard(' ');
117+
expect(mockNavigate).toHaveBeenCalledWith('/authz/assign-role');
118+
});
119+
120+
it('handles multiple clicks gracefully', async () => {
121+
const user = userEvent.setup();
122+
renderWrapper(<AddRoleButton presetUsername="testuser" />);
123+
124+
const button = screen.getByRole('button', { name: /assign role/i });
125+
126+
await user.click(button);
127+
await user.click(button);
128+
await user.click(button);
129+
130+
expect(mockNavigate).toHaveBeenCalledTimes(3);
131+
expect(mockNavigate).toHaveBeenCalledWith('/authz/assign-role?username=testuser');
132+
});
133+
});
134+
});

0 commit comments

Comments
 (0)