@@ -2,9 +2,17 @@ import { screen, waitFor } from '@testing-library/react';
22import userEvent from '@testing-library/user-event' ;
33import { renderWithAllProviders } from '@src/setupTest' ;
44import { useAllRoleAssignments , useOrgs , useScopes } from '@src/authz-module/data/hooks' ;
5+ import { useViewTeamPermissions } from '@src/authz-module/hooks/useViewTeamPermissions' ;
6+ import { LIBRARY_ROLE_KEYS } from '@src/authz-module/roles-permissions' ;
57import { ToastManagerProvider } from '@src/components/ToastManager/ToastManagerContext' ;
68import TeamMembersTable from './TeamMembersTable' ;
79
10+ jest . mock ( '@src/authz-module/hooks/useViewTeamPermissions' , ( ) => ( {
11+ useViewTeamPermissions : jest . fn ( ) ,
12+ } ) ) ;
13+
14+ const mockUseViewTeamPermissions = useViewTeamPermissions as jest . Mock ;
15+
816const mockedAllRoleAssignments = {
917 data : {
1018 results : [
@@ -127,6 +135,11 @@ const mockApiResponses = (
127135describe ( 'TeamMembersTable' , ( ) => {
128136 beforeEach ( ( ) => {
129137 mockNavigate . mockClear ( ) ;
138+ mockUseViewTeamPermissions . mockReturnValue ( {
139+ isCourseViewAllowed : true ,
140+ isLibraryViewAllowed : true ,
141+ isLoading : false ,
142+ } ) ;
130143 } ) ;
131144
132145 it ( 'renders table with role assignments data' , async ( ) => {
@@ -194,6 +207,28 @@ describe('TeamMembersTable', () => {
194207 expect ( mockNavigate ) . toHaveBeenCalledWith ( '/authz/user/johndoe' ) ;
195208 } ) ;
196209
210+ it ( 'renders safely when role assignments data is undefined' , ( ) => {
211+ // @ts -ignore
212+ mockApiResponses ( { ...mockedAllRoleAssignments , data : undefined } ) ;
213+ renderWithAllProviders ( < ToastManagerProvider > < TeamMembersTable /> </ ToastManagerProvider > ) ;
214+ expect ( screen . queryByText ( 'John Doe' ) ) . not . toBeInTheDocument ( ) ;
215+ } ) ;
216+
217+ it ( 'filters to library roles only when course view is not allowed' , async ( ) => {
218+ mockUseViewTeamPermissions . mockReturnValue ( {
219+ isCourseViewAllowed : false ,
220+ isLibraryViewAllowed : true ,
221+ isLoading : false ,
222+ } ) ;
223+ mockApiResponses ( ) ;
224+ renderWithAllProviders ( < ToastManagerProvider > < TeamMembersTable /> </ ToastManagerProvider > ) ;
225+ await waitFor ( ( ) => {
226+ expect ( useAllRoleAssignments ) . toHaveBeenCalledWith (
227+ expect . objectContaining ( { roles : LIBRARY_ROLE_KEYS } ) ,
228+ ) ;
229+ } ) ;
230+ } ) ;
231+
197232 it ( 'handles empty data gracefully' , async ( ) => {
198233 const allAsignmentsResponse = {
199234 data : {
0 commit comments