foreman-tasks 0.15.1 → 0.15.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. checksums.yaml +4 -4
  2. data/.babelrc +9 -1
  3. data/.eslintrc +6 -0
  4. data/.gitignore +1 -0
  5. data/.rubocop.yml +6 -0
  6. data/.storybook/webpack.config.js +51 -54
  7. data/app/controllers/foreman_tasks/api/tasks_controller.rb +0 -2
  8. data/app/controllers/foreman_tasks/tasks_controller.rb +6 -1
  9. data/app/helpers/foreman_tasks/foreman_tasks_helper.rb +8 -0
  10. data/app/lib/actions/base.rb +7 -0
  11. data/app/lib/actions/helpers/lifecycle_logging.rb +21 -0
  12. data/app/lib/actions/proxy_action.rb +4 -2
  13. data/app/models/foreman_tasks/task.rb +23 -0
  14. data/app/models/foreman_tasks/task/summarizer.rb +96 -6
  15. data/app/models/foreman_tasks/triggering.rb +2 -2
  16. data/app/models/setting/foreman_tasks.rb +8 -1
  17. data/app/services/foreman_tasks/dashboard_table_filter.rb +47 -0
  18. data/app/services/foreman_tasks/troubleshooting_help_generator.rb +92 -0
  19. data/app/services/ui_notifications/tasks.rb +20 -0
  20. data/app/services/ui_notifications/tasks/task_paused_admin.rb +43 -0
  21. data/app/services/ui_notifications/tasks/task_paused_owner.rb +30 -0
  22. data/app/views/foreman_tasks/tasks/_details.html.erb +5 -3
  23. data/app/views/foreman_tasks/tasks/index.html.erb +13 -0
  24. data/config/routes.rb +1 -0
  25. data/db/migrate/20190318153925_add_task_state_updated_at.foreman_tasks.rb +5 -0
  26. data/db/migrate/20190404132157_add_implicit_varchar_uuid_cast.rb +25 -0
  27. data/db/seeds.d/30-notification_blueprints.rb +33 -0
  28. data/foreman-tasks.gemspec +1 -1
  29. data/lib/foreman_tasks/cleaner.rb +5 -4
  30. data/lib/foreman_tasks/engine.rb +1 -1
  31. data/lib/foreman_tasks/test_helpers.rb +10 -0
  32. data/lib/foreman_tasks/version.rb +1 -1
  33. data/package.json +14 -11
  34. data/test/controllers/tasks_controller_test.rb +10 -0
  35. data/test/foreman_tasks_test_helper.rb +4 -0
  36. data/test/support/dummy_dynflow_action.rb +29 -0
  37. data/test/support/history_tasks_builder.rb +42 -0
  38. data/test/unit/actions/action_with_sub_plans_test.rb +4 -1
  39. data/test/unit/actions/bulk_action_test.rb +2 -0
  40. data/test/unit/cleaner_test.rb +15 -0
  41. data/test/unit/dashboard_table_filter_test.rb +65 -0
  42. data/test/unit/summarizer_test.rb +39 -0
  43. data/test/unit/task_test.rb +14 -0
  44. data/test/unit/troubleshooting_help_generator_test.rb +71 -0
  45. data/test/unit/ui_notifications_test.rb +86 -0
  46. data/webpack/ForemanTasks/Components/Chart/Chart.js +128 -0
  47. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/PausedTasksCard/PausedTasksCard.js +20 -0
  48. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/PausedTasksCard/PausedTasksCard.stories.js +51 -0
  49. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/PausedTasksCard/PausedTasksCard.test.js +11 -0
  50. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/PausedTasksCard/__snapshots__/PausedTasksCard.test.js.snap +36 -0
  51. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/RunningTasksCard/RunningTasksCard.js +20 -0
  52. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/RunningTasksCard/RunningTasksCard.stories.js +51 -0
  53. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/RunningTasksCard/RunningTasksCard.test.js +11 -0
  54. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/RunningTasksCard/__snapshots__/RunningTasksCard.test.js.snap +36 -0
  55. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/ScheduledTasksCard/ScheduledTasksCard.js +64 -0
  56. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/ScheduledTasksCard/ScheduledTasksCard.scss +25 -0
  57. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/ScheduledTasksCard/ScheduledTasksCard.stories.js +28 -0
  58. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/ScheduledTasksCard/ScheduledTasksCard.test.js +18 -0
  59. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/ScheduledTasksCard/__snapshots__/ScheduledTasksCard.test.js.snap +94 -0
  60. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/StoppedTasksCard/StoppedTasksCard.js +89 -0
  61. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/StoppedTasksCard/StoppedTasksCard.scss +46 -0
  62. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/StoppedTasksCard/StoppedTasksCard.stories.js +72 -0
  63. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/StoppedTasksCard/StoppedTasksCard.test.js +48 -0
  64. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/StoppedTasksCard/StoppedTasksCardHelper.js +63 -0
  65. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/StoppedTasksCard/__snapshots__/StoppedTasksCard.test.js.snap +973 -0
  66. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/TasksDonutCard/TasksDonutCard.js +96 -0
  67. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/TasksDonutCard/TasksDonutCard.scss +17 -0
  68. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/TasksDonutCard/TasksDonutCard.stories.js +46 -0
  69. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/TasksDonutCard/TasksDonutCard.test.js +43 -0
  70. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/TasksDonutCard/__snapshots__/TasksDonutCard.test.js.snap +183 -0
  71. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/TasksDonutChart/TasksDonutChart.js +166 -0
  72. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/TasksDonutChart/TasksDonutChart.scss +24 -0
  73. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/TasksDonutChart/TasksDonutChart.stories.js +25 -0
  74. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/TasksDonutChart/TasksDonutChart.test.js +40 -0
  75. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/TasksDonutChart/TasksDonutChartConstants.js +13 -0
  76. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/TasksDonutChart/TasksDonutChartHelper.js +94 -0
  77. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/TasksDonutChart/TasksDonutChartHelper.test.js +152 -0
  78. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/TasksDonutChart/__snapshots__/TasksDonutChart.test.js.snap +302 -0
  79. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/TasksDonutChart/__snapshots__/TasksDonutChartHelper.test.js.snap +21 -0
  80. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/TasksCardsGrid.fixtures.js +25 -0
  81. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/TasksCardsGrid.js +72 -0
  82. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/TasksCardsGrid.stories.js +52 -0
  83. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/TasksCardsGrid.test.js +21 -0
  84. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/__snapshots__/TasksCardsGrid.test.js.snap +223 -0
  85. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksLabelsRow/TasksLabelsRow.js +57 -0
  86. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksLabelsRow/TasksLabelsRow.scss +26 -0
  87. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksLabelsRow/TasksLabelsRow.stories.js +22 -0
  88. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksLabelsRow/TasksLabelsRow.test.js +57 -0
  89. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksLabelsRow/__snapshots__/TasksLabelsRow.test.js.snap +47 -0
  90. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksTimeRow/Components/TimeDropDown/TimeDropDown.js +51 -0
  91. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksTimeRow/Components/TimeDropDown/TimeDropDown.stories.js +23 -0
  92. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksTimeRow/Components/TimeDropDown/TimeDropDown.test.js +19 -0
  93. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksTimeRow/Components/TimeDropDown/__snapshots__/TimeDropDown.test.js.snap +85 -0
  94. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksTimeRow/TasksTimeRow.js +33 -0
  95. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksTimeRow/TasksTimeRow.scss +11 -0
  96. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksTimeRow/TasksTimeRow.stories.js +22 -0
  97. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksTimeRow/TasksTimeRow.test.js +15 -0
  98. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksTimeRow/__snapshots__/TasksTimeRow.test.js.snap +41 -0
  99. data/webpack/ForemanTasks/Components/TasksDashboard/TasksDashboard.js +77 -0
  100. data/webpack/ForemanTasks/Components/TasksDashboard/TasksDashboard.scss +6 -0
  101. data/webpack/ForemanTasks/Components/TasksDashboard/TasksDashboardActions.js +62 -0
  102. data/webpack/ForemanTasks/Components/TasksDashboard/TasksDashboardConstants.js +94 -0
  103. data/webpack/ForemanTasks/Components/TasksDashboard/TasksDashboardHelper.js +78 -0
  104. data/webpack/ForemanTasks/Components/TasksDashboard/TasksDashboardPropTypes.js +13 -0
  105. data/webpack/ForemanTasks/Components/TasksDashboard/TasksDashboardReducer.js +50 -0
  106. data/webpack/ForemanTasks/Components/TasksDashboard/TasksDashboardSelectors.js +44 -0
  107. data/webpack/ForemanTasks/Components/TasksDashboard/__tests__/TasksDashboard.test.js +13 -0
  108. data/webpack/ForemanTasks/Components/TasksDashboard/__tests__/TasksDashboardActions.test.js +37 -0
  109. data/webpack/ForemanTasks/Components/TasksDashboard/__tests__/TasksDashboardHelper.test.js +36 -0
  110. data/webpack/ForemanTasks/Components/TasksDashboard/__tests__/TasksDashboardReducer.test.js +58 -0
  111. data/webpack/ForemanTasks/Components/TasksDashboard/__tests__/TasksDashboardSelectors.test..js +59 -0
  112. data/webpack/ForemanTasks/Components/TasksDashboard/__tests__/__snapshots__/TasksDashboard.test.js.snap +51 -0
  113. data/webpack/ForemanTasks/Components/TasksDashboard/__tests__/__snapshots__/TasksDashboardActions.test.js.snap +61 -0
  114. data/webpack/ForemanTasks/Components/TasksDashboard/__tests__/__snapshots__/TasksDashboardReducer.test.js.snap +280 -0
  115. data/webpack/ForemanTasks/Components/TasksDashboard/index.js +25 -0
  116. data/webpack/ForemanTasks/ForemanTasksReducers.js +10 -0
  117. data/webpack/ForemanTasks/ForemanTasksSelectors.js +1 -0
  118. data/webpack/__mocks__/foremanReact/API.js +7 -0
  119. data/webpack/__mocks__/foremanReact/common/I18n.js +5 -0
  120. data/webpack/__mocks__/foremanReact/common/helpers.js +3 -0
  121. data/webpack/index.js +13 -1
  122. data/webpack/stories/decorators/index.js +1 -0
  123. data/webpack/stories/decorators/withCardsDecorator.js +14 -0
  124. data/webpack/stories/index.js +1 -3
  125. data/webpack/stories/index.scss +6 -0
  126. metadata +101 -8
  127. data/webpack/ForemanTasks/components/Hello/Hello.stories.js +0 -5
  128. data/webpack/ForemanTasks/components/Hello/__tests__/Hello.test.js +0 -11
  129. data/webpack/ForemanTasks/components/Hello/__tests__/__snapshots__/Hello.test.js.snap +0 -7
  130. data/webpack/ForemanTasks/components/Hello/index.js +0 -5
@@ -0,0 +1,48 @@
1
+ import { testComponentSnapshotsWithFixtures } from 'react-redux-test-utils';
2
+ import {
3
+ TASKS_DASHBOARD_AVAILABLE_TIMES,
4
+ TASKS_DASHBOARD_AVAILABLE_QUERY_STATES,
5
+ TASKS_DASHBOARD_AVAILABLE_QUERY_MODES,
6
+ TASKS_DASHBOARD_AVAILABLE_QUERY_RESULTS,
7
+ } from '../../../../TasksDashboardConstants';
8
+ import StoppedTasksCard from './StoppedTasksCard';
9
+
10
+ const { STOPPED } = TASKS_DASHBOARD_AVAILABLE_QUERY_STATES;
11
+ const { LAST } = TASKS_DASHBOARD_AVAILABLE_QUERY_MODES;
12
+ const { WEEK } = TASKS_DASHBOARD_AVAILABLE_TIMES;
13
+
14
+ const fixtures = {
15
+ 'render with minimal props': {},
16
+ 'render with props': {
17
+ data: {
18
+ error: { total: 9, last: 1 },
19
+ warning: { total: 8, last: 2 },
20
+ success: { total: 7, last: 3 },
21
+ },
22
+ time: WEEK,
23
+ },
24
+ 'render selected': {
25
+ query: { state: STOPPED },
26
+ },
27
+ };
28
+
29
+ Object.values(TASKS_DASHBOARD_AVAILABLE_QUERY_RESULTS).forEach(result => {
30
+ fixtures[`render ${result}-total selected`] = {
31
+ query: {
32
+ state: STOPPED,
33
+ result,
34
+ },
35
+ };
36
+ fixtures[`render ${result}-last selected`] = {
37
+ time: WEEK,
38
+ query: {
39
+ state: STOPPED,
40
+ result,
41
+ mode: LAST,
42
+ time: WEEK,
43
+ },
44
+ };
45
+ });
46
+
47
+ describe('StoppedTasksCard', () =>
48
+ testComponentSnapshotsWithFixtures(StoppedTasksCard, fixtures));
@@ -0,0 +1,63 @@
1
+ import React from 'react';
2
+ import { capitalize } from 'lodash';
3
+ import classNames from 'classnames';
4
+ import { Icon } from 'patternfly-react';
5
+ import {
6
+ TASKS_DASHBOARD_AVAILABLE_QUERY_STATES,
7
+ TASKS_DASHBOARD_AVAILABLE_QUERY_MODES,
8
+ } from '../../../../TasksDashboardConstants';
9
+
10
+ const resultIcons = {
11
+ error: <Icon type="pf" name="error-circle-o" />,
12
+ warning: <Icon type="pf" name="warning-triangle-o" />,
13
+ success: <Icon type="pf" name="ok" />,
14
+ };
15
+
16
+ export const StoppedTable = (data, query, time, updateQuery) =>
17
+ Object.entries(data).map(([result, { total, last }]) => {
18
+ const { STOPPED } = TASKS_DASHBOARD_AVAILABLE_QUERY_STATES;
19
+ const { LAST } = TASKS_DASHBOARD_AVAILABLE_QUERY_MODES;
20
+ const { state, mode } = query;
21
+
22
+ const active = state === STOPPED && query.result === result;
23
+ const activeTotal = active && mode !== LAST;
24
+ const activeLast = active && mode === LAST && query.time === time;
25
+ const notFocusedTotal =
26
+ state && !(state === STOPPED && !query.result) && !activeTotal;
27
+ const notFocusedLast =
28
+ state && !(state === STOPPED && !query.result) && !activeLast;
29
+
30
+ return (
31
+ <tr key={result}>
32
+ <td>
33
+ {resultIcons[result]}
34
+ {capitalize(result)}
35
+ </td>
36
+ <td
37
+ className={classNames('data-col', {
38
+ active: active && mode !== LAST,
39
+ 'not-focused': notFocusedTotal,
40
+ })}
41
+ onClick={() => updateQuery({ state: STOPPED, result })}
42
+ >
43
+ {total}
44
+ </td>
45
+ <td
46
+ className={classNames('data-col', {
47
+ active: activeLast,
48
+ 'not-focused': notFocusedLast,
49
+ })}
50
+ onClick={() =>
51
+ updateQuery({
52
+ state: STOPPED,
53
+ result,
54
+ mode: LAST,
55
+ time,
56
+ })
57
+ }
58
+ >
59
+ {last}
60
+ </td>
61
+ </tr>
62
+ );
63
+ });
@@ -0,0 +1,973 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`StoppedTasksCard render error-last selected 1`] = `
4
+ <Card
5
+ accented={false}
6
+ aggregated={false}
7
+ aggregatedMini={false}
8
+ cardRef={null}
9
+ className="tasks-donut-card stopped-tasks-card selected-tasks-card"
10
+ matchHeight={false}
11
+ >
12
+ <CardTitle
13
+ className=""
14
+ onClick={[Function]}
15
+ >
16
+ Stopped
17
+ </CardTitle>
18
+ <CardBody
19
+ className=""
20
+ >
21
+ <table
22
+ className="table table-bordered table-striped stopped-table"
23
+ >
24
+ <thead>
25
+ <tr>
26
+ <th />
27
+ <th>
28
+ Total
29
+ </th>
30
+ <th>
31
+ week
32
+ </th>
33
+ </tr>
34
+ </thead>
35
+ <tbody>
36
+ <tr
37
+ key="error"
38
+ >
39
+ <td>
40
+ <Icon
41
+ name="error-circle-o"
42
+ type="pf"
43
+ />
44
+ Error
45
+ </td>
46
+ <td
47
+ className="data-col not-focused"
48
+ onClick={[Function]}
49
+ >
50
+ 0
51
+ </td>
52
+ <td
53
+ className="data-col active"
54
+ onClick={[Function]}
55
+ >
56
+ 0
57
+ </td>
58
+ </tr>
59
+ <tr
60
+ key="warning"
61
+ >
62
+ <td>
63
+ <Icon
64
+ name="warning-triangle-o"
65
+ type="pf"
66
+ />
67
+ Warning
68
+ </td>
69
+ <td
70
+ className="data-col not-focused"
71
+ onClick={[Function]}
72
+ >
73
+ 0
74
+ </td>
75
+ <td
76
+ className="data-col not-focused"
77
+ onClick={[Function]}
78
+ >
79
+ 0
80
+ </td>
81
+ </tr>
82
+ <tr
83
+ key="success"
84
+ >
85
+ <td>
86
+ <Icon
87
+ name="ok"
88
+ type="pf"
89
+ />
90
+ Success
91
+ </td>
92
+ <td
93
+ className="data-col not-focused"
94
+ onClick={[Function]}
95
+ >
96
+ 0
97
+ </td>
98
+ <td
99
+ className="data-col not-focused"
100
+ onClick={[Function]}
101
+ >
102
+ 0
103
+ </td>
104
+ </tr>
105
+ </tbody>
106
+ </table>
107
+ </CardBody>
108
+ </Card>
109
+ `;
110
+
111
+ exports[`StoppedTasksCard render error-total selected 1`] = `
112
+ <Card
113
+ accented={false}
114
+ aggregated={false}
115
+ aggregatedMini={false}
116
+ cardRef={null}
117
+ className="tasks-donut-card stopped-tasks-card selected-tasks-card"
118
+ matchHeight={false}
119
+ >
120
+ <CardTitle
121
+ className=""
122
+ onClick={[Function]}
123
+ >
124
+ Stopped
125
+ </CardTitle>
126
+ <CardBody
127
+ className=""
128
+ >
129
+ <table
130
+ className="table table-bordered table-striped stopped-table"
131
+ >
132
+ <thead>
133
+ <tr>
134
+ <th />
135
+ <th>
136
+ Total
137
+ </th>
138
+ <th>
139
+ 24h
140
+ </th>
141
+ </tr>
142
+ </thead>
143
+ <tbody>
144
+ <tr
145
+ key="error"
146
+ >
147
+ <td>
148
+ <Icon
149
+ name="error-circle-o"
150
+ type="pf"
151
+ />
152
+ Error
153
+ </td>
154
+ <td
155
+ className="data-col active"
156
+ onClick={[Function]}
157
+ >
158
+ 0
159
+ </td>
160
+ <td
161
+ className="data-col not-focused"
162
+ onClick={[Function]}
163
+ >
164
+ 0
165
+ </td>
166
+ </tr>
167
+ <tr
168
+ key="warning"
169
+ >
170
+ <td>
171
+ <Icon
172
+ name="warning-triangle-o"
173
+ type="pf"
174
+ />
175
+ Warning
176
+ </td>
177
+ <td
178
+ className="data-col not-focused"
179
+ onClick={[Function]}
180
+ >
181
+ 0
182
+ </td>
183
+ <td
184
+ className="data-col not-focused"
185
+ onClick={[Function]}
186
+ >
187
+ 0
188
+ </td>
189
+ </tr>
190
+ <tr
191
+ key="success"
192
+ >
193
+ <td>
194
+ <Icon
195
+ name="ok"
196
+ type="pf"
197
+ />
198
+ Success
199
+ </td>
200
+ <td
201
+ className="data-col not-focused"
202
+ onClick={[Function]}
203
+ >
204
+ 0
205
+ </td>
206
+ <td
207
+ className="data-col not-focused"
208
+ onClick={[Function]}
209
+ >
210
+ 0
211
+ </td>
212
+ </tr>
213
+ </tbody>
214
+ </table>
215
+ </CardBody>
216
+ </Card>
217
+ `;
218
+
219
+ exports[`StoppedTasksCard render selected 1`] = `
220
+ <Card
221
+ accented={false}
222
+ aggregated={false}
223
+ aggregatedMini={false}
224
+ cardRef={null}
225
+ className="tasks-donut-card stopped-tasks-card selected-tasks-card"
226
+ matchHeight={false}
227
+ >
228
+ <CardTitle
229
+ className=""
230
+ onClick={[Function]}
231
+ >
232
+ Stopped
233
+ </CardTitle>
234
+ <CardBody
235
+ className=""
236
+ >
237
+ <table
238
+ className="table table-bordered table-striped stopped-table"
239
+ >
240
+ <thead>
241
+ <tr>
242
+ <th />
243
+ <th>
244
+ Total
245
+ </th>
246
+ <th>
247
+ 24h
248
+ </th>
249
+ </tr>
250
+ </thead>
251
+ <tbody>
252
+ <tr
253
+ key="error"
254
+ >
255
+ <td>
256
+ <Icon
257
+ name="error-circle-o"
258
+ type="pf"
259
+ />
260
+ Error
261
+ </td>
262
+ <td
263
+ className="data-col"
264
+ onClick={[Function]}
265
+ >
266
+ 0
267
+ </td>
268
+ <td
269
+ className="data-col"
270
+ onClick={[Function]}
271
+ >
272
+ 0
273
+ </td>
274
+ </tr>
275
+ <tr
276
+ key="warning"
277
+ >
278
+ <td>
279
+ <Icon
280
+ name="warning-triangle-o"
281
+ type="pf"
282
+ />
283
+ Warning
284
+ </td>
285
+ <td
286
+ className="data-col"
287
+ onClick={[Function]}
288
+ >
289
+ 0
290
+ </td>
291
+ <td
292
+ className="data-col"
293
+ onClick={[Function]}
294
+ >
295
+ 0
296
+ </td>
297
+ </tr>
298
+ <tr
299
+ key="success"
300
+ >
301
+ <td>
302
+ <Icon
303
+ name="ok"
304
+ type="pf"
305
+ />
306
+ Success
307
+ </td>
308
+ <td
309
+ className="data-col"
310
+ onClick={[Function]}
311
+ >
312
+ 0
313
+ </td>
314
+ <td
315
+ className="data-col"
316
+ onClick={[Function]}
317
+ >
318
+ 0
319
+ </td>
320
+ </tr>
321
+ </tbody>
322
+ </table>
323
+ </CardBody>
324
+ </Card>
325
+ `;
326
+
327
+ exports[`StoppedTasksCard render success-last selected 1`] = `
328
+ <Card
329
+ accented={false}
330
+ aggregated={false}
331
+ aggregatedMini={false}
332
+ cardRef={null}
333
+ className="tasks-donut-card stopped-tasks-card selected-tasks-card"
334
+ matchHeight={false}
335
+ >
336
+ <CardTitle
337
+ className=""
338
+ onClick={[Function]}
339
+ >
340
+ Stopped
341
+ </CardTitle>
342
+ <CardBody
343
+ className=""
344
+ >
345
+ <table
346
+ className="table table-bordered table-striped stopped-table"
347
+ >
348
+ <thead>
349
+ <tr>
350
+ <th />
351
+ <th>
352
+ Total
353
+ </th>
354
+ <th>
355
+ week
356
+ </th>
357
+ </tr>
358
+ </thead>
359
+ <tbody>
360
+ <tr
361
+ key="error"
362
+ >
363
+ <td>
364
+ <Icon
365
+ name="error-circle-o"
366
+ type="pf"
367
+ />
368
+ Error
369
+ </td>
370
+ <td
371
+ className="data-col not-focused"
372
+ onClick={[Function]}
373
+ >
374
+ 0
375
+ </td>
376
+ <td
377
+ className="data-col not-focused"
378
+ onClick={[Function]}
379
+ >
380
+ 0
381
+ </td>
382
+ </tr>
383
+ <tr
384
+ key="warning"
385
+ >
386
+ <td>
387
+ <Icon
388
+ name="warning-triangle-o"
389
+ type="pf"
390
+ />
391
+ Warning
392
+ </td>
393
+ <td
394
+ className="data-col not-focused"
395
+ onClick={[Function]}
396
+ >
397
+ 0
398
+ </td>
399
+ <td
400
+ className="data-col not-focused"
401
+ onClick={[Function]}
402
+ >
403
+ 0
404
+ </td>
405
+ </tr>
406
+ <tr
407
+ key="success"
408
+ >
409
+ <td>
410
+ <Icon
411
+ name="ok"
412
+ type="pf"
413
+ />
414
+ Success
415
+ </td>
416
+ <td
417
+ className="data-col not-focused"
418
+ onClick={[Function]}
419
+ >
420
+ 0
421
+ </td>
422
+ <td
423
+ className="data-col active"
424
+ onClick={[Function]}
425
+ >
426
+ 0
427
+ </td>
428
+ </tr>
429
+ </tbody>
430
+ </table>
431
+ </CardBody>
432
+ </Card>
433
+ `;
434
+
435
+ exports[`StoppedTasksCard render success-total selected 1`] = `
436
+ <Card
437
+ accented={false}
438
+ aggregated={false}
439
+ aggregatedMini={false}
440
+ cardRef={null}
441
+ className="tasks-donut-card stopped-tasks-card selected-tasks-card"
442
+ matchHeight={false}
443
+ >
444
+ <CardTitle
445
+ className=""
446
+ onClick={[Function]}
447
+ >
448
+ Stopped
449
+ </CardTitle>
450
+ <CardBody
451
+ className=""
452
+ >
453
+ <table
454
+ className="table table-bordered table-striped stopped-table"
455
+ >
456
+ <thead>
457
+ <tr>
458
+ <th />
459
+ <th>
460
+ Total
461
+ </th>
462
+ <th>
463
+ 24h
464
+ </th>
465
+ </tr>
466
+ </thead>
467
+ <tbody>
468
+ <tr
469
+ key="error"
470
+ >
471
+ <td>
472
+ <Icon
473
+ name="error-circle-o"
474
+ type="pf"
475
+ />
476
+ Error
477
+ </td>
478
+ <td
479
+ className="data-col not-focused"
480
+ onClick={[Function]}
481
+ >
482
+ 0
483
+ </td>
484
+ <td
485
+ className="data-col not-focused"
486
+ onClick={[Function]}
487
+ >
488
+ 0
489
+ </td>
490
+ </tr>
491
+ <tr
492
+ key="warning"
493
+ >
494
+ <td>
495
+ <Icon
496
+ name="warning-triangle-o"
497
+ type="pf"
498
+ />
499
+ Warning
500
+ </td>
501
+ <td
502
+ className="data-col not-focused"
503
+ onClick={[Function]}
504
+ >
505
+ 0
506
+ </td>
507
+ <td
508
+ className="data-col not-focused"
509
+ onClick={[Function]}
510
+ >
511
+ 0
512
+ </td>
513
+ </tr>
514
+ <tr
515
+ key="success"
516
+ >
517
+ <td>
518
+ <Icon
519
+ name="ok"
520
+ type="pf"
521
+ />
522
+ Success
523
+ </td>
524
+ <td
525
+ className="data-col active"
526
+ onClick={[Function]}
527
+ >
528
+ 0
529
+ </td>
530
+ <td
531
+ className="data-col not-focused"
532
+ onClick={[Function]}
533
+ >
534
+ 0
535
+ </td>
536
+ </tr>
537
+ </tbody>
538
+ </table>
539
+ </CardBody>
540
+ </Card>
541
+ `;
542
+
543
+ exports[`StoppedTasksCard render warning-last selected 1`] = `
544
+ <Card
545
+ accented={false}
546
+ aggregated={false}
547
+ aggregatedMini={false}
548
+ cardRef={null}
549
+ className="tasks-donut-card stopped-tasks-card selected-tasks-card"
550
+ matchHeight={false}
551
+ >
552
+ <CardTitle
553
+ className=""
554
+ onClick={[Function]}
555
+ >
556
+ Stopped
557
+ </CardTitle>
558
+ <CardBody
559
+ className=""
560
+ >
561
+ <table
562
+ className="table table-bordered table-striped stopped-table"
563
+ >
564
+ <thead>
565
+ <tr>
566
+ <th />
567
+ <th>
568
+ Total
569
+ </th>
570
+ <th>
571
+ week
572
+ </th>
573
+ </tr>
574
+ </thead>
575
+ <tbody>
576
+ <tr
577
+ key="error"
578
+ >
579
+ <td>
580
+ <Icon
581
+ name="error-circle-o"
582
+ type="pf"
583
+ />
584
+ Error
585
+ </td>
586
+ <td
587
+ className="data-col not-focused"
588
+ onClick={[Function]}
589
+ >
590
+ 0
591
+ </td>
592
+ <td
593
+ className="data-col not-focused"
594
+ onClick={[Function]}
595
+ >
596
+ 0
597
+ </td>
598
+ </tr>
599
+ <tr
600
+ key="warning"
601
+ >
602
+ <td>
603
+ <Icon
604
+ name="warning-triangle-o"
605
+ type="pf"
606
+ />
607
+ Warning
608
+ </td>
609
+ <td
610
+ className="data-col not-focused"
611
+ onClick={[Function]}
612
+ >
613
+ 0
614
+ </td>
615
+ <td
616
+ className="data-col active"
617
+ onClick={[Function]}
618
+ >
619
+ 0
620
+ </td>
621
+ </tr>
622
+ <tr
623
+ key="success"
624
+ >
625
+ <td>
626
+ <Icon
627
+ name="ok"
628
+ type="pf"
629
+ />
630
+ Success
631
+ </td>
632
+ <td
633
+ className="data-col not-focused"
634
+ onClick={[Function]}
635
+ >
636
+ 0
637
+ </td>
638
+ <td
639
+ className="data-col not-focused"
640
+ onClick={[Function]}
641
+ >
642
+ 0
643
+ </td>
644
+ </tr>
645
+ </tbody>
646
+ </table>
647
+ </CardBody>
648
+ </Card>
649
+ `;
650
+
651
+ exports[`StoppedTasksCard render warning-total selected 1`] = `
652
+ <Card
653
+ accented={false}
654
+ aggregated={false}
655
+ aggregatedMini={false}
656
+ cardRef={null}
657
+ className="tasks-donut-card stopped-tasks-card selected-tasks-card"
658
+ matchHeight={false}
659
+ >
660
+ <CardTitle
661
+ className=""
662
+ onClick={[Function]}
663
+ >
664
+ Stopped
665
+ </CardTitle>
666
+ <CardBody
667
+ className=""
668
+ >
669
+ <table
670
+ className="table table-bordered table-striped stopped-table"
671
+ >
672
+ <thead>
673
+ <tr>
674
+ <th />
675
+ <th>
676
+ Total
677
+ </th>
678
+ <th>
679
+ 24h
680
+ </th>
681
+ </tr>
682
+ </thead>
683
+ <tbody>
684
+ <tr
685
+ key="error"
686
+ >
687
+ <td>
688
+ <Icon
689
+ name="error-circle-o"
690
+ type="pf"
691
+ />
692
+ Error
693
+ </td>
694
+ <td
695
+ className="data-col not-focused"
696
+ onClick={[Function]}
697
+ >
698
+ 0
699
+ </td>
700
+ <td
701
+ className="data-col not-focused"
702
+ onClick={[Function]}
703
+ >
704
+ 0
705
+ </td>
706
+ </tr>
707
+ <tr
708
+ key="warning"
709
+ >
710
+ <td>
711
+ <Icon
712
+ name="warning-triangle-o"
713
+ type="pf"
714
+ />
715
+ Warning
716
+ </td>
717
+ <td
718
+ className="data-col active"
719
+ onClick={[Function]}
720
+ >
721
+ 0
722
+ </td>
723
+ <td
724
+ className="data-col not-focused"
725
+ onClick={[Function]}
726
+ >
727
+ 0
728
+ </td>
729
+ </tr>
730
+ <tr
731
+ key="success"
732
+ >
733
+ <td>
734
+ <Icon
735
+ name="ok"
736
+ type="pf"
737
+ />
738
+ Success
739
+ </td>
740
+ <td
741
+ className="data-col not-focused"
742
+ onClick={[Function]}
743
+ >
744
+ 0
745
+ </td>
746
+ <td
747
+ className="data-col not-focused"
748
+ onClick={[Function]}
749
+ >
750
+ 0
751
+ </td>
752
+ </tr>
753
+ </tbody>
754
+ </table>
755
+ </CardBody>
756
+ </Card>
757
+ `;
758
+
759
+ exports[`StoppedTasksCard render with minimal props 1`] = `
760
+ <Card
761
+ accented={false}
762
+ aggregated={false}
763
+ aggregatedMini={false}
764
+ cardRef={null}
765
+ className="tasks-donut-card stopped-tasks-card"
766
+ matchHeight={false}
767
+ >
768
+ <CardTitle
769
+ className=""
770
+ onClick={[Function]}
771
+ >
772
+ Stopped
773
+ </CardTitle>
774
+ <CardBody
775
+ className=""
776
+ >
777
+ <table
778
+ className="table table-bordered table-striped stopped-table"
779
+ >
780
+ <thead>
781
+ <tr>
782
+ <th />
783
+ <th>
784
+ Total
785
+ </th>
786
+ <th>
787
+ 24h
788
+ </th>
789
+ </tr>
790
+ </thead>
791
+ <tbody>
792
+ <tr
793
+ key="error"
794
+ >
795
+ <td>
796
+ <Icon
797
+ name="error-circle-o"
798
+ type="pf"
799
+ />
800
+ Error
801
+ </td>
802
+ <td
803
+ className="data-col"
804
+ onClick={[Function]}
805
+ >
806
+ 0
807
+ </td>
808
+ <td
809
+ className="data-col"
810
+ onClick={[Function]}
811
+ >
812
+ 0
813
+ </td>
814
+ </tr>
815
+ <tr
816
+ key="warning"
817
+ >
818
+ <td>
819
+ <Icon
820
+ name="warning-triangle-o"
821
+ type="pf"
822
+ />
823
+ Warning
824
+ </td>
825
+ <td
826
+ className="data-col"
827
+ onClick={[Function]}
828
+ >
829
+ 0
830
+ </td>
831
+ <td
832
+ className="data-col"
833
+ onClick={[Function]}
834
+ >
835
+ 0
836
+ </td>
837
+ </tr>
838
+ <tr
839
+ key="success"
840
+ >
841
+ <td>
842
+ <Icon
843
+ name="ok"
844
+ type="pf"
845
+ />
846
+ Success
847
+ </td>
848
+ <td
849
+ className="data-col"
850
+ onClick={[Function]}
851
+ >
852
+ 0
853
+ </td>
854
+ <td
855
+ className="data-col"
856
+ onClick={[Function]}
857
+ >
858
+ 0
859
+ </td>
860
+ </tr>
861
+ </tbody>
862
+ </table>
863
+ </CardBody>
864
+ </Card>
865
+ `;
866
+
867
+ exports[`StoppedTasksCard render with props 1`] = `
868
+ <Card
869
+ accented={false}
870
+ aggregated={false}
871
+ aggregatedMini={false}
872
+ cardRef={null}
873
+ className="tasks-donut-card stopped-tasks-card"
874
+ matchHeight={false}
875
+ >
876
+ <CardTitle
877
+ className=""
878
+ onClick={[Function]}
879
+ >
880
+ Stopped
881
+ </CardTitle>
882
+ <CardBody
883
+ className=""
884
+ >
885
+ <table
886
+ className="table table-bordered table-striped stopped-table"
887
+ >
888
+ <thead>
889
+ <tr>
890
+ <th />
891
+ <th>
892
+ Total
893
+ </th>
894
+ <th>
895
+ week
896
+ </th>
897
+ </tr>
898
+ </thead>
899
+ <tbody>
900
+ <tr
901
+ key="error"
902
+ >
903
+ <td>
904
+ <Icon
905
+ name="error-circle-o"
906
+ type="pf"
907
+ />
908
+ Error
909
+ </td>
910
+ <td
911
+ className="data-col"
912
+ onClick={[Function]}
913
+ >
914
+ 9
915
+ </td>
916
+ <td
917
+ className="data-col"
918
+ onClick={[Function]}
919
+ >
920
+ 1
921
+ </td>
922
+ </tr>
923
+ <tr
924
+ key="warning"
925
+ >
926
+ <td>
927
+ <Icon
928
+ name="warning-triangle-o"
929
+ type="pf"
930
+ />
931
+ Warning
932
+ </td>
933
+ <td
934
+ className="data-col"
935
+ onClick={[Function]}
936
+ >
937
+ 8
938
+ </td>
939
+ <td
940
+ className="data-col"
941
+ onClick={[Function]}
942
+ >
943
+ 2
944
+ </td>
945
+ </tr>
946
+ <tr
947
+ key="success"
948
+ >
949
+ <td>
950
+ <Icon
951
+ name="ok"
952
+ type="pf"
953
+ />
954
+ Success
955
+ </td>
956
+ <td
957
+ className="data-col"
958
+ onClick={[Function]}
959
+ >
960
+ 7
961
+ </td>
962
+ <td
963
+ className="data-col"
964
+ onClick={[Function]}
965
+ >
966
+ 3
967
+ </td>
968
+ </tr>
969
+ </tbody>
970
+ </table>
971
+ </CardBody>
972
+ </Card>
973
+ `;