Skip to content

Commit 8f18e4e

Browse files
test: addint ut to improve coverage
1 parent e9e0bfc commit 8f18e4e

2 files changed

Lines changed: 75 additions & 1 deletion

File tree

src/authz-module/audit-user/index.test.tsx

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ jest.mock('@edx/frontend-platform/auth', () => ({
1313
configure: jest.fn(),
1414
}));
1515

16+
jest.mock('@edx/frontend-platform/logging', () => ({
17+
logError: jest.fn(),
18+
}));
19+
1620
const mockUser = {
1721
username: 'johndoe',
1822
@@ -273,6 +277,76 @@ describe('AuditUserPage', () => {
273277
});
274278
});
275279

280+
it('shows error toast when role revocation succeeds but returns errors', async () => {
281+
(getAuthenticatedHttpClient as jest.Mock).mockReturnValue({
282+
get: jest
283+
.fn()
284+
.mockResolvedValueOnce({ data: mockUser })
285+
.mockResolvedValueOnce({ data: mockAssignments }),
286+
delete: jest.fn().mockResolvedValue({
287+
data: {
288+
errors: ['Failed to revoke user role'],
289+
completed: [],
290+
},
291+
}),
292+
});
293+
294+
renderWithRouter();
295+
296+
await waitFor(() => {
297+
expect(screen.getByRole('button', { name: /delete role action/i })).toBeInTheDocument();
298+
});
299+
300+
const user = userEvent.setup();
301+
const deleteButton = screen.getByRole('button', { name: /delete role action/i });
302+
await user.click(deleteButton);
303+
304+
await waitFor(() => {
305+
expect(screen.getByRole('dialog')).toBeInTheDocument();
306+
expect(screen.getByRole('button', { name: /remove/i })).toBeInTheDocument();
307+
});
308+
309+
const removeButton = screen.getByRole('button', { name: /remove/i });
310+
await user.click(removeButton);
311+
312+
await waitFor(() => {
313+
expect(screen.getByText(/something went wrong/i)).toBeInTheDocument();
314+
});
315+
});
316+
317+
it('shows error toast with retry when role revocation fails', async () => {
318+
(getAuthenticatedHttpClient as jest.Mock).mockReturnValue({
319+
get: jest
320+
.fn()
321+
.mockResolvedValueOnce({ data: mockUser })
322+
.mockResolvedValueOnce({ data: mockAssignments }),
323+
delete: jest.fn().mockRejectedValue(new Error('Network error')),
324+
});
325+
326+
renderWithRouter();
327+
328+
await waitFor(() => {
329+
expect(screen.getByRole('button', { name: /delete role action/i })).toBeInTheDocument();
330+
});
331+
332+
const user = userEvent.setup();
333+
const deleteButton = screen.getByRole('button', { name: /delete role action/i });
334+
await user.click(deleteButton);
335+
336+
await waitFor(() => {
337+
expect(screen.getByRole('dialog')).toBeInTheDocument();
338+
expect(screen.getByRole('button', { name: /remove/i })).toBeInTheDocument();
339+
});
340+
341+
const removeButton = screen.getByRole('button', { name: /remove/i });
342+
await user.click(removeButton);
343+
344+
await waitFor(() => {
345+
expect(screen.getByText(/something went wrong on our end/i)).toBeInTheDocument();
346+
expect(screen.getByText(/try again later/i)).toBeInTheDocument();
347+
});
348+
});
349+
276350
it('shows the extra warning when rolesCount is 1', async () => {
277351
(getAuthenticatedHttpClient as jest.Mock).mockReturnValue({
278352
get: jest

src/authz-module/audit-user/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ const AuditUserPage = () => {
195195
title: '',
196196
}}
197197
navLinks={navLinks}
198-
activeLabel={username || ''}
198+
activeLabel={user?.username || ''}
199199
pageTitle={user?.username || ''}
200200
pageSubtitle={user?.email || ''}
201201
actions={

0 commit comments

Comments
 (0)