foreman_scc_manager 4.0.0 → 5.0.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 (48) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -2
  3. data/app/assets/javascripts/foreman_scc_manager/locale/de/foreman_scc_manager.js +341 -341
  4. data/app/assets/javascripts/foreman_scc_manager/locale/el/foreman_scc_manager.js +288 -288
  5. data/app/assets/javascripts/foreman_scc_manager/locale/en/foreman_scc_manager.js +2 -582
  6. data/app/assets/javascripts/foreman_scc_manager/locale/fr/foreman_scc_manager.js +1 -1
  7. data/app/assets/javascripts/foreman_scc_manager/locale/ja/foreman_scc_manager.js +348 -348
  8. data/app/assets/javascripts/foreman_scc_manager/locale/ka/foreman_scc_manager.js +381 -381
  9. data/app/assets/javascripts/foreman_scc_manager/locale/ko/foreman_scc_manager.js +592 -0
  10. data/app/assets/javascripts/foreman_scc_manager/locale/zh_CN/foreman_scc_manager.js +346 -346
  11. data/app/views/scc_accounts/_form.html.erb +2 -2
  12. data/lib/foreman_scc_manager/version.rb +1 -1
  13. data/locale/Makefile +12 -2
  14. data/locale/de/LC_MESSAGES/foreman_scc_manager.mo +0 -0
  15. data/locale/de/foreman_scc_manager.po +101 -98
  16. data/locale/el/LC_MESSAGES/foreman_scc_manager.mo +0 -0
  17. data/locale/el/foreman_scc_manager.po +25 -24
  18. data/locale/en/foreman_scc_manager.po +0 -593
  19. data/locale/fr/LC_MESSAGES/foreman_scc_manager.mo +0 -0
  20. data/locale/fr/foreman_scc_manager.po +1 -1
  21. data/locale/ja/LC_MESSAGES/foreman_scc_manager.mo +0 -0
  22. data/locale/ja/foreman_scc_manager.po +94 -92
  23. data/locale/ka/LC_MESSAGES/foreman_scc_manager.mo +0 -0
  24. data/locale/ka/foreman_scc_manager.po +139 -133
  25. data/locale/ko/LC_MESSAGES/foreman_scc_manager.mo +0 -0
  26. data/locale/ko/foreman_scc_manager.po +600 -0
  27. data/locale/zh_CN/LC_MESSAGES/foreman_scc_manager.mo +0 -0
  28. data/locale/zh_CN/foreman_scc_manager.po +92 -91
  29. data/package.json +6 -6
  30. data/test/controllers/api/v2/scc_accounts_test.rb +4 -4
  31. data/test/features/sync_test.rb +3 -3
  32. data/test/lib/scc_manager_test.rb +64 -0
  33. data/test/test_plugin_helper.rb +4 -1
  34. data/webpack/components/SCCProductPage/EmptySccProducts.js +7 -2
  35. data/webpack/components/SCCProductPage/components/SCCProductPicker/components/SCCGenericPicker/index.js +238 -50
  36. data/webpack/components/SCCProductPage/components/SCCProductPicker/components/SCCTreePicker/components/SCCRepoPicker/index.js +26 -12
  37. data/webpack/components/SCCProductPage/components/SCCProductPicker/components/SCCTreePicker/components/SCCRepoPicker/styles.scss +2 -2
  38. data/webpack/components/SCCProductPage/components/SCCProductPicker/components/SCCTreePicker/index.js +5 -3
  39. data/webpack/components/SCCProductPage/components/SCCProductPicker/index.js +48 -33
  40. data/webpack/components/SCCProductPage/components/SCCProductPicker/styles.scss +5 -5
  41. data/webpack/components/SCCProductPage/components/SCCProductPickerModal/index.js +13 -6
  42. data/webpack/components/SCCProductPage/components/SCCProductView/components/SCCRepoView/index.js +36 -23
  43. data/webpack/components/SCCProductPage/components/SCCProductView/components/SCCRepoView/styles.scss +10 -10
  44. data/webpack/components/SCCProductPage/components/SCCProductView/index.js +26 -8
  45. data/webpack/components/SCCProductPage/components/common/SCCGenericExpander/SCCGenericExpander.test.js +2 -2
  46. data/webpack/components/SCCProductPage/components/common/SCCGenericExpander/index.js +28 -10
  47. data/webpack/components/SCCProductPage/sccProductPage.scss +5 -5
  48. metadata +9 -7
@@ -5,10 +5,11 @@ import { sprintf, translate as __ } from 'foremanReact/common/I18n';
5
5
  import PropTypes from 'prop-types';
6
6
  import React, { useState } from 'react';
7
7
  import {
8
+ Tooltip,
8
9
  Dropdown,
9
10
  DropdownItem,
10
- BadgeToggle,
11
- Tooltip,
11
+ DropdownList,
12
+ MenuToggle,
12
13
  } from '@patternfly/react-core';
13
14
  import { Icon } from 'patternfly-react';
14
15
  import { BrowserRouter, Link } from 'react-router-dom';
@@ -20,7 +21,10 @@ const createKatelloRepoLink = (repo, sccProductId) => {
20
21
  `/products/${sccProductId}/repositories/${repo.katello_repository_id}`
21
22
  );
22
23
  return (
23
- <Tooltip content={__('Go to Repository page')}>
24
+ <Tooltip
25
+ key={'scc-manager-repo-view-tooltip-'.concat(repo.id)}
26
+ content={__('Go to Repository page')}
27
+ >
24
28
  <BrowserRouter>
25
29
  <Link to={url} target="_blank">
26
30
  {repo.name}
@@ -33,18 +37,25 @@ const createKatelloRepoLink = (repo, sccProductId) => {
33
37
  const createRepoDropDownItem = (repo, sccProductId) => (
34
38
  <DropdownItem
35
39
  key={repo.id}
40
+ ouiaId={repo.id}
36
41
  component="button"
37
42
  icon={
38
43
  repo.subscription_valid ? (
39
44
  repo.katello_repository_id !== null ? (
40
45
  <Icon name="check" type="fa" />
41
46
  ) : (
42
- <Tooltip content={__('Repository not imported')}>
47
+ <Tooltip
48
+ key={'scc-manager-repo-link-tooltip-'.concat(repo.id)}
49
+ content={__('Repository not imported')}
50
+ >
43
51
  <Icon name="ban" type="fa" />
44
52
  </Tooltip>
45
53
  )
46
54
  ) : (
47
- <Tooltip content={__('Please check your SUSE subscription')}>
55
+ <Tooltip
56
+ key={'scc-manager-repo-link-tooltip-'.concat(repo.id)}
57
+ content={__('Please check your SUSE subscription')}
58
+ >
48
59
  <Icon name="warning-triangle-o" type="pf" size="2x" />
49
60
  </Tooltip>
50
61
  )
@@ -58,8 +69,8 @@ const createRepoDropDownItem = (repo, sccProductId) => (
58
69
 
59
70
  const SCCRepoView = ({ sccRepos, sccProductId }) => {
60
71
  const [isOpen, setIsOpen] = useState(false);
61
- const onToggle = (toggle) => {
62
- setIsOpen(toggle);
72
+ const onToggleClick = () => {
73
+ setIsOpen(!isOpen);
63
74
  };
64
75
 
65
76
  const onFocus = () => {
@@ -70,7 +81,7 @@ const SCCRepoView = ({ sccRepos, sccProductId }) => {
70
81
  };
71
82
 
72
83
  const onSelect = (event) => {
73
- setIsOpen(!isOpen);
84
+ setIsOpen(false);
74
85
  onFocus();
75
86
  };
76
87
 
@@ -78,25 +89,27 @@ const SCCRepoView = ({ sccRepos, sccProductId }) => {
78
89
  createRepoDropDownItem(repo, sccProductId)
79
90
  );
80
91
 
92
+ const toggle = (toggleRef) => (
93
+ <MenuToggle ref={toggleRef} onClick={onToggleClick} isExpanded={isOpen}>
94
+ {sprintf(
95
+ __('Repositories (%s/%s)'),
96
+ sccRepos.filter((r) => r.katello_repository_id !== null).length,
97
+ sccRepos.length
98
+ )}
99
+ </MenuToggle>
100
+ );
101
+
81
102
  return (
82
103
  <Dropdown
104
+ ouiaId={sccProductId?.toString().concat('scc-manager-repo-view')}
105
+ onClick={onToggleClick}
83
106
  onSelect={onSelect}
84
- toggle={
85
- <BadgeToggle
86
- id={sprintf('scc-repo-show-toggle-id-%s', sccProductId)}
87
- key={sprintf('scc-repo-show-toggle-id-%s', sccProductId)}
88
- onToggle={onToggle}
89
- >
90
- {sprintf(
91
- __('Repositories (%s/%s)'),
92
- sccRepos.filter((r) => r.katello_repository_id !== null).length,
93
- sccRepos.length
94
- )}
95
- </BadgeToggle>
96
- }
107
+ toggle={toggle}
97
108
  isOpen={isOpen}
98
- dropdownItems={dropdownItems}
99
- />
109
+ onOpenChange={(isOpenMenu) => setIsOpen(isOpenMenu)}
110
+ >
111
+ <DropdownList>{dropdownItems}</DropdownList>
112
+ </Dropdown>
100
113
  );
101
114
  };
102
115
 
@@ -1,14 +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);
1
+ .pf-v5-c-button.pf-m-plain {
2
+ --pf-v5-c-button--PaddingTop: var(--pf-v5-global--spacer--xs);
3
+ --pf-v5-c-button--PaddingRight: var(--pf-v5-global--spacer--sm);
4
+ --pf-v5-c-button--PaddingBottom: var(--pf-v5-global--spacer--xs);
5
+ --pf-v5-c-button--PaddingLeft: var(--pf-v5-global--spacer--sm);
6
6
  }
7
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);
8
+ .pf-v5-c-dropdown__toggle::before {
9
+ --pf-v5-c-button--PaddingTop: var(--pf-v5-global--spacer--xs);
10
+ --pf-v5-c-button--PaddingRight: var(--pf-v5-global--spacer--xs);
11
+ --pf-v5-c-button--PaddingBottom: var(--pf-v5-global--spacer--xs);
12
+ --pf-v5-c-button--PaddingLeft: var(--pf-v5-global--spacer--xs);
13
13
  }
14
14
 
@@ -33,7 +33,13 @@ const addKatelloLinkToTree = (tree) => {
33
33
  <BrowserRouter>
34
34
  <Link to={url} target="_blank">
35
35
  <Tooltip content={__('Go to Product page')}>
36
- <Button variant="plain" id="tt-ref">
36
+ <Button
37
+ ouiaId={tree.product_id
38
+ .toString()
39
+ .concat('scc-manager-product-page-link')}
40
+ variant="plain"
41
+ id="tt-ref"
42
+ >
37
43
  <Icon name="external-link" type="fa" />
38
44
  </Button>
39
45
  </Tooltip>
@@ -45,8 +51,14 @@ const addKatelloLinkToTree = (tree) => {
45
51
 
46
52
  const addEditIcon = (tree, editProductTree) => {
47
53
  tree.customBadgeContent.push(
48
- <Tooltip content={__('Add more sub products to Product tree')}>
54
+ <Tooltip
55
+ key={'scc-manager-add-sub-tooltip'.concat(tree.id.toString())}
56
+ content={__('Add more sub products to Product tree')}
57
+ >
49
58
  <Button
59
+ ouiaId={tree.id
60
+ .toString()
61
+ .concat('scc-manager-add-sub-products-button')}
50
62
  variant="plain"
51
63
  id={tree.id.toString()}
52
64
  onClick={(evt) => editProductTree(evt, tree.id)}
@@ -61,7 +73,10 @@ const addEditIcon = (tree, editProductTree) => {
61
73
 
62
74
  const addReposToTree = (tree) => {
63
75
  tree.customBadgeContent.push(
64
- <Tooltip content={__('Show currently added repositories')}>
76
+ <Tooltip
77
+ key="scc-manager-repoview-show-repos-tooltip"
78
+ content={__('Show currently added repositories')}
79
+ >
65
80
  <SCCRepoView
66
81
  sccRepos={tree.scc_repositories}
67
82
  sccProductId={tree.product_id}
@@ -74,7 +89,10 @@ const addReposToTree = (tree) => {
74
89
  const addValidationStatusToTree = (tree) => {
75
90
  tree.customBadgeContent.push(
76
91
  <Tooltip content={__('Please check your SUSE subscription')}>
77
- <Button variant="plain">
92
+ <Button
93
+ ouiaId="scc-manager-check-suse-subscription-button"
94
+ variant="plain"
95
+ >
78
96
  <Icon name="warning-triangle-o" type="pf" size="2x" />
79
97
  </Button>
80
98
  </Tooltip>
@@ -157,7 +175,7 @@ const SCCProductView = ({
157
175
  };
158
176
 
159
177
  return (
160
- <Card>
178
+ <Card ouiaId="scc-manager-select-suse-products-card">
161
179
  <CardTitle>{__('Selected SUSE Products')}</CardTitle>
162
180
  {sccProducts.length > 0 && (
163
181
  <CardBody>
@@ -173,7 +191,7 @@ const SCCProductView = ({
173
191
  <TreeView
174
192
  data={showAll ? allProducts : subscribedProducts}
175
193
  allExpanded={expandAll}
176
- hasChecks
194
+ hasCheckboxes
177
195
  hasBadges
178
196
  hasGuides
179
197
  />
@@ -190,7 +208,7 @@ const SCCProductView = ({
190
208
  <Flex>
191
209
  {sccProducts.length > 0 && (
192
210
  <FlexItem>
193
- <Button variant="link">
211
+ <Button ouiaId="scc-manager-show-all-tasks-button" variant="link">
194
212
  <BrowserRouter>
195
213
  <Link
196
214
  to="/foreman_tasks/tasks/?search=Subscribe+SCC+Product"
@@ -204,7 +222,7 @@ const SCCProductView = ({
204
222
  )}
205
223
  {subscriptionTaskId !== '' && (
206
224
  <FlexItem>
207
- <Button variant="link">
225
+ <Button ouiaId="scc-manager-show-last-task-button" variant="link">
208
226
  <BrowserRouter>
209
227
  <Link
210
228
  to={sprintf('/foreman_tasks/tasks/%s', subscriptionTaskId)}
@@ -34,8 +34,8 @@ describe('SCCGenericExpander', () => {
34
34
  // Select
35
35
  const select = wrapper.find('Select');
36
36
  expect(select.exists()).toBe(true);
37
- expect(select.props()).toHaveProperty('selections');
38
- expect(select.prop('selections')).toContain('open/close');
37
+ expect(select.props()).toHaveProperty('selected');
38
+ expect(select.prop('selected')).toContain('open/close');
39
39
 
40
40
  // SelectOptions
41
41
  const selectOptions = wrapper.find('SelectOption');
@@ -1,6 +1,13 @@
1
1
  import React, { useState } from 'react';
2
2
  import PropTypes from 'prop-types';
3
- import { Flex, FlexItem, Select, SelectOption } from '@patternfly/react-core';
3
+ import {
4
+ Flex,
5
+ FlexItem,
6
+ Select,
7
+ SelectList,
8
+ MenuToggle,
9
+ SelectOption,
10
+ } from '@patternfly/react-core';
4
11
 
5
12
  const SCCGenericExpander = ({
6
13
  setInParent,
@@ -11,12 +18,14 @@ const SCCGenericExpander = ({
11
18
  const [label, setLabel] = useState(initLabel);
12
19
  const [isOpen, setIsOpen] = useState(false);
13
20
 
14
- const options = [
15
- <SelectOption key={0} value={selectOptionOpen} />,
16
- <SelectOption key={1} value={selectOptionClose} />,
17
- ];
21
+ const options = (
22
+ <SelectList>
23
+ <SelectOption value={selectOptionOpen}>{selectOptionOpen}</SelectOption>
24
+ <SelectOption value={selectOptionClose}>{selectOptionClose}</SelectOption>
25
+ </SelectList>
26
+ );
18
27
 
19
- const onSelect = (evt, selection) => {
28
+ const onSelect = (_evt, selection) => {
20
29
  if (selection === selectOptionOpen) {
21
30
  setInParent(true);
22
31
  } else {
@@ -26,18 +35,27 @@ const SCCGenericExpander = ({
26
35
  setIsOpen(false);
27
36
  };
28
37
 
29
- const onToggle = (isOpenSelect) => {
30
- setIsOpen(isOpenSelect);
38
+ const onToggleClick = () => {
39
+ setIsOpen(!isOpen);
31
40
  };
32
41
 
42
+ const toggle = (toggleRef) => (
43
+ <MenuToggle ref={toggleRef} onClick={onToggleClick} isExpanded={isOpen}>
44
+ {label}
45
+ </MenuToggle>
46
+ );
47
+
33
48
  return (
34
49
  <Flex>
35
50
  <FlexItem>
36
51
  <Select
37
- onToggle={onToggle}
52
+ ouiaId={initLabel.concat('scc-manager-generic-expander-select')}
53
+ toggle={toggle}
38
54
  onSelect={onSelect}
39
- selections={label}
55
+ selected={label}
40
56
  isOpen={isOpen}
57
+ onOpenChange={(nextOpen) => setIsOpen(isOpen)}
58
+ shouldFocusToggleOnSelect
41
59
  >
42
60
  {options}
43
61
  </Select>
@@ -1,8 +1,8 @@
1
1
  @import '~@theforeman/vendor/scss/variables';
2
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);
3
+ .pf-v5-c-tile {
4
+ --pf-v5-c-tile--PaddingTop: var(--pf-v5-global--spacer--xs);
5
+ --pf-v5-c-tile--PaddingRight: var(--pf-v5-global--spacer--xs);
6
+ --pf-v5-c-tile--PaddingBottom: var(--pf-v5-global--spacer--xs);
7
+ --pf-v5-c-tile--PaddingLeft: var(--pf-v5-global--spacer--xs);
8
8
  }
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_scc_manager
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
4
+ version: 5.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ATIX AG
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-10-14 00:00:00.000000000 Z
10
+ date: 2025-08-13 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: rdoc
@@ -103,6 +102,7 @@ files:
103
102
  - app/assets/javascripts/foreman_scc_manager/locale/fr/foreman_scc_manager.js
104
103
  - app/assets/javascripts/foreman_scc_manager/locale/ja/foreman_scc_manager.js
105
104
  - app/assets/javascripts/foreman_scc_manager/locale/ka/foreman_scc_manager.js
105
+ - app/assets/javascripts/foreman_scc_manager/locale/ko/foreman_scc_manager.js
106
106
  - app/assets/javascripts/foreman_scc_manager/locale/zh_CN/foreman_scc_manager.js
107
107
  - app/assets/javascripts/foreman_scc_manager/scc_accounts.js.coffee
108
108
  - app/controllers/api/v2/scc_accounts_controller.rb
@@ -187,6 +187,8 @@ files:
187
187
  - locale/ja/foreman_scc_manager.po
188
188
  - locale/ka/LC_MESSAGES/foreman_scc_manager.mo
189
189
  - locale/ka/foreman_scc_manager.po
190
+ - locale/ko/LC_MESSAGES/foreman_scc_manager.mo
191
+ - locale/ko/foreman_scc_manager.po
190
192
  - locale/zh_CN/LC_MESSAGES/foreman_scc_manager.mo
191
193
  - locale/zh_CN/foreman_scc_manager.po
192
194
  - package.json
@@ -204,6 +206,7 @@ files:
204
206
  - test/fixtures/models/scc_accounts.yml
205
207
  - test/fixtures/models/scc_products.yml
206
208
  - test/fixtures/models/scc_repositories.yml
209
+ - test/lib/scc_manager_test.rb
207
210
  - test/models/scc_account_test.rb
208
211
  - test/models/scc_product_test.rb
209
212
  - test/support/fixtures_support.rb
@@ -235,9 +238,8 @@ files:
235
238
  - webpack/reducer.js
236
239
  homepage: https://www.orcharhino.com/
237
240
  licenses:
238
- - GPL-3.0
241
+ - GPL-3.0-only
239
242
  metadata: {}
240
- post_install_message:
241
243
  rdoc_options: []
242
244
  require_paths:
243
245
  - lib
@@ -252,8 +254,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
252
254
  - !ruby/object:Gem::Version
253
255
  version: '0'
254
256
  requirements: []
255
- rubygems_version: 3.3.27
256
- signing_key:
257
+ rubygems_version: 3.6.9
257
258
  specification_version: 4
258
259
  summary: Suse Customer Center plugin for Foreman
259
260
  test_files:
@@ -271,6 +272,7 @@ test_files:
271
272
  - test/fixtures/models/scc_accounts.yml
272
273
  - test/fixtures/models/scc_products.yml
273
274
  - test/fixtures/models/scc_repositories.yml
275
+ - test/lib/scc_manager_test.rb
274
276
  - test/models/scc_account_test.rb
275
277
  - test/models/scc_product_test.rb
276
278
  - test/support/fixtures_support.rb