ruleBuilder.spec.jsx 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import React from 'react';
  2. import {mount} from 'enzyme';
  3. import {ThemeProvider} from 'emotion-theming';
  4. import theme from 'app/utils/theme';
  5. import MemberListStore from 'app/stores/memberListStore';
  6. import TeamStore from 'app/stores/teamStore';
  7. import RuleBuilder from 'app/views/settings/project/projectOwnership/ruleBuilder';
  8. jest.mock('jquery');
  9. describe('RuleBuilder', function() {
  10. let sandbox;
  11. let project;
  12. let handleAdd;
  13. let USER_1 = TestStubs.User({
  14. id: '1',
  15. name: 'Jane Doe',
  16. email: 'janedoe@example.com',
  17. });
  18. let USER_2 = TestStubs.User({
  19. id: '2',
  20. name: 'John Smith',
  21. email: 'johnsmith@example.com',
  22. });
  23. let TEAM_1 = TestStubs.Team({
  24. id: '3',
  25. name: 'COOL TEAM',
  26. slug: 'cool-team',
  27. });
  28. beforeEach(function() {
  29. sandbox = sinon.sandbox.create();
  30. MemberListStore.loadInitialData([USER_1, USER_2]);
  31. sandbox.stub(TeamStore, 'getAll').returns([TEAM_1]);
  32. handleAdd = jest.fn();
  33. project = TestStubs.Project();
  34. });
  35. afterEach(function() {
  36. sandbox.restore();
  37. });
  38. describe('render()', function() {
  39. it('renders', function() {
  40. let wrapper = mount(
  41. <ThemeProvider theme={theme}>
  42. <RuleBuilder project={project} onAddRule={handleAdd} />
  43. </ThemeProvider>,
  44. TestStubs.routerContext()
  45. );
  46. let add = wrapper.find('RuleAddButton');
  47. add.simulate('click');
  48. expect(handleAdd).not.toHaveBeenCalled();
  49. let text = wrapper.find('BuilderInput');
  50. text.simulate('change', {target: {value: 'some/path/*'}});
  51. add.simulate('click');
  52. expect(handleAdd).not.toHaveBeenCalled();
  53. // Simulate select first element via down arrow / enter
  54. wrapper.find('.Select-control').simulate('keyDown', {keyCode: 40});
  55. wrapper.find('.Select-control').simulate('keyDown', {keyCode: 13});
  56. add.simulate('click');
  57. expect(handleAdd).toHaveBeenCalled();
  58. expect(wrapper.find(RuleBuilder)).toMatchSnapshot();
  59. });
  60. });
  61. describe('renders with suggestions', function() {
  62. it('renders', function() {
  63. let wrapper = mount(
  64. <ThemeProvider theme={theme}>
  65. <RuleBuilder
  66. project={project}
  67. onAddRule={handleAdd}
  68. urls={['example.com/a', 'example.com/a/foo']}
  69. paths={['a/bar', 'a/foo']}
  70. />
  71. </ThemeProvider>,
  72. TestStubs.routerContext()
  73. );
  74. // Simulate select first element via down arrow / enter
  75. wrapper.find('.Select-control').simulate('keyDown', {keyCode: 40});
  76. wrapper.find('.Select-control').simulate('keyDown', {keyCode: 13});
  77. let ruleCandidate = wrapper.find('RuleCandidate').first();
  78. ruleCandidate.simulate('click');
  79. let add = wrapper.find('RuleAddButton');
  80. expect(wrapper.find(RuleBuilder)).toMatchSnapshot();
  81. add.simulate('click');
  82. expect(handleAdd).toHaveBeenCalled();
  83. });
  84. });
  85. });