avatar.spec.jsx 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. import {mountWithTheme} from 'sentry-test/enzyme';
  2. import Avatar from 'app/components/avatar';
  3. jest.mock('app/stores/configStore', () => ({
  4. getConfig: () => ({
  5. gravatarBaseUrl: 'gravatarBaseUrl',
  6. }),
  7. }));
  8. describe('Avatar', function () {
  9. const USER = {
  10. id: '1',
  11. name: 'Jane Bloggs',
  12. email: 'janebloggs@example.com',
  13. };
  14. describe('render()', function () {
  15. it('has `avatar` className', function () {
  16. const user = Object.assign({}, USER, {
  17. avatar: {
  18. avatarType: 'gravatar',
  19. avatarUuid: '2d641b5d-8c74-44de-9cb6-fbd54701b35e',
  20. },
  21. });
  22. const avatar = mountWithTheme(<Avatar user={user} />);
  23. expect(avatar.find('span.avatar')).toHaveLength(1);
  24. });
  25. it('should show a gravatar when avatar type is gravatar', async function () {
  26. const user = Object.assign({}, USER, {
  27. avatar: {
  28. avatarType: 'gravatar',
  29. avatarUuid: '2d641b5d-8c74-44de-9cb6-fbd54701b35e',
  30. },
  31. });
  32. const avatar = mountWithTheme(<Avatar user={user} />);
  33. expect(avatar.find('BaseAvatar').prop('type')).toBe('gravatar');
  34. // Need update because Gravatar async imports a library
  35. await tick();
  36. avatar.update();
  37. expect(avatar.find('BaseAvatar Gravatar Image').prop('src')).toMatch(
  38. 'gravatarBaseUrl/avatar/'
  39. );
  40. });
  41. it('should show an upload when avatar type is upload', function () {
  42. const user = Object.assign({}, USER, {
  43. avatar: {
  44. avatarType: 'upload',
  45. avatarUuid: '2d641b5d-8c74-44de-9cb6-fbd54701b35e',
  46. },
  47. });
  48. const avatar = mountWithTheme(<Avatar user={user} />);
  49. expect(avatar.find('BaseAvatar').prop('type')).toBe('upload');
  50. expect(avatar.find('BaseAvatar').prop('uploadId')).toBe(
  51. '2d641b5d-8c74-44de-9cb6-fbd54701b35e'
  52. );
  53. expect(avatar.find('BaseAvatar img').prop('src')).toMatch(
  54. '/avatar/2d641b5d-8c74-44de-9cb6-fbd54701b35e'
  55. );
  56. });
  57. it('should show an upload with the correct size (static 120 size)', function () {
  58. const user = Object.assign({}, USER, {
  59. avatar: {
  60. avatarType: 'upload',
  61. avatarUuid: '2d641b5d-8c74-44de-9cb6-fbd54701b35e',
  62. },
  63. });
  64. let avatar = mountWithTheme(<Avatar user={user} size={76} />);
  65. expect(avatar.find('BaseAvatar img').prop('src')).toMatch(
  66. '/avatar/2d641b5d-8c74-44de-9cb6-fbd54701b35e/?s=120'
  67. );
  68. avatar = mountWithTheme(<Avatar user={user} size={121} />);
  69. expect(avatar.find('BaseAvatar img').prop('src')).toMatch(
  70. '/avatar/2d641b5d-8c74-44de-9cb6-fbd54701b35e/?s=120'
  71. );
  72. avatar = mountWithTheme(<Avatar user={user} size={32} />);
  73. expect(avatar.find('BaseAvatar img').prop('src')).toMatch(
  74. '/avatar/2d641b5d-8c74-44de-9cb6-fbd54701b35e/?s=120'
  75. );
  76. avatar = mountWithTheme(<Avatar user={user} size={1} />);
  77. expect(avatar.find('BaseAvatar img').prop('src')).toMatch(
  78. '/avatar/2d641b5d-8c74-44de-9cb6-fbd54701b35e/?s=120'
  79. );
  80. });
  81. it('should not show upload or gravatar when avatar type is letter', function () {
  82. const user = Object.assign({}, USER, {
  83. avatar: {
  84. avatarType: 'letter_avatar',
  85. avatarUuid: '2d641b5d-8c74-44de-9cb6-fbd54701b35e',
  86. },
  87. });
  88. const avatar = mountWithTheme(<Avatar user={user} />);
  89. expect(avatar.find('BaseAvatar').prop('type')).toBe('letter_avatar');
  90. });
  91. it('use letter avatar by default, when no avatar type is set and user has an email address', function () {
  92. const avatar = mountWithTheme(<Avatar user={USER} />);
  93. expect(avatar.find('BaseAvatar').prop('type')).toBe('letter_avatar');
  94. });
  95. it('should show a gravatar when no avatar type is set and user has an email address', function () {
  96. const avatar = mountWithTheme(<Avatar gravatar user={USER} />);
  97. expect(avatar.find('BaseAvatar').prop('type')).toBe('gravatar');
  98. });
  99. it('should not show a gravatar when no avatar type is set and user has no email address', function () {
  100. const user = Object.assign({}, USER);
  101. delete user.email;
  102. const avatar = mountWithTheme(<Avatar gravatar user={user} />);
  103. expect(avatar.find('BaseAvatar').prop('type')).toBe('letter_avatar');
  104. });
  105. it('can display a team Avatar', function () {
  106. const team = TestStubs.Team({slug: 'test-team_test'});
  107. const avatar = mountWithTheme(<Avatar team={team} />);
  108. expect(avatar.find('LetterAvatar').prop('displayName')).toBe('test team test');
  109. expect(avatar.find('LetterAvatar').prop('identifier')).toBe('test-team_test');
  110. });
  111. it('can display an organization Avatar', function () {
  112. const organization = TestStubs.Organization({slug: 'test-organization'});
  113. const avatar = mountWithTheme(<Avatar organization={organization} />);
  114. expect(avatar.find('LetterAvatar').prop('displayName')).toBe('test organization');
  115. expect(avatar.find('LetterAvatar').prop('identifier')).toBe('test-organization');
  116. });
  117. it('displays platform list icons for project Avatar', function () {
  118. const project = TestStubs.Project({
  119. platforms: ['python', 'javascript'],
  120. platform: 'java',
  121. });
  122. const avatar = mountWithTheme(<Avatar project={project} />);
  123. expect(avatar.find('PlatformList').prop('platforms')).toEqual(['java']);
  124. });
  125. it('displays a fallback platform list for project Avatar using the `platform` specified during onboarding', function () {
  126. const project = TestStubs.Project({platform: 'java'});
  127. const avatar = mountWithTheme(<Avatar project={project} />);
  128. expect(avatar.find('PlatformList').prop('platforms')).toEqual(['java']);
  129. });
  130. it('uses onboarding project when platforms is an empty array', function () {
  131. const project = TestStubs.Project({platforms: [], platform: 'java'});
  132. const avatar = mountWithTheme(<Avatar project={project} />);
  133. expect(avatar.find('PlatformList').prop('platforms')).toEqual(['java']);
  134. });
  135. });
  136. });