foreman-tasks 1.0.1 → 1.1.0
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +12 -12
- data/.rubocop_todo.yml +34 -116
- data/app/controllers/foreman_tasks/api/recurring_logics_controller.rb +20 -1
- data/app/controllers/foreman_tasks/api/tasks_controller.rb +29 -9
- data/app/controllers/foreman_tasks/concerns/hosts_controller_extension.rb +1 -1
- data/app/controllers/foreman_tasks/recurring_logics_controller.rb +19 -0
- data/app/helpers/foreman_tasks/foreman_tasks_helper.rb +1 -3
- data/app/lib/actions/helpers/humanizer.rb +1 -3
- data/app/lib/actions/proxy_action.rb +33 -12
- data/app/models/foreman_tasks/concerns/action_triggering.rb +1 -1
- data/app/models/foreman_tasks/recurring_logic.rb +1 -0
- data/app/models/foreman_tasks/remote_task.rb +1 -0
- data/app/models/foreman_tasks/task.rb +4 -0
- data/app/models/foreman_tasks/task/dynflow_task.rb +1 -1
- data/app/models/foreman_tasks/task/search.rb +11 -1
- data/app/services/foreman_tasks/troubleshooting_help_generator.rb +0 -4
- data/app/views/foreman_tasks/api/recurring_logics/base.json.rabl +2 -1
- data/app/views/foreman_tasks/api/tasks/details.json.rabl +1 -0
- data/app/views/foreman_tasks/api/tasks/show.json.rabl +1 -1
- data/app/views/foreman_tasks/recurring_logics/index.html.erb +30 -0
- data/app/views/foreman_tasks/tasks/show.html.erb +3 -0
- data/config/routes.rb +7 -0
- data/foreman-tasks.gemspec +4 -6
- data/lib/foreman_tasks/dynflow/console_authorizer.rb +2 -2
- data/lib/foreman_tasks/engine.rb +15 -13
- data/lib/foreman_tasks/tasks/cleanup.rake +1 -1
- data/lib/foreman_tasks/tasks/export_tasks.rake +2 -2
- data/lib/foreman_tasks/test_extensions.rb +1 -1
- data/lib/foreman_tasks/version.rb +1 -1
- data/locale/action_names.rb +1 -1
- data/package.json +1 -2
- data/script/rails +2 -2
- data/test/factories/task_factory.rb +34 -2
- data/test/foreman_tasks_test_helper.rb +4 -0
- data/test/unit/actions/action_with_sub_plans_test.rb +1 -1
- data/test/unit/task_test.rb +160 -74
- data/webpack/ForemanTasks/Components/TaskDetails/Components/Task.js +4 -0
- data/webpack/ForemanTasks/Components/TaskDetails/Components/TaskInfo.js +3 -12
- data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/Task.test.js +1 -0
- data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/__snapshots__/Task.test.js.snap +3 -1
- data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/__snapshots__/TaskInfo.test.js.snap +2 -6
- data/webpack/ForemanTasks/Components/TaskDetails/TaskDetailsSelectors.js +4 -1
- data/webpack/ForemanTasks/Components/TaskDetails/__tests__/__snapshots__/TaskDetails.test.js.snap +1 -0
- data/webpack/ForemanTasks/Components/TaskDetails/index.js +2 -0
- data/webpack/ForemanTasks/Components/TasksTable/SubTasksPage.js +3 -1
- data/webpack/ForemanTasks/Components/TasksTable/TasksTableActions.js +87 -21
- data/webpack/ForemanTasks/Components/TasksTable/TasksTableConstants.js +7 -7
- data/webpack/ForemanTasks/Components/TasksTable/TasksTablePage.js +31 -22
- data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksTable.fixtures.js +2 -1
- data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksTableActions.test.js +44 -46
- data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/SubTasksPage.test.js.snap +3 -1
- data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/TasksIndexPage.test.js.snap +2 -1
- data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/TasksTableActions.test.js.snap +61 -5
- data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/TasksTablePage.test.js.snap +6 -2
- metadata +10 -10
@@ -1,15 +1,12 @@
|
|
1
1
|
import { getControllerSearchProps } from 'foremanReact/constants';
|
2
2
|
|
3
3
|
export const TASKS_TABLE_ID = 'TASKS_TABLE';
|
4
|
-
export const TASKS_CONTROLLER = 'tasks';
|
5
|
-
export const TASKS_SUCCESS = 'TASKS_SUCCESS';
|
6
|
-
export const TASKS_REQUEST = 'TASKS_REQUEST';
|
7
|
-
export const TASKS_FAILURE = 'TASKS_FAILURE';
|
8
4
|
export const SELECT_ROWS = 'SELECT_ROWS';
|
9
5
|
export const UNSELECT_ROWS = 'UNSELECT_ROWS';
|
10
6
|
export const UNSELECT_ALL_ROWS = 'UNSELECT_ALL_ROWS';
|
11
|
-
export const
|
12
|
-
export const
|
7
|
+
export const TASKS_RESUME_REQUEST = 'TASKS_RESUME_REQUEST';
|
8
|
+
export const TASKS_RESUME_SUCCESS = 'TASKS_RESUME_SUCCESS';
|
9
|
+
export const TASKS_RESUME_FAILURE = 'TASKS_RESUME_FAILURE';
|
13
10
|
|
14
11
|
export const CANCEL_CONFIRM_MODAL_ID = 'cancelConfirmModal';
|
15
12
|
export const RESUME_CONFIRM_MODAL_ID = 'resumeConfirmModal';
|
@@ -17,4 +14,7 @@ export const CANCEL_SELECTED_CONFIRM_MODAL_ID = 'cancelSelectedConfirmModal';
|
|
17
14
|
export const RESUME_SELECTED_CONFIRM_MODAL_ID = 'resumeSelectedConfirmModal';
|
18
15
|
export const UPDATE_CLICKED = 'UPDATE_CLICKED';
|
19
16
|
|
20
|
-
export const TASKS_SEARCH_PROPS =
|
17
|
+
export const TASKS_SEARCH_PROPS = {
|
18
|
+
...getControllerSearchProps('tasks'),
|
19
|
+
controller: 'foreman_tasks/tasks'
|
20
|
+
};
|
@@ -14,8 +14,6 @@ import { resolveSearchQuery, addSearchToURL } from './TasksTableHelpers';
|
|
14
14
|
import { ConfirmationModals } from './Components/ConfirmationModals';
|
15
15
|
import {
|
16
16
|
TASKS_SEARCH_PROPS,
|
17
|
-
RESUME,
|
18
|
-
CANCEL,
|
19
17
|
CANCEL_SELECTED_CONFIRM_MODAL_ID,
|
20
18
|
RESUME_SELECTED_CONFIRM_MODAL_ID,
|
21
19
|
RESUME_CONFIRM_MODAL_ID,
|
@@ -24,23 +22,22 @@ import {
|
|
24
22
|
import { ActionSelectButton } from './Components/ActionSelectButton';
|
25
23
|
import './TasksTablePage.scss';
|
26
24
|
|
27
|
-
const TasksTablePage = ({ getBreadcrumbs, history, clicked, ...props }) => {
|
25
|
+
const TasksTablePage = ({ getBreadcrumbs, history, clicked, createHeader, ...props }) => {
|
28
26
|
const url = history.location.pathname + history.location.search;
|
29
27
|
const uriQuery = getURIQuery(url);
|
30
28
|
const onSearch = searchQuery => {
|
31
29
|
resolveSearchQuery(searchQuery, history);
|
32
|
-
props.getTableItems(url);
|
33
30
|
};
|
34
31
|
|
35
|
-
const
|
36
|
-
const
|
32
|
+
const getSelectedTasks = () => {
|
33
|
+
const selectedIDs = props.results.filter(item =>
|
37
34
|
props.selectedRows.includes(item.id)
|
38
35
|
);
|
39
|
-
return
|
36
|
+
return selectedIDs.map(item => ({
|
40
37
|
name: item.action,
|
41
38
|
id: item.id,
|
42
|
-
|
43
|
-
|
39
|
+
isCancellable: item.availableActions.cancellable,
|
40
|
+
isResumable: item.availableActions.resumable,
|
44
41
|
}));
|
45
42
|
};
|
46
43
|
|
@@ -55,30 +52,38 @@ const TasksTablePage = ({ getBreadcrumbs, history, clicked, ...props }) => {
|
|
55
52
|
resumeModal: useForemanModal({ id: RESUME_CONFIRM_MODAL_ID }),
|
56
53
|
};
|
57
54
|
|
55
|
+
const {
|
56
|
+
bulkCancel,
|
57
|
+
bulkResume,
|
58
|
+
cancelTask,
|
59
|
+
resumeTask,
|
60
|
+
parentTaskID,
|
61
|
+
} = props;
|
58
62
|
const tasksActions = {
|
59
63
|
cancelSelectedTasks: () => {
|
60
|
-
|
64
|
+
bulkCancel({ selected: getSelectedTasks(), url, parentTaskID });
|
61
65
|
},
|
62
66
|
cancelTask: () => {
|
63
|
-
|
64
|
-
clicked.taskId,
|
65
|
-
clicked.taskName,
|
67
|
+
cancelTask({
|
68
|
+
taskId: clicked.taskId,
|
69
|
+
taskName: clicked.taskName,
|
66
70
|
url,
|
67
|
-
|
68
|
-
);
|
71
|
+
parentTaskID,
|
72
|
+
});
|
69
73
|
},
|
70
74
|
resumeSelectedTasks: () => {
|
71
|
-
|
75
|
+
bulkResume({ selected: getSelectedTasks(), url, parentTaskID });
|
72
76
|
},
|
73
77
|
resumeTask: () => {
|
74
|
-
|
75
|
-
clicked.taskId,
|
76
|
-
clicked.taskName,
|
78
|
+
resumeTask({
|
79
|
+
taskId: clicked.taskId,
|
80
|
+
taskName: clicked.taskName,
|
77
81
|
url,
|
78
|
-
|
79
|
-
);
|
82
|
+
parentTaskID,
|
83
|
+
});
|
80
84
|
},
|
81
85
|
};
|
86
|
+
|
82
87
|
return (
|
83
88
|
<div className="tasks-table-wrapper">
|
84
89
|
<ConfirmationModals
|
@@ -90,6 +95,7 @@ const TasksTablePage = ({ getBreadcrumbs, history, clicked, ...props }) => {
|
|
90
95
|
searchable
|
91
96
|
searchProps={TASKS_SEARCH_PROPS}
|
92
97
|
onSearch={onSearch}
|
98
|
+
header={createHeader(props.actionName)}
|
93
99
|
breadcrumbOptions={getBreadcrumbs(props.actionName)}
|
94
100
|
toastNotifications="foreman-tasks-cancel"
|
95
101
|
toolbarButtons={
|
@@ -124,11 +130,13 @@ TasksTablePage.propTypes = {
|
|
124
130
|
actionName: PropTypes.string,
|
125
131
|
status: PropTypes.oneOf(Object.keys(STATUS)),
|
126
132
|
history: PropTypes.object.isRequired,
|
127
|
-
actionSelected: PropTypes.func.isRequired,
|
128
133
|
cancelTask: PropTypes.func.isRequired,
|
129
134
|
resumeTask: PropTypes.func.isRequired,
|
135
|
+
bulkCancel: PropTypes.func.isRequired,
|
136
|
+
bulkResume: PropTypes.func.isRequired,
|
130
137
|
selectedRows: PropTypes.arrayOf(PropTypes.string),
|
131
138
|
parentTaskID: PropTypes.string,
|
139
|
+
createHeader: PropTypes.func,
|
132
140
|
clicked: PropTypes.shape({
|
133
141
|
taskId: PropTypes.string,
|
134
142
|
taskName: PropTypes.string,
|
@@ -142,6 +150,7 @@ TasksTablePage.defaultProps = {
|
|
142
150
|
selectedRows: [],
|
143
151
|
parentTaskID: null,
|
144
152
|
clicked: {},
|
153
|
+
createHeader: () => __('Tasks'),
|
145
154
|
};
|
146
155
|
|
147
156
|
export default TasksTablePage;
|
@@ -1,13 +1,14 @@
|
|
1
1
|
import { testActionSnapshotWithFixtures } from '@theforeman/test';
|
2
2
|
import API from 'foremanReact/API';
|
3
|
-
import { TASKS_TABLE_ID
|
3
|
+
import { TASKS_TABLE_ID } from '../TasksTableConstants';
|
4
4
|
import {
|
5
5
|
getTableItems,
|
6
6
|
cancelTask,
|
7
7
|
cancelTaskRequest,
|
8
8
|
resumeTask,
|
9
9
|
resumeTaskRequest,
|
10
|
-
|
10
|
+
bulkCancel,
|
11
|
+
bulkResume,
|
11
12
|
} from '../TasksTableActions';
|
12
13
|
|
13
14
|
jest.mock('foremanReact/components/common/table', () => ({
|
@@ -18,10 +19,20 @@ jest.mock('foremanReact/API');
|
|
18
19
|
|
19
20
|
API.post.mockImplementation(() => ({ data: 'some-data' }));
|
20
21
|
|
22
|
+
const taskInfo = {
|
23
|
+
taskId: 'some-id',
|
24
|
+
taskName: 'some-name',
|
25
|
+
};
|
26
|
+
|
27
|
+
const task = {
|
28
|
+
id: 'some-id',
|
29
|
+
name: 'some-name',
|
30
|
+
};
|
31
|
+
|
21
32
|
const fixtures = {
|
22
|
-
'should cancelTask': () => cancelTask(
|
33
|
+
'should cancelTask': () => cancelTask({ ...taskInfo, url: 'some-url' }),
|
23
34
|
'should cancelTaskRequest and succeed': () =>
|
24
|
-
cancelTaskRequest('some-id', 'some-name'
|
35
|
+
cancelTaskRequest('some-id', 'some-name'),
|
25
36
|
'should cancelTaskRequest and fail': () => {
|
26
37
|
API.post.mockImplementation(() =>
|
27
38
|
Promise.reject(new Error('Network Error'))
|
@@ -29,60 +40,47 @@ const fixtures = {
|
|
29
40
|
return cancelTaskRequest('some-id', 'some-name');
|
30
41
|
},
|
31
42
|
|
32
|
-
'should resumeTask': () => resumeTask(
|
43
|
+
'should resumeTask': () => resumeTask({ ...taskInfo, url: 'some-url' }),
|
33
44
|
'should resumeTaskRequest and succeed': () => {
|
34
45
|
API.post.mockImplementation(() => ({ data: 'some-data' }));
|
35
|
-
return resumeTaskRequest('some-id', 'some-name'
|
46
|
+
return resumeTaskRequest('some-id', 'some-name');
|
36
47
|
},
|
37
48
|
'should resumeTaskRequest and fail': () => {
|
38
49
|
API.post.mockImplementation(() =>
|
39
50
|
Promise.reject(new Error('Network Error'))
|
40
51
|
);
|
41
|
-
return resumeTaskRequest('some-id', 'some-name'
|
52
|
+
return resumeTaskRequest('some-id', 'some-name');
|
42
53
|
},
|
43
|
-
'
|
44
|
-
const selected = [
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
},
|
51
|
-
];
|
52
|
-
return actionSelected(CANCEL, selected, 'some-url');
|
54
|
+
'handles bulkResume requests that fail': () => {
|
55
|
+
const selected = [{ ...task, isResumable: true, isCancellable: false }];
|
56
|
+
|
57
|
+
API.post.mockImplementation(() =>
|
58
|
+
Promise.reject(new Error('Network Error'))
|
59
|
+
);
|
60
|
+
return bulkResume({ selected, url: 'some-url' });
|
53
61
|
},
|
54
|
-
'
|
55
|
-
const selected = [
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
62
|
+
'handles resumable bulkResume requests': () => {
|
63
|
+
const selected = [{ ...task, isResumable: true, isCancellable: false }];
|
64
|
+
|
65
|
+
API.post.mockImplementation(() => ({
|
66
|
+
data: {
|
67
|
+
resumed: [{ action: 'I am resumed' }],
|
68
|
+
failed: [{ action: 'I am failed' }],
|
61
69
|
},
|
62
|
-
|
63
|
-
return
|
70
|
+
}));
|
71
|
+
return bulkResume({ selected, url: 'some-url' });
|
64
72
|
},
|
65
|
-
'
|
66
|
-
const selected = [
|
67
|
-
|
68
|
-
id: '',
|
69
|
-
name: '',
|
70
|
-
isResumeble: false,
|
71
|
-
isCancelleble: false,
|
72
|
-
},
|
73
|
-
];
|
74
|
-
return actionSelected(RESUME, selected, 'some-url');
|
73
|
+
'handles bulkCancel requests': () => {
|
74
|
+
const selected = [{ ...task, isResumable: false, isCancellable: true }];
|
75
|
+
return bulkCancel({ selected, url: 'some-url' });
|
75
76
|
},
|
76
|
-
'
|
77
|
-
const selected = [
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
},
|
84
|
-
];
|
85
|
-
return actionSelected(RESUME, selected, 'some-url');
|
77
|
+
'handles bulkCancel requests that are not cancellable': () => {
|
78
|
+
const selected = [{ ...task, isResumable: false, isCancellable: false }];
|
79
|
+
return bulkCancel({ selected, url: 'some-url' });
|
80
|
+
},
|
81
|
+
'handles bulkResume requests that are not resumable': () => {
|
82
|
+
const selected = [{ ...task, isResumable: false, isCancellable: false }];
|
83
|
+
return bulkResume({ selected, url: 'some-url' });
|
86
84
|
},
|
87
85
|
};
|
88
86
|
describe('TasksTable actions', () => {
|
data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/SubTasksPage.test.js.snap
CHANGED
@@ -2,8 +2,10 @@
|
|
2
2
|
|
3
3
|
exports[`SubTasksPage rendering render with minimal props 1`] = `
|
4
4
|
<Connect(TasksTablePage)
|
5
|
-
|
5
|
+
bulkCancel={[MockFunction]}
|
6
|
+
bulkResume={[MockFunction]}
|
6
7
|
cancelTask={[MockFunction]}
|
8
|
+
createHeader={[Function]}
|
7
9
|
getBreadcrumbs={[MockFunction]}
|
8
10
|
getTableItems={[MockFunction]}
|
9
11
|
history={
|
data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/TasksIndexPage.test.js.snap
CHANGED
@@ -2,7 +2,8 @@
|
|
2
2
|
|
3
3
|
exports[`TasksIndexPage rendering render with minimal props 1`] = `
|
4
4
|
<Connect(TasksTablePage)
|
5
|
-
|
5
|
+
bulkCancel={[MockFunction]}
|
6
|
+
bulkResume={[MockFunction]}
|
6
7
|
cancelTask={[MockFunction]}
|
7
8
|
getBreadcrumbs={[MockFunction]}
|
8
9
|
getTableItems={[MockFunction]}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
2
2
|
|
3
|
-
exports[`TasksTable actions
|
3
|
+
exports[`TasksTable actions handles bulkCancel requests 1`] = `
|
4
4
|
Array [
|
5
5
|
Array [
|
6
6
|
[Function],
|
@@ -14,7 +14,7 @@ Array [
|
|
14
14
|
]
|
15
15
|
`;
|
16
16
|
|
17
|
-
exports[`TasksTable actions
|
17
|
+
exports[`TasksTable actions handles bulkCancel requests that are not cancellable 1`] = `
|
18
18
|
Array [
|
19
19
|
Array [
|
20
20
|
Object {
|
@@ -30,7 +30,7 @@ Array [
|
|
30
30
|
]
|
31
31
|
`;
|
32
32
|
|
33
|
-
exports[`TasksTable actions
|
33
|
+
exports[`TasksTable actions handles bulkResume requests that are not resumable 1`] = `
|
34
34
|
Array [
|
35
35
|
Array [
|
36
36
|
Object {
|
@@ -46,10 +46,66 @@ Array [
|
|
46
46
|
]
|
47
47
|
`;
|
48
48
|
|
49
|
-
exports[`TasksTable actions
|
49
|
+
exports[`TasksTable actions handles bulkResume requests that fail 1`] = `
|
50
50
|
Array [
|
51
51
|
Array [
|
52
|
-
|
52
|
+
Object {
|
53
|
+
"type": "TASKS_RESUME_REQUEST",
|
54
|
+
},
|
55
|
+
],
|
56
|
+
Array [
|
57
|
+
Object {
|
58
|
+
"error": [Error: Network Error],
|
59
|
+
"type": "TASKS_RESUME_FAILURE",
|
60
|
+
},
|
61
|
+
],
|
62
|
+
Array [
|
63
|
+
Object {
|
64
|
+
"payload": Object {
|
65
|
+
"message": Object {
|
66
|
+
"message": "Cannot resume tasks at the moment Error: Network Error",
|
67
|
+
"type": "error",
|
68
|
+
},
|
69
|
+
},
|
70
|
+
"type": "TOASTS_ADD",
|
71
|
+
},
|
72
|
+
],
|
73
|
+
]
|
74
|
+
`;
|
75
|
+
|
76
|
+
exports[`TasksTable actions handles resumable bulkResume requests 1`] = `
|
77
|
+
Array [
|
78
|
+
Array [
|
79
|
+
Object {
|
80
|
+
"type": "TASKS_RESUME_REQUEST",
|
81
|
+
},
|
82
|
+
],
|
83
|
+
Array [
|
84
|
+
Object {
|
85
|
+
"type": "TASKS_RESUME_SUCCESS",
|
86
|
+
},
|
87
|
+
],
|
88
|
+
Array [
|
89
|
+
Object {
|
90
|
+
"payload": Object {
|
91
|
+
"message": Object {
|
92
|
+
"message": "I am resumed Task execution was resumed",
|
93
|
+
"type": "success",
|
94
|
+
},
|
95
|
+
},
|
96
|
+
"type": "TOASTS_ADD",
|
97
|
+
},
|
98
|
+
],
|
99
|
+
Array [
|
100
|
+
Object {
|
101
|
+
"payload": Object {
|
102
|
+
"message": Object {
|
103
|
+
"message": "I am failed Task execution could not be resumed",
|
104
|
+
"type": "error",
|
105
|
+
},
|
106
|
+
},
|
107
|
+
"type": "TOASTS_ADD",
|
108
|
+
},
|
53
109
|
],
|
54
110
|
Array [
|
55
111
|
"TASKS_TABLE",
|
data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/TasksTablePage.test.js.snap
CHANGED
@@ -69,6 +69,7 @@ exports[`TasksTablePage rendering render with Breadcrubs 1`] = `
|
|
69
69
|
],
|
70
70
|
}
|
71
71
|
}
|
72
|
+
header="Tasks"
|
72
73
|
onSearch={[Function]}
|
73
74
|
searchProps={
|
74
75
|
Object {
|
@@ -105,7 +106,8 @@ exports[`TasksTablePage rendering render with Breadcrubs 1`] = `
|
|
105
106
|
>
|
106
107
|
<TasksTable
|
107
108
|
actionName=""
|
108
|
-
|
109
|
+
bulkCancel={[MockFunction]}
|
110
|
+
bulkResume={[MockFunction]}
|
109
111
|
cancelTask={[MockFunction]}
|
110
112
|
error={null}
|
111
113
|
getTableItems={[MockFunction]}
|
@@ -225,6 +227,7 @@ exports[`TasksTablePage rendering render with minimal props 1`] = `
|
|
225
227
|
parentTaskID={null}
|
226
228
|
/>
|
227
229
|
}
|
230
|
+
header="Tasks"
|
228
231
|
onSearch={[Function]}
|
229
232
|
searchProps={
|
230
233
|
Object {
|
@@ -261,7 +264,8 @@ exports[`TasksTablePage rendering render with minimal props 1`] = `
|
|
261
264
|
>
|
262
265
|
<TasksTable
|
263
266
|
actionName=""
|
264
|
-
|
267
|
+
bulkCancel={[MockFunction]}
|
268
|
+
bulkResume={[MockFunction]}
|
265
269
|
cancelTask={[MockFunction]}
|
266
270
|
error={null}
|
267
271
|
getTableItems={[MockFunction]}
|
metadata
CHANGED
@@ -1,45 +1,45 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foreman-tasks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ivan Nečas
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-04-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: dynflow
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 1.2.3
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 1.2.3
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: foreman-tasks-core
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: get_process_mem
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
@@ -67,7 +67,7 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 0.1.4
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: sinatra
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - ">="
|