foreman_scc_manager 1.8.19 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +14 -10
  3. data/app/controllers/api/v2/scc_accounts_controller.rb +48 -5
  4. data/app/controllers/api/v2/scc_products_controller.rb +1 -1
  5. data/app/controllers/scc_accounts_controller.rb +47 -0
  6. data/app/lib/actions/scc_manager/subscribe_product.rb +61 -19
  7. data/app/models/scc_account.rb +4 -3
  8. data/app/models/scc_katello_repository.rb +4 -0
  9. data/app/models/scc_product.rb +7 -1
  10. data/app/models/scc_repository.rb +12 -4
  11. data/app/views/scc_accounts/show.html.erb +7 -51
  12. data/config/routes.rb +1 -0
  13. data/db/migrate/20220425132605_add_scc_katello_repository_relation.rb +10 -0
  14. data/db/migrate/20220429100843_remove_root_repository_id_from_scc_repository.rb +6 -0
  15. data/db/migrate/20220429102717_populate_scc_katello_repositories.rb +21 -0
  16. data/db/migrate/20220513132652_populate_upstream_authentication_token.rb +23 -0
  17. data/db/migrate/20220531120722_add_product_category_to_scc_products.rb +5 -0
  18. data/lib/foreman_scc_manager/engine.rb +1 -1
  19. data/lib/foreman_scc_manager/version.rb +1 -1
  20. data/lib/tasks/republish_repositories.rake +13 -0
  21. data/lib/tasks/setup_authentication_token.rake +27 -0
  22. data/package.json +54 -0
  23. data/test/controllers/scc_accounts_controller_test.rb +6 -0
  24. data/test/fixtures/models/katello_root_repositories.yml +44 -0
  25. data/test/fixtures/models/scc_repositories.yml +34 -0
  26. data/test/support/fixtures_support.rb +3 -1
  27. data/webpack/components/SCCProductPage/EmptySccProducts.js +46 -0
  28. data/webpack/components/SCCProductPage/SCCProductPage.js +96 -0
  29. data/webpack/components/SCCProductPage/SCCProductPageActions.js +27 -0
  30. data/webpack/components/SCCProductPage/SCCProductPageConstants.js +5 -0
  31. data/webpack/components/SCCProductPage/SCCProductPageReducer.js +34 -0
  32. data/webpack/components/SCCProductPage/SCCProductPageSelectors.js +7 -0
  33. data/webpack/components/SCCProductPage/components/SCCProductPicker/components/SCCGenericPicker/index.js +80 -0
  34. data/webpack/components/SCCProductPage/components/SCCProductPicker/components/SCCTreePicker/components/SCCRepoPicker/index.js +174 -0
  35. data/webpack/components/SCCProductPage/components/SCCProductPicker/components/SCCTreePicker/components/SCCRepoPicker/styles.scss +3 -0
  36. data/webpack/components/SCCProductPage/components/SCCProductPicker/components/SCCTreePicker/index.js +303 -0
  37. data/webpack/components/SCCProductPage/components/SCCProductPicker/index.js +235 -0
  38. data/webpack/components/SCCProductPage/components/SCCProductPicker/styles.scss +10 -0
  39. data/webpack/components/SCCProductPage/components/SCCProductPickerModal/index.js +81 -0
  40. data/webpack/components/SCCProductPage/components/SCCProductView/components/SCCRepoView/index.js +113 -0
  41. data/webpack/components/SCCProductPage/components/SCCProductView/components/SCCRepoView/styles.scss +14 -0
  42. data/webpack/components/SCCProductPage/components/SCCProductView/index.js +236 -0
  43. data/webpack/components/SCCProductPage/components/common/SCCGenericExpander/index.js +58 -0
  44. data/webpack/components/SCCProductPage/components/common/SCCProductTreeExpander/index.js +21 -0
  45. data/webpack/components/SCCProductPage/components/common/SCCSubscribedProductsExpander/index.js +21 -0
  46. data/webpack/components/SCCProductPage/index.js +18 -0
  47. data/webpack/components/SCCProductPage/sccProductPage.scss +8 -0
  48. data/webpack/index.js +11 -0
  49. data/webpack/reducer.js +7 -0
  50. metadata +48 -14
@@ -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.19
4
+ version: 2.0.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-04-29 00:00:00.000000000 Z
11
+ date: 2022-10-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rdoc
@@ -128,6 +128,7 @@ files:
128
128
  - app/models/scc_account.rb
129
129
  - app/models/scc_account_sync_plan_task_group.rb
130
130
  - app/models/scc_extending.rb
131
+ - app/models/scc_katello_repository.rb
131
132
  - app/models/scc_product.rb
132
133
  - app/models/scc_repository.rb
133
134
  - app/views/api/v2/scc_accounts/base.json.rabl
@@ -165,10 +166,17 @@ files:
165
166
  - db/migrate/20210210104407_add_root_repository_id_to_scc_repository.rb
166
167
  - db/migrate/20210224095050_connect_katello_root_repository_to_scc_repository.rb
167
168
  - db/migrate/20210713092440_add_permissions.rb
169
+ - db/migrate/20220425132605_add_scc_katello_repository_relation.rb
170
+ - db/migrate/20220429100843_remove_root_repository_id_from_scc_repository.rb
171
+ - db/migrate/20220429102717_populate_scc_katello_repositories.rb
172
+ - db/migrate/20220513132652_populate_upstream_authentication_token.rb
173
+ - db/migrate/20220531120722_add_product_category_to_scc_products.rb
168
174
  - lib/foreman_scc_manager.rb
169
175
  - lib/foreman_scc_manager/engine.rb
170
176
  - lib/foreman_scc_manager/version.rb
177
+ - lib/tasks/republish_repositories.rake
171
178
  - lib/tasks/rubocop.rake
179
+ - lib/tasks/setup_authentication_token.rake
172
180
  - lib/tasks/test.rake
173
181
  - locale/Makefile
174
182
  - locale/action_names.rb
@@ -178,6 +186,7 @@ files:
178
186
  - locale/en/foreman_scc_manager.po
179
187
  - locale/foreman_scc_manager.pot
180
188
  - locale/gemspec.rb
189
+ - package.json
181
190
  - test/actions/sync_test.rb
182
191
  - test/controllers/api/v2/scc_accounts_test.rb
183
192
  - test/controllers/api/v2/scc_products_test.rb
@@ -188,6 +197,7 @@ files:
188
197
  - test/fixtures/files/data_products_page2.json
189
198
  - test/fixtures/files/data_repositories.json
190
199
  - test/fixtures/files/data_subscriptions.json
200
+ - test/fixtures/models/katello_root_repositories.yml
191
201
  - test/fixtures/models/scc_accounts.yml
192
202
  - test/fixtures/models/scc_products.yml
193
203
  - test/fixtures/models/scc_repositories.yml
@@ -196,6 +206,29 @@ files:
196
206
  - test/support/fixtures_support.rb
197
207
  - test/test_plugin_helper.rb
198
208
  - test/unit/foreman_scc_manager_test.rb
209
+ - webpack/components/SCCProductPage/EmptySccProducts.js
210
+ - webpack/components/SCCProductPage/SCCProductPage.js
211
+ - webpack/components/SCCProductPage/SCCProductPageActions.js
212
+ - webpack/components/SCCProductPage/SCCProductPageConstants.js
213
+ - webpack/components/SCCProductPage/SCCProductPageReducer.js
214
+ - webpack/components/SCCProductPage/SCCProductPageSelectors.js
215
+ - webpack/components/SCCProductPage/components/SCCProductPicker/components/SCCGenericPicker/index.js
216
+ - webpack/components/SCCProductPage/components/SCCProductPicker/components/SCCTreePicker/components/SCCRepoPicker/index.js
217
+ - webpack/components/SCCProductPage/components/SCCProductPicker/components/SCCTreePicker/components/SCCRepoPicker/styles.scss
218
+ - webpack/components/SCCProductPage/components/SCCProductPicker/components/SCCTreePicker/index.js
219
+ - webpack/components/SCCProductPage/components/SCCProductPicker/index.js
220
+ - webpack/components/SCCProductPage/components/SCCProductPicker/styles.scss
221
+ - webpack/components/SCCProductPage/components/SCCProductPickerModal/index.js
222
+ - webpack/components/SCCProductPage/components/SCCProductView/components/SCCRepoView/index.js
223
+ - webpack/components/SCCProductPage/components/SCCProductView/components/SCCRepoView/styles.scss
224
+ - webpack/components/SCCProductPage/components/SCCProductView/index.js
225
+ - webpack/components/SCCProductPage/components/common/SCCGenericExpander/index.js
226
+ - webpack/components/SCCProductPage/components/common/SCCProductTreeExpander/index.js
227
+ - webpack/components/SCCProductPage/components/common/SCCSubscribedProductsExpander/index.js
228
+ - webpack/components/SCCProductPage/index.js
229
+ - webpack/components/SCCProductPage/sccProductPage.scss
230
+ - webpack/index.js
231
+ - webpack/reducer.js
199
232
  homepage: https://www.orcharhino.com/
200
233
  licenses:
201
234
  - GPL-3.0
@@ -215,26 +248,27 @@ required_rubygems_version: !ruby/object:Gem::Requirement
215
248
  - !ruby/object:Gem::Version
216
249
  version: '0'
217
250
  requirements: []
218
- rubygems_version: 3.1.2
251
+ rubygems_version: 3.2.5
219
252
  signing_key:
220
253
  specification_version: 4
221
254
  summary: Suse Customer Center plugin for Foreman
222
255
  test_files:
223
- - test/support/fixtures_support.rb
224
- - test/unit/foreman_scc_manager_test.rb
225
- - test/actions/sync_test.rb
226
- - test/test_plugin_helper.rb
227
- - test/factories/foreman_scc_manager_factories.rb
228
256
  - test/models/scc_product_test.rb
229
257
  - test/models/scc_account_test.rb
230
- - test/features/sync_test.rb
231
- - test/fixtures/models/scc_repositories.yml
258
+ - test/controllers/scc_accounts_controller_test.rb
259
+ - test/controllers/api/v2/scc_accounts_test.rb
260
+ - test/controllers/api/v2/scc_products_test.rb
261
+ - test/fixtures/models/katello_root_repositories.yml
232
262
  - test/fixtures/models/scc_accounts.yml
233
263
  - test/fixtures/models/scc_products.yml
264
+ - test/fixtures/models/scc_repositories.yml
265
+ - test/fixtures/files/data_products_page2.json
234
266
  - test/fixtures/files/data_products_page1.json
235
267
  - test/fixtures/files/data_subscriptions.json
236
- - test/fixtures/files/data_products_page2.json
237
268
  - test/fixtures/files/data_repositories.json
238
- - test/controllers/scc_accounts_controller_test.rb
239
- - test/controllers/api/v2/scc_products_test.rb
240
- - test/controllers/api/v2/scc_accounts_test.rb
269
+ - test/features/sync_test.rb
270
+ - test/unit/foreman_scc_manager_test.rb
271
+ - test/actions/sync_test.rb
272
+ - test/support/fixtures_support.rb
273
+ - test/factories/foreman_scc_manager_factories.rb
274
+ - test/test_plugin_helper.rb