projectSelector.spec.jsx 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. import React from 'react';
  2. import {mount} from 'enzyme';
  3. import ProjectHeaderProjectSelector from 'app/components/projectHeader/projectSelector';
  4. import ProjectsStore from 'app/stores/projectsStore';
  5. describe('ProjectHeaderProjectSelector', function() {
  6. const testTeam = TestStubs.Team({
  7. id: 'test-team',
  8. slug: 'test-team',
  9. isMember: true,
  10. });
  11. const testProject = TestStubs.Project({
  12. id: 'test-project',
  13. slug: 'test-project',
  14. isBookmarked: true,
  15. isMember: true,
  16. teams: [testTeam],
  17. });
  18. const anotherProject = TestStubs.Project({
  19. id: 'another-project',
  20. slug: 'another-project',
  21. isMember: true,
  22. teams: [testTeam],
  23. });
  24. const mockOrg = TestStubs.Organization({
  25. id: 'org',
  26. slug: 'org',
  27. teams: [testTeam],
  28. projects: [testProject, anotherProject],
  29. features: ['new-teams'],
  30. access: [],
  31. });
  32. const routerContext = TestStubs.routerContext([{organization: mockOrg}]);
  33. const openMenu = wrapper => wrapper.find('DropdownLabel').simulate('click');
  34. beforeEach(function() {
  35. ProjectsStore.loadInitialData(mockOrg.projects);
  36. });
  37. it('renders with "Select a project" when no project is selected', function() {
  38. const wrapper = mount(
  39. <ProjectHeaderProjectSelector organization={mockOrg} projectId="" />,
  40. routerContext
  41. );
  42. expect(wrapper.find('SelectProject')).toHaveLength(1);
  43. });
  44. it('has project label when project is selected', function() {
  45. const wrapper = mount(
  46. <ProjectHeaderProjectSelector organization={mockOrg} projectId="" />,
  47. routerContext
  48. );
  49. openMenu(wrapper);
  50. // Select first project
  51. wrapper
  52. .find('AutoCompleteItem')
  53. .first()
  54. .simulate('click');
  55. expect(wrapper.find('IdBadge').prop('project')).toEqual(
  56. expect.objectContaining({
  57. slug: 'test-project',
  58. })
  59. );
  60. });
  61. it('calls `router.push` when a project is selected', function() {
  62. const routerMock = TestStubs.router();
  63. const wrapper = mount(
  64. <ProjectHeaderProjectSelector
  65. organization={mockOrg}
  66. projectId=""
  67. router={routerMock}
  68. />,
  69. routerContext
  70. );
  71. openMenu(wrapper);
  72. // Select first project
  73. wrapper
  74. .find('AutoCompleteItem')
  75. .first()
  76. .simulate('click');
  77. expect(routerMock.push).toHaveBeenCalledWith('/org/test-project/');
  78. });
  79. });