platform.spec.jsx 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. import React from 'react';
  2. import {createProject} from 'app/actionCreators/projects';
  3. import {mount} from 'enzyme';
  4. import OnboardingPlatform from 'app/views/onboarding/platform';
  5. import TeamStore from 'app/stores/teamStore';
  6. jest.mock('app/actionCreators/projects');
  7. describe('OnboardingWelcome', function() {
  8. it('calls onUpdate when setting the platform', function() {
  9. const onUpdate = jest.fn();
  10. const wrapper = mount(
  11. <OnboardingPlatform active onUpdate={onUpdate} />,
  12. TestStubs.routerContext()
  13. );
  14. wrapper
  15. .find('[data-test-id="platform-csharp"]')
  16. .first()
  17. .simulate('click');
  18. expect(onUpdate).toHaveBeenCalled();
  19. });
  20. it('calls onReturnToStep when clearing the platform', function() {
  21. const onUpdate = jest.fn();
  22. const onReturnToStep = jest.fn();
  23. const wrapper = mount(
  24. <OnboardingPlatform
  25. platform="csharp"
  26. onUpdate={onUpdate}
  27. onReturnToStep={onReturnToStep}
  28. />,
  29. TestStubs.routerContext()
  30. );
  31. wrapper
  32. .find('ClearButton')
  33. .first()
  34. .simulate('click');
  35. expect(onReturnToStep).toHaveBeenCalled();
  36. });
  37. it('creates a project when no project exists', async function() {
  38. const onComplete = jest.fn();
  39. const wrapper = mount(
  40. <OnboardingPlatform active onComplete={onComplete} />,
  41. TestStubs.routerContext()
  42. );
  43. const getButton = () => wrapper.find('Button[priority="primary"]');
  44. expect(getButton().props().disabled).toBe(true);
  45. // Select a platform to create
  46. wrapper.setProps({platform: 'csharp'});
  47. TeamStore.loadInitialData([{id: '1', slug: 'team-slug'}]);
  48. expect(getButton().text()).toEqual('Create Project');
  49. expect(getButton().props().disabled).toBe(false);
  50. let resolveProjectCreate;
  51. createProject.mockReturnValue(
  52. new Promise((resolve, reject) => (resolveProjectCreate = resolve))
  53. );
  54. // Create the project
  55. getButton().simulate('click');
  56. expect(getButton().text()).toEqual('Creating Project...');
  57. // Project completed creation (tick for async completion)
  58. resolveProjectCreate({id: 1, slug: 'test-project'});
  59. await tick();
  60. wrapper.setProps({active: false});
  61. expect(getButton().text()).toEqual('Project Created');
  62. expect(onComplete).toHaveBeenCalled();
  63. });
  64. it('does not create a project if one already exists', async function() {
  65. createProject.mockReset();
  66. const onComplete = jest.fn();
  67. const wrapper = mount(
  68. <OnboardingPlatform
  69. active
  70. project={{id: '1', slug: 'test'}}
  71. platform="csharp"
  72. onComplete={onComplete}
  73. />,
  74. TestStubs.routerContext()
  75. );
  76. const getButton = () => wrapper.find('Button[priority="primary"]');
  77. TeamStore.loadInitialData([{id: '1', slug: 'team-slug'}]);
  78. expect(getButton().text()).toEqual('Setup Your Project');
  79. expect(getButton().props().disabled).toBe(false);
  80. // Create the project
  81. getButton().simulate('click');
  82. await tick();
  83. expect(getButton().props().disabled).toBe(true);
  84. expect(createProject).not.toHaveBeenCalled();
  85. expect(onComplete).toHaveBeenCalled();
  86. });
  87. });