foreman-tasks 0.17.6 → 1.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (167) hide show
  1. checksums.yaml +4 -4
  2. data/.eslintrc +2 -22
  3. data/.rubocop.yml +12 -12
  4. data/.rubocop_todo.yml +34 -116
  5. data/.travis.yml +2 -2
  6. data/app/controllers/foreman_tasks/api/recurring_logics_controller.rb +20 -1
  7. data/app/controllers/foreman_tasks/api/tasks_controller.rb +38 -11
  8. data/app/controllers/foreman_tasks/concerns/hosts_controller_extension.rb +1 -1
  9. data/app/controllers/foreman_tasks/recurring_logics_controller.rb +19 -0
  10. data/app/helpers/foreman_tasks/foreman_tasks_helper.rb +0 -2
  11. data/app/lib/actions/helpers/humanizer.rb +1 -3
  12. data/app/lib/actions/proxy_action.rb +33 -12
  13. data/app/lib/foreman_tasks/concerns/polling_action_extensions.rb +12 -0
  14. data/app/models/foreman_tasks/concerns/action_triggering.rb +1 -1
  15. data/app/models/foreman_tasks/recurring_logic.rb +1 -0
  16. data/app/models/foreman_tasks/remote_task.rb +1 -0
  17. data/app/models/foreman_tasks/task.rb +4 -0
  18. data/app/models/foreman_tasks/task/dynflow_task.rb +1 -1
  19. data/app/models/foreman_tasks/task/search.rb +11 -1
  20. data/app/models/setting/foreman_tasks.rb +6 -1
  21. data/app/services/ui_notifications/tasks/task_bulk_cancel.rb +36 -0
  22. data/app/services/ui_notifications/tasks/task_bulk_resume.rb +38 -0
  23. data/app/views/foreman_tasks/api/recurring_logics/base.json.rabl +2 -1
  24. data/app/views/foreman_tasks/api/tasks/details.json.rabl +1 -0
  25. data/app/views/foreman_tasks/api/tasks/show.json.rabl +1 -1
  26. data/app/views/foreman_tasks/recurring_logics/index.html.erb +30 -0
  27. data/app/views/foreman_tasks/tasks/show.html.erb +3 -0
  28. data/babel.config.js +3 -0
  29. data/config/routes.rb +7 -0
  30. data/db/migrate/20200611090846_add_task_lock_index_on_resource_type_and_task_id.rb +9 -0
  31. data/db/seeds.d/30-notification_blueprints.rb +14 -0
  32. data/foreman-tasks.gemspec +5 -6
  33. data/gemfile.d/foreman-tasks.rb +1 -0
  34. data/lib/foreman_tasks/dynflow/console_authorizer.rb +2 -2
  35. data/lib/foreman_tasks/engine.rb +17 -14
  36. data/lib/foreman_tasks/tasks/cleanup.rake +3 -3
  37. data/lib/foreman_tasks/tasks/dynflow.rake +6 -0
  38. data/lib/foreman_tasks/tasks/export_tasks.rake +3 -3
  39. data/lib/foreman_tasks/test_extensions.rb +1 -1
  40. data/lib/foreman_tasks/version.rb +1 -1
  41. data/locale/action_names.rb +1 -1
  42. data/package.json +19 -79
  43. data/script/rails +2 -2
  44. data/script/travis_run_js_tests.sh +2 -2
  45. data/test/controllers/api/tasks_controller_test.rb +9 -0
  46. data/test/factories/task_factory.rb +34 -2
  47. data/test/foreman_tasks_test_helper.rb +4 -0
  48. data/test/lib/concerns/polling_action_extensions_test.rb +34 -0
  49. data/test/unit/actions/action_with_sub_plans_test.rb +1 -1
  50. data/test/unit/task_test.rb +160 -74
  51. data/webpack/ForemanTasks/Components/TaskDetails/Components/Task.js +4 -0
  52. data/webpack/ForemanTasks/Components/TaskDetails/Components/TaskInfo.js +1 -4
  53. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/Errors.test.js +1 -1
  54. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/Locks.test.js +1 -1
  55. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/Raw.test.js +1 -1
  56. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/RunningSteps.test.js +1 -1
  57. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/Task.test.js +2 -1
  58. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/TaskInfo.test.js +1 -1
  59. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/__snapshots__/Task.test.js.snap +3 -1
  60. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/__snapshots__/TaskInfo.test.js.snap +9 -15
  61. data/webpack/ForemanTasks/Components/TaskDetails/TaskDetails.stories.js +6 -2
  62. data/webpack/ForemanTasks/Components/TaskDetails/TaskDetailsActions.js +2 -2
  63. data/webpack/ForemanTasks/Components/TaskDetails/TaskDetailsSelectors.js +3 -0
  64. data/webpack/ForemanTasks/Components/TaskDetails/__tests__/TaskDetails.test.js +1 -1
  65. data/webpack/ForemanTasks/Components/TaskDetails/__tests__/TaskDetailsActions.test.js +1 -1
  66. data/webpack/ForemanTasks/Components/TaskDetails/__tests__/TaskDetailsReducer.test.js +1 -1
  67. data/webpack/ForemanTasks/Components/TaskDetails/__tests__/__snapshots__/TaskDetails.test.js.snap +1 -0
  68. data/webpack/ForemanTasks/Components/TaskDetails/__tests__/integration.test.js +1 -1
  69. data/webpack/ForemanTasks/Components/TaskDetails/index.js +2 -0
  70. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/PausedTasksCard/PausedTasksCard.stories.js +44 -40
  71. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/PausedTasksCard/PausedTasksCard.test.js +1 -1
  72. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/RunningTasksCard/RunningTasksCard.stories.js +45 -40
  73. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/RunningTasksCard/RunningTasksCard.test.js +1 -1
  74. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/ScheduledTasksCard/ScheduledTasksCard.stories.js +27 -22
  75. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/ScheduledTasksCard/ScheduledTasksCard.test.js +1 -1
  76. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/StoppedTasksCard/StoppedTasksCard.stories.js +61 -56
  77. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/StoppedTasksCard/StoppedTasksCard.test.js +1 -1
  78. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/TasksDonutCard/TasksDonutCard.stories.js +40 -35
  79. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/TasksDonutCard/TasksDonutCard.test.js +1 -1
  80. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/TasksDonutChart/TasksDonutChart.stories.js +21 -20
  81. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/TasksDonutChart/TasksDonutChart.test.js +1 -1
  82. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/TasksCardsGrid.stories.js +40 -39
  83. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/TasksCardsGrid.test.js +1 -1
  84. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksLabelsRow/TasksLabelsRow.stories.js +16 -17
  85. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksLabelsRow/TasksLabelsRow.test.js +1 -2
  86. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksTimeRow/Components/TimeDropDown/TimeDropDown.stories.mdx +57 -0
  87. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksTimeRow/Components/TimeDropDown/TimeDropDown.test.js +1 -1
  88. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksTimeRow/TasksTimeRow.stories.js +36 -18
  89. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksTimeRow/TasksTimeRow.test.js +1 -1
  90. data/webpack/ForemanTasks/Components/TasksDashboard/TasksDashboardConstants.js +5 -0
  91. data/webpack/ForemanTasks/Components/TasksDashboard/TasksDashboardHelper.js +3 -2
  92. data/webpack/ForemanTasks/Components/TasksDashboard/__tests__/TasksDashboard.test.js +1 -1
  93. data/webpack/ForemanTasks/Components/TasksDashboard/__tests__/TasksDashboardActions.test.js +1 -1
  94. data/webpack/ForemanTasks/Components/TasksDashboard/__tests__/TasksDashboardReducer.test.js +1 -1
  95. data/webpack/ForemanTasks/Components/TasksDashboard/__tests__/TasksDashboardSelectors.test.js +1 -1
  96. data/webpack/ForemanTasks/Components/TasksTable/Components/CancelConfirm.js +53 -0
  97. data/webpack/ForemanTasks/Components/TasksTable/Components/ConfirmationModals.js +56 -0
  98. data/webpack/ForemanTasks/Components/TasksTable/Components/ResumeConfirm.js +52 -0
  99. data/webpack/ForemanTasks/Components/TasksTable/Components/SelectAllAlert.js +43 -0
  100. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/ActionSelectButton.test.js +1 -1
  101. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/CancelConfirm.test.js +26 -0
  102. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/ConfirmationModals.test.js +24 -0
  103. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/ResumeConfirm.test.js +26 -0
  104. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/SelectAllAlert.test.js +29 -0
  105. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/TableSelectionCell.test.js +1 -1
  106. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/TableSelectionHeaderCell.test.js +1 -1
  107. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/__snapshots__/CancelConfirm.test.js.snap +65 -0
  108. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/__snapshots__/ConfirmationModals.test.js.snap +30 -0
  109. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/__snapshots__/ResumeConfirm.test.js.snap +63 -0
  110. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/__snapshots__/SelectAllAlert.test.js.snap +75 -0
  111. data/webpack/ForemanTasks/Components/TasksTable/SubTasksPage.js +4 -1
  112. data/webpack/ForemanTasks/Components/TasksTable/TasksBulkActions.js +164 -0
  113. data/webpack/ForemanTasks/Components/TasksTable/TasksTable.js +46 -22
  114. data/webpack/ForemanTasks/Components/TasksTable/TasksTableActionHelpers.js +52 -0
  115. data/webpack/ForemanTasks/Components/TasksTable/TasksTableActions.js +88 -87
  116. data/webpack/ForemanTasks/Components/TasksTable/TasksTableConstants.js +20 -5
  117. data/webpack/ForemanTasks/Components/TasksTable/TasksTableHelpers.js +4 -3
  118. data/webpack/ForemanTasks/Components/TasksTable/TasksTablePage.js +128 -31
  119. data/webpack/ForemanTasks/Components/TasksTable/TasksTableReducer.js +26 -9
  120. data/webpack/ForemanTasks/Components/TasksTable/TasksTableSelectors.js +24 -16
  121. data/webpack/ForemanTasks/Components/TasksTable/__tests__/SubTasksPage.test.js +1 -1
  122. data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksBulkActions.test.js +112 -0
  123. data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksIndexPage.test.js +1 -1
  124. data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksTable.fixtures.js +12 -5
  125. data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksTable.test.js +1 -1
  126. data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksTableActionHelpers.test.js +46 -0
  127. data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksTableActions.test.js +28 -52
  128. data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksTableHelpers.test.js +17 -1
  129. data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksTablePage.test.js +10 -2
  130. data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksTableReducer.test.js +28 -8
  131. data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/SubTasksPage.test.js.snap +15 -5
  132. data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/TasksBulkActions.test.js.snap +229 -0
  133. data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/TasksIndexPage.test.js.snap +14 -5
  134. data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/TasksTableActions.test.js.snap +56 -85
  135. data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/TasksTablePage.test.js.snap +160 -34
  136. data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/TasksTableReducer.test.js.snap +43 -16
  137. data/webpack/ForemanTasks/Components/TasksTable/formatters/__test__/selectionHeaderCellFormatter.test.js +1 -1
  138. data/webpack/ForemanTasks/Components/TasksTable/formatters/selectionHeaderCellFormatter.js +2 -2
  139. data/webpack/ForemanTasks/Components/TasksTable/index.js +11 -4
  140. data/webpack/ForemanTasks/Components/common/ActionButtons/ActionButton.js +4 -4
  141. data/webpack/ForemanTasks/Components/common/ActionButtons/ActionButton.test.js +1 -1
  142. data/webpack/ForemanTasks/Components/common/ActionButtons/CancelButton.test.js +1 -2
  143. data/webpack/ForemanTasks/Components/common/ActionButtons/ResumeButton.test.js +2 -2
  144. data/webpack/ForemanTasks/Components/common/ActionButtons/__snapshots__/ActionButton.test.js.snap +3 -3
  145. data/webpack/ForemanTasks/Components/common/ToastTypesConstants.js +11 -0
  146. data/webpack/ForemanTasks/ForemanTasks.test.js +1 -1
  147. data/webpack/ForemanTasks/Routes/ForemanTasksRouter.test.js +1 -1
  148. data/webpack/ForemanTasks/Routes/ForemanTasksRoutes.test.js +2 -3
  149. data/webpack/ForemanTasks/Routes/ShowTask/__tests__/ShowTask.test.js +1 -1
  150. data/webpack/__mocks__/foremanReact/components/ForemanModal/ForemanModalActions.js +2 -0
  151. data/webpack/__mocks__/foremanReact/components/ForemanModal/ForemanModalHooks.js +10 -0
  152. data/webpack/__mocks__/foremanReact/components/ForemanModal/index.js +4 -0
  153. metadata +55 -24
  154. data/.babelrc +0 -35
  155. data/.storybook/addons.js +0 -2
  156. data/.storybook/config.js +0 -7
  157. data/.storybook/webpack.config.js +0 -63
  158. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksTimeRow/Components/TimeDropDown/TimeDropDown.stories.js +0 -23
  159. data/webpack/ForemanTasks/Components/TasksTable/Components/ActionConfirmation.js +0 -49
  160. data/webpack/ForemanTasks/Components/TasksTable/Components/CancelResumeConfirm.js +0 -51
  161. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/ActionConfirmation.test.js +0 -18
  162. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/CancelResumeConfirm.test.js +0 -28
  163. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/__snapshots__/ActionConfirmation.test.js.snap +0 -89
  164. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/__snapshots__/CancelResumeConfirm.test.js.snap +0 -37
  165. data/webpack/stories/index.js +0 -10
  166. data/webpack/stories/index.scss +0 -7
  167. data/webpack/test_setup.js +0 -6
@@ -1,4 +1,4 @@
1
- import { testComponentSnapshotsWithFixtures } from 'react-redux-test-utils';
1
+ import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
2
 
3
3
  import TasksDashboard from '../TasksDashboard';
4
4
 
@@ -1,4 +1,4 @@
1
- import { testActionSnapshotWithFixtures } from 'react-redux-test-utils';
1
+ import { testActionSnapshotWithFixtures } from '@theforeman/test';
2
2
  import API from 'foremanReact/API';
3
3
  import { timeToHoursNumber } from '../TasksDashboardHelper';
4
4
  import {
@@ -1,4 +1,4 @@
1
- import { testReducerSnapshotWithFixtures } from 'react-redux-test-utils';
1
+ import { testReducerSnapshotWithFixtures } from '@theforeman/test';
2
2
 
3
3
  import {
4
4
  FOREMAN_TASKS_DASHBOARD_INIT,
@@ -1,4 +1,4 @@
1
- import { testSelectorsSnapshotWithFixtures } from 'react-redux-test-utils';
1
+ import { testSelectorsSnapshotWithFixtures } from '@theforeman/test';
2
2
  import {
3
3
  selectTasksDashboard,
4
4
  selectTime,
@@ -0,0 +1,53 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { sprintf, translate as __ } from 'foremanReact/common/I18n';
4
+ import { Button } from 'patternfly-react';
5
+ import ForemanModal from 'foremanReact/components/ForemanModal';
6
+ import {
7
+ CANCEL_CONFIRM_MODAL_ID,
8
+ RESUME_CONFIRM_MODAL_ID,
9
+ CANCEL_SELECTED_CONFIRM_MODAL_ID,
10
+ RESUME_SELECTED_CONFIRM_MODAL_ID,
11
+ } from '../TasksTableConstants';
12
+
13
+ export const CancelConfirm = ({ closeModal, action, selectedRowsLen, id }) => (
14
+ <ForemanModal title={__('Cancel Selected Tasks')} id={id}>
15
+ <ForemanModal.Header />
16
+ {sprintf(
17
+ __(
18
+ `This will cancel %s task(s), putting them in the stopped state. Are you sure?`
19
+ ),
20
+ selectedRowsLen
21
+ )}
22
+ <ForemanModal.Footer>
23
+ <Button onClick={closeModal}>{__('No')}</Button>
24
+ <Button
25
+ bsStyle="primary"
26
+ onClick={() => {
27
+ action();
28
+ closeModal();
29
+ }}
30
+ >
31
+ {__('Yes')}
32
+ </Button>
33
+ </ForemanModal.Footer>
34
+ </ForemanModal>
35
+ );
36
+
37
+ CancelConfirm.propTypes = {
38
+ closeModal: PropTypes.func.isRequired,
39
+ selectedRowsLen: PropTypes.number.isRequired,
40
+ action: PropTypes.func,
41
+ id: PropTypes.oneOf([
42
+ CANCEL_CONFIRM_MODAL_ID,
43
+ RESUME_CONFIRM_MODAL_ID,
44
+ CANCEL_SELECTED_CONFIRM_MODAL_ID,
45
+ RESUME_SELECTED_CONFIRM_MODAL_ID,
46
+ ]).isRequired,
47
+ };
48
+
49
+ CancelConfirm.defaultProps = {
50
+ action: () => null,
51
+ };
52
+
53
+ export default CancelConfirm;
@@ -0,0 +1,56 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import {
4
+ CANCEL_CONFIRM_MODAL_ID,
5
+ RESUME_CONFIRM_MODAL_ID,
6
+ CANCEL_SELECTED_CONFIRM_MODAL_ID,
7
+ RESUME_SELECTED_CONFIRM_MODAL_ID,
8
+ } from '../TasksTableConstants';
9
+ import { CancelConfirm } from './CancelConfirm';
10
+ import { ResumeConfirm } from './ResumeConfirm';
11
+
12
+ export const ConfirmationModals = ({
13
+ modalProps,
14
+ tasksActions,
15
+ selectedRowsLen,
16
+ }) => (
17
+ <React.Fragment>
18
+ <CancelConfirm
19
+ closeModal={modalProps.cancelModal.setModalClosed}
20
+ action={tasksActions.cancelTask}
21
+ selectedRowsLen={1}
22
+ id={CANCEL_CONFIRM_MODAL_ID}
23
+ />
24
+ <ResumeConfirm
25
+ closeModal={modalProps.resumeModal.setModalClosed}
26
+ action={tasksActions.resumeTask}
27
+ selectedRowsLen={1}
28
+ id={RESUME_CONFIRM_MODAL_ID}
29
+ />
30
+ <CancelConfirm
31
+ closeModal={modalProps.cancelSelectedModal.setModalClosed}
32
+ action={tasksActions.cancelSelectedTasks}
33
+ selectedRowsLen={selectedRowsLen}
34
+ id={CANCEL_SELECTED_CONFIRM_MODAL_ID}
35
+ />
36
+ <ResumeConfirm
37
+ closeModal={modalProps.resumeSelectedModal.setModalClosed}
38
+ action={tasksActions.resumeSelectedTasks}
39
+ selectedRowsLen={selectedRowsLen}
40
+ id={RESUME_SELECTED_CONFIRM_MODAL_ID}
41
+ />
42
+ </React.Fragment>
43
+ );
44
+
45
+ ConfirmationModals.propTypes = {
46
+ modalProps: PropTypes.object.isRequired,
47
+ selectedRowsLen: PropTypes.number.isRequired,
48
+ tasksActions: PropTypes.shape({
49
+ cancelTask: PropTypes.func,
50
+ resumeTask: PropTypes.func,
51
+ cancelSelectedTasks: PropTypes.func,
52
+ resumeSelectedTasks: PropTypes.func,
53
+ }).isRequired,
54
+ };
55
+
56
+ export default ConfirmationModals;
@@ -0,0 +1,52 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { sprintf, translate as __ } from 'foremanReact/common/I18n';
4
+ import { Button } from 'patternfly-react';
5
+ import ForemanModal from 'foremanReact/components/ForemanModal';
6
+ import {
7
+ CANCEL_CONFIRM_MODAL_ID,
8
+ RESUME_CONFIRM_MODAL_ID,
9
+ CANCEL_SELECTED_CONFIRM_MODAL_ID,
10
+ RESUME_SELECTED_CONFIRM_MODAL_ID,
11
+ } from '../TasksTableConstants';
12
+
13
+ export const ResumeConfirm = ({ closeModal, action, selectedRowsLen, id }) => (
14
+ <ForemanModal title={__('Resume Selected Tasks')} id={id}>
15
+ {sprintf(
16
+ __(
17
+ `This will resume %s task(s), putting them in the running state. Are you sure?`
18
+ ),
19
+ selectedRowsLen
20
+ )}
21
+ <ForemanModal.Footer>
22
+ <Button onClick={closeModal}>{__('No')}</Button>
23
+ <Button
24
+ bsStyle="primary"
25
+ onClick={() => {
26
+ action();
27
+ closeModal();
28
+ }}
29
+ >
30
+ {__('Yes')}
31
+ </Button>
32
+ </ForemanModal.Footer>
33
+ </ForemanModal>
34
+ );
35
+
36
+ ResumeConfirm.propTypes = {
37
+ closeModal: PropTypes.func.isRequired,
38
+ selectedRowsLen: PropTypes.number.isRequired,
39
+ action: PropTypes.func,
40
+ id: PropTypes.oneOf([
41
+ CANCEL_CONFIRM_MODAL_ID,
42
+ RESUME_CONFIRM_MODAL_ID,
43
+ CANCEL_SELECTED_CONFIRM_MODAL_ID,
44
+ RESUME_SELECTED_CONFIRM_MODAL_ID,
45
+ ]).isRequired,
46
+ };
47
+
48
+ ResumeConfirm.defaultProps = {
49
+ action: () => null,
50
+ };
51
+
52
+ export default ResumeConfirm;
@@ -0,0 +1,43 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { Alert, Button } from 'patternfly-react';
4
+ import { sprintf, translate as __ } from 'foremanReact/common/I18n';
5
+
6
+ export const SelectAllAlert = ({
7
+ itemCount,
8
+ perPage,
9
+ selectAllRows,
10
+ unselectAllRows,
11
+ allRowsSelected,
12
+ }) => {
13
+ const selectAllText = (
14
+ <React.Fragment>
15
+ {sprintf(
16
+ 'All %s tasks on this page are selected',
17
+ Math.min(itemCount, perPage)
18
+ )}
19
+ <Button bsStyle="link" onClick={selectAllRows}>
20
+ {__('Select All')}
21
+ <b> {itemCount} </b> {__('tasks.')}
22
+ </Button>
23
+ </React.Fragment>
24
+ );
25
+ const undoSelectText = (
26
+ <React.Fragment>
27
+ {sprintf(__(`All %s tasks are selected. `), itemCount)}
28
+ <Button bsStyle="link" onClick={unselectAllRows}>
29
+ {__('Undo selection')}
30
+ </Button>
31
+ </React.Fragment>
32
+ );
33
+ const selectAlertText = allRowsSelected ? undoSelectText : selectAllText;
34
+ return <Alert type="info">{selectAlertText}</Alert>;
35
+ };
36
+
37
+ SelectAllAlert.propTypes = {
38
+ allRowsSelected: PropTypes.bool.isRequired,
39
+ itemCount: PropTypes.number.isRequired,
40
+ perPage: PropTypes.number.isRequired,
41
+ selectAllRows: PropTypes.func.isRequired,
42
+ unselectAllRows: PropTypes.func.isRequired,
43
+ };
@@ -1,4 +1,4 @@
1
- import { testComponentSnapshotsWithFixtures } from 'react-redux-test-utils';
1
+ import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
2
 
3
3
  import { ActionSelectButton } from '../ActionSelectButton';
4
4
 
@@ -0,0 +1,26 @@
1
+ import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
+
3
+ import { CancelConfirm } from '../CancelConfirm';
4
+ import {
5
+ CANCEL_CONFIRM_MODAL_ID,
6
+ CANCEL_SELECTED_CONFIRM_MODAL_ID,
7
+ } from '../../TasksTableConstants';
8
+
9
+ const baseProps = {
10
+ closeModal: () => null,
11
+ selectedRowsLen: 1,
12
+ action: () => null,
13
+ };
14
+ const fixtures = {
15
+ 'renders CANCEL modal': {
16
+ ...baseProps,
17
+ id: CANCEL_CONFIRM_MODAL_ID,
18
+ },
19
+ 'renders CANCEL_SELECTED modal': {
20
+ ...baseProps,
21
+ id: CANCEL_SELECTED_CONFIRM_MODAL_ID,
22
+ },
23
+ };
24
+
25
+ describe('CancelConfirm', () =>
26
+ testComponentSnapshotsWithFixtures(CancelConfirm, fixtures));
@@ -0,0 +1,24 @@
1
+ import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
+
3
+ import { ConfirmationModals } from '../ConfirmationModals';
4
+
5
+ const fixtures = {
6
+ 'renders ConfirmationModals': {
7
+ modalProps: {
8
+ cancelSelectedModal: { setModalClosed: jest.fn() },
9
+ resumeSelectedModal: { setModalClosed: jest.fn() },
10
+ cancelModal: { setModalClosed: jest.fn() },
11
+ resumeModal: { setModalClosed: jest.fn() },
12
+ },
13
+ selectedRowsLen: 7,
14
+ tasksActions: {
15
+ cancelTask: jest.fn(),
16
+ resumeTask: jest.fn(),
17
+ cancelSelectedTasks: jest.fn(),
18
+ resumeSelectedTasks: jest.fn(),
19
+ },
20
+ },
21
+ };
22
+
23
+ describe('ConfirmationModals', () =>
24
+ testComponentSnapshotsWithFixtures(ConfirmationModals, fixtures));
@@ -0,0 +1,26 @@
1
+ import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
+
3
+ import { ResumeConfirm } from '../ResumeConfirm';
4
+ import {
5
+ RESUME_CONFIRM_MODAL_ID,
6
+ RESUME_SELECTED_CONFIRM_MODAL_ID,
7
+ } from '../../TasksTableConstants';
8
+
9
+ const baseProps = {
10
+ closeModal: () => null,
11
+ selectedRowsLen: 3,
12
+ action: () => null,
13
+ };
14
+ const fixtures = {
15
+ 'renders RESUME modal': {
16
+ ...baseProps,
17
+ id: RESUME_CONFIRM_MODAL_ID,
18
+ },
19
+ 'renders RESUME_SELECTED modal': {
20
+ ...baseProps,
21
+ id: RESUME_SELECTED_CONFIRM_MODAL_ID,
22
+ },
23
+ };
24
+
25
+ describe('ResumeConfirm', () =>
26
+ testComponentSnapshotsWithFixtures(ResumeConfirm, fixtures));
@@ -0,0 +1,29 @@
1
+ import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
+
3
+ import { SelectAllAlert } from '../SelectAllAlert';
4
+
5
+ const baseProps = {
6
+ itemCount: 7,
7
+ perPage: 5,
8
+ selectAllRows: jest.fn(),
9
+ unselectAllRows: jest.fn(),
10
+ };
11
+ const fixtures = {
12
+ 'renders SelectAllAlert with perPage > itemCout': {
13
+ allRowsSelected: false,
14
+ itemCount: 7,
15
+ perPage: 10,
16
+ ...baseProps,
17
+ },
18
+ 'renders SelectAllAlert without all rows selected': {
19
+ allRowsSelected: false,
20
+ ...baseProps,
21
+ },
22
+ 'renders SelectAllAlert with all rows selected': {
23
+ allRowsSelected: true,
24
+ ...baseProps,
25
+ },
26
+ };
27
+
28
+ describe('SelectAllAlert', () =>
29
+ testComponentSnapshotsWithFixtures(SelectAllAlert, fixtures));
@@ -1,4 +1,4 @@
1
- import { testComponentSnapshotsWithFixtures } from 'react-redux-test-utils';
1
+ import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
2
 
3
3
  import TableSelectionCell from '../TableSelectionCell';
4
4
 
@@ -1,4 +1,4 @@
1
- import { testComponentSnapshotsWithFixtures } from 'react-redux-test-utils';
1
+ import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
2
 
3
3
  import TableSelectionHeaderCell from '../TableSelectionHeaderCell';
4
4
 
@@ -0,0 +1,65 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`CancelConfirm renders CANCEL modal 1`] = `
4
+ <ForemanModal
5
+ id="cancelConfirmModal"
6
+ title="Cancel Selected Tasks"
7
+ >
8
+ <Component />
9
+ This will cancel 1 task(s), putting them in the stopped state. Are you sure?
10
+ <Component>
11
+ <Button
12
+ active={false}
13
+ block={false}
14
+ bsClass="btn"
15
+ bsStyle="default"
16
+ disabled={false}
17
+ onClick={[Function]}
18
+ >
19
+ No
20
+ </Button>
21
+ <Button
22
+ active={false}
23
+ block={false}
24
+ bsClass="btn"
25
+ bsStyle="primary"
26
+ disabled={false}
27
+ onClick={[Function]}
28
+ >
29
+ Yes
30
+ </Button>
31
+ </Component>
32
+ </ForemanModal>
33
+ `;
34
+
35
+ exports[`CancelConfirm renders CANCEL_SELECTED modal 1`] = `
36
+ <ForemanModal
37
+ id="cancelSelectedConfirmModal"
38
+ title="Cancel Selected Tasks"
39
+ >
40
+ <Component />
41
+ This will cancel 1 task(s), putting them in the stopped state. Are you sure?
42
+ <Component>
43
+ <Button
44
+ active={false}
45
+ block={false}
46
+ bsClass="btn"
47
+ bsStyle="default"
48
+ disabled={false}
49
+ onClick={[Function]}
50
+ >
51
+ No
52
+ </Button>
53
+ <Button
54
+ active={false}
55
+ block={false}
56
+ bsClass="btn"
57
+ bsStyle="primary"
58
+ disabled={false}
59
+ onClick={[Function]}
60
+ >
61
+ Yes
62
+ </Button>
63
+ </Component>
64
+ </ForemanModal>
65
+ `;
@@ -0,0 +1,30 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`ConfirmationModals renders ConfirmationModals 1`] = `
4
+ <Fragment>
5
+ <CancelConfirm
6
+ action={[MockFunction]}
7
+ closeModal={[MockFunction]}
8
+ id="cancelConfirmModal"
9
+ selectedRowsLen={1}
10
+ />
11
+ <ResumeConfirm
12
+ action={[MockFunction]}
13
+ closeModal={[MockFunction]}
14
+ id="resumeConfirmModal"
15
+ selectedRowsLen={1}
16
+ />
17
+ <CancelConfirm
18
+ action={[MockFunction]}
19
+ closeModal={[MockFunction]}
20
+ id="cancelSelectedConfirmModal"
21
+ selectedRowsLen={7}
22
+ />
23
+ <ResumeConfirm
24
+ action={[MockFunction]}
25
+ closeModal={[MockFunction]}
26
+ id="resumeSelectedConfirmModal"
27
+ selectedRowsLen={7}
28
+ />
29
+ </Fragment>
30
+ `;