foreman-tasks 0.17.6 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (198) 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 +66 -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/controllers/foreman_tasks/tasks_controller.rb +3 -11
  11. data/app/helpers/foreman_tasks/foreman_tasks_helper.rb +0 -2
  12. data/app/lib/actions/helpers/humanizer.rb +1 -3
  13. data/app/lib/actions/proxy_action.rb +33 -12
  14. data/app/lib/foreman_tasks/concerns/polling_action_extensions.rb +12 -0
  15. data/app/models/foreman_tasks/concerns/action_triggering.rb +1 -1
  16. data/app/models/foreman_tasks/recurring_logic.rb +1 -0
  17. data/app/models/foreman_tasks/remote_task.rb +1 -0
  18. data/app/models/foreman_tasks/task.rb +8 -0
  19. data/app/models/foreman_tasks/task/dynflow_task.rb +1 -1
  20. data/app/models/foreman_tasks/task/search.rb +11 -1
  21. data/app/models/setting/foreman_tasks.rb +7 -2
  22. data/app/services/ui_notifications/tasks/task_bulk_cancel.rb +36 -0
  23. data/app/services/ui_notifications/tasks/task_bulk_resume.rb +38 -0
  24. data/app/services/ui_notifications/tasks/task_bulk_stop.rb +36 -0
  25. data/app/views/foreman_tasks/api/recurring_logics/base.json.rabl +2 -1
  26. data/app/views/foreman_tasks/api/tasks/details.json.rabl +1 -1
  27. data/app/views/foreman_tasks/api/tasks/show.json.rabl +1 -1
  28. data/app/views/foreman_tasks/recurring_logics/index.html.erb +30 -0
  29. data/app/views/foreman_tasks/tasks/show.html.erb +3 -0
  30. data/babel.config.js +3 -0
  31. data/config/routes.rb +8 -0
  32. data/db/migrate/20200517215015_rename_bookmarks_controller.rb +35 -0
  33. data/db/migrate/20200519093217_drop_dynflow_allow_dangerous_actions_setting.foreman_tasks.rb +5 -0
  34. data/db/seeds.d/30-notification_blueprints.rb +21 -0
  35. data/foreman-tasks.gemspec +5 -6
  36. data/gemfile.d/foreman-tasks.rb +1 -0
  37. data/lib/foreman_tasks/dynflow/console_authorizer.rb +2 -2
  38. data/lib/foreman_tasks/engine.rb +17 -14
  39. data/lib/foreman_tasks/tasks/cleanup.rake +1 -1
  40. data/lib/foreman_tasks/tasks/export_tasks.rake +2 -2
  41. data/lib/foreman_tasks/test_extensions.rb +1 -1
  42. data/lib/foreman_tasks/version.rb +1 -1
  43. data/locale/action_names.rb +2 -2
  44. data/locale/en/foreman_tasks.po +227 -41
  45. data/locale/foreman_tasks.pot +579 -288
  46. data/package.json +19 -79
  47. data/script/rails +2 -2
  48. data/script/travis_run_js_tests.sh +2 -2
  49. data/test/controllers/api/tasks_controller_test.rb +9 -0
  50. data/test/factories/task_factory.rb +34 -2
  51. data/test/foreman_tasks_test_helper.rb +4 -0
  52. data/test/lib/concerns/polling_action_extensions_test.rb +34 -0
  53. data/test/unit/actions/action_with_sub_plans_test.rb +1 -1
  54. data/test/unit/task_test.rb +160 -74
  55. data/webpack/ForemanTasks/Components/TaskActions/TaskAction.test.js +60 -0
  56. data/webpack/ForemanTasks/Components/TaskActions/TaskActionHelpers.js +67 -0
  57. data/webpack/ForemanTasks/Components/TaskActions/TaskActionHelpers.test.js +46 -0
  58. data/webpack/ForemanTasks/Components/TaskActions/TaskActionsConstants.js +16 -0
  59. data/webpack/ForemanTasks/Components/TaskActions/UnlockModals.js +60 -0
  60. data/webpack/ForemanTasks/Components/TaskActions/UnlockModals.test.js +14 -0
  61. data/webpack/ForemanTasks/Components/TaskActions/__snapshots__/TaskAction.test.js.snap +233 -0
  62. data/webpack/ForemanTasks/Components/TaskActions/__snapshots__/UnlockModals.test.js.snap +25 -0
  63. data/webpack/ForemanTasks/Components/TaskActions/index.js +115 -0
  64. data/webpack/ForemanTasks/Components/TaskDetails/Components/Task.js +132 -150
  65. data/webpack/ForemanTasks/Components/TaskDetails/Components/TaskInfo.js +1 -4
  66. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/Errors.test.js +1 -1
  67. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/Locks.test.js +1 -1
  68. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/Raw.test.js +1 -1
  69. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/RunningSteps.test.js +1 -1
  70. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/Task.test.js +68 -3
  71. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/TaskInfo.test.js +1 -2
  72. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/__snapshots__/Task.test.js.snap +104 -71
  73. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/__snapshots__/TaskInfo.test.js.snap +9 -15
  74. data/webpack/ForemanTasks/Components/TaskDetails/TaskDetails.stories.js +6 -2
  75. data/webpack/ForemanTasks/Components/TaskDetails/TaskDetailsActions.js +2 -17
  76. data/webpack/ForemanTasks/Components/TaskDetails/TaskDetailsConstants.js +0 -5
  77. data/webpack/ForemanTasks/Components/TaskDetails/TaskDetailsReducer.js +0 -6
  78. data/webpack/ForemanTasks/Components/TaskDetails/TaskDetailsSelectors.js +3 -9
  79. data/webpack/ForemanTasks/Components/TaskDetails/TasksDetailsHelper.js +6 -1
  80. data/webpack/ForemanTasks/Components/TaskDetails/__tests__/TaskDetails.test.js +6 -1
  81. data/webpack/ForemanTasks/Components/TaskDetails/__tests__/TaskDetailsActions.test.js +1 -1
  82. data/webpack/ForemanTasks/Components/TaskDetails/__tests__/TaskDetailsReducer.test.js +1 -1
  83. data/webpack/ForemanTasks/Components/TaskDetails/__tests__/__snapshots__/TaskDetails.test.js.snap +3 -7
  84. data/webpack/ForemanTasks/Components/TaskDetails/__tests__/integration.test.js +5 -1
  85. data/webpack/ForemanTasks/Components/TaskDetails/index.js +6 -8
  86. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/PausedTasksCard/PausedTasksCard.stories.js +44 -40
  87. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/PausedTasksCard/PausedTasksCard.test.js +1 -1
  88. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/RunningTasksCard/RunningTasksCard.stories.js +45 -40
  89. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/RunningTasksCard/RunningTasksCard.test.js +1 -1
  90. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/ScheduledTasksCard/ScheduledTasksCard.stories.js +27 -22
  91. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/ScheduledTasksCard/ScheduledTasksCard.test.js +1 -1
  92. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/StoppedTasksCard/StoppedTasksCard.stories.js +61 -56
  93. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/StoppedTasksCard/StoppedTasksCard.test.js +1 -1
  94. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/TasksDonutCard/TasksDonutCard.stories.js +40 -35
  95. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/TasksDonutCard/TasksDonutCard.test.js +1 -1
  96. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/TasksDonutChart/TasksDonutChart.stories.js +21 -20
  97. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/TasksDonutChart/TasksDonutChart.test.js +1 -1
  98. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/TasksCardsGrid.stories.js +40 -39
  99. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/TasksCardsGrid.test.js +1 -1
  100. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksLabelsRow/TasksLabelsRow.stories.js +16 -17
  101. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksLabelsRow/TasksLabelsRow.test.js +1 -2
  102. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksTimeRow/Components/TimeDropDown/TimeDropDown.stories.mdx +57 -0
  103. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksTimeRow/Components/TimeDropDown/TimeDropDown.test.js +1 -1
  104. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksTimeRow/TasksTimeRow.stories.js +36 -18
  105. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksTimeRow/TasksTimeRow.test.js +1 -1
  106. data/webpack/ForemanTasks/Components/TasksDashboard/TasksDashboardConstants.js +5 -0
  107. data/webpack/ForemanTasks/Components/TasksDashboard/TasksDashboardHelper.js +3 -2
  108. data/webpack/ForemanTasks/Components/TasksDashboard/__tests__/TasksDashboard.test.js +1 -1
  109. data/webpack/ForemanTasks/Components/TasksDashboard/__tests__/TasksDashboardActions.test.js +1 -1
  110. data/webpack/ForemanTasks/Components/TasksDashboard/__tests__/TasksDashboardReducer.test.js +1 -1
  111. data/webpack/ForemanTasks/Components/TasksDashboard/__tests__/TasksDashboardSelectors.test.js +1 -1
  112. data/webpack/ForemanTasks/Components/TasksTable/Components/ActionSelectButton.js +14 -1
  113. data/webpack/ForemanTasks/Components/TasksTable/Components/ConfirmModal/ConfirmModal.js +83 -0
  114. data/webpack/ForemanTasks/Components/TasksTable/Components/ConfirmModal/ConfirmModalActions.js +106 -0
  115. data/webpack/ForemanTasks/Components/TasksTable/Components/ConfirmModal/ConfirmModalReducer.js +38 -0
  116. data/webpack/ForemanTasks/Components/TasksTable/Components/ConfirmModal/ConfirmModalSelectors.js +45 -0
  117. data/webpack/ForemanTasks/Components/TasksTable/Components/ConfirmModal/__test__/ConfirmModal.test.js +36 -0
  118. data/webpack/ForemanTasks/Components/TasksTable/Components/ConfirmModal/__test__/ConfirmModalActions.test.js +205 -0
  119. data/webpack/ForemanTasks/Components/TasksTable/Components/ConfirmModal/__test__/ConfirmModalReducer.test.js +27 -0
  120. data/webpack/ForemanTasks/Components/TasksTable/Components/ConfirmModal/__test__/ConfirmModalSelectors.test.js +54 -0
  121. data/webpack/ForemanTasks/Components/TasksTable/Components/ConfirmModal/__test__/__snapshots__/ConfirmModal.test.js.snap +41 -0
  122. data/webpack/ForemanTasks/Components/TasksTable/Components/ConfirmModal/__test__/__snapshots__/ConfirmModalReducer.test.js.snap +19 -0
  123. data/webpack/ForemanTasks/Components/TasksTable/Components/ConfirmModal/__test__/__snapshots__/ConfirmModalSelectors.test.js.snap +30 -0
  124. data/webpack/ForemanTasks/Components/TasksTable/Components/ConfirmModal/index.js +29 -0
  125. data/webpack/ForemanTasks/Components/TasksTable/Components/SelectAllAlert.js +43 -0
  126. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/ActionSelectButton.test.js +2 -1
  127. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/SelectAllAlert.test.js +29 -0
  128. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/TableSelectionCell.test.js +1 -1
  129. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/TableSelectionHeaderCell.test.js +1 -1
  130. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/__snapshots__/ActionSelectButton.test.js.snap +11 -0
  131. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/__snapshots__/SelectAllAlert.test.js.snap +75 -0
  132. data/webpack/ForemanTasks/Components/TasksTable/SubTasksPage.js +4 -1
  133. data/webpack/ForemanTasks/Components/TasksTable/TasksBulkActions.js +247 -0
  134. data/webpack/ForemanTasks/Components/TasksTable/TasksTable.js +50 -22
  135. data/webpack/ForemanTasks/Components/TasksTable/TasksTableActions.js +62 -101
  136. data/webpack/ForemanTasks/Components/TasksTable/TasksTableConstants.js +18 -5
  137. data/webpack/ForemanTasks/Components/TasksTable/TasksTableHelpers.js +4 -3
  138. data/webpack/ForemanTasks/Components/TasksTable/TasksTablePage.js +65 -38
  139. data/webpack/ForemanTasks/Components/TasksTable/TasksTableReducer.js +26 -9
  140. data/webpack/ForemanTasks/Components/TasksTable/TasksTableSchema.js +2 -2
  141. data/webpack/ForemanTasks/Components/TasksTable/TasksTableSelectors.js +27 -16
  142. data/webpack/ForemanTasks/Components/TasksTable/__tests__/SubTasksPage.test.js +1 -1
  143. data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksBulkActions.test.js +147 -0
  144. data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksIndexPage.test.js +1 -1
  145. data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksTable.fixtures.js +4 -7
  146. data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksTable.test.js +1 -1
  147. data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksTableActions.test.js +46 -74
  148. data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksTableHelpers.test.js +17 -1
  149. data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksTablePage.test.js +10 -2
  150. data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksTableReducer.test.js +28 -8
  151. data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/SubTasksPage.test.js.snap +5 -7
  152. data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/TasksBulkActions.test.js.snap +336 -0
  153. data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/TasksIndexPage.test.js.snap +4 -7
  154. data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/TasksTableActions.test.js.snap +22 -158
  155. data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/TasksTablePage.test.js.snap +66 -44
  156. data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/TasksTableReducer.test.js.snap +43 -16
  157. data/webpack/ForemanTasks/Components/TasksTable/formatters/__test__/selectionHeaderCellFormatter.test.js +1 -1
  158. data/webpack/ForemanTasks/Components/TasksTable/formatters/selectionHeaderCellFormatter.js +2 -2
  159. data/webpack/ForemanTasks/Components/TasksTable/index.js +11 -4
  160. data/webpack/ForemanTasks/Components/common/ActionButtons/ActionButton.js +49 -21
  161. data/webpack/ForemanTasks/Components/common/ActionButtons/ActionButton.test.js +61 -14
  162. data/webpack/ForemanTasks/Components/common/ActionButtons/__snapshots__/ActionButton.test.js.snap +80 -21
  163. data/webpack/ForemanTasks/Components/common/ClickConfirmation/ClickConfirmation.scss +9 -0
  164. data/webpack/ForemanTasks/Components/common/ClickConfirmation/ClickConfirmation.test.js +44 -0
  165. data/webpack/ForemanTasks/Components/common/ClickConfirmation/__snapshots__/ClickConfirmation.test.js.snap +52 -0
  166. data/webpack/ForemanTasks/Components/common/ClickConfirmation/index.js +59 -66
  167. data/webpack/ForemanTasks/Components/common/ToastsHelpers/ToastTypesConstants.js +11 -0
  168. data/webpack/ForemanTasks/Components/common/ToastsHelpers/index.js +15 -0
  169. data/webpack/ForemanTasks/ForemanTasks.test.js +1 -1
  170. data/webpack/ForemanTasks/ForemanTasksReducers.js +2 -0
  171. data/webpack/ForemanTasks/Routes/ForemanTasksRouter.test.js +1 -1
  172. data/webpack/ForemanTasks/Routes/ForemanTasksRoutes.test.js +4 -4
  173. data/webpack/ForemanTasks/Routes/ShowTask/__tests__/ShowTask.test.js +1 -1
  174. data/webpack/__mocks__/foremanReact/components/ForemanModal/ForemanModalActions.js +2 -0
  175. data/webpack/__mocks__/foremanReact/components/ForemanModal/ForemanModalHooks.js +10 -0
  176. data/webpack/__mocks__/foremanReact/components/ForemanModal/index.js +18 -0
  177. data/webpack/__mocks__/foremanReact/components/common/ActionButtons/ActionButtons.js +3 -0
  178. metadata +71 -30
  179. data/.babelrc +0 -35
  180. data/.storybook/addons.js +0 -2
  181. data/.storybook/config.js +0 -7
  182. data/.storybook/webpack.config.js +0 -63
  183. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksTimeRow/Components/TimeDropDown/TimeDropDown.stories.js +0 -23
  184. data/webpack/ForemanTasks/Components/TasksTable/Components/ActionConfirmation.js +0 -49
  185. data/webpack/ForemanTasks/Components/TasksTable/Components/CancelResumeConfirm.js +0 -51
  186. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/ActionConfirmation.test.js +0 -18
  187. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/CancelResumeConfirm.test.js +0 -28
  188. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/__snapshots__/ActionConfirmation.test.js.snap +0 -89
  189. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/__snapshots__/CancelResumeConfirm.test.js.snap +0 -37
  190. data/webpack/ForemanTasks/Components/common/ActionButtons/CancelButton.js +0 -23
  191. data/webpack/ForemanTasks/Components/common/ActionButtons/CancelButton.test.js +0 -27
  192. data/webpack/ForemanTasks/Components/common/ActionButtons/ResumeButton.js +0 -23
  193. data/webpack/ForemanTasks/Components/common/ActionButtons/ResumeButton.test.js +0 -27
  194. data/webpack/ForemanTasks/Components/common/ActionButtons/__snapshots__/CancelButton.test.js.snap +0 -15
  195. data/webpack/ForemanTasks/Components/common/ActionButtons/__snapshots__/ResumeButton.test.js.snap +0 -15
  196. data/webpack/stories/index.js +0 -10
  197. data/webpack/stories/index.scss +0 -7
  198. data/webpack/test_setup.js +0 -6
@@ -32,9 +32,7 @@ exports[`TaskInfo rendering render with Props 1`] = `
32
32
  sm={6}
33
33
  >
34
34
  <span>
35
- <EllipisWithTooltip>
36
- Monitor Event Queue
37
- </EllipisWithTooltip>
35
+ Monitor Event Queue
38
36
  </span>
39
37
  </Col>
40
38
  <Col
@@ -56,7 +54,7 @@ exports[`TaskInfo rendering render with Props 1`] = `
56
54
  md={3}
57
55
  sm={6}
58
56
  >
59
- <Component
57
+ <_default
60
58
  date="2019-06-17 16:04:09 +0300"
61
59
  defaultValue="N/A"
62
60
  />
@@ -115,7 +113,7 @@ exports[`TaskInfo rendering render with Props 1`] = `
115
113
  md={3}
116
114
  sm={6}
117
115
  >
118
- <Component
116
+ <_default
119
117
  date="2019-06-17 16:04:09 +0300"
120
118
  defaultValue="N/A"
121
119
  />
@@ -168,7 +166,7 @@ exports[`TaskInfo rendering render with Props 1`] = `
168
166
  md={3}
169
167
  sm={6}
170
168
  >
171
- <Component
169
+ <_default
172
170
  date={null}
173
171
  defaultValue="N/A"
174
172
  />
@@ -294,9 +292,7 @@ exports[`TaskInfo rendering render with Props 1`] = `
294
292
  </p>
295
293
  <p>
296
294
  A paused task represents a process that has not finished properly. Any task in paused state can lead to potential inconsistency and needs to be resolved.
297
- <br />
298
- The recommended approach is to investigate the error messages below and in 'errors' tab, address the primary cause of the issue and resume the task.
299
- <br />
295
+ The recommended approach is to investigate the error messages below and in 'errors' tab, address the primary cause of the issue and resume the task.
300
296
  </p>
301
297
  </Col>
302
298
  </Row>
@@ -335,9 +331,7 @@ exports[`TaskInfo rendering render without Props 1`] = `
335
331
  sm={6}
336
332
  >
337
333
  <span>
338
- <EllipisWithTooltip>
339
- N/A
340
- </EllipisWithTooltip>
334
+ N/A
341
335
  </span>
342
336
  </Col>
343
337
  <Col
@@ -359,7 +353,7 @@ exports[`TaskInfo rendering render without Props 1`] = `
359
353
  md={3}
360
354
  sm={6}
361
355
  >
362
- <Component
356
+ <_default
363
357
  date=""
364
358
  defaultValue="N/A"
365
359
  />
@@ -418,7 +412,7 @@ exports[`TaskInfo rendering render without Props 1`] = `
418
412
  md={3}
419
413
  sm={6}
420
414
  >
421
- <Component
415
+ <_default
422
416
  date=""
423
417
  defaultValue="N/A"
424
418
  />
@@ -469,7 +463,7 @@ exports[`TaskInfo rendering render without Props 1`] = `
469
463
  md={3}
470
464
  sm={6}
471
465
  >
472
- <Component
466
+ <_default
473
467
  date=""
474
468
  defaultValue="N/A"
475
469
  />
@@ -1,5 +1,9 @@
1
1
  import React from 'react';
2
- import { storiesOf } from '@storybook/react';
3
2
  import TaskDetails from './TaskDetails';
4
3
 
5
- storiesOf('TaskDetails', module).add('TaskDetails', () => <TaskDetails />);
4
+ export default {
5
+ title: 'TaskDetails',
6
+ component: TaskDetails,
7
+ };
8
+
9
+ export const Basic = () => <TaskDetails />;
@@ -9,13 +9,7 @@ import {
9
9
  FOREMAN_TASK_DETAILS_FETCH_TASK_FAILURE,
10
10
  FOREMAN_TASK_DETAILS_STOP_POLLING,
11
11
  FOREMAN_TASK_DETAILS_START_POLLING,
12
- FOREMAN_TASK_DETAILS_TOGGLE_UNLOCK_MODAL,
13
- FOREMAN_TASK_DETAILS_TOGGLE_FORCE_UNLOCK_MODAL,
14
12
  } from './TaskDetailsConstants';
15
- import {
16
- cancelTaskRequest,
17
- resumeTaskRequest,
18
- } from '../TasksTable/TasksTableActions';
19
13
 
20
14
  export const taskReloadStop = timeoutId => {
21
15
  if (timeoutId) {
@@ -66,10 +60,10 @@ export const fetchTaskDetails = (
66
60
  id,
67
61
  timeoutId,
68
62
  refetchTaskDetailsAction
69
- ) => dispatch => {
63
+ ) => async dispatch => {
70
64
  showLoading();
71
65
  dispatch(startRequest());
72
- getTasksDetails(id, dispatch, timeoutId, refetchTaskDetailsAction);
66
+ await getTasksDetails(id, dispatch, timeoutId, refetchTaskDetailsAction);
73
67
  };
74
68
 
75
69
  const getTasksDetails = async (
@@ -104,12 +98,3 @@ const requestFailure = error => ({
104
98
  type: FOREMAN_TASK_DETAILS_FETCH_TASK_FAILURE,
105
99
  payload: error,
106
100
  });
107
-
108
- export const toggleUnlockModal = () => ({
109
- type: FOREMAN_TASK_DETAILS_TOGGLE_UNLOCK_MODAL,
110
- });
111
- export const toggleForceUnlockModal = () => ({
112
- type: FOREMAN_TASK_DETAILS_TOGGLE_FORCE_UNLOCK_MODAL,
113
- });
114
-
115
- export { cancelTaskRequest, resumeTaskRequest };
@@ -11,8 +11,3 @@ export const FOREMAN_TASK_DETAILS_STOP_POLLING =
11
11
  'FOREMAN_TASK_DETAILS_STOP_POLLING';
12
12
  export const FOREMAN_TASK_DETAILS_START_POLLING =
13
13
  'FOREMAN_TASK_DETAILS_START_POLLING';
14
-
15
- export const FOREMAN_TASK_DETAILS_TOGGLE_UNLOCK_MODAL =
16
- 'FOREMAN_TASK_DETAILS_TOGGLE_UNLOCK_MODAL';
17
- export const FOREMAN_TASK_DETAILS_TOGGLE_FORCE_UNLOCK_MODAL =
18
- 'FOREMAN_TASK_DETAILS_TOGGLE_FORCE_UNLOCK_MODAL';
@@ -4,8 +4,6 @@ import {
4
4
  FOREMAN_TASK_DETAILS_FETCH_TASK_SUCCESS,
5
5
  FOREMAN_TASK_DETAILS_STOP_POLLING,
6
6
  FOREMAN_TASK_DETAILS_START_POLLING,
7
- FOREMAN_TASK_DETAILS_TOGGLE_UNLOCK_MODAL,
8
- FOREMAN_TASK_DETAILS_TOGGLE_FORCE_UNLOCK_MODAL,
9
7
  } from './TaskDetailsConstants';
10
8
 
11
9
  const initialState = Immutable({});
@@ -34,10 +32,6 @@ export default (state = initialState, action) => {
34
32
  case FOREMAN_TASK_DETAILS_START_POLLING:
35
33
  clearTimeout(state.timeoutId);
36
34
  return state.merge({ taskReload: true, timeoutId: payload.timeoutId });
37
- case FOREMAN_TASK_DETAILS_TOGGLE_UNLOCK_MODAL:
38
- return state.set('showUnlockModal', !state.showUnlockModal);
39
- case FOREMAN_TASK_DETAILS_TOGGLE_FORCE_UNLOCK_MODAL:
40
- return state.set('showForceUnlockModal', !state.showForceUnlockModal);
41
35
  default:
42
36
  return state;
43
37
  }
@@ -52,9 +52,6 @@ export const selectHelp = state => selectTaskDetails(state).help || null;
52
52
  export const selectHasSubTasks = state =>
53
53
  selectTaskDetails(state).has_sub_tasks || false;
54
54
 
55
- export const selectAllowDangerousActions = state =>
56
- selectTaskDetails(state).allowDangerousActions || false;
57
-
58
55
  export const selectLocks = state => selectTaskDetails(state).locks || [];
59
56
 
60
57
  export const selectUsernamePath = state =>
@@ -75,11 +72,8 @@ export const selectTaskReload = state =>
75
72
  export const selectParentTask = state =>
76
73
  selectTaskDetails(state).parent_task_id || '';
77
74
 
78
- export const selectShowUnlockModal = state =>
79
- selectTaskDetails(state).showUnlockModal || false;
80
-
81
- export const selectShowForceUnlockModal = state =>
82
- selectTaskDetails(state).showForceUnlockModal || false;
83
-
84
75
  export const selectExternalId = state =>
85
76
  selectTaskDetails(state).external_id || null;
77
+
78
+ export const selectDynflowEnableConsole = state =>
79
+ selectTaskDetails(state).dynflow_enable_console || false;
@@ -1 +1,6 @@
1
- export const getTaskID = () => window.location.pathname.split('/').slice(-1)[0];
1
+ // Get Task ID from URL. Split url by '/', filter non-empty values and get Task ID.
2
+ export const getTaskID = () =>
3
+ window.location.pathname
4
+ .split('/')
5
+ .filter(i => i)
6
+ .slice(-1)[0];
@@ -1,4 +1,4 @@
1
- import { testComponentSnapshotsWithFixtures } from 'react-redux-test-utils';
1
+ import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
2
 
3
3
  import TaskDetails from '../TaskDetails';
4
4
 
@@ -6,6 +6,11 @@ const fixtures = {
6
6
  'render without Props': {},
7
7
  };
8
8
 
9
+ delete window.location;
10
+ window.location = new URL(
11
+ 'https://foreman.com/foreman_tasks/tasks/a15dd820-32f1-4ced-9ab7-c0fab8234c47/'
12
+ );
13
+
9
14
  describe('TaskDetails', () => {
10
15
  describe('rendering', () =>
11
16
  testComponentSnapshotsWithFixtures(TaskDetails, fixtures));
@@ -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 {
4
4
  taskReloadStop,
@@ -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_TASK_DETAILS_FETCH_TASK_SUCCESS,
@@ -15,9 +15,9 @@ exports[`TaskDetails rendering render without Props 1`] = `
15
15
  >
16
16
  <Task
17
17
  action=""
18
- allowDangerousActions={false}
19
18
  cancelTaskRequest={[Function]}
20
19
  cancellable={false}
20
+ dynflowEnableConsole={false}
21
21
  endedAt=""
22
22
  error={Array []}
23
23
  executionPlan={Object {}}
@@ -26,7 +26,7 @@ exports[`TaskDetails rendering render without Props 1`] = `
26
26
  fetchTaskDetails={[Function]}
27
27
  hasSubTasks={false}
28
28
  help=""
29
- id=""
29
+ id="a15dd820-32f1-4ced-9ab7-c0fab8234c47"
30
30
  input={Array []}
31
31
  label=""
32
32
  locks={Array []}
@@ -38,8 +38,6 @@ exports[`TaskDetails rendering render without Props 1`] = `
38
38
  resumable={false}
39
39
  resumeTaskRequest={[Function]}
40
40
  runningSteps={Array []}
41
- showForceUnlockModal={false}
42
- showUnlockModal={false}
43
41
  startAt=""
44
42
  startBefore=""
45
43
  startedAt=""
@@ -48,8 +46,6 @@ exports[`TaskDetails rendering render without Props 1`] = `
48
46
  taskReloadStart={[Function]}
49
47
  taskReloadStop={[Function]}
50
48
  timeoutId={null}
51
- toggleForceUnlockModal={[Function]}
52
- toggleUnlockModal={[Function]}
53
49
  username=""
54
50
  usernamePath=""
55
51
  />
@@ -87,7 +83,7 @@ exports[`TaskDetails rendering render without Props 1`] = `
87
83
  <Raw
88
84
  endedAt=""
89
85
  externalId=""
90
- id=""
86
+ id="a15dd820-32f1-4ced-9ab7-c0fab8234c47"
91
87
  input={Array []}
92
88
  label=""
93
89
  output={Object {}}
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
 
3
3
  import API from 'foremanReact/API';
4
- import { IntegrationTestHelper } from 'react-redux-test-utils';
4
+ import { IntegrationTestHelper } from '@theforeman/test';
5
5
 
6
6
  import TaskDetails, { reducers } from '../index';
7
7
  import { selectForemanTasks } from '../../../ForemanTasksSelectors';
@@ -15,6 +15,10 @@ describe('TaskDetails integration test', () => {
15
15
  const expectedIntervalId = 1;
16
16
  jest.useFakeTimers();
17
17
  setInterval.mockImplementation(() => expectedIntervalId);
18
+ delete window.location;
19
+ window.location = new URL(
20
+ 'https://foreman.com/foreman_tasks/tasks/a15dd820-32f1-4ced-9ab7-c0fab8234c47/'
21
+ );
18
22
  });
19
23
  it('should flow', async () => {
20
24
  window.location.reload = jest.fn();
@@ -1,7 +1,8 @@
1
1
  import { bindActionCreators } from 'redux';
2
2
  import { connect } from 'react-redux';
3
3
  import TaskDetails from './TaskDetails';
4
- import * as actions from './TaskDetailsActions';
4
+ import * as taskDetailsActions from './TaskDetailsActions';
5
+ import * as taskActions from '../TaskActions';
5
6
  import reducer from './TaskDetailsReducer';
6
7
  import {
7
8
  selectEndedAt,
@@ -22,7 +23,6 @@ import {
22
23
  selectFailedSteps,
23
24
  selectRunningSteps,
24
25
  selectHasSubTasks,
25
- selectAllowDangerousActions,
26
26
  selectUsernamePath,
27
27
  selectAction,
28
28
  selectState,
@@ -30,9 +30,8 @@ import {
30
30
  selectTimeoutId,
31
31
  selectTaskReload,
32
32
  selectParentTask,
33
- selectShowUnlockModal,
34
- selectShowForceUnlockModal,
35
33
  selectExternalId,
34
+ selectDynflowEnableConsole,
36
35
  } from './TaskDetailsSelectors';
37
36
 
38
37
  const mapStateToProps = state => ({
@@ -53,7 +52,6 @@ const mapStateToProps = state => ({
53
52
  runningSteps: selectRunningSteps(state),
54
53
  help: selectHelp(state),
55
54
  hasSubTasks: selectHasSubTasks(state),
56
- allowDangerousActions: selectAllowDangerousActions(state),
57
55
  locks: selectLocks(state),
58
56
  usernamePath: selectUsernamePath(state),
59
57
  action: selectAction(state),
@@ -62,12 +60,12 @@ const mapStateToProps = state => ({
62
60
  timeoutId: selectTimeoutId(state),
63
61
  taskReload: selectTaskReload(state),
64
62
  parentTask: selectParentTask(state),
65
- showUnlockModal: selectShowUnlockModal(state),
66
- showForceUnlockModal: selectShowForceUnlockModal(state),
67
63
  externalId: selectExternalId(state),
64
+ dynflowEnableConsole: selectDynflowEnableConsole(state),
68
65
  });
69
66
 
70
- const mapDispatchToProps = dispatch => bindActionCreators(actions, dispatch);
67
+ const mapDispatchToProps = dispatch =>
68
+ bindActionCreators({ ...taskActions, ...taskDetailsActions }, dispatch);
71
69
 
72
70
  export const reducers = { taskDetails: reducer };
73
71
 
@@ -1,7 +1,5 @@
1
1
  import React from 'react';
2
- import { storiesOf } from '@storybook/react';
3
- import { withKnobs, number, select } from '@storybook/addon-knobs';
4
- import { action } from '@storybook/addon-actions';
2
+ import { action, number, select } from '@theforeman/stories';
5
3
  import { withCardsDecorator } from '../../../../../../../stories/decorators';
6
4
 
7
5
  import {
@@ -11,41 +9,47 @@ import {
11
9
  } from '../../../../TasksDashboardConstants';
12
10
  import PausedTasksCard from './PausedTasksCard';
13
11
 
14
- storiesOf('TasksDashboard/TasksCardsGrid', module)
15
- .addDecorator(withKnobs)
16
- .addDecorator(withCardsDecorator)
17
- .add('PausedTasksCard', () => {
18
- const selectTime = select(
19
- 'time',
20
- TASKS_DASHBOARD_AVAILABLE_TIMES,
21
- PausedTasksCard.defaultProps.time
22
- );
12
+ export default {
13
+ title: 'TasksDashboard/TasksCardsGrid/Cards/PausedTasksCard',
14
+ component: PausedTasksCard,
15
+ decorators: [withCardsDecorator],
16
+ parameters: {
17
+ centered: { disable: true },
18
+ },
19
+ };
23
20
 
24
- const selectMode = select(
25
- 'mode',
26
- { ...TASKS_DASHBOARD_AVAILABLE_QUERY_MODES, NONE: 'none', TOTAL: null },
27
- 'none'
28
- );
29
- return (
30
- <PausedTasksCard
31
- data={{
32
- last: number('data.last', 3),
33
- older: number('data.older', 5),
34
- }}
35
- time={selectTime}
36
- query={{
37
- state: select(
38
- 'query.state',
39
- {
40
- ...TASKS_DASHBOARD_AVAILABLE_QUERY_STATES,
41
- NONE: null,
42
- },
43
- TASKS_DASHBOARD_AVAILABLE_QUERY_STATES.PAUSED
44
- ),
45
- mode: selectMode,
46
- time: selectTime,
47
- }}
48
- updateQuery={action('updateQuery')}
49
- />
50
- );
51
- });
21
+ export const Basic = () => {
22
+ const selectTime = select(
23
+ 'time',
24
+ TASKS_DASHBOARD_AVAILABLE_TIMES,
25
+ PausedTasksCard.defaultProps.time
26
+ );
27
+
28
+ const selectMode = select(
29
+ 'mode',
30
+ { ...TASKS_DASHBOARD_AVAILABLE_QUERY_MODES, NONE: 'none', TOTAL: null },
31
+ 'none'
32
+ );
33
+ return (
34
+ <PausedTasksCard
35
+ data={{
36
+ last: number('data.last', 3),
37
+ older: number('data.older', 5),
38
+ }}
39
+ time={selectTime}
40
+ query={{
41
+ state: select(
42
+ 'query.state',
43
+ {
44
+ ...TASKS_DASHBOARD_AVAILABLE_QUERY_STATES,
45
+ NONE: null,
46
+ },
47
+ TASKS_DASHBOARD_AVAILABLE_QUERY_STATES.PAUSED
48
+ ),
49
+ mode: selectMode,
50
+ time: selectTime,
51
+ }}
52
+ updateQuery={action('updateQuery')}
53
+ />
54
+ );
55
+ };
@@ -1,4 +1,4 @@
1
- import { testComponentSnapshotsWithFixtures } from 'react-redux-test-utils';
1
+ import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
2
 
3
3
  import PausedTasksCard from './PausedTasksCard';
4
4