foreman_ansible 7.1.0 → 7.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/app/graphql/presenters/ansible_role_presenter.rb +4 -0
  3. data/app/graphql/types/ansible_role.rb +1 -0
  4. data/app/graphql/types/inherited_ansible_role.rb +4 -0
  5. data/lib/foreman_ansible/register.rb +1 -1
  6. data/lib/foreman_ansible/version.rb +1 -1
  7. data/locale/ca/foreman_ansible.edit.po +1162 -0
  8. data/locale/ca/foreman_ansible.po.time_stamp +0 -0
  9. data/locale/cs_CZ/foreman_ansible.edit.po +1207 -0
  10. data/locale/cs_CZ/foreman_ansible.po.time_stamp +0 -0
  11. data/locale/de/foreman_ansible.edit.po +1148 -0
  12. data/locale/de/foreman_ansible.po.time_stamp +0 -0
  13. data/locale/en/foreman_ansible.edit.po +1146 -0
  14. data/locale/en/foreman_ansible.po.time_stamp +0 -0
  15. data/locale/en_GB/foreman_ansible.edit.po +1155 -0
  16. data/locale/en_GB/foreman_ansible.po.time_stamp +0 -0
  17. data/locale/es/foreman_ansible.edit.po +1148 -0
  18. data/locale/es/foreman_ansible.po.time_stamp +0 -0
  19. data/locale/fr/foreman_ansible.edit.po +1148 -0
  20. data/locale/fr/foreman_ansible.po.time_stamp +0 -0
  21. data/locale/gl/foreman_ansible.edit.po +1156 -0
  22. data/locale/gl/foreman_ansible.po.time_stamp +0 -0
  23. data/locale/it/foreman_ansible.edit.po +1148 -0
  24. data/locale/it/foreman_ansible.po.time_stamp +0 -0
  25. data/locale/ja/foreman_ansible.edit.po +1148 -0
  26. data/locale/ja/foreman_ansible.po.time_stamp +0 -0
  27. data/locale/ko/foreman_ansible.edit.po +1148 -0
  28. data/locale/ko/foreman_ansible.po.time_stamp +0 -0
  29. data/locale/nl_NL/foreman_ansible.edit.po +1168 -0
  30. data/locale/nl_NL/foreman_ansible.po.time_stamp +0 -0
  31. data/locale/pl/foreman_ansible.edit.po +1180 -0
  32. data/locale/pl/foreman_ansible.po.time_stamp +0 -0
  33. data/locale/pt_BR/foreman_ansible.edit.po +1148 -0
  34. data/locale/pt_BR/foreman_ansible.po.time_stamp +0 -0
  35. data/locale/ru/foreman_ansible.edit.po +1149 -0
  36. data/locale/ru/foreman_ansible.po.time_stamp +0 -0
  37. data/locale/sv_SE/foreman_ansible.edit.po +1180 -0
  38. data/locale/sv_SE/foreman_ansible.po.time_stamp +0 -0
  39. data/locale/zh_CN/foreman_ansible.edit.po +1148 -0
  40. data/locale/zh_CN/foreman_ansible.po.time_stamp +0 -0
  41. data/locale/zh_TW/foreman_ansible.edit.po +1148 -0
  42. data/locale/zh_TW/foreman_ansible.po.time_stamp +0 -0
  43. data/test/graphql/queries/host_ansible_roles_query_test.rb +61 -0
  44. data/webpack/components/AnsibleHostDetail/components/JobsTab/PreviousJobsTable.js.orig +151 -0
  45. data/webpack/components/AnsibleHostDetail/components/RolesTab/EditRolesModal/EditRolesForm.js +26 -24
  46. data/webpack/components/AnsibleHostDetail/components/RolesTab/EditRolesModal/index.js +1 -1
  47. data/webpack/components/AnsibleRolesSwitcher/__tests__/AnsibleRolesSwitcher.test.js +0 -2
  48. metadata +68 -29
File without changes
@@ -0,0 +1,61 @@
1
+ require 'test_plugin_helper'
2
+
3
+ module Queries
4
+ class HostAnsibleRolesQueryTest < GraphQLQueryTestCase
5
+ let(:role1) { FactoryBot.create(:ansible_role) }
6
+ let(:role2) { FactoryBot.create(:ansible_role) }
7
+ let(:hostgroup) { FactoryBot.create(:hostgroup, ansible_roles: [role1]) }
8
+ let(:host) { FactoryBot.create(:host, hostgroup: hostgroup, ansible_roles: [role2]) }
9
+ let(:variables) { { id: Foreman::GlobalId.for(host) } }
10
+ let(:query) do
11
+ <<-GRAPHQL
12
+ query ($id: String!) {
13
+ host(id: $id) {
14
+ id
15
+ allAnsibleRoles {
16
+ totalCount
17
+ nodes {
18
+ id
19
+ name
20
+ inherited
21
+ ansibleVariables {
22
+ totalCount
23
+ nodes {
24
+ key
25
+ override
26
+ }
27
+ }
28
+ }
29
+ }
30
+ }
31
+ }
32
+ GRAPHQL
33
+ end
34
+
35
+ context 'with admin permissions' do
36
+ let(:context_user) { FactoryBot.create(:user, :admin) }
37
+ let(:data) { result['data']['host']['allAnsibleRoles'] }
38
+
39
+ it 'allows to fetch inherited roles' do
40
+ value(data['totalCount']).must_equal(2)
41
+ r1_data = data['nodes'].first
42
+ r2_data = data['nodes'].second
43
+ value(r1_data['name']).must_equal(role1.name)
44
+ value(r1_data['inherited']).must_equal(true)
45
+ value(r2_data['name']).must_equal(role2.name)
46
+ value(r2_data['inherited']).must_equal(false)
47
+ end
48
+
49
+ it 'allow fetching variables' do
50
+ var1 = FactoryBot.create(:ansible_variable, ansible_role: role1, override: true)
51
+ FactoryBot.create(:ansible_variable, ansible_role: role1)
52
+ FactoryBot.create(:ansible_variable, ansible_role: role2, override: true)
53
+ r1_vars = data['nodes'].first['ansibleVariables']
54
+ r2_vars = data['nodes'].second['ansibleVariables']
55
+ value(r1_vars['totalCount']).must_equal(2)
56
+ value(r2_vars['totalCount']).must_equal(1)
57
+ value(r1_vars['nodes'].first['key']).must_equal(var1.key)
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,151 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { translate as __ } from 'foremanReact/common/I18n';
4
+ import { usePaginationOptions } from 'foremanReact/components/Pagination/PaginationHooks';
5
+
6
+ import RelativeDateTime from 'foremanReact/components/common/dates/RelativeDateTime';
7
+
8
+ import {
9
+ TableComposable,
10
+ Thead,
11
+ Tbody,
12
+ Tr,
13
+ Th,
14
+ Td,
15
+ } from '@patternfly/react-table';
16
+ import { Flex, FlexItem, Pagination } from '@patternfly/react-core';
17
+
18
+ import { decodeId } from '../../../../globalIdHelper';
19
+ import withLoading from '../../../withLoading';
20
+ <<<<<<< HEAD
21
+ import { readableCron } from './JobsTabHelper';
22
+ import {
23
+ preparePerPageOptions,
24
+ refreshPage,
25
+ } from '../../../../helpers/paginationHelper';
26
+ =======
27
+ import { readableCron, readablePurpose } from './JobsTabHelper';
28
+ >>>>>>> 5b01704 (Fixes #34458 - Show Hostgroup jobs on the Host Detail page)
29
+
30
+ const PreviousJobsTable = ({ history, totalCount, jobs, pagination }) => {
31
+ const columns = [
32
+ __('Description'),
33
+ __('Result'),
34
+ __('State'),
35
+ __('Executed at'),
36
+ __('Schedule'),
37
+ ];
38
+
39
+ const handlePerPageSelected = (event, perPage) => {
40
+ refreshPage(history, { page: 1, perPage });
41
+ };
42
+
43
+ const handlePageSelected = (event, page) => {
44
+ refreshPage(history, { ...pagination, page });
45
+ };
46
+
47
+ const perPageOptions = preparePerPageOptions(usePaginationOptions());
48
+
49
+ return (
50
+ <React.Fragment>
51
+ <h3>{__('Previously executed jobs')}</h3>
52
+ <<<<<<< HEAD
53
+ <Flex className="pf-u-pt-md">
54
+ =======
55
+ <Flex direction={{ default: 'column' }} className="pf-u-pt-md">
56
+ <FlexItem align={{ default: 'alignRight' }}>
57
+ <Pagination updateParamsByUrl itemCount={totalCount} variant="top" />
58
+ </FlexItem>
59
+ <FlexItem>
60
+ <TableComposable variant="compact">
61
+ <Thead>
62
+ <Tr>
63
+ {columns.map(col => (
64
+ <Th key={col}>{col}</Th>
65
+ ))}
66
+ </Tr>
67
+ </Thead>
68
+ <Tbody>
69
+ {jobs.map(job => (
70
+ <Tr key={job.id}>
71
+ <Td>
72
+ <a
73
+ onClick={() =>
74
+ window.tfm.nav.pushUrl(
75
+ `/job_invocations/${decodeId(job.id)}`
76
+ )
77
+ }
78
+ >
79
+ {job.description}
80
+ </a>
81
+ &nbsp;
82
+ {readablePurpose(job.recurringLogic.purpose)}
83
+ </Td>
84
+ <Td>{job.task.result}</Td>
85
+ <Td>{job.task.state}</Td>
86
+ <Td>
87
+ <RelativeDateTime date={job.startAt} />
88
+ </Td>
89
+ <Td>{readableCron(job.recurringLogic.cronLine)}</Td>
90
+ </Tr>
91
+ ))}
92
+ </Tbody>
93
+ </TableComposable>
94
+ </FlexItem>
95
+ >>>>>>> 5b01704 (Fixes #34458 - Show Hostgroup jobs on the Host Detail page)
96
+ <FlexItem align={{ default: 'alignRight' }}>
97
+ <Pagination
98
+ itemCount={totalCount}
99
+ page={pagination.page}
100
+ perPage={pagination.perPage}
101
+ onSetPage={handlePageSelected}
102
+ onPerPageSelect={handlePerPageSelected}
103
+ perPageOptions={perPageOptions}
104
+ variant="top"
105
+ />
106
+ </FlexItem>
107
+ </Flex>
108
+ <TableComposable variant="compact">
109
+ <Thead>
110
+ <Tr>
111
+ {columns.map(col => (
112
+ <Th key={col}>{col}</Th>
113
+ ))}
114
+ </Tr>
115
+ </Thead>
116
+ <Tbody>
117
+ {jobs.map(job => (
118
+ <Tr key={job.id}>
119
+ <Td>
120
+ <a
121
+ onClick={() =>
122
+ window.tfm.nav.pushUrl(
123
+ `/job_invocations/${decodeId(job.id)}`
124
+ )
125
+ }
126
+ >
127
+ {job.description}
128
+ </a>
129
+ </Td>
130
+ <Td>{job.task.result}</Td>
131
+ <Td>{job.task.state}</Td>
132
+ <Td>
133
+ <RelativeDateTime date={job.startAt} />
134
+ </Td>
135
+ <Td>{readableCron(job.recurringLogic.cronLine)}</Td>
136
+ </Tr>
137
+ ))}
138
+ </Tbody>
139
+ </TableComposable>
140
+ </React.Fragment>
141
+ );
142
+ };
143
+
144
+ PreviousJobsTable.propTypes = {
145
+ jobs: PropTypes.array.isRequired,
146
+ history: PropTypes.object.isRequired,
147
+ totalCount: PropTypes.number.isRequired,
148
+ pagination: PropTypes.object.isRequired,
149
+ };
150
+
151
+ export default withLoading(PreviousJobsTable);
@@ -1,7 +1,7 @@
1
- import React, { useState, useEffect } from 'react';
1
+ import React, { useState } from 'react';
2
2
  import { translate as __ } from 'foremanReact/common/I18n';
3
3
  import PropTypes from 'prop-types';
4
-
4
+ import { isEqual } from 'lodash';
5
5
  import { useMutation } from '@apollo/client';
6
6
 
7
7
  import { Button, Modal, Spinner } from '@patternfly/react-core';
@@ -21,17 +21,15 @@ const EditRolesForm = props => {
21
21
  actions,
22
22
  } = props;
23
23
 
24
- const [formState, setFormState] = useState({
25
- availableOptions: [],
26
- chosenOptions: [],
27
- });
24
+ const initAvailableOpt = availableRoles.map(item => item.name);
25
+ const initChosenOpt = assignedRoles.map(item => item.name);
26
+ const [availableOptions, setAvailableOptions] = useState(initAvailableOpt);
27
+ const [chosenOptions, setChosenOptions] = useState(initChosenOpt);
28
28
 
29
- useEffect(() => {
30
- setFormState({
31
- availableOptions: availableRoles.map(item => item.name),
32
- chosenOptions: assignedRoles.map(item => item.name) || [],
33
- });
34
- }, [availableRoles, assignedRoles]);
29
+ const onListChange = (nextAvailable, nextChosen) => {
30
+ setAvailableOptions(nextAvailable);
31
+ setChosenOptions(nextChosen);
32
+ };
35
33
 
36
34
  const [callMutation, { loading }] = useMutation(assignAnsibleRoles, {
37
35
  onCompleted: onCompleted(closeModal),
@@ -42,15 +40,19 @@ const EditRolesForm = props => {
42
40
 
43
41
  const variables = {
44
42
  id: encodeId('Host', hostId),
45
- ansibleRoleIds: roleNamesToIds(allRoles, formState.chosenOptions),
43
+ ansibleRoleIds: roleNamesToIds(allRoles, chosenOptions),
46
44
  };
47
45
 
46
+ const didNotModifyOptions = () =>
47
+ isEqual(initAvailableOpt.sort(), availableOptions.sort()) &&
48
+ isEqual(initChosenOpt, chosenOptions); // The order of the chosen options is important.
49
+
48
50
  const formActions = [
49
51
  <Button
50
52
  key="confirm"
51
53
  variant="primary"
52
54
  onClick={() => callMutation({ variables })}
53
- isDisabled={loading}
55
+ isDisabled={loading || didNotModifyOptions()}
54
56
  aria-label="submit ansible roles"
55
57
  >
56
58
  {__('Confirm')}
@@ -65,14 +67,9 @@ const EditRolesForm = props => {
65
67
  return (
66
68
  <Modal {...baseModalProps} actions={formActions}>
67
69
  <DualList
68
- availableOptions={formState.availableOptions}
69
- chosenOptions={formState.chosenOptions}
70
- onListChange={(newAvailable, newChosen) =>
71
- setFormState({
72
- availableOptions: newAvailable,
73
- chosenOptions: newChosen,
74
- })
75
- }
70
+ availableOptions={availableOptions}
71
+ chosenOptions={chosenOptions}
72
+ onListChange={onListChange}
76
73
  />
77
74
  </Modal>
78
75
  );
@@ -80,11 +77,16 @@ const EditRolesForm = props => {
80
77
 
81
78
  EditRolesForm.propTypes = {
82
79
  closeModal: PropTypes.func.isRequired,
83
- assignedRoles: PropTypes.array.isRequired,
84
- availableRoles: PropTypes.array.isRequired,
80
+ assignedRoles: PropTypes.array,
81
+ availableRoles: PropTypes.array,
85
82
  actions: PropTypes.array.isRequired,
86
83
  hostId: PropTypes.number.isRequired,
87
84
  baseModalProps: PropTypes.object.isRequired,
88
85
  };
89
86
 
87
+ EditRolesForm.defaultProps = {
88
+ assignedRoles: [],
89
+ availableRoles: [],
90
+ };
91
+
90
92
  export default withLoading(EditRolesForm);
@@ -20,7 +20,7 @@ const EditRolesModal = ({
20
20
  canEditHost,
21
21
  }) => {
22
22
  const baseModalProps = {
23
- width: '70%',
23
+ width: '50%',
24
24
  isOpen,
25
25
  className: 'foreman-modal',
26
26
  showClose: false,
@@ -2,8 +2,6 @@ import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
2
 
3
3
  import AnsibleRolesSwitcher from '../AnsibleRolesSwitcher';
4
4
 
5
- jest.mock('foremanReact/components/Pagination/PaginationWrapper');
6
-
7
5
  const noop = () => {};
8
6
 
9
7
  const fixtures = {
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_ansible
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.1.0
4
+ version: 7.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Lobato Garcia
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-03-14 00:00:00.000000000 Z
11
+ date: 2022-07-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: acts_as_list
@@ -229,43 +229,79 @@ files:
229
229
  - locale/Makefile
230
230
  - locale/action_names.rb
231
231
  - locale/ca/LC_MESSAGES/foreman_ansible.mo
232
+ - locale/ca/foreman_ansible.edit.po
232
233
  - locale/ca/foreman_ansible.po
234
+ - locale/ca/foreman_ansible.po.time_stamp
233
235
  - locale/cs_CZ/LC_MESSAGES/foreman_ansible.mo
236
+ - locale/cs_CZ/foreman_ansible.edit.po
234
237
  - locale/cs_CZ/foreman_ansible.po
238
+ - locale/cs_CZ/foreman_ansible.po.time_stamp
235
239
  - locale/de/LC_MESSAGES/foreman_ansible.mo
240
+ - locale/de/foreman_ansible.edit.po
236
241
  - locale/de/foreman_ansible.po
242
+ - locale/de/foreman_ansible.po.time_stamp
237
243
  - locale/en/LC_MESSAGES/foreman_ansible.mo
244
+ - locale/en/foreman_ansible.edit.po
238
245
  - locale/en/foreman_ansible.po
246
+ - locale/en/foreman_ansible.po.time_stamp
239
247
  - locale/en_GB/LC_MESSAGES/foreman_ansible.mo
248
+ - locale/en_GB/foreman_ansible.edit.po
240
249
  - locale/en_GB/foreman_ansible.po
250
+ - locale/en_GB/foreman_ansible.po.time_stamp
241
251
  - locale/es/LC_MESSAGES/foreman_ansible.mo
252
+ - locale/es/foreman_ansible.edit.po
242
253
  - locale/es/foreman_ansible.po
254
+ - locale/es/foreman_ansible.po.time_stamp
243
255
  - locale/foreman_ansible.pot
244
256
  - locale/fr/LC_MESSAGES/foreman_ansible.mo
257
+ - locale/fr/foreman_ansible.edit.po
245
258
  - locale/fr/foreman_ansible.po
259
+ - locale/fr/foreman_ansible.po.time_stamp
246
260
  - locale/gemspec.rb
247
261
  - locale/gl/LC_MESSAGES/foreman_ansible.mo
262
+ - locale/gl/foreman_ansible.edit.po
248
263
  - locale/gl/foreman_ansible.po
264
+ - locale/gl/foreman_ansible.po.time_stamp
249
265
  - locale/it/LC_MESSAGES/foreman_ansible.mo
266
+ - locale/it/foreman_ansible.edit.po
250
267
  - locale/it/foreman_ansible.po
268
+ - locale/it/foreman_ansible.po.time_stamp
251
269
  - locale/ja/LC_MESSAGES/foreman_ansible.mo
270
+ - locale/ja/foreman_ansible.edit.po
252
271
  - locale/ja/foreman_ansible.po
272
+ - locale/ja/foreman_ansible.po.time_stamp
253
273
  - locale/ko/LC_MESSAGES/foreman_ansible.mo
274
+ - locale/ko/foreman_ansible.edit.po
254
275
  - locale/ko/foreman_ansible.po
276
+ - locale/ko/foreman_ansible.po.time_stamp
255
277
  - locale/nl_NL/LC_MESSAGES/foreman_ansible.mo
278
+ - locale/nl_NL/foreman_ansible.edit.po
256
279
  - locale/nl_NL/foreman_ansible.po
280
+ - locale/nl_NL/foreman_ansible.po.time_stamp
257
281
  - locale/pl/LC_MESSAGES/foreman_ansible.mo
282
+ - locale/pl/foreman_ansible.edit.po
258
283
  - locale/pl/foreman_ansible.po
284
+ - locale/pl/foreman_ansible.po.time_stamp
259
285
  - locale/pt_BR/LC_MESSAGES/foreman_ansible.mo
286
+ - locale/pt_BR/foreman_ansible.edit.po
260
287
  - locale/pt_BR/foreman_ansible.po
288
+ - locale/pt_BR/foreman_ansible.po.time_stamp
261
289
  - locale/ru/LC_MESSAGES/foreman_ansible.mo
290
+ - locale/ru/foreman_ansible.edit.po
262
291
  - locale/ru/foreman_ansible.po
292
+ - locale/ru/foreman_ansible.po.time_stamp
263
293
  - locale/sv_SE/LC_MESSAGES/foreman_ansible.mo
294
+ - locale/sv_SE/foreman_ansible.edit.po
264
295
  - locale/sv_SE/foreman_ansible.po
296
+ - locale/sv_SE/foreman_ansible.po.time_stamp
265
297
  - locale/zh_CN/LC_MESSAGES/foreman_ansible.mo
298
+ - locale/zh_CN/foreman_ansible.edit.po
266
299
  - locale/zh_CN/foreman_ansible.po
300
+ - locale/zh_CN/foreman_ansible.po.time_stamp
267
301
  - locale/zh_TW/LC_MESSAGES/foreman_ansible.mo
302
+ - locale/zh_TW/foreman_ansible.edit.po
268
303
  - locale/zh_TW/foreman_ansible.po
304
+ - locale/zh_TW/foreman_ansible.po.time_stamp
269
305
  - package.json
270
306
  - test/factories/ansible_proxy.rb
271
307
  - test/factories/ansible_roles.rb
@@ -289,6 +325,7 @@ files:
289
325
  - test/functional/ui_ansible_roles_controller_test.rb
290
326
  - test/graphql/mutations/hosts/assign_ansible_roles_mutation_test.rb
291
327
  - test/graphql/queries/ansible_roles_query_test.rb
328
+ - test/graphql/queries/host_ansible_roles_query_test.rb
292
329
  - test/test_plugin_helper.rb
293
330
  - test/unit/actions/run_ansible_job_test.rb
294
331
  - test/unit/actions/run_proxy_ansible_command_test.rb
@@ -338,6 +375,7 @@ files:
338
375
  - webpack/components/AnsibleHostDetail/components/JobsTab/NewRecurringJobModal.js
339
376
  - webpack/components/AnsibleHostDetail/components/JobsTab/NewRecurringJobModal.scss
340
377
  - webpack/components/AnsibleHostDetail/components/JobsTab/PreviousJobsTable.js
378
+ - webpack/components/AnsibleHostDetail/components/JobsTab/PreviousJobsTable.js.orig
341
379
  - webpack/components/AnsibleHostDetail/components/JobsTab/RecurringJobsTable.js
342
380
  - webpack/components/AnsibleHostDetail/components/JobsTab/__test__/JobsTab.fixtures.js
343
381
  - webpack/components/AnsibleHostDetail/components/JobsTab/__test__/JobsTab.test.js
@@ -458,54 +496,55 @@ required_rubygems_version: !ruby/object:Gem::Requirement
458
496
  - !ruby/object:Gem::Version
459
497
  version: '0'
460
498
  requirements: []
461
- rubygems_version: 3.3.4
499
+ rubygems_version: 3.3.7
462
500
  signing_key:
463
501
  specification_version: 4
464
502
  summary: Ansible integration with Foreman (theforeman.org)
465
503
  test_files:
466
- - test/functional/ansible_variables_controller_test.rb
467
- - test/functional/ansible_roles_controller_test.rb
468
- - test/functional/api/v2/ansible_variables_controller_test.rb
504
+ - test/functional/api/v2/ansible_playbooks_controller_test.rb
505
+ - test/functional/api/v2/hosts_controller_test.rb
469
506
  - test/functional/api/v2/ansible_roles_controller_test.rb
470
507
  - test/functional/api/v2/hostgroups_controller_test.rb
471
- - test/functional/api/v2/ansible_playbooks_controller_test.rb
508
+ - test/functional/api/v2/ansible_variables_controller_test.rb
472
509
  - test/functional/api/v2/ansible_inventories_controller_test.rb
473
- - test/functional/api/v2/hosts_controller_test.rb
474
- - test/functional/ui_ansible_roles_controller_test.rb
475
510
  - test/functional/hosts_controller_test.rb
476
- - test/graphql/mutations/hosts/assign_ansible_roles_mutation_test.rb
477
- - test/graphql/queries/ansible_roles_query_test.rb
478
- - test/foreman_ansible/helpers/ansible_roles_helper_test.rb
479
- - test/unit/actions/run_ansible_job_test.rb
480
- - test/unit/actions/run_proxy_ansible_command_test.rb
481
- - test/unit/services/api_roles_importer_test.rb
482
- - test/unit/services/ui_roles_importer_test.rb
511
+ - test/functional/ansible_roles_controller_test.rb
512
+ - test/functional/ansible_variables_controller_test.rb
513
+ - test/functional/ui_ansible_roles_controller_test.rb
514
+ - test/unit/services/inventory_creator_test.rb
483
515
  - test/unit/services/ansible_report_importer_test.rb
484
- - test/unit/services/insights_plan_runner_test.rb
485
- - test/unit/services/override_resolver_test.rb
516
+ - test/unit/services/ui_roles_importer_test.rb
486
517
  - test/unit/services/roles_importer_test.rb
487
- - test/unit/services/inventory_creator_test.rb
488
518
  - test/unit/services/ansible_variables_importer_test.rb
489
- - test/unit/lib/proxy_api/ansible_test.rb
519
+ - test/unit/services/override_resolver_test.rb
520
+ - test/unit/services/api_roles_importer_test.rb
521
+ - test/unit/services/insights_plan_runner_test.rb
490
522
  - test/unit/ansible_role_test.rb
491
- - test/unit/hostgroup_ansible_role_test.rb
492
- - test/unit/ansible_variable_test.rb
493
523
  - test/unit/host_ansible_role_test.rb
524
+ - test/unit/import_playbooks_test.rb
525
+ - test/unit/hostgroup_ansible_role_test.rb
494
526
  - test/unit/helpers/ansible_reports_helper_test.rb
495
527
  - test/unit/ansible_provider_test.rb
496
- - test/unit/ignore_roles_test.rb
497
- - test/unit/import_playbooks_test.rb
498
- - test/unit/import_roles_and_variables.rb
499
- - test/unit/concerns/config_reports_extensions_test.rb
500
528
  - test/unit/concerns/host_managed_extensions_test.rb
529
+ - test/unit/concerns/config_reports_extensions_test.rb
501
530
  - test/unit/concerns/hostgroup_extensions_test.rb
531
+ - test/unit/ignore_roles_test.rb
532
+ - test/unit/ansible_variable_test.rb
533
+ - test/unit/import_roles_and_variables.rb
534
+ - test/unit/lib/proxy_api/ansible_test.rb
535
+ - test/unit/actions/run_ansible_job_test.rb
536
+ - test/unit/actions/run_proxy_ansible_command_test.rb
537
+ - test/foreman_ansible/helpers/ansible_roles_helper_test.rb
538
+ - test/test_plugin_helper.rb
502
539
  - test/factories/ansible_proxy.rb
503
- - test/factories/host_ansible_enhancements.rb
504
540
  - test/factories/ansible_variables.rb
541
+ - test/factories/host_ansible_enhancements.rb
505
542
  - test/factories/ansible_roles.rb
543
+ - test/fixtures/playbooks_example_output.json
506
544
  - test/fixtures/report.json
507
545
  - test/fixtures/sample_facts.json
508
546
  - test/fixtures/insights_playbook.yaml
509
- - test/fixtures/playbooks_example_output.json
510
547
  - test/fixtures/sample_playbooks.json
511
- - test/test_plugin_helper.rb
548
+ - test/graphql/mutations/hosts/assign_ansible_roles_mutation_test.rb
549
+ - test/graphql/queries/host_ansible_roles_query_test.rb
550
+ - test/graphql/queries/ansible_roles_query_test.rb