foreman_scc_manager 1.8.20 → 2.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.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +15 -11
  3. data/app/controllers/api/v2/scc_accounts_controller.rb +55 -4
  4. data/app/controllers/api/v2/scc_products_controller.rb +1 -1
  5. data/app/controllers/scc_accounts_controller.rb +49 -0
  6. data/app/lib/actions/scc_manager/subscribe_product.rb +56 -22
  7. data/app/models/scc_account.rb +22 -1
  8. data/app/models/scc_product.rb +2 -5
  9. data/app/views/api/v2/scc_accounts/main.json.rabl +1 -1
  10. data/app/views/scc_accounts/_form.html.erb +8 -4
  11. data/app/views/scc_accounts/show.html.erb +7 -51
  12. data/config/routes.rb +1 -0
  13. data/db/migrate/20220429102717_populate_scc_katello_repositories.rb +5 -0
  14. data/db/migrate/20220531120722_add_product_category_to_scc_products.rb +5 -0
  15. data/db/migrate/20221013214310_add_sync_options_to_scc_account.rb +11 -0
  16. data/lib/foreman_scc_manager/engine.rb +1 -1
  17. data/lib/foreman_scc_manager/version.rb +1 -1
  18. data/lib/tasks/republish_repositories.rake +13 -0
  19. data/package.json +54 -0
  20. data/test/controllers/scc_accounts_controller_test.rb +7 -1
  21. data/test/fixtures/models/katello_root_repositories.yml +0 -12
  22. data/test/test_plugin_helper.rb +0 -6
  23. data/webpack/components/SCCProductPage/EmptySccProducts.js +46 -0
  24. data/webpack/components/SCCProductPage/SCCProductPage.js +96 -0
  25. data/webpack/components/SCCProductPage/SCCProductPageActions.js +27 -0
  26. data/webpack/components/SCCProductPage/SCCProductPageConstants.js +5 -0
  27. data/webpack/components/SCCProductPage/SCCProductPageReducer.js +34 -0
  28. data/webpack/components/SCCProductPage/SCCProductPageSelectors.js +7 -0
  29. data/webpack/components/SCCProductPage/components/SCCProductPicker/components/SCCGenericPicker/index.js +80 -0
  30. data/webpack/components/SCCProductPage/components/SCCProductPicker/components/SCCTreePicker/components/SCCRepoPicker/index.js +174 -0
  31. data/webpack/components/SCCProductPage/components/SCCProductPicker/components/SCCTreePicker/components/SCCRepoPicker/styles.scss +3 -0
  32. data/webpack/components/SCCProductPage/components/SCCProductPicker/components/SCCTreePicker/index.js +303 -0
  33. data/webpack/components/SCCProductPage/components/SCCProductPicker/index.js +235 -0
  34. data/webpack/components/SCCProductPage/components/SCCProductPicker/styles.scss +10 -0
  35. data/webpack/components/SCCProductPage/components/SCCProductPickerModal/index.js +81 -0
  36. data/webpack/components/SCCProductPage/components/SCCProductView/components/SCCRepoView/index.js +113 -0
  37. data/webpack/components/SCCProductPage/components/SCCProductView/components/SCCRepoView/styles.scss +14 -0
  38. data/webpack/components/SCCProductPage/components/SCCProductView/index.js +236 -0
  39. data/webpack/components/SCCProductPage/components/common/SCCGenericExpander/index.js +58 -0
  40. data/webpack/components/SCCProductPage/components/common/SCCProductTreeExpander/index.js +21 -0
  41. data/webpack/components/SCCProductPage/components/common/SCCSubscribedProductsExpander/index.js +21 -0
  42. data/webpack/components/SCCProductPage/index.js +18 -0
  43. data/webpack/components/SCCProductPage/sccProductPage.scss +8 -0
  44. data/webpack/index.js +11 -0
  45. data/webpack/reducer.js +7 -0
  46. metadata +43 -15
@@ -0,0 +1,113 @@
1
+ import { foremanUrl } from 'foremanReact/common/helpers';
2
+ import { sprintf, translate as __ } from 'foremanReact/common/I18n';
3
+
4
+ import PropTypes from 'prop-types';
5
+ import React, { useState } from 'react';
6
+ import {
7
+ Dropdown,
8
+ DropdownItem,
9
+ BadgeToggle,
10
+ Tooltip,
11
+ } from '@patternfly/react-core';
12
+ import { Icon } from 'patternfly-react';
13
+ import { BrowserRouter, Link } from 'react-router-dom';
14
+
15
+ import './styles.scss';
16
+
17
+ const createKatelloRepoLink = (repo, sccProductId) => {
18
+ const url = foremanUrl(
19
+ `/products/${sccProductId}/repositories/${repo.katello_root_repository_id}`
20
+ );
21
+ return (
22
+ <Tooltip content={__('Go to Repository page')}>
23
+ <BrowserRouter>
24
+ <Link to={url} target="_blank">
25
+ {repo.name}
26
+ </Link>
27
+ </BrowserRouter>
28
+ </Tooltip>
29
+ );
30
+ };
31
+
32
+ const createRepoDropDownItem = (repo, sccProductId) => (
33
+ <DropdownItem
34
+ key={repo.id}
35
+ component="button"
36
+ icon={
37
+ repo.subscription_valid ? (
38
+ repo.katello_root_repository_id !== null ? (
39
+ <Icon name="check" type="fa" />
40
+ ) : (
41
+ <Tooltip content={__('Repository not imported')}>
42
+ <Icon name="ban" type="fa" />
43
+ </Tooltip>
44
+ )
45
+ ) : (
46
+ <Tooltip content={__('Please check your SUSE subscription')}>
47
+ <Icon name="warning-triangle-o" type="pf" size="2x" />
48
+ </Tooltip>
49
+ )
50
+ }
51
+ >
52
+ {repo.katello_root_repository_id !== null
53
+ ? createKatelloRepoLink(repo, sccProductId)
54
+ : repo.name}
55
+ </DropdownItem>
56
+ );
57
+
58
+ const SCCRepoView = ({ sccRepos, sccProductId }) => {
59
+ const [isOpen, setIsOpen] = useState(false);
60
+ const onToggle = (toggle) => {
61
+ setIsOpen(toggle);
62
+ };
63
+
64
+ const onFocus = () => {
65
+ const element = document.getElementById(
66
+ sprintf('scc-repo-show-toggle-id-%s', sccProductId)
67
+ );
68
+ element.focus();
69
+ };
70
+
71
+ const onSelect = (event) => {
72
+ setIsOpen(!isOpen);
73
+ onFocus();
74
+ };
75
+
76
+ const dropdownItems = sccRepos.map((repo) =>
77
+ createRepoDropDownItem(repo, sccProductId)
78
+ );
79
+
80
+ return (
81
+ <Dropdown
82
+ onSelect={onSelect}
83
+ toggle={
84
+ <BadgeToggle
85
+ id={sprintf('scc-repo-show-toggle-id-%s', sccProductId)}
86
+ key={sprintf('scc-repo-show-toggle-id-%s', sccProductId)}
87
+ onToggle={onToggle}
88
+ >
89
+ {sprintf(
90
+ __('Repositories (%s/%s)'),
91
+ sccRepos.filter((r) => r.katello_root_repository_id !== null)
92
+ .length,
93
+ sccRepos.length
94
+ )}
95
+ </BadgeToggle>
96
+ }
97
+ isOpen={isOpen}
98
+ dropdownItems={dropdownItems}
99
+ />
100
+ );
101
+ };
102
+
103
+ SCCRepoView.propTypes = {
104
+ sccRepos: PropTypes.array,
105
+ sccProductId: PropTypes.number,
106
+ };
107
+
108
+ SCCRepoView.defaultProps = {
109
+ sccRepos: undefined,
110
+ sccProductId: undefined,
111
+ };
112
+
113
+ export default SCCRepoView;
@@ -0,0 +1,14 @@
1
+ .pf-c-button.pf-m-plain {
2
+ --pf-c-button--PaddingTop: var(--pf-global--spacer--xs);
3
+ --pf-c-button--PaddingRight: var(--pf-global--spacer--sm);
4
+ --pf-c-button--PaddingBottom: var(--pf-global--spacer--xs);
5
+ --pf-c-button--PaddingLeft: var(--pf-global--spacer--sm);
6
+ }
7
+
8
+ .pf-c-dropdown__toggle::before {
9
+ --pf-c-button--PaddingTop: var(--pf-global--spacer--xs);
10
+ --pf-c-button--PaddingRight: var(--pf-global--spacer--xs);
11
+ --pf-c-button--PaddingBottom: var(--pf-global--spacer--xs);
12
+ --pf-c-button--PaddingLeft: var(--pf-global--spacer--xs);
13
+ }
14
+
@@ -0,0 +1,236 @@
1
+ import React, { useState } from 'react';
2
+ import { Icon } from 'patternfly-react';
3
+ import PropTypes from 'prop-types';
4
+ import { sprintf, translate as __ } from 'foremanReact/common/I18n';
5
+ import { foremanUrl } from 'foremanReact/common/helpers';
6
+ import {
7
+ TreeView,
8
+ Button,
9
+ Card,
10
+ CardTitle,
11
+ CardBody,
12
+ Tooltip,
13
+ Flex,
14
+ FlexItem,
15
+ } from '@patternfly/react-core';
16
+ import { BrowserRouter, Link } from 'react-router-dom';
17
+ import { cloneDeep, filter, clone } from 'lodash';
18
+ import SCCProductTreeExpander from '../common/SCCProductTreeExpander';
19
+ import SCCSubscribedProductsExpander from '../common/SCCSubscribedProductsExpander';
20
+ import SCCRepoView from './components/SCCRepoView';
21
+
22
+ const addCheckBoxToTree = (tree) => {
23
+ const checkProps = {};
24
+ checkProps.checked = tree.product_id !== null;
25
+ checkProps.disabled = true;
26
+ tree.checkProps = checkProps;
27
+ };
28
+
29
+ const addKatelloLinkToTree = (tree) => {
30
+ const url = foremanUrl(`/products/${tree.product_id}`);
31
+ // Link component needs to be wrapped in a Router
32
+ tree.customBadgeContent.push(
33
+ <BrowserRouter>
34
+ <Link to={url} target="_blank">
35
+ <Tooltip content={__('Go to Product page')}>
36
+ <Button variant="plain" id="tt-ref">
37
+ <Icon name="external-link" type="fa" />
38
+ </Button>
39
+ </Tooltip>
40
+ </Link>
41
+ </BrowserRouter>
42
+ );
43
+ return tree;
44
+ };
45
+
46
+ const addEditIcon = (tree, editProductTree) => {
47
+ tree.customBadgeContent.push(
48
+ <Tooltip content={__('Add more sub products to Product tree')}>
49
+ <Button
50
+ variant="plain"
51
+ id={tree.id.toString()}
52
+ onClick={(evt) => editProductTree(evt, tree.id)}
53
+ >
54
+ <Icon name="edit" type="pf" size="2x" />
55
+ </Button>
56
+ </Tooltip>
57
+ );
58
+
59
+ return tree;
60
+ };
61
+
62
+ const addReposToTree = (tree) => {
63
+ tree.customBadgeContent.push(
64
+ <Tooltip content={__('Show currently added repositories')}>
65
+ <SCCRepoView
66
+ sccRepos={tree.scc_repositories}
67
+ sccProductId={tree.product_id}
68
+ />
69
+ </Tooltip>
70
+ );
71
+ return tree;
72
+ };
73
+
74
+ const addValidationStatusToTree = (tree) => {
75
+ tree.customBadgeContent.push(
76
+ <Tooltip content={__('Please check your SUSE subscription')}>
77
+ <Button variant="plain">
78
+ <Icon name="warning-triangle-o" type="pf" size="2x" />
79
+ </Button>
80
+ </Tooltip>
81
+ );
82
+ return tree;
83
+ };
84
+
85
+ const setupTreeViewListItem = (tree, isRoot, editProductTree) => {
86
+ tree.key = 'view'.concat(tree.id.toString());
87
+ tree.customBadgeContent = [];
88
+ if (!tree.subscription_valid) addValidationStatusToTree(tree);
89
+ addReposToTree(tree);
90
+ addCheckBoxToTree(tree);
91
+ if (tree.product_id !== null) {
92
+ addKatelloLinkToTree(tree);
93
+ if (isRoot) {
94
+ addEditIcon(tree, editProductTree);
95
+ }
96
+ }
97
+ if ('children' in tree) {
98
+ tree.children = tree.children.map((c) =>
99
+ setupTreeViewListItem(c, false, editProductTree)
100
+ );
101
+ }
102
+ return tree;
103
+ };
104
+
105
+ const filterDeep = (tree) => {
106
+ if (tree.product_id !== null) {
107
+ const filtered = clone(tree);
108
+ if ('children' in tree) {
109
+ filtered.children = filter(
110
+ tree.children,
111
+ (child) => child.product_id !== null
112
+ ).map(filterDeep);
113
+ if (filtered.children.length === 0) {
114
+ delete filtered.children;
115
+ }
116
+ }
117
+ return filtered;
118
+ }
119
+ return null;
120
+ };
121
+
122
+ const SCCProductView = ({
123
+ sccProducts,
124
+ editProductTreeGlobal,
125
+ subscriptionTaskId,
126
+ }) => {
127
+ const editProductTree = (evt, productId) => {
128
+ editProductTreeGlobal(productId);
129
+ };
130
+ const sccProductsClone = cloneDeep(sccProducts);
131
+ // wrap actual iterator function into anonymous function to pass extra parameters
132
+ const [allProducts, setAllProducts] = useState(
133
+ sccProductsClone.map((tree) =>
134
+ setupTreeViewListItem(tree, true, editProductTree)
135
+ )
136
+ );
137
+ const [subscribedProducts, setSubscribedProducts] = useState(null);
138
+ const [showAll, setShowAll] = useState(true);
139
+ const [expandAll, setExpandAll] = useState();
140
+
141
+ const showSubscribed = () => {
142
+ if (subscribedProducts === null) {
143
+ const test = allProducts.map(filterDeep);
144
+ setSubscribedProducts(test);
145
+ }
146
+ };
147
+
148
+ const setShowAllFromChild = (showAllFromChild) => {
149
+ if (!showAllFromChild) {
150
+ showSubscribed();
151
+ }
152
+ setShowAll(showAllFromChild);
153
+ };
154
+
155
+ const setExpandAllFromChild = (expandAllFromChild) => {
156
+ setExpandAll(expandAllFromChild);
157
+ };
158
+
159
+ return (
160
+ <Card>
161
+ <CardTitle>{__('Selected SUSE Products')}</CardTitle>
162
+ {sccProducts.length > 0 && (
163
+ <CardBody>
164
+ <Flex>
165
+ <SCCProductTreeExpander
166
+ setExpandAllInParent={setExpandAllFromChild}
167
+ />
168
+ <SCCSubscribedProductsExpander
169
+ setExpandAllInParent={setShowAllFromChild}
170
+ />
171
+ </Flex>
172
+ <Flex>
173
+ <TreeView
174
+ data={showAll ? allProducts : subscribedProducts}
175
+ allExpanded={expandAll}
176
+ hasChecks
177
+ hasBadges
178
+ hasGuides
179
+ />
180
+ </Flex>
181
+ </CardBody>
182
+ )}
183
+ {sccProducts.length === 0 && (
184
+ <CardBody>
185
+ {__(
186
+ 'You currently have no SUSE products selected. Search and add SUSE products in the section below.'
187
+ )}
188
+ </CardBody>
189
+ )}
190
+ <Flex>
191
+ {sccProducts.length > 0 && (
192
+ <FlexItem>
193
+ <Button variant="link">
194
+ <BrowserRouter>
195
+ <Link
196
+ to="/foreman_tasks/tasks/?search=Subscribe+SCC+Product"
197
+ target="_blank"
198
+ >
199
+ {__('Show all subscription tasks')}
200
+ </Link>
201
+ </BrowserRouter>
202
+ </Button>
203
+ </FlexItem>
204
+ )}
205
+ {subscriptionTaskId !== '' && (
206
+ <FlexItem>
207
+ <Button variant="link">
208
+ <BrowserRouter>
209
+ <Link
210
+ to={sprintf('/foreman_tasks/tasks/%s', subscriptionTaskId)}
211
+ target="_blank"
212
+ >
213
+ {__('Show last product subscription task')}
214
+ </Link>
215
+ </BrowserRouter>
216
+ </Button>
217
+ </FlexItem>
218
+ )}
219
+ </Flex>
220
+ </Card>
221
+ );
222
+ };
223
+
224
+ SCCProductView.propTypes = {
225
+ sccProducts: PropTypes.array,
226
+ editProductTreeGlobal: PropTypes.func,
227
+ subscriptionTaskId: PropTypes.string,
228
+ };
229
+
230
+ SCCProductView.defaultProps = {
231
+ sccProducts: undefined,
232
+ editProductTreeGlobal: undefined,
233
+ subscriptionTaskId: '',
234
+ };
235
+
236
+ export default SCCProductView;
@@ -0,0 +1,58 @@
1
+ import React, { useState } from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { Flex, FlexItem, Select, SelectOption } from '@patternfly/react-core';
4
+
5
+ const SCCGenericExpander = ({
6
+ setInParent,
7
+ selectOptionOpen,
8
+ selectOptionClose,
9
+ initLabel,
10
+ }) => {
11
+ const [label, setLabel] = useState(initLabel);
12
+ const [isOpen, setIsOpen] = useState(false);
13
+
14
+ const options = [
15
+ <SelectOption key={0} value={selectOptionOpen} />,
16
+ <SelectOption key={1} value={selectOptionClose} />,
17
+ ];
18
+
19
+ const onSelect = (evt, selection) => {
20
+ if (selection === selectOptionOpen) {
21
+ setInParent(true);
22
+ } else {
23
+ setInParent(false);
24
+ }
25
+ setLabel(selection);
26
+ setIsOpen(false);
27
+ };
28
+
29
+ const onToggle = (isOpenSelect) => {
30
+ setIsOpen(isOpenSelect);
31
+ };
32
+
33
+ return (
34
+ <Flex>
35
+ <FlexItem>
36
+ <Select
37
+ onToggle={onToggle}
38
+ onSelect={onSelect}
39
+ selections={label}
40
+ isOpen={isOpen}
41
+ >
42
+ {options}
43
+ </Select>
44
+ </FlexItem>
45
+ </Flex>
46
+ );
47
+ };
48
+
49
+ SCCGenericExpander.propTypes = {
50
+ setInParent: PropTypes.func.isRequired,
51
+ selectOptionOpen: PropTypes.string.isRequired,
52
+ selectOptionClose: PropTypes.string.isRequired,
53
+ initLabel: PropTypes.string.isRequired,
54
+ };
55
+
56
+ SCCGenericExpander.deaultProps = {};
57
+
58
+ export default SCCGenericExpander;
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { translate as __ } from 'foremanReact/common/I18n';
4
+ import SCCGenericExpander from '../SCCGenericExpander';
5
+
6
+ const SCCProductTreeExpander = ({ setExpandAllInParent }) => (
7
+ <SCCGenericExpander
8
+ setInParent={setExpandAllInParent}
9
+ selectOptionOpen={__('Expand products')}
10
+ selectOptionClose={__('Collapse products')}
11
+ initLabel={__('Collapse/Expand')}
12
+ />
13
+ );
14
+
15
+ SCCProductTreeExpander.propTypes = {
16
+ setExpandAllInParent: PropTypes.func.isRequired,
17
+ };
18
+
19
+ SCCProductTreeExpander.defaultProps = {};
20
+
21
+ export default SCCProductTreeExpander;
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { translate as __ } from 'foremanReact/common/I18n';
4
+ import SCCGenericExpander from '../SCCGenericExpander';
5
+
6
+ const SCCSubscribedProductsExpander = ({ setExpandAllInParent }) => (
7
+ <SCCGenericExpander
8
+ setInParent={setExpandAllInParent}
9
+ selectOptionOpen={__('Show all products')}
10
+ selectOptionClose={__('Show only subscribed products')}
11
+ initLabel={__('Show/Hide unsubscribed')}
12
+ />
13
+ );
14
+
15
+ SCCSubscribedProductsExpander.propTypes = {
16
+ setExpandAllInParent: PropTypes.func.isRequired,
17
+ };
18
+
19
+ SCCSubscribedProductsExpander.defaultProps = {};
20
+
21
+ export default SCCSubscribedProductsExpander;
@@ -0,0 +1,18 @@
1
+ import { bindActionCreators } from 'redux';
2
+ import { connect } from 'react-redux';
3
+
4
+ import * as actions from './SCCProductPageActions';
5
+ import SCCProductPage from './SCCProductPage';
6
+ import * as Selector from './SCCProductPageSelectors';
7
+
8
+ // map state to props
9
+ const mapStateToProps = (state) => ({
10
+ scc_products: Selector.selectSCCProducts(state),
11
+ scc_account_id: Selector.selectSCCAccountId(state),
12
+ });
13
+
14
+ // map action dispatchers to props
15
+ const mapDispatchToProps = (dispatch) => bindActionCreators(actions, dispatch);
16
+
17
+ // export connected component
18
+ export default connect(mapStateToProps, mapDispatchToProps)(SCCProductPage);
@@ -0,0 +1,8 @@
1
+ @import '~@theforeman/vendor/scss/variables';
2
+
3
+ .pf-c-tile {
4
+ --pf-c-tile--PaddingTop: var(--pf-global--spacer--xs);
5
+ --pf-c-tile--PaddingRight: var(--pf-global--spacer--xs);
6
+ --pf-c-tile--PaddingBottom: var(--pf-global--spacer--xs);
7
+ --pf-c-tile--PaddingLeft: var(--pf-global--spacer--xs);
8
+ }
data/webpack/index.js ADDED
@@ -0,0 +1,11 @@
1
+ import componentRegistry from 'foremanReact/components/componentRegistry';
2
+ import injectReducer from 'foremanReact/redux/reducers/registerReducer';
3
+ import SCCProductPage from './components/SCCProductPage';
4
+ import reducer from './reducer';
5
+
6
+ componentRegistry.register({
7
+ name: 'SCCProductPage',
8
+ type: SCCProductPage,
9
+ });
10
+
11
+ injectReducer('foremanSccManager', reducer);
@@ -0,0 +1,7 @@
1
+ import { combineReducers } from 'redux';
2
+
3
+ import SCCProductPageReducer from './components/SCCProductPage/SCCProductPageReducer';
4
+
5
+ export default combineReducers({
6
+ SCCProductPageReducer,
7
+ });
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_scc_manager
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.20
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ATIX AG
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-06-02 00:00:00.000000000 Z
11
+ date: 2022-11-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rdoc
@@ -170,9 +170,12 @@ files:
170
170
  - db/migrate/20220429100843_remove_root_repository_id_from_scc_repository.rb
171
171
  - db/migrate/20220429102717_populate_scc_katello_repositories.rb
172
172
  - db/migrate/20220513132652_populate_upstream_authentication_token.rb
173
+ - db/migrate/20220531120722_add_product_category_to_scc_products.rb
174
+ - db/migrate/20221013214310_add_sync_options_to_scc_account.rb
173
175
  - lib/foreman_scc_manager.rb
174
176
  - lib/foreman_scc_manager/engine.rb
175
177
  - lib/foreman_scc_manager/version.rb
178
+ - lib/tasks/republish_repositories.rake
176
179
  - lib/tasks/rubocop.rake
177
180
  - lib/tasks/setup_authentication_token.rake
178
181
  - lib/tasks/test.rake
@@ -184,6 +187,7 @@ files:
184
187
  - locale/en/foreman_scc_manager.po
185
188
  - locale/foreman_scc_manager.pot
186
189
  - locale/gemspec.rb
190
+ - package.json
187
191
  - test/actions/sync_test.rb
188
192
  - test/controllers/api/v2/scc_accounts_test.rb
189
193
  - test/controllers/api/v2/scc_products_test.rb
@@ -203,6 +207,29 @@ files:
203
207
  - test/support/fixtures_support.rb
204
208
  - test/test_plugin_helper.rb
205
209
  - test/unit/foreman_scc_manager_test.rb
210
+ - webpack/components/SCCProductPage/EmptySccProducts.js
211
+ - webpack/components/SCCProductPage/SCCProductPage.js
212
+ - webpack/components/SCCProductPage/SCCProductPageActions.js
213
+ - webpack/components/SCCProductPage/SCCProductPageConstants.js
214
+ - webpack/components/SCCProductPage/SCCProductPageReducer.js
215
+ - webpack/components/SCCProductPage/SCCProductPageSelectors.js
216
+ - webpack/components/SCCProductPage/components/SCCProductPicker/components/SCCGenericPicker/index.js
217
+ - webpack/components/SCCProductPage/components/SCCProductPicker/components/SCCTreePicker/components/SCCRepoPicker/index.js
218
+ - webpack/components/SCCProductPage/components/SCCProductPicker/components/SCCTreePicker/components/SCCRepoPicker/styles.scss
219
+ - webpack/components/SCCProductPage/components/SCCProductPicker/components/SCCTreePicker/index.js
220
+ - webpack/components/SCCProductPage/components/SCCProductPicker/index.js
221
+ - webpack/components/SCCProductPage/components/SCCProductPicker/styles.scss
222
+ - webpack/components/SCCProductPage/components/SCCProductPickerModal/index.js
223
+ - webpack/components/SCCProductPage/components/SCCProductView/components/SCCRepoView/index.js
224
+ - webpack/components/SCCProductPage/components/SCCProductView/components/SCCRepoView/styles.scss
225
+ - webpack/components/SCCProductPage/components/SCCProductView/index.js
226
+ - webpack/components/SCCProductPage/components/common/SCCGenericExpander/index.js
227
+ - webpack/components/SCCProductPage/components/common/SCCProductTreeExpander/index.js
228
+ - webpack/components/SCCProductPage/components/common/SCCSubscribedProductsExpander/index.js
229
+ - webpack/components/SCCProductPage/index.js
230
+ - webpack/components/SCCProductPage/sccProductPage.scss
231
+ - webpack/index.js
232
+ - webpack/reducer.js
206
233
  homepage: https://www.orcharhino.com/
207
234
  licenses:
208
235
  - GPL-3.0
@@ -222,27 +249,28 @@ required_rubygems_version: !ruby/object:Gem::Requirement
222
249
  - !ruby/object:Gem::Version
223
250
  version: '0'
224
251
  requirements: []
225
- rubygems_version: 3.1.2
252
+ rubyforge_project:
253
+ rubygems_version: 2.7.6
226
254
  signing_key:
227
255
  specification_version: 4
228
256
  summary: Suse Customer Center plugin for Foreman
229
257
  test_files:
230
- - test/support/fixtures_support.rb
231
- - test/unit/foreman_scc_manager_test.rb
232
- - test/actions/sync_test.rb
233
- - test/test_plugin_helper.rb
234
- - test/factories/foreman_scc_manager_factories.rb
235
- - test/models/scc_product_test.rb
236
- - test/models/scc_account_test.rb
237
- - test/features/sync_test.rb
258
+ - test/fixtures/models/scc_products.yml
238
259
  - test/fixtures/models/scc_repositories.yml
239
- - test/fixtures/models/katello_root_repositories.yml
240
260
  - test/fixtures/models/scc_accounts.yml
241
- - test/fixtures/models/scc_products.yml
242
- - test/fixtures/files/data_products_page1.json
261
+ - test/fixtures/models/katello_root_repositories.yml
243
262
  - test/fixtures/files/data_subscriptions.json
244
- - test/fixtures/files/data_products_page2.json
263
+ - test/fixtures/files/data_products_page1.json
245
264
  - test/fixtures/files/data_repositories.json
265
+ - test/fixtures/files/data_products_page2.json
266
+ - test/actions/sync_test.rb
267
+ - test/features/sync_test.rb
268
+ - test/factories/foreman_scc_manager_factories.rb
269
+ - test/unit/foreman_scc_manager_test.rb
270
+ - test/test_plugin_helper.rb
271
+ - test/support/fixtures_support.rb
272
+ - test/models/scc_account_test.rb
273
+ - test/models/scc_product_test.rb
246
274
  - test/controllers/scc_accounts_controller_test.rb
247
275
  - test/controllers/api/v2/scc_products_test.rb
248
276
  - test/controllers/api/v2/scc_accounts_test.rb