avatar.spec.jsx 5.8 KB

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