foreman-tasks 5.2.2 → 6.0.1

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 (62) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby_tests.yml +7 -18
  3. data/.rubocop.yml +1 -0
  4. data/app/lib/actions/base.rb +1 -0
  5. data/app/lib/actions/foreman/host/import_facts.rb +1 -1
  6. data/app/lib/actions/helpers/lifecycle_logging.rb +1 -1
  7. data/app/lib/actions/middleware/rails_executor_wrap.rb +2 -2
  8. data/app/lib/actions/middleware/watch_delegated_proxy_sub_tasks.rb +18 -11
  9. data/app/lib/actions/proxy_action.rb +2 -2
  10. data/app/lib/actions/task_synchronization.rb +65 -0
  11. data/app/lib/actions/trigger_proxy_batch.rb +1 -1
  12. data/app/models/foreman_tasks/lock.rb +1 -1
  13. data/app/models/foreman_tasks/remote_task.rb +10 -3
  14. data/app/models/foreman_tasks/task/dynflow_task.rb +20 -21
  15. data/app/views/foreman_tasks/api/locks/show.json.rabl +4 -0
  16. data/config/routes.rb +1 -1
  17. data/db/migrate/20210708123832_add_parent_task_id_to_remote_tasks.foreman_tasks.rb +5 -0
  18. data/db/migrate/20211123170430_tasks_settings_to_dsl_category.rb +5 -0
  19. data/foreman-tasks.gemspec +1 -1
  20. data/lib/foreman_tasks/dynflow/configuration.rb +1 -6
  21. data/lib/foreman_tasks/dynflow.rb +1 -1
  22. data/lib/foreman_tasks/engine.rb +56 -9
  23. data/lib/foreman_tasks/test_helpers.rb +1 -1
  24. data/lib/foreman_tasks/version.rb +1 -1
  25. data/locale/action_names.rb +2 -3
  26. data/locale/en/foreman_tasks.po +27 -3
  27. data/locale/foreman_tasks.pot +230 -176
  28. data/locale/fr/foreman_tasks.po +27 -3
  29. data/locale/ja/foreman_tasks.po +27 -3
  30. data/locale/zh_CN/foreman_tasks.po +27 -3
  31. data/test/controllers/api/tasks_controller_test.rb +1 -2
  32. data/test/factories/task_factory.rb +1 -1
  33. data/test/lib/actions/middleware/keep_current_taxonomies_test.rb +9 -1
  34. data/test/support/dummy_dynflow_action.rb +1 -1
  35. data/test/support/dummy_proxy_action.rb +1 -1
  36. data/test/unit/actions/proxy_action_test.rb +19 -13
  37. data/test/unit/actions/trigger_proxy_batch_test.rb +0 -1
  38. data/test/unit/troubleshooting_help_generator_test.rb +0 -1
  39. data/test/unit/ui_notifications_test.rb +0 -1
  40. data/webpack/ForemanTasks/Components/TaskActions/TaskActionHelpers.js +1 -1
  41. data/webpack/ForemanTasks/Components/TaskActions/index.js +1 -1
  42. data/webpack/ForemanTasks/Components/TaskDetails/Components/Locks.js +28 -14
  43. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/__snapshots__/Locks.test.js.snap +50 -42
  44. data/webpack/ForemanTasks/Components/TaskDetails/TaskDetailsActions.js +1 -1
  45. data/webpack/ForemanTasks/Components/TasksTable/TasksBulkActions.js +1 -1
  46. data/webpack/ForemanTasks/Components/TasksTable/TasksTable.js +2 -28
  47. data/webpack/ForemanTasks/Components/TasksTable/TasksTablePage.js +5 -9
  48. data/webpack/ForemanTasks/Components/TasksTable/TasksTableReducer.js +1 -5
  49. data/webpack/ForemanTasks/Components/TasksTable/TasksTableSelectors.js +2 -2
  50. data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksTable.fixtures.js +1 -4
  51. data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/SubTasksPage.test.js.snap +1 -6
  52. data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/TasksIndexPage.test.js.snap +1 -6
  53. data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/TasksTable.test.js.snap +2 -22
  54. data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/TasksTablePage.test.js.snap +2 -12
  55. data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/TasksTableReducer.test.js.snap +1 -4
  56. data/webpack/ForemanTasks/Components/TasksTable/index.js +2 -2
  57. data/webpack/__mocks__/foremanReact/components/Pagination/index.js +2 -0
  58. data/webpack/__mocks__/foremanReact/{redux/actions/toasts.js → components/ToastsList/index.js} +0 -0
  59. metadata +8 -7
  60. data/app/models/setting/foreman_tasks.rb +0 -29
  61. data/lib/foreman_tasks/dynflow/persistence.rb +0 -46
  62. data/webpack/__mocks__/foremanReact/components/Pagination/PaginationWrapper.js +0 -2
@@ -4,7 +4,7 @@ import { Table } from 'foremanReact/components/common/table';
4
4
  import { STATUS } from 'foremanReact/constants';
5
5
  import MessageBox from 'foremanReact/components/common/MessageBox';
6
6
  import { translate as __ } from 'foremanReact/common/I18n';
7
- import Pagination from 'foremanReact/components/Pagination/PaginationWrapper';
7
+ import Pagination from 'foremanReact/components/Pagination';
8
8
  import { getURIQuery } from 'foremanReact/common/helpers';
9
9
  import createTasksTableSchema from './TasksTableSchema';
10
10
  import { updateURlQuery } from './TasksTableHelpers';
@@ -18,7 +18,6 @@ const TasksTable = ({
18
18
  results,
19
19
  history,
20
20
  itemCount,
21
- pagination,
22
21
  selectedRows,
23
22
  selectPage,
24
23
  unselectAllRows,
@@ -82,16 +81,6 @@ const TasksTable = ({
82
81
  return <span>{__('No Tasks')}</span>;
83
82
  }
84
83
 
85
- const changeTablePage = ({ page, perPage }) => {
86
- updateURlQuery(
87
- {
88
- page,
89
- per_page: perPage,
90
- },
91
- history
92
- );
93
- };
94
-
95
84
  const setSortHistory = (by, order) => {
96
85
  updateURlQuery({ sort_by: by, sort_order: order }, history);
97
86
  };
@@ -133,14 +122,7 @@ const TasksTable = ({
133
122
  )}
134
123
  rows={results}
135
124
  />
136
- <Pagination
137
- className="tasks-pagination"
138
- viewType="table"
139
- itemCount={itemCount}
140
- pagination={pagination}
141
- onChange={changeTablePage}
142
- dropdownButtonId="tasks-table-dropdown"
143
- />
125
+ <Pagination itemCount={itemCount} />
144
126
  </div>
145
127
  );
146
128
  };
@@ -151,10 +133,6 @@ TasksTable.propTypes = {
151
133
  status: PropTypes.oneOf(Object.keys(STATUS)),
152
134
  error: PropTypes.instanceOf(Error),
153
135
  itemCount: PropTypes.number.isRequired,
154
- pagination: PropTypes.shape({
155
- page: PropTypes.number,
156
- perPage: PropTypes.number,
157
- }),
158
136
  history: PropTypes.object.isRequired,
159
137
  openClickedModal: PropTypes.func.isRequired,
160
138
  selectedRows: PropTypes.array,
@@ -172,10 +150,6 @@ TasksTable.propTypes = {
172
150
  TasksTable.defaultProps = {
173
151
  status: STATUS.PENDING,
174
152
  error: null,
175
- pagination: {
176
- page: 1,
177
- perPage: 20,
178
- },
179
153
  selectedRows: [],
180
154
  allRowsSelected: false,
181
155
  permissions: {
@@ -99,10 +99,10 @@ const TasksTablePage = ({
99
99
  <React.Fragment>
100
100
  {props.permissions.edit &&
101
101
  showSelectAll &&
102
- props.itemCount >= props.pagination.perPage && (
102
+ props.itemCount >= props.perPage && (
103
103
  <SelectAllAlert
104
104
  itemCount={props.itemCount}
105
- perPage={props.pagination.perPage}
105
+ perPage={props.perPage}
106
106
  selectAllRows={selectAllRows}
107
107
  unselectAllRows={props.unselectAllRows}
108
108
  allRowsSelected={props.allRowsSelected}
@@ -118,9 +118,8 @@ const TasksTablePage = ({
118
118
  TasksTablePage.propTypes = {
119
119
  allRowsSelected: PropTypes.bool,
120
120
  itemCount: PropTypes.number.isRequired,
121
- pagination: PropTypes.shape({
122
- perPage: PropTypes.number,
123
- }),
121
+ perPage: PropTypes.number,
122
+
124
123
  selectAllRows: PropTypes.func.isRequired,
125
124
  results: PropTypes.array.isRequired,
126
125
  getTableItems: PropTypes.func.isRequired,
@@ -142,10 +141,7 @@ TasksTablePage.propTypes = {
142
141
  };
143
142
 
144
143
  TasksTablePage.defaultProps = {
145
- pagination: {
146
- page: 1,
147
- perPage: 20,
148
- },
144
+ perPage: 20,
149
145
  allRowsSelected: false,
150
146
  actionName: '',
151
147
  status: STATUS.PENDING,
@@ -21,7 +21,6 @@ export const TasksTableQueryReducer = (state = initialState, action) => {
21
21
  const { type, payload, response } = action;
22
22
  const {
23
23
  subtotal,
24
- page,
25
24
  per_page: perPageString,
26
25
  action_name: actionName,
27
26
  can_edit: canEdit,
@@ -34,10 +33,7 @@ export const TasksTableQueryReducer = (state = initialState, action) => {
34
33
  return Immutable.merge(state, {
35
34
  itemCount: subtotal,
36
35
  actionName,
37
- pagination: {
38
- page: Number(page),
39
- perPage: Number(perPageString),
40
- },
36
+ perPage: Number(perPageString),
41
37
  selectedRows: [],
42
38
  permissions: {
43
39
  edit: canEdit,
@@ -12,8 +12,8 @@ export const selectTasksTableContent = state =>
12
12
  export const selectTasksTableQuery = state =>
13
13
  selectTasksTable(state).tasksTableQuery || {};
14
14
 
15
- export const selectPagitation = state =>
16
- selectTasksTableQuery(state).pagination || {};
15
+ export const selectPerPage = state =>
16
+ selectTasksTableQuery(state).perPage || 20;
17
17
 
18
18
  export const selectItemCount = state =>
19
19
  selectTasksTableQuery(state).itemCount || 0;
@@ -11,10 +11,7 @@ export const minProps = {
11
11
  unselectRow: jest.fn(),
12
12
  reloadPage: jest.fn(),
13
13
  selectedRows: [],
14
- pagination: {
15
- page: 1,
16
- perPage: 10,
17
- },
14
+ perPage: 10,
18
15
  history: { location: { search: '' } },
19
16
  results: ['a', 'b'],
20
17
  sort: {
@@ -23,13 +23,8 @@ exports[`SubTasksPage rendering render with minimal props 1`] = `
23
23
  openClickedModal={[MockFunction]}
24
24
  openModal={[MockFunction]}
25
25
  openModalAction={[MockFunction]}
26
- pagination={
27
- Object {
28
- "page": 1,
29
- "perPage": 10,
30
- }
31
- }
32
26
  parentTaskID="some-id"
27
+ perPage={10}
33
28
  reloadPage={[MockFunction]}
34
29
  results={
35
30
  Array [
@@ -15,12 +15,7 @@ exports[`TasksIndexPage rendering render with minimal props 1`] = `
15
15
  openClickedModal={[MockFunction]}
16
16
  openModal={[MockFunction]}
17
17
  openModalAction={[MockFunction]}
18
- pagination={
19
- Object {
20
- "page": 1,
21
- "perPage": 10,
22
- }
23
- }
18
+ perPage={10}
24
19
  reloadPage={[MockFunction]}
25
20
  results={
26
21
  Array [
@@ -20,18 +20,8 @@ exports[`TasksTable rendering render with loading Props 1`] = `
20
20
  ]
21
21
  }
22
22
  />
23
- <PaginationWrapper
24
- className="tasks-pagination"
25
- dropdownButtonId="tasks-table-dropdown"
23
+ <Pagination
26
24
  itemCount={2}
27
- onChange={[Function]}
28
- pagination={
29
- Object {
30
- "page": 1,
31
- "perPage": 10,
32
- }
33
- }
34
- viewType="table"
35
25
  />
36
26
  </div>
37
27
  `;
@@ -49,18 +39,8 @@ exports[`TasksTable rendering render with minimal Props 1`] = `
49
39
  ]
50
40
  }
51
41
  />
52
- <PaginationWrapper
53
- className="tasks-pagination"
54
- dropdownButtonId="tasks-table-dropdown"
42
+ <Pagination
55
43
  itemCount={2}
56
- onChange={[Function]}
57
- pagination={
58
- Object {
59
- "page": 1,
60
- "perPage": 10,
61
- }
62
- }
63
- viewType="table"
64
44
  />
65
45
  </div>
66
46
  `;
@@ -119,13 +119,8 @@ exports[`TasksTablePage rendering render with Breadcrubs and edit permissions 1`
119
119
  itemCount={2}
120
120
  openClickedModal={[MockFunction]}
121
121
  openModal={[Function]}
122
- pagination={
123
- Object {
124
- "page": 1,
125
- "perPage": 10,
126
- }
127
- }
128
122
  parentTaskID={null}
123
+ perPage={10}
129
124
  permissions={
130
125
  Object {
131
126
  "edit": false,
@@ -259,13 +254,8 @@ exports[`TasksTablePage rendering render with minimal props 1`] = `
259
254
  itemCount={2}
260
255
  openClickedModal={[MockFunction]}
261
256
  openModal={[Function]}
262
- pagination={
263
- Object {
264
- "page": 1,
265
- "perPage": 10,
266
- }
267
- }
268
257
  parentTaskID={null}
258
+ perPage={10}
269
259
  permissions={
270
260
  Object {
271
261
  "edit": false,
@@ -55,10 +55,7 @@ Object {
55
55
  "tasksTableQuery": Object {
56
56
  "actionName": undefined,
57
57
  "itemCount": 120,
58
- "pagination": Object {
59
- "page": 3,
60
- "perPage": 12,
61
- },
58
+ "perPage": 12,
62
59
  "permissions": Object {
63
60
  "edit": undefined,
64
61
  },
@@ -8,7 +8,7 @@ import {
8
8
  selectStatus,
9
9
  selectError,
10
10
  selectResults,
11
- selectPagitation,
11
+ selectPerPage,
12
12
  selectItemCount,
13
13
  selectSort,
14
14
  selectActionName,
@@ -24,7 +24,7 @@ const mapStateToProps = state => ({
24
24
  error: selectError(state),
25
25
  sort: selectSort(state),
26
26
  results: selectResults(state),
27
- pagination: selectPagitation(state),
27
+ perPage: selectPerPage(state),
28
28
  itemCount: selectItemCount(state),
29
29
  actionName: selectActionName(state),
30
30
  selectedRows: selectSelectedRows(state),
@@ -0,0 +1,2 @@
1
+ const Pagination = () => jest.fn();
2
+ export default Pagination;
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman-tasks
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.2.2
4
+ version: 6.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Nečas
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 1.2.3
19
+ version: 1.6.0
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: 1.2.3
26
+ version: 1.6.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: get_process_mem
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -166,6 +166,7 @@ files:
166
166
  - app/lib/actions/proxy_action.rb
167
167
  - app/lib/actions/recurring_action.rb
168
168
  - app/lib/actions/serializers/active_record_serializer.rb
169
+ - app/lib/actions/task_synchronization.rb
169
170
  - app/lib/actions/trigger_proxy_batch.rb
170
171
  - app/lib/foreman_tasks/concerns/polling_action_extensions.rb
171
172
  - app/lib/proxy_api/foreman_dynflow/dynflow_proxy.rb
@@ -188,7 +189,6 @@ files:
188
189
  - app/models/foreman_tasks/task_group_member.rb
189
190
  - app/models/foreman_tasks/task_groups/recurring_logic_task_group.rb
190
191
  - app/models/foreman_tasks/triggering.rb
191
- - app/models/setting/foreman_tasks.rb
192
192
  - app/services/foreman_tasks/proxy_selector.rb
193
193
  - app/services/foreman_tasks/troubleshooting_help_generator.rb
194
194
  - app/services/ui_notifications/tasks.rb
@@ -250,7 +250,9 @@ files:
250
250
  - db/migrate/20200517215015_rename_bookmarks_controller.rb
251
251
  - db/migrate/20200519093217_drop_dynflow_allow_dangerous_actions_setting.foreman_tasks.rb
252
252
  - db/migrate/20200611090846_add_task_lock_index_on_resource_type_and_task_id.rb
253
+ - db/migrate/20210708123832_add_parent_task_id_to_remote_tasks.foreman_tasks.rb
253
254
  - db/migrate/20210720115251_add_purpose_to_recurring_logic.rb
255
+ - db/migrate/20211123170430_tasks_settings_to_dsl_category.rb
254
256
  - db/seeds.d/20-foreman_tasks_permissions.rb
255
257
  - db/seeds.d/30-notification_blueprints.rb
256
258
  - db/seeds.d/60-dynflow_proxy_feature.rb
@@ -271,7 +273,6 @@ files:
271
273
  - lib/foreman_tasks/dynflow.rb
272
274
  - lib/foreman_tasks/dynflow/configuration.rb
273
275
  - lib/foreman_tasks/dynflow/console_authorizer.rb
274
- - lib/foreman_tasks/dynflow/persistence.rb
275
276
  - lib/foreman_tasks/engine.rb
276
277
  - lib/foreman_tasks/task_error.rb
277
278
  - lib/foreman_tasks/tasks/cleanup.rake
@@ -571,7 +572,8 @@ files:
571
572
  - webpack/__mocks__/foremanReact/components/ForemanModal/ForemanModalHooks.js
572
573
  - webpack/__mocks__/foremanReact/components/ForemanModal/index.js
573
574
  - webpack/__mocks__/foremanReact/components/Layout/LayoutActions.js
574
- - webpack/__mocks__/foremanReact/components/Pagination/PaginationWrapper.js
575
+ - webpack/__mocks__/foremanReact/components/Pagination/index.js
576
+ - webpack/__mocks__/foremanReact/components/ToastsList/index.js
575
577
  - webpack/__mocks__/foremanReact/components/common/ActionButtons/ActionButtons.js
576
578
  - webpack/__mocks__/foremanReact/components/common/MessageBox.js
577
579
  - webpack/__mocks__/foremanReact/components/common/dates/LongDateTime.js
@@ -581,7 +583,6 @@ files:
581
583
  - webpack/__mocks__/foremanReact/constants.js
582
584
  - webpack/__mocks__/foremanReact/redux/API/APISelectors.js
583
585
  - webpack/__mocks__/foremanReact/redux/API/index.js
584
- - webpack/__mocks__/foremanReact/redux/actions/toasts.js
585
586
  - webpack/__mocks__/foremanReact/redux/middlewares/IntervalMiddleware.js
586
587
  - webpack/__mocks__/foremanReact/routes/common/PageLayout/PageLayout.js
587
588
  - webpack/__mocks__/foremanReact/routes/common/PageLayout/components/ExportButton/ExportButton.js
@@ -1,29 +0,0 @@
1
- class Setting::ForemanTasks < Setting
2
- def self.default_settings
3
- [
4
- set('foreman_tasks_sync_task_timeout', N_('Number of seconds to wait for synchronous task to finish.'), 120, N_('Sync task timeout')),
5
- set('dynflow_enable_console', N_('Enable the dynflow console (/foreman_tasks/dynflow) for debugging'), true, N_('Enable dynflow console')),
6
- set('dynflow_console_require_auth', N_('Require user to be authenticated as user with admin rights when accessing dynflow console'), true, N_('Require auth for dynflow console')),
7
- set('foreman_tasks_proxy_action_retry_count', N_('Number of attempts to start a task on the smart proxy before failing'), 4, N_('Proxy action retry count')),
8
- set('foreman_tasks_proxy_action_retry_interval', N_('Time in seconds between retries'), 15, N_('Proxy action retry interval')),
9
- set('foreman_tasks_proxy_batch_trigger', N_('Allow triggering tasks on the smart proxy in batches'), true, N_('Allow proxy batch tasks')),
10
- set('foreman_tasks_proxy_batch_size', N_('Number of tasks which should be sent to the smart proxy in one request, if foreman_tasks_proxy_batch_trigger is enabled'), 100, N_('Proxy tasks batch size')),
11
- set('foreman_tasks_troubleshooting_url',
12
- N_('Url pointing to the task troubleshooting documentation. '\
13
- 'It should contain %{label} placeholder, that will be replaced with normalized task label '\
14
- '(restricted to only alphanumeric characters)). %{version} placeholder is also available.'),
15
- nil, N_('Tasks troubleshooting URL')),
16
- set('foreman_tasks_polling_multiplier',
17
- N_('Polling multiplier which is used to multiply the default polling intervals. '\
18
- 'This can be used to prevent polling too frequently for long running tasks.'),
19
- 1,
20
- N_("Polling intervals multiplier")),
21
- ]
22
- end
23
-
24
- def self.load_defaults
25
- Setting::BLANK_ATTRS.push('foreman_tasks_troubleshooting_url')
26
- Setting::NONZERO_ATTRS.push('foreman_tasks_polling_multiplier')
27
- super
28
- end
29
- end
@@ -1,46 +0,0 @@
1
- module ForemanTasks
2
- # Wrap the Dynflow persistence to reflect the changes to execution plan
3
- # in the Task model. This is probably a temporary solution and
4
- # Dynflow will probably get more events-based API but it should be enought
5
- # for start, until the requiements on the API are clear enough.
6
- class Dynflow::Persistence < ::Dynflow::PersistenceAdapters::Sequel
7
- def save_execution_plan(execution_plan_id, value)
8
- # clear connection only if not running in some active record transaction already
9
- clear_connections = ActiveRecord::Base.connection.open_transactions.zero?
10
- super.tap do
11
- on_execution_plan_save(execution_plan_id, value)
12
- rescue => e
13
- Foreman::Logging.exception('Error on on_execution_plan_save event', e,
14
- :logger => 'dynflow')
15
- end
16
- ensure
17
- ::ActiveRecord::Base.clear_active_connections! if clear_connections
18
- end
19
-
20
- def on_execution_plan_save(execution_plan_id, data)
21
- # We can load the data unless the execution plan was properly planned and saved
22
- # including its steps
23
- case data[:state]
24
- when :pending
25
- task = ForemanTasks::Task::DynflowTask.new_for_execution_plan(execution_plan_id, data)
26
- task.start_at ||= Time.zone.now
27
- task.save!
28
- when :scheduled
29
- delayed_plan = load_delayed_plan(execution_plan_id)
30
- raise Foreman::Exception, 'Plan is delayed but the delay record is missing' if delayed_plan.nil?
31
- task = ::ForemanTasks::Task::DynflowTask.find_by!(:external_id => execution_plan_id)
32
- task.update_from_dynflow(data.merge(:start_at => delayed_plan[:start_at],
33
- :start_before => delayed_plan[:start_before]))
34
- when :planning
35
- task = ::ForemanTasks::Task::DynflowTask.where(:external_id => execution_plan_id).first
36
- task.update_from_dynflow(data)
37
- else
38
- if (task = ::ForemanTasks::Task::DynflowTask.where(:external_id => execution_plan_id).first)
39
- unless task.state.to_s == data[:state].to_s
40
- task.update_from_dynflow(data)
41
- end
42
- end
43
- end
44
- end
45
- end
46
- end
@@ -1,2 +0,0 @@
1
- const PaginationWrapper = () => jest.fn();
2
- export default PaginationWrapper;