avatarList.spec.tsx 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import {TeamFixture} from 'sentry-fixture/team';
  2. import {UserFixture} from 'sentry-fixture/user';
  3. import {render, screen} from 'sentry-test/reactTestingLibrary';
  4. import AvatarList from 'sentry/components/avatar/avatarList';
  5. function renderComponent({
  6. users,
  7. teams,
  8. }: {
  9. users: React.ComponentProps<typeof AvatarList>['users'];
  10. teams?: React.ComponentProps<typeof AvatarList>['teams'];
  11. }) {
  12. return render(<AvatarList users={users} teams={teams} />);
  13. }
  14. describe('AvatarList', () => {
  15. const user = UserFixture();
  16. const team = TeamFixture();
  17. it('renders with user letter avatars', () => {
  18. const users = [
  19. {...user, id: '1', name: 'AB'},
  20. {...user, id: '2', name: 'BC'},
  21. ];
  22. renderComponent({users});
  23. expect(screen.getByText('A')).toBeInTheDocument();
  24. expect(screen.getByText('B')).toBeInTheDocument();
  25. expect(screen.queryByTestId('avatarList-collapsedavatars')).not.toBeInTheDocument();
  26. });
  27. it('renders with all avatars if count is max + 1 users', () => {
  28. const users = [
  29. {...user, id: '1', name: 'AB'},
  30. {...user, id: '2', name: 'BC'},
  31. {...user, id: '3', name: 'CD'},
  32. {...user, id: '4', name: 'DE'},
  33. {...user, id: '5', name: 'EF'},
  34. {...user, id: '6', name: 'FG'},
  35. ];
  36. renderComponent({users});
  37. expect(screen.getByText(users[0]!.name.charAt(0))).toBeInTheDocument();
  38. expect(screen.getByText(users[1]!.name.charAt(0))).toBeInTheDocument();
  39. expect(screen.getByText(users[2]!.name.charAt(0))).toBeInTheDocument();
  40. expect(screen.getByText(users[3]!.name.charAt(0))).toBeInTheDocument();
  41. expect(screen.getByText(users[4]!.name.charAt(0))).toBeInTheDocument();
  42. expect(screen.getByText(users[5]!.name.charAt(0))).toBeInTheDocument();
  43. expect(screen.queryByTestId('avatarList-collapsedavatars')).not.toBeInTheDocument();
  44. });
  45. it('renders with collapsed avatar count if > max + 1 users', () => {
  46. const users = [
  47. {...user, id: '1', name: 'AB'},
  48. {...user, id: '2', name: 'BC'},
  49. {...user, id: '3', name: 'CD'},
  50. {...user, id: '4', name: 'DE'},
  51. {...user, id: '5', name: 'EF'},
  52. {...user, id: '6', name: 'FG'},
  53. {...user, id: '7', name: 'GH'},
  54. ];
  55. renderComponent({users});
  56. expect(screen.getByText(users[0]!.name.charAt(0))).toBeInTheDocument();
  57. expect(screen.getByText(users[1]!.name.charAt(0))).toBeInTheDocument();
  58. expect(screen.getByText(users[2]!.name.charAt(0))).toBeInTheDocument();
  59. expect(screen.getByText(users[3]!.name.charAt(0))).toBeInTheDocument();
  60. expect(screen.getByText(users[4]!.name.charAt(0))).toBeInTheDocument();
  61. expect(screen.queryByText(users[5]!.name.charAt(0))).not.toBeInTheDocument();
  62. expect(screen.getByTestId('avatarList-collapsedavatars')).toBeInTheDocument();
  63. });
  64. it('renders with team avatars', () => {
  65. const users = [
  66. {...user, id: '1', name: 'CD'},
  67. {...user, id: '2', name: 'DE'},
  68. ];
  69. const teams = [
  70. {...team, id: '1', name: 'A', slug: 'A', type: 'team'},
  71. {...team, id: '2', name: 'B', slug: 'B', type: 'team'},
  72. ];
  73. renderComponent({users, teams});
  74. expect(screen.getByText('A')).toBeInTheDocument();
  75. expect(screen.getByText('B')).toBeInTheDocument();
  76. expect(screen.getByText('C')).toBeInTheDocument();
  77. expect(screen.getByText('D')).toBeInTheDocument();
  78. expect(screen.queryByTestId('avatarList-collapsedavatars')).not.toBeInTheDocument();
  79. });
  80. it('renders with collapsed avatar count if > 5 teams', () => {
  81. const teams = [
  82. {...team, id: '1', name: 'A', slug: 'A', type: 'team'},
  83. {...team, id: '2', name: 'B', slug: 'B', type: 'team'},
  84. ];
  85. renderComponent({users: [], teams});
  86. expect(screen.getByText('A')).toBeInTheDocument();
  87. expect(screen.getByText('B')).toBeInTheDocument();
  88. expect(screen.queryByTestId('avatarList-collapsedavatars')).not.toBeInTheDocument();
  89. });
  90. });