katello 4.5.0 → 4.6.0.rc1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of katello might be problematic. Click here for more details.

Files changed (458) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/katello/api/rhsm/candlepin_dynflow_proxy_controller.rb +10 -0
  3. data/app/controllers/katello/api/v2/activation_keys_controller.rb +7 -0
  4. data/app/controllers/katello/api/v2/alternate_content_sources_controller.rb +52 -22
  5. data/app/controllers/katello/api/v2/content_exports_controller.rb +33 -3
  6. data/app/controllers/katello/api/v2/content_uploads_controller.rb +2 -0
  7. data/app/controllers/katello/api/v2/content_view_filter_rules_controller.rb +1 -1
  8. data/app/controllers/katello/api/v2/content_view_filters_controller.rb +1 -1
  9. data/app/controllers/katello/api/v2/debs_controller.rb +42 -10
  10. data/app/controllers/katello/api/v2/host_collections_controller.rb +5 -1
  11. data/app/controllers/katello/api/v2/host_errata_controller.rb +1 -0
  12. data/app/controllers/katello/api/v2/host_module_streams_controller.rb +9 -1
  13. data/app/controllers/katello/api/v2/host_subscriptions_controller.rb +8 -1
  14. data/app/controllers/katello/api/v2/organizations_controller.rb +3 -1
  15. data/app/controllers/katello/api/v2/simple_content_access_controller.rb +8 -0
  16. data/app/controllers/katello/concerns/api/v2/repository_content_controller.rb +34 -11
  17. data/app/controllers/katello/concerns/organizations_controller_extensions.rb +7 -16
  18. data/app/lib/actions/katello/alternate_content_source/alternate_content_source_common.rb +16 -0
  19. data/app/lib/actions/katello/alternate_content_source/create.rb +11 -5
  20. data/app/lib/actions/katello/alternate_content_source/destroy.rb +3 -4
  21. data/app/lib/actions/katello/alternate_content_source/refresh.rb +3 -5
  22. data/app/lib/actions/katello/alternate_content_source/update.rb +57 -13
  23. data/app/lib/actions/katello/applicability/hosts/bulk_generate.rb +2 -2
  24. data/app/lib/actions/katello/content_view/promote_to_environment.rb +4 -2
  25. data/app/lib/actions/katello/content_view/publish.rb +5 -2
  26. data/app/lib/actions/katello/organization/environment_contents_refresh.rb +20 -0
  27. data/app/lib/actions/katello/organization/manifest_refresh.rb +10 -4
  28. data/app/lib/actions/katello/organization/simple_content_access/toggle.rb +1 -9
  29. data/app/lib/actions/katello/repository/create.rb +9 -0
  30. data/app/lib/actions/katello/repository/destroy.rb +21 -0
  31. data/app/lib/actions/katello/repository/errata_mail.rb +3 -3
  32. data/app/lib/actions/katello/repository/refresh_repository.rb +3 -0
  33. data/app/lib/actions/katello/repository/update.rb +33 -0
  34. data/app/lib/actions/katello/repository/update_redhat_repository.rb +1 -1
  35. data/app/lib/actions/pulp3/alternate_content_source/create.rb +5 -4
  36. data/app/lib/actions/pulp3/alternate_content_source/create_remote.rb +5 -4
  37. data/app/lib/actions/pulp3/alternate_content_source/delete.rb +4 -4
  38. data/app/lib/actions/pulp3/alternate_content_source/delete_remote.rb +4 -4
  39. data/app/lib/actions/pulp3/alternate_content_source/refresh.rb +4 -4
  40. data/app/lib/actions/pulp3/alternate_content_source/update.rb +4 -4
  41. data/app/lib/actions/pulp3/alternate_content_source/update_remote.rb +5 -5
  42. data/app/lib/actions/pulp3/capsule_content/reclaim_space.rb +1 -0
  43. data/app/lib/actions/pulp3/content_view_version/create_export_history.rb +3 -1
  44. data/app/lib/actions/pulp3/content_view_version/create_exporter.rb +9 -2
  45. data/app/lib/actions/pulp3/content_view_version/create_syncable_export_history.rb +45 -0
  46. data/app/lib/actions/pulp3/content_view_version/destroy_exporter.rb +6 -1
  47. data/app/lib/actions/pulp3/content_view_version/export.rb +8 -3
  48. data/app/lib/actions/pulp3/orchestration/alternate_content_source/create.rb +3 -3
  49. data/app/lib/actions/pulp3/orchestration/alternate_content_source/delete.rb +6 -7
  50. data/app/lib/actions/pulp3/orchestration/alternate_content_source/refresh.rb +2 -2
  51. data/app/lib/actions/pulp3/orchestration/alternate_content_source/refresh_remote.rb +18 -0
  52. data/app/lib/actions/pulp3/orchestration/alternate_content_source/update.rb +3 -3
  53. data/app/lib/actions/pulp3/orchestration/content_view_version/export.rb +28 -13
  54. data/app/lib/actions/pulp3/orchestration/content_view_version/export_library.rb +4 -2
  55. data/app/lib/actions/pulp3/orchestration/content_view_version/export_repository.rb +4 -2
  56. data/app/lib/actions/pulp3/orchestration/content_view_version/syncable_export.rb +82 -0
  57. data/app/lib/actions/pulp3/orchestration/repository/generate_metadata.rb +1 -1
  58. data/app/lib/katello/concerns/base_template_scope_extensions.rb +1 -1
  59. data/app/lib/katello/errors.rb +1 -1
  60. data/app/lib/katello/resources/candlepin/owner.rb +9 -2
  61. data/app/lib/katello/validators/alternate_content_source_products_validator.rb +17 -0
  62. data/app/models/katello/alternate_content_source.rb +39 -8
  63. data/app/models/katello/alternate_content_source_product.rb +13 -0
  64. data/app/models/katello/concerns/host_managed_extensions.rb +13 -2
  65. data/app/models/katello/concerns/pulp_database_unit.rb +2 -2
  66. data/app/models/katello/concerns/smart_proxy_extensions.rb +5 -6
  67. data/app/models/katello/content_view.rb +41 -29
  68. data/app/models/katello/content_view_deb_filter.rb +51 -0
  69. data/app/models/katello/content_view_deb_filter_rule.rb +24 -0
  70. data/app/models/katello/content_view_filter.rb +10 -3
  71. data/app/models/katello/glue/candlepin/owner.rb +0 -1
  72. data/app/models/katello/installed_package.rb +1 -0
  73. data/app/models/katello/product.rb +3 -0
  74. data/app/models/katello/repository.rb +2 -0
  75. data/app/models/katello/smart_proxy_alternate_content_source.rb +6 -0
  76. data/app/services/cert/certs.rb +8 -16
  77. data/app/services/katello/organization_creator.rb +18 -7
  78. data/app/services/katello/pulp/server.rb +2 -2
  79. data/app/services/katello/pulp3/alternate_content_source.rb +22 -4
  80. data/app/services/katello/pulp3/api/apt.rb +12 -0
  81. data/app/services/katello/pulp3/api/core.rb +8 -0
  82. data/app/services/katello/pulp3/content_view_version/export.rb +38 -11
  83. data/app/services/katello/pulp3/content_view_version/metadata_generator.rb +3 -1
  84. data/app/services/katello/pulp3/content_view_version/syncable_format_export.rb +34 -0
  85. data/app/services/katello/pulp3/deb.rb +3 -1
  86. data/app/services/katello/pulp3/pulp_content_unit.rb +2 -0
  87. data/app/services/katello/pulp3/repository/apt.rb +186 -2
  88. data/app/services/katello/pulp3/repository.rb +4 -3
  89. data/app/services/katello/pulp3/service_common.rb +1 -1
  90. data/app/services/katello/pulp3/smart_proxy_mirror_repository.rb +1 -1
  91. data/app/views/foreman/smart_proxies/show.html.erb +3 -3
  92. data/app/views/katello/api/v2/alternate_content_sources/base.json.rabl +18 -3
  93. data/app/views/katello/api/v2/alternate_content_sources/show.json.rabl +20 -0
  94. data/app/views/katello/api/v2/ansible_collections/compare.json.rabl +10 -0
  95. data/app/views/katello/api/v2/content_view_filters/base.json.rabl +5 -0
  96. data/app/views/katello/api/v2/module_streams/compare.json.rabl +10 -0
  97. data/app/views/katello/api/v2/repository_sets/show.json.rabl +4 -0
  98. data/app/views/katello/layouts/foreman_with_bastion.html.erb +1 -1
  99. data/app/views/katello/layouts/react.html.erb +1 -1
  100. data/app/views/overrides/organizations/_edit_override.html.erb +5 -8
  101. data/app/views/overrides/organizations/_index_row_override.html.erb +1 -1
  102. data/app/views/overrides/organizations/_step_1_override.html.erb +5 -0
  103. data/ca/redhat-uep.pem +18 -23
  104. data/config/katello.yaml.example +0 -2
  105. data/config/routes/api/v2.rb +2 -0
  106. data/config/routes/overrides.rb +1 -0
  107. data/db/migrate/20201116161820_create_content_view_deb_filter_rules.rb +17 -0
  108. data/db/migrate/20211220185935_clean_duplicate_content_units.rb +11 -9
  109. data/db/migrate/20220524132259_remove_last_refreshed_from_katello_alternate_content_sources.rb +5 -0
  110. data/db/migrate/20220601163911_add_vendor_to_katello_installed_packages.rb +5 -0
  111. data/db/migrate/20220610165621_add_repositories_and_products_to_acs.rb +23 -0
  112. data/engines/bastion/app/views/bastion/layouts/application.html.erb +1 -1
  113. data/engines/bastion/app/views/bastion/layouts/application_ie.html.erb +1 -1
  114. data/engines/bastion/app/views/bastion/layouts/assets.html.erb +1 -1
  115. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/environment-content.controller.js +2 -0
  116. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/environment.controller.js +2 -0
  117. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/views/environment-content-views.html +1 -1
  118. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/environments.controller.js +1 -0
  119. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/views/environments.html +3 -3
  120. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +4 -5
  121. data/engines/bastion_katello/lib/bastion_katello/engine.rb +0 -1
  122. data/lib/katello/engine.rb +1 -2
  123. data/lib/katello/permission_creator.rb +2 -2
  124. data/lib/katello/permissions/host_permissions.rb +1 -0
  125. data/lib/katello/plugin.rb +6 -12
  126. data/lib/katello/version.rb +1 -1
  127. data/locale/action_names.rb +49 -46
  128. data/locale/bn/katello.po +361 -53
  129. data/locale/cs/katello.po +361 -53
  130. data/locale/de/katello.po +366 -58
  131. data/locale/en/katello.po +361 -53
  132. data/locale/es/katello.po +364 -56
  133. data/locale/fr/katello.po +374 -66
  134. data/locale/gu/katello.po +361 -53
  135. data/locale/hi/katello.po +361 -53
  136. data/locale/it/katello.po +361 -53
  137. data/locale/ja/katello.po +374 -66
  138. data/locale/katello.pot +1626 -1079
  139. data/locale/kn/katello.po +361 -53
  140. data/locale/ko/katello.po +361 -53
  141. data/locale/mr/katello.po +361 -53
  142. data/locale/or/katello.po +361 -53
  143. data/locale/pa/katello.po +361 -53
  144. data/locale/pt/katello.po +361 -53
  145. data/locale/pt_BR/katello.po +364 -56
  146. data/locale/ru/katello.po +361 -53
  147. data/locale/ta/katello.po +361 -53
  148. data/locale/te/katello.po +361 -53
  149. data/locale/zh_CN/katello.po +374 -66
  150. data/locale/zh_TW/katello.po +361 -53
  151. data/webpack/components/EditableTextInput/EditableTextInput.js +3 -16
  152. data/webpack/components/EditableTextInput/PencilEditButton.js +33 -0
  153. data/webpack/components/Errata/index.js +18 -3
  154. data/webpack/components/Loading.js +1 -1
  155. data/webpack/components/RoutedTabs/index.js +1 -17
  156. data/webpack/components/Search/Search.js +0 -1
  157. data/webpack/components/Search/__tests__/search.test.js +1 -2
  158. data/webpack/components/SelectAllCheckbox/index.js +7 -4
  159. data/webpack/components/SelectableDropdown/SelectableDropdown.js +1 -0
  160. data/webpack/components/Table/EmptyStateMessage.js +77 -2
  161. data/webpack/components/Table/MainTable.js +46 -4
  162. data/webpack/components/Table/TableHooks.js +8 -4
  163. data/webpack/components/Table/TableWrapper.js +14 -8
  164. data/webpack/components/TypeAhead/TypeAhead.js +26 -11
  165. data/webpack/components/TypeAhead/pf3Search/TypeAheadItems.js +1 -1
  166. data/webpack/components/TypeAhead/pf4Search/TypeAheadInput.js +1 -0
  167. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/ChangeHostCVModal.js +2 -1
  168. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsModal.js +9 -4
  169. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeActions.js +37 -0
  170. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeCard.js +173 -0
  171. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeCard.scss +6 -0
  172. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeConstants.js +6 -0
  173. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeEditModal.js +301 -0
  174. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeSelectors.js +25 -0
  175. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/__tests__/SystemPurposeCard.test.js +108 -0
  176. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/__tests__/SystemPurposeEditModal.test.js +161 -0
  177. data/webpack/components/extensions/HostDetails/Cards/__tests__/errataOverviewCard.test.js +12 -12
  178. data/webpack/components/extensions/HostDetails/DetailsTabCards/HwPropertiesCard.js +100 -0
  179. data/webpack/components/extensions/HostDetails/DetailsTabCards/SystemPropertiesCardExtensions.js +26 -4
  180. data/webpack/components/extensions/HostDetails/HostDetailsConstants.js +3 -1
  181. data/webpack/components/extensions/HostDetails/HostDetailsReducer.js +14 -0
  182. data/webpack/components/extensions/HostDetails/HostDetailsSelectors.js +8 -2
  183. data/webpack/components/extensions/HostDetails/Tabs/ErrataTab/ErrataTab.js +9 -1
  184. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsTab.js +23 -8
  185. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackagesTab.js +11 -9
  186. data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsTab.js +58 -8
  187. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/TracesTab.js +2 -0
  188. data/webpack/components/extensions/HostDetails/Tabs/__tests__/errataTab.test.js +30 -3
  189. data/webpack/components/extensions/HostDetails/Tabs/__tests__/repositorySets.fixtures.json +3 -0
  190. data/webpack/components/extensions/HostDetails/Tabs/__tests__/repositorySetsTab.test.js +48 -20
  191. data/webpack/components/extensions/HostDetails/Tabs/__tests__/tracesTab.test.js +1 -10
  192. data/webpack/components/extensions/HostDetails/hostDetailsHelpers.js +1 -1
  193. data/webpack/components/extensions/RegistrationCommands/index.js +49 -17
  194. data/webpack/containers/Application/config.js +5 -10
  195. data/webpack/global_index.js +19 -7
  196. data/webpack/global_test_setup.js +14 -2
  197. data/webpack/ouia_id_check.js +95 -0
  198. data/webpack/redux/actions/RedHatRepositories/helpers.js +2 -0
  199. data/webpack/redux/reducers/index.js +2 -4
  200. data/webpack/scenes/AlternateContentSources/ACSActions.js +36 -3
  201. data/webpack/scenes/AlternateContentSources/ACSConstants.js +3 -0
  202. data/webpack/scenes/AlternateContentSources/ACSSelectors.js +15 -6
  203. data/webpack/scenes/AlternateContentSources/Create/ACSCreateWizard.js +73 -42
  204. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSCreateFinish.js +26 -10
  205. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSProducts.js +44 -0
  206. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSReview.js +59 -45
  207. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSSmartProxies.js +4 -3
  208. data/webpack/scenes/AlternateContentSources/Create/Steps/AcsUrlPaths.js +0 -1
  209. data/webpack/scenes/AlternateContentSources/Create/Steps/SelectSource.js +35 -19
  210. data/webpack/scenes/AlternateContentSources/Create/__tests__/acsCreate.test.js +120 -13
  211. data/webpack/scenes/AlternateContentSources/Create/__tests__/products.fixtures.json +92 -0
  212. data/webpack/scenes/AlternateContentSources/Details/ACSExpandableDetails.js +459 -0
  213. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditCredentials.js +354 -0
  214. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditDetails.js +104 -0
  215. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditProducts.js +120 -0
  216. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditSmartProxies.js +118 -0
  217. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditURLPaths.js +118 -0
  218. data/webpack/scenes/AlternateContentSources/Details/__tests__/ACSEdits.test.js +242 -0
  219. data/webpack/scenes/AlternateContentSources/Details/__tests__/ACSExpandableDetails.test.js +106 -0
  220. data/webpack/scenes/AlternateContentSources/Details/__tests__/acsDetails.fixtures.json +49 -0
  221. data/webpack/scenes/AlternateContentSources/Details/__tests__/acsProducts.fixtures.json +95 -0
  222. data/webpack/scenes/AlternateContentSources/Details/__tests__/simplifiedAcsDetails.fixtures.json +39 -0
  223. data/webpack/scenes/AlternateContentSources/MainTable/ACSTable.js +215 -87
  224. data/webpack/scenes/AlternateContentSources/MainTable/ACSTable.scss +3 -0
  225. data/webpack/scenes/AlternateContentSources/MainTable/__tests__/acsTable.test.js +1 -2
  226. data/webpack/scenes/Content/__tests__/contentTable.test.js +1 -2
  227. data/webpack/scenes/ContentViews/ContentViewsConstants.js +15 -4
  228. data/webpack/scenes/ContentViews/Delete/__tests__/contentViewDelete.test.js +1 -2
  229. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ContentViewComponents.js +2 -0
  230. data/webpack/scenes/ContentViews/Details/ComponentContentViews/__tests__/contentViewComponents.test.js +1 -2
  231. data/webpack/scenes/ContentViews/Details/ContentViewDetailActions.js +113 -0
  232. data/webpack/scenes/ContentViews/Details/ContentViewDetailSelectors.js +89 -0
  233. data/webpack/scenes/ContentViews/Details/Filters/Add/CVFilterAddModal.js +32 -9
  234. data/webpack/scenes/ContentViews/Details/Filters/Add/__tests__/cvFilterAdd.test.js +13 -3
  235. data/webpack/scenes/ContentViews/Details/Filters/CVContainerImageFilterContent.js +39 -27
  236. data/webpack/scenes/ContentViews/Details/Filters/CVDebFilterContent.js +236 -0
  237. data/webpack/scenes/ContentViews/Details/Filters/CVErrataIDFilterContent.js +1 -0
  238. data/webpack/scenes/ContentViews/Details/Filters/CVFilterDetailType.js +10 -0
  239. data/webpack/scenes/ContentViews/Details/Filters/CVModuleStreamFilterContent.js +3 -0
  240. data/webpack/scenes/ContentViews/Details/Filters/CVPackageGroupFilterContent.js +3 -1
  241. data/webpack/scenes/ContentViews/Details/Filters/CVRpmFilterContent.js +17 -4
  242. data/webpack/scenes/ContentViews/Details/Filters/ContentType.js +1 -0
  243. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilters.js +34 -22
  244. data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/CVDebMatchContentModal.js +97 -0
  245. data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/__tests__/CVRpmMatchContentModal.test.js +1 -2
  246. data/webpack/scenes/ContentViews/Details/Filters/Rules/DebPackage/AddEditDebPackageRuleModal.js +128 -0
  247. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVContainerImageFilterContent.test.js +56 -3
  248. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVRpmFilterContent.test.js +62 -8
  249. data/webpack/scenes/ContentViews/Details/Filters/__tests__/ContentViewPackageGroupFilter.test.js +1 -5
  250. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilterDetails.test.js +1 -2
  251. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.test.js +32 -2
  252. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvErrataIDFilter.test.js +1 -2
  253. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvModuleStreamFilter.test.js +1 -2
  254. data/webpack/scenes/ContentViews/Details/Filters/__tests__/emptyCVContainerImageFilterContent.fixtures.json +13 -0
  255. data/webpack/scenes/ContentViews/Details/Filters/__tests__/emptyCVPackageFilterRules.fixtures.json +13 -0
  256. data/webpack/scenes/ContentViews/Details/Filters/__tests__/emptyContentViewFilters.fixtures.json +13 -0
  257. data/webpack/scenes/ContentViews/Details/Histories/__tests__/contentViewHistory.test.js +1 -2
  258. data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +5 -1
  259. data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewAddRemove.test.js +1 -2
  260. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/__tests__/BulkDeleteModal.test.js +3 -0
  261. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompare.js +143 -0
  262. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompare.scss +51 -0
  263. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompareConfig.js +314 -0
  264. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompareHeader.js +186 -0
  265. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompareTable.js +74 -0
  266. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/AnsibleCollectionsCompareAllContentData.fixtures.json +63 -0
  267. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/CVVersionCompare.test.js +657 -0
  268. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/CVVersionEmptyContentCompareData.fixtures.json +14 -0
  269. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/ContainerTagsCompareAllContentData.fixtures.json +95 -0
  270. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/DebPackagesCompareAllContentData.fixtures.json +87 -0
  271. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/ErrataCompareAllContentData.fixtures.json +319 -0
  272. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/ErrataCompareThreeContentTypesData.fixtures.json +131 -0
  273. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/FilesCompareAllContentData.fixtures.json +51 -0
  274. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/FilesCompareThreeContentTypesData.fixtures.json +48 -0
  275. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/ModuleStreamsCompareAllContentData.fixtures.json +239 -0
  276. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/PackageGroupsCompareAllContentData.fixtures.json +51 -0
  277. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/PythonPackagesCompareAllContentData.fixtures.json +315 -0
  278. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/RPMPackagesCompareAllContentData.fixtures.json +470 -0
  279. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/RPMPackagesCompareThreeContentTypesData.fixtures.json +475 -0
  280. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/contentViewDetails.fixtures.json +160 -0
  281. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/contentViewVersionOneDetials.fixtures.json +161 -0
  282. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/contentViewVersionThreeDetails.fixtures.json +154 -0
  283. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/contentViewVersionTwoDetails.fixtures.json +211 -0
  284. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/contentViewVersions.fixtures.json +1013 -0
  285. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/emptyStateCVVersionOneDetails.fixtures.json +145 -0
  286. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/emptyStateCVVersionTwoDetails.fixtures.json +145 -0
  287. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersions.js +102 -36
  288. data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvVersionRemove.test.js +1 -2
  289. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailConfig.js +4 -2
  290. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetails.test.js +1 -2
  291. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetailsEmpty.test.js +1 -2
  292. data/webpack/scenes/ContentViews/Details/Versions/__tests__/contentViewVersions.test.js +113 -40
  293. data/webpack/scenes/ContentViews/Table/ContentViewsTable.js +96 -81
  294. data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +1 -2
  295. data/webpack/scenes/ContentViews/__tests__/mockDetails.fixtures.json +7 -2
  296. data/webpack/scenes/SmartProxy/SmartProxyContentActions.js +1 -1
  297. data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.js +0 -30
  298. data/webpack/test-utils/nockWrapper.js +7 -0
  299. metadata +82 -167
  300. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/content-views.controller.js +0 -34
  301. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/content-views.routes.js +0 -751
  302. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-deletion.controller.js +0 -42
  303. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-activation-keys.controller.js +0 -81
  304. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-confirm.controller.js +0 -65
  305. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-content-hosts.controller.js +0 -82
  306. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-environments.controller.js +0 -76
  307. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion.controller.js +0 -160
  308. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/views/content-view-deletion.html +0 -58
  309. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/views/version-deletion-activation-keys.html +0 -94
  310. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/views/version-deletion-confirm.html +0 -76
  311. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/views/version-deletion-content-hosts.html +0 -88
  312. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/views/version-deletion-environments.html +0 -73
  313. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/content-view-component.factory.js +0 -32
  314. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/content-view-composite-available-content-views.controller.js +0 -75
  315. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/content-view-composite-content-views-list.controller.js +0 -68
  316. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/views/content-view-composite-available-content-views.html +0 -81
  317. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/views/content-view-composite-content-views-list.html +0 -81
  318. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/views/content-view-composite.html +0 -24
  319. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-available-deb-repositories.controller.js +0 -50
  320. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-available-docker-repositories.controller.js +0 -42
  321. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-available-file-repositories.controller.js +0 -50
  322. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-available-ostree-repositories.controller.js +0 -42
  323. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-available-repositories.controller.js +0 -45
  324. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-deb-repositories-list.controller.js +0 -48
  325. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-details.controller.js +0 -100
  326. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-docker-repositories-list.controller.js +0 -49
  327. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-file-repositories-list.controller.js +0 -48
  328. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-ostree-repositories-list.controller.js +0 -49
  329. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-promotion.controller.js +0 -129
  330. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-publish.controller.js +0 -46
  331. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-repositories-list.controller.js +0 -42
  332. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-repositories.service.js +0 -91
  333. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-versions.controller.js +0 -240
  334. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/available-errata-filter.controller.js +0 -115
  335. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/available-module-stream-filter.controller.js +0 -68
  336. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/available-package-group-filter.controller.js +0 -66
  337. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/date-type-errata-filter.controller.js +0 -77
  338. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/docker-tag-filter.controller.js +0 -137
  339. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/edit-filter.controller.js +0 -36
  340. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/errata-filter-list.controller.js +0 -78
  341. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/errata-filter.controller.js +0 -74
  342. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-content-type.filter.js +0 -21
  343. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-details.controller.js +0 -34
  344. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-helper.service.js +0 -30
  345. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-repositories.controller.js +0 -86
  346. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-rule-matching-package-modal.controller.js +0 -37
  347. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-type.filter.js +0 -21
  348. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter.factory.js +0 -66
  349. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filters.controller.js +0 -85
  350. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/module-stream-list-filter.controller.js +0 -73
  351. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/new-filter.controller.js +0 -100
  352. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/package-filter.controller.js +0 -179
  353. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/package-group-list-filter.controller.js +0 -75
  354. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/rule.factory.js +0 -21
  355. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/date-type-errata-filter.html +0 -9
  356. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/date-type-errata.html +0 -75
  357. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/docker-filter.html +0 -28
  358. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/docker-tag-filter-details.html +0 -65
  359. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/edit-filter.html +0 -19
  360. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/errata-filter-details.html +0 -63
  361. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/errata-filter.html +0 -50
  362. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/filter-details.html +0 -9
  363. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/filter-repositories.html +0 -121
  364. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/filter-rule-matching-package-modal.html +0 -43
  365. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/filters.html +0 -85
  366. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/module-stream-filter-details.html +0 -58
  367. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/module-stream-filter.html +0 -43
  368. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/new-filter.html +0 -62
  369. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/package-filter-details.html +0 -182
  370. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/package-filter.html +0 -28
  371. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/package-group-filter-details.html +0 -42
  372. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/package-group-filter.html +0 -43
  373. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/partials/filter-repositories-count.html +0 -2
  374. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/histories/content-view-history.controller.js +0 -47
  375. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/histories/content-view-history.factory.js +0 -22
  376. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/histories/views/content-view-history.html +0 -36
  377. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-copy.html +0 -20
  378. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-deb-repositories.html +0 -87
  379. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-details-tasks.html +0 -4
  380. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-details.html +0 -144
  381. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-docker-repositories.html +0 -114
  382. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-file-repositories.html +0 -87
  383. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-info.html +0 -63
  384. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-ostree-repositories.html +0 -87
  385. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-promotion.html +0 -59
  386. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-publish.html +0 -58
  387. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-repositories.html +0 -116
  388. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-versions.html +0 -126
  389. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/new/content-view-new.controller.js +0 -78
  390. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/new/views/content-view-new.html +0 -127
  391. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/content-view-version-content.controller.js +0 -138
  392. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/content-view-version.controller.js +0 -59
  393. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-apt.html +0 -25
  394. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-components.html +0 -19
  395. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-deb.html +0 -19
  396. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-details.html +0 -15
  397. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-docker.html +0 -23
  398. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-errata.html +0 -48
  399. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-file.html +0 -21
  400. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-module-streams.html +0 -8
  401. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-package-groups.html +0 -21
  402. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-packages.html +0 -27
  403. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-yum.html +0 -42
  404. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version.html +0 -83
  405. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/views/content-views.html +0 -74
  406. data/lib/katello/tasks/reset.rake.bak +0 -67
  407. data/locale/bn/LC_MESSAGES/katello.mo +0 -0
  408. data/locale/cs/LC_MESSAGES/katello.mo +0 -0
  409. data/locale/de/LC_MESSAGES/katello.mo +0 -0
  410. data/locale/en/LC_MESSAGES/katello.mo +0 -0
  411. data/locale/es/LC_MESSAGES/katello.mo +0 -0
  412. data/locale/fr/LC_MESSAGES/katello.mo +0 -0
  413. data/locale/gu/LC_MESSAGES/katello.mo +0 -0
  414. data/locale/hi/LC_MESSAGES/katello.mo +0 -0
  415. data/locale/it/LC_MESSAGES/katello.mo +0 -0
  416. data/locale/ja/LC_MESSAGES/katello.mo +0 -0
  417. data/locale/kn/LC_MESSAGES/katello.mo +0 -0
  418. data/locale/ko/LC_MESSAGES/katello.mo +0 -0
  419. data/locale/mr/LC_MESSAGES/katello.mo +0 -0
  420. data/locale/or/LC_MESSAGES/katello.mo +0 -0
  421. data/locale/pa/LC_MESSAGES/katello.mo +0 -0
  422. data/locale/pt/LC_MESSAGES/katello.mo +0 -0
  423. data/locale/pt_BR/LC_MESSAGES/katello.mo +0 -0
  424. data/locale/ru/LC_MESSAGES/katello.mo +0 -0
  425. data/locale/ta/LC_MESSAGES/katello.mo +0 -0
  426. data/locale/te/LC_MESSAGES/katello.mo +0 -0
  427. data/locale/zh_CN/LC_MESSAGES/katello.mo +0 -0
  428. data/locale/zh_TW/LC_MESSAGES/katello.mo +0 -0
  429. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsActions.js +0 -30
  430. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsConstants.js +0 -3
  431. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsPage.js +0 -80
  432. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsReducer.js +0 -39
  433. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsTableSchema.js +0 -60
  434. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsTables.scss +0 -0
  435. data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionDetails.js +0 -94
  436. data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionDetailsActions.js +0 -23
  437. data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionDetailsConstants.js +0 -3
  438. data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionDetailsReducer.js +0 -30
  439. data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionsSchema.js +0 -35
  440. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetailInfo.test.js +0 -16
  441. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetails.fixtures.js +0 -25
  442. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetails.test.js +0 -27
  443. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetailsActions.test.js +0 -41
  444. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetailsReducer.test.js +0 -33
  445. data/webpack/scenes/AnsibleCollections/Details/__tests__/__snapshots__/AnsibleCollectionDetailInfo.test.js.snap +0 -83
  446. data/webpack/scenes/AnsibleCollections/Details/__tests__/__snapshots__/AnsibleCollectionDetails.test.js.snap +0 -190
  447. data/webpack/scenes/AnsibleCollections/Details/__tests__/__snapshots__/AnsibleCollectionDetailsActions.test.js.snap +0 -58
  448. data/webpack/scenes/AnsibleCollections/Details/__tests__/__snapshots__/AnsibleCollectionDetailsReducer.test.js.snap +0 -50
  449. data/webpack/scenes/AnsibleCollections/Details/index.js +0 -17
  450. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionPage.test.js +0 -23
  451. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollections.fixtures.js +0 -52
  452. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionsActions.test.js +0 -48
  453. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionsReducer.test.js +0 -46
  454. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionsTable.test.js +0 -25
  455. data/webpack/scenes/AnsibleCollections/__tests__/__snapshots__/AnsibleCollectionPage.test.js.snap +0 -73
  456. data/webpack/scenes/AnsibleCollections/__tests__/__snapshots__/AnsibleCollectionsTable.test.js.snap +0 -81
  457. data/webpack/scenes/AnsibleCollections/index.js +0 -17
  458. data/webpack/scenes/Subscriptions/Manifest/__tests__/ManageManifestModal.test.js +0 -123
@@ -12,7 +12,6 @@ import {
12
12
  Skeleton,
13
13
  Split,
14
14
  SplitItem,
15
- Spinner,
16
15
  } from '@patternfly/react-core';
17
16
  import { TableVariant, Thead, Tbody, Tr, Th, Td } from '@patternfly/react-table';
18
17
  import { translate as __ } from 'foremanReact/common/I18n';
@@ -358,14 +357,12 @@ export const PackagesTab = () => {
358
357
  />
359
358
  </ActionListItem>
360
359
  <ActionListItem>
361
- {actionInProgress ? <Spinner size="lg" style={{ marginLeft: '1em', marginTop: '4px' }} /> : (
362
- <Dropdown
363
- toggle={<KebabToggle aria-label="bulk_actions" onToggle={toggleBulkAction} />}
364
- isOpen={isBulkActionOpen}
365
- isPlain
366
- dropdownItems={dropdownRemoveItems}
367
- />
368
- )}
360
+ <Dropdown
361
+ toggle={<KebabToggle aria-label="bulk_actions" onToggle={toggleBulkAction} />}
362
+ isOpen={isBulkActionOpen}
363
+ isPlain
364
+ dropdownItems={dropdownRemoveItems}
365
+ />
369
366
  </ActionListItem>
370
367
  </ActionList>
371
368
  </SplitItem>
@@ -387,6 +384,8 @@ export const PackagesTab = () => {
387
384
  </Split>
388
385
  );
389
386
 
387
+ const resetFilters = () => setPackageStatusSelected(PACKAGE_STATUS);
388
+
390
389
  return (
391
390
  <div>
392
391
  <div id="packages-tab">
@@ -409,6 +408,7 @@ export const PackagesTab = () => {
409
408
  selectedCount,
410
409
  selectNone,
411
410
  areAllRowsSelected,
411
+ resetFilters,
412
412
  }
413
413
  }
414
414
  ouiaId="host-packages-table"
@@ -425,6 +425,8 @@ export const PackagesTab = () => {
425
425
  variant={TableVariant.compact}
426
426
  {...selectAll}
427
427
  displaySelectAllCheckbox={showActions}
428
+ requestKey={HOST_PACKAGES_KEY}
429
+ alwaysShowActionButtons={false}
428
430
  >
429
431
  <Thead>
430
432
  <Tr>
@@ -111,6 +111,29 @@ EnabledIcon.propTypes = {
111
111
  isOverridden: PropTypes.bool.isRequired,
112
112
  };
113
113
 
114
+ const ArchRestrictedIcon = ({ archRestricted }) => (
115
+ <Tooltip
116
+ position="right"
117
+ content={<FormattedMessage
118
+ id="arch-restricted-tooltip"
119
+ defaultMessage={__('Architecture restricted to {archRestricted}. If host architecture does not match, the repository will not be available on this host.')}
120
+ values={{ archRestricted }}
121
+ />}
122
+ >
123
+ <Label color="orange" className="arch-restricted-label" style={{ marginLeft: '8px' }}>
124
+ {__(archRestricted)}
125
+ </Label>
126
+ </Tooltip>
127
+ );
128
+
129
+ ArchRestrictedIcon.propTypes = {
130
+ archRestricted: PropTypes.string,
131
+ };
132
+
133
+ ArchRestrictedIcon.defaultProps = {
134
+ archRestricted: null,
135
+ };
136
+
114
137
  const OsRestrictedIcon = ({ osRestricted }) => (
115
138
  <Tooltip
116
139
  position="right"
@@ -154,7 +177,7 @@ const RepositorySetsTab = () => {
154
177
  contentViewName,
155
178
  lifecycleEnvironmentName,
156
179
  } = contentFacet;
157
- const nonLibraryHost = contentViewDefault === false &&
180
+ const nonLibraryHost = contentViewDefault === false ||
158
181
  lifecycleEnvironmentLibrary === false;
159
182
  const simpleContentAccess = (Number(subscriptionStatus) === 5);
160
183
  const [isBulkActionOpen, setIsBulkActionOpen] = useState(false);
@@ -174,9 +197,15 @@ const RepositorySetsTab = () => {
174
197
 
175
198
  const [alertShowing, setAlertShowing] = useState(false);
176
199
  const emptyContentTitle = __('No repository sets to show.');
177
- const emptyContentBody = __('Repository sets will appear here when available.');
200
+ const emptyContentBody = __('Repository sets will appear here after enabling Red Hat repositories or creating custom products.');
178
201
  const emptySearchTitle = __('No matching repository sets found');
179
202
  const emptySearchBody = __('Try changing your search query.');
203
+ const showPrimaryAction = true;
204
+ const showSecondaryAction = true;
205
+ const primaryActionTitle = __('Enable Red Hat repositories');
206
+ const secondaryActionTitle = __('Create a custom product');
207
+ const primaryActionLink = '/redhat_repositories';
208
+ const secondaryActionLink = '/products/new';
180
209
  const errorSearchTitle = __('Problem searching repository sets');
181
210
  const columnHeaders = useMemo(() => [
182
211
  __('Repository'),
@@ -233,6 +262,10 @@ const RepositorySetsTab = () => {
233
262
 
234
263
  const hostDetailsStatus = useSelector(state => selectHostDetailsStatus(state));
235
264
 
265
+ const resetFilters = () => {
266
+ setStatusSelected(STATUS_LABEL);
267
+ setToggleGroupState(defaultToggleGroupState);
268
+ };
236
269
  useEffect(() => {
237
270
  // wait until host details are loaded to set alertShowing
238
271
  if (hostDetailsStatus === STATUS.RESOLVED) {
@@ -306,13 +339,13 @@ const RepositorySetsTab = () => {
306
339
  cannot(createBookmarks, userPermissionsFromHostDetails({ hostDetails }));
307
340
 
308
341
  const dropdownItems = [
309
- <DropdownItem aria-label="bulk_enable" key="bulk_enable" component="button" onClick={enableRepoSets} isDisabled={selectedCount === 0}>
342
+ <DropdownItem aria-label="bulk_enable" key="bulk_enable" ouiaId="bulk_enable" component="button" onClick={enableRepoSets} isDisabled={selectedCount === 0}>
310
343
  {__('Override to enabled')}
311
344
  </DropdownItem>,
312
- <DropdownItem aria-label="bulk_disable" key="bulk_disable" component="button" onClick={disableRepoSets} isDisabled={selectedCount === 0}>
345
+ <DropdownItem aria-label="bulk_disable" key="bulk_disable" ouiaId="bulk_disable" component="button" onClick={disableRepoSets} isDisabled={selectedCount === 0}>
313
346
  {__('Override to disabled')}
314
347
  </DropdownItem>,
315
- <DropdownItem aria-label="bulk_reset_default" key="bulk_reset_default" component="button" onClick={resetToDefaultRepoSets} isDisabled={selectedCount === 0}>
348
+ <DropdownItem aria-label="bulk_reset_default" key="bulk_reset_default" ouiaId="bulk_reset_default" component="button" onClick={resetToDefaultRepoSets} isDisabled={selectedCount === 0}>
316
349
  {__('Reset to default')}
317
350
  </DropdownItem>,
318
351
  ];
@@ -342,6 +375,7 @@ const RepositorySetsTab = () => {
342
375
  <SplitItem>
343
376
  <SelectableDropdown
344
377
  id="status-dropdown"
378
+ ouiaId="status-dropdown"
345
379
  title={STATUS_LABEL}
346
380
  showTitle={false}
347
381
  items={Object.values(STATUSES)}
@@ -362,6 +396,7 @@ const RepositorySetsTab = () => {
362
396
  isOpen={isBulkActionOpen}
363
397
  isPlain
364
398
  dropdownItems={dropdownItems}
399
+ ouiaId="repository-sets-bulk-actions"
365
400
  />
366
401
  </ActionListItem>
367
402
  </ActionList>
@@ -403,6 +438,7 @@ const RepositorySetsTab = () => {
403
438
  <Alert
404
439
  variant="info"
405
440
  className="repo-sets-alert"
441
+ ouiaId="repo-sets-alert"
406
442
  isInline
407
443
  title={
408
444
  <FormattedMessage
@@ -415,7 +451,7 @@ const RepositorySetsTab = () => {
415
451
  }}
416
452
  />
417
453
  }
418
- actionClose={<AlertActionCloseButton onClose={() => setAlertShowing(false)} />}
454
+ actionClose={<AlertActionCloseButton ouiaId="alert-close-button" onClose={() => setAlertShowing(false)} />}
419
455
  />
420
456
  }
421
457
  </div>
@@ -435,6 +471,13 @@ const RepositorySetsTab = () => {
435
471
  emptySearchBody,
436
472
  activeFilters,
437
473
  defaultFilters,
474
+ showPrimaryAction,
475
+ showSecondaryAction,
476
+ primaryActionLink,
477
+ secondaryActionLink,
478
+ primaryActionTitle,
479
+ secondaryActionTitle,
480
+ resetFilters,
438
481
  }
439
482
  }
440
483
  ouiaId="host-repository-sets-table"
@@ -449,10 +492,12 @@ const RepositorySetsTab = () => {
449
492
  rowsCount={results?.length}
450
493
  variant={TableVariant.compact}
451
494
  {...selectAll}
495
+ requestKey={REPOSITORY_SETS_KEY}
452
496
  displaySelectAllCheckbox={canDoContentOverrides}
497
+ alwaysShowActionButtons={false}
453
498
  >
454
499
  <Thead>
455
- <Tr>
500
+ <Tr ouiaId="header-tr">
456
501
  <Th key="select-all" />
457
502
  <SortableColumnHeaders
458
503
  columnHeaders={columnHeaders}
@@ -473,11 +518,13 @@ const RepositorySetsTab = () => {
473
518
  contentUrl: repoPath,
474
519
  product: { name: productName, id: productId },
475
520
  osRestricted,
521
+ archRestricted,
476
522
  } = repoSet;
477
523
  const { isEnabled, isOverridden } =
478
524
  getEnabledValue({ enabled, enabledContentOverride });
525
+ const showArchRestricted = archRestricted !== 'noarch';
479
526
  return (
480
- <Tr key={id}>
527
+ <Tr key={id} ouiaId={`tr-${rowIndex}`}>
481
528
  {canDoContentOverrides ? (
482
529
  <Td select={{
483
530
  disable: !isSelectable(id),
@@ -499,6 +546,9 @@ const RepositorySetsTab = () => {
499
546
  </Td>
500
547
  <Td>
501
548
  <span><EnabledIcon key={`enabled-icon-${id}`} {...{ isEnabled, isOverridden }} /></span>
549
+ {showArchRestricted &&
550
+ <span><ArchRestrictedIcon key={`arch-restricted-icon-${id}`} {...{ archRestricted }} /></span>
551
+ }
502
552
  {osRestricted &&
503
553
  <span><OsRestrictedIcon key={`os-restricted-icon-${id}`} {...{ osRestricted }} /></span>
504
554
  }
@@ -22,6 +22,7 @@ import { useRexJobPolling } from '../RemoteExecutionHooks';
22
22
  import { hasRequiredPermissions as can,
23
23
  missingRequiredPermissions as cannot,
24
24
  userPermissionsFromHostDetails } from '../../hostDetailsHelpers';
25
+ import { HOST_TRACES_KEY } from './HostTracesConstants';
25
26
 
26
27
  const invokeRexJobs = ['create_job_invocations'];
27
28
  const createBookmarks = ['create_bookmarks'];
@@ -201,6 +202,7 @@ const TracesTab = () => {
201
202
  lastCompletedAppRestart, lastCompletedBulkRestart]}
202
203
  displaySelectAllCheckbox={showActions}
203
204
  {...selectAll}
205
+ requestKey={HOST_TRACES_KEY}
204
206
  >
205
207
  <Thead>
206
208
  <Tr>
@@ -577,7 +577,7 @@ test('Toggle Group shows if it\'s not the default content view or library enviro
577
577
  assertNockRequest(scope, done); // Pass jest callback to confirm test is done
578
578
  });
579
579
 
580
- test('Toggle Group does not show if it\'s the default content view ', async (done) => {
580
+ test('Toggle Group shows if it\'s the default content view but non-library environment', async (done) => {
581
581
  const options = renderOptions({
582
582
  ...contentFacetAttributes,
583
583
  content_view_default: true,
@@ -598,14 +598,41 @@ test('Toggle Group does not show if it\'s the default content view ', async (don
598
598
 
599
599
  // Assert that the errata are now showing on the screen, but wait for them to appear.
600
600
  await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
601
- expect(queryByLabelText('Installable Errata')).not.toBeInTheDocument();
601
+ expect(queryByLabelText('Installable Errata')).toBeInTheDocument();
602
+ assertNockRequest(autocompleteScope);
603
+ assertNockRequest(scope, done); // Pass jest callback to confirm test is done
604
+ });
605
+
606
+ test('Toggle Group shows if it\'s the library environment but non-default content view', async (done) => {
607
+ const options = renderOptions({
608
+ ...contentFacetAttributes,
609
+ lifecycle_environment_library: true,
610
+ });
611
+ // Setup autocomplete with mockForemanAutoComplete since we aren't adding /katello
612
+ const autocompleteScope = mockForemanAutocomplete(nockInstance, autocompleteUrl);
613
+ const mockErrata = makeMockErrata({});
614
+ // return errata data results when we look for errata
615
+ const scope = nockInstance
616
+ .get(hostErrata)
617
+ .query(defaultQuery)
618
+ .reply(200, mockErrata);
619
+
620
+ const {
621
+ queryByLabelText,
622
+ getAllByText,
623
+ } = renderWithRedux(<ErrataTab />, options);
624
+
625
+ // Assert that the errata are now showing on the screen, but wait for them to appear.
626
+ await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
627
+ expect(queryByLabelText('Installable Errata')).toBeInTheDocument();
602
628
  assertNockRequest(autocompleteScope);
603
629
  assertNockRequest(scope, done); // Pass jest callback to confirm test is done
604
630
  });
605
631
 
606
- test('Toggle Group does not show if it\'s the library environment', async (done) => {
632
+ test('Toggle Group does not show if it\'s the default content view and library environment', async (done) => {
607
633
  const options = renderOptions({
608
634
  ...contentFacetAttributes,
635
+ content_view_default: true,
609
636
  lifecycle_environment_library: true,
610
637
  });
611
638
  // Setup autocomplete with mockForemanAutoComplete since we aren't adding /katello
@@ -42,6 +42,7 @@
42
42
  "gpgUrl": null,
43
43
  "contentUrl": "/custom/ParthaProduct/empty_repo",
44
44
  "osRestricted": null,
45
+ "archRestricted": "noarch",
45
46
  "override": "default",
46
47
  "overrides": [],
47
48
  "enabled_content_override": null
@@ -77,6 +78,7 @@
77
78
  "gpgUrl": null,
78
79
  "contentUrl": "/custom/ParthaProduct/partha_multi-errata",
79
80
  "osRestricted": "rhel-7",
81
+ "archRestricted": "x86_64",
80
82
  "override": "0",
81
83
  "overrides": [
82
84
  {
@@ -110,6 +112,7 @@
110
112
  "gpgUrl": null,
111
113
  "contentUrl": "/custom/Pull_Provider/yggdrasil",
112
114
  "osRestricted": null,
115
+ "archRestricted": "noarch",
113
116
  "override": "1",
114
117
  "overrides": [
115
118
  {
@@ -8,6 +8,7 @@ import mockRepoSetData from './repositorySets.fixtures.json';
8
8
  import mockBookmarkData from './bookmarks.fixtures.json';
9
9
  import mockContentOverride from './contentOverrides.fixtures.json';
10
10
 
11
+
11
12
  jest.mock('../../hostDetailsHelpers', () => ({
12
13
  ...jest.requireActual('../../hostDetailsHelpers'),
13
14
  userPermissionsFromHostDetails: () => ({
@@ -46,7 +47,7 @@ const autocompleteUrl = '/repository_sets/auto_complete_search';
46
47
  const repositorySetBookmarks = foremanApi.getApiUrl('/bookmarks?search=controller%3Dkatello_product_contents');
47
48
  const contentOverride = foremanApi.getApiUrl('/hosts/1/subscriptions/content_override');
48
49
 
49
- const defaultQuery = {
50
+ const limitToEnvQuery = {
50
51
  content_access_mode_env: true,
51
52
  content_access_mode_all: true,
52
53
  host_id: 1,
@@ -56,8 +57,8 @@ const defaultQuery = {
56
57
  sort_by: 'name',
57
58
  sort_order: 'asc',
58
59
  };
59
- const libraryQuery = {
60
- ...defaultQuery,
60
+ const showAllQuery = {
61
+ ...limitToEnvQuery,
61
62
  content_access_mode_env: false,
62
63
  };
63
64
 
@@ -86,7 +87,7 @@ test('Can call API for repository sets and show basic table', async (done) => {
86
87
  const autocompleteScope = mockAutocomplete(nockInstance, autocompleteUrl);
87
88
  const scope = nockInstance
88
89
  .get(hostRepositorySets)
89
- .query(defaultQuery)
90
+ .query(limitToEnvQuery)
90
91
  .reply(200, mockRepoSetData);
91
92
 
92
93
  const { getByText } = renderWithRedux(<RepositorySetsTab />, renderOptions());
@@ -110,7 +111,7 @@ test('Can handle no repository sets being present', async (done) => {
110
111
 
111
112
  const scope = nockInstance
112
113
  .get(hostRepositorySets)
113
- .query(defaultQuery)
114
+ .query(limitToEnvQuery)
114
115
  .reply(200, noResults);
115
116
 
116
117
  const { queryByText } = renderWithRedux(<RepositorySetsTab />, renderOptions());
@@ -126,7 +127,7 @@ test('Toggle Group shows if it\'s not the default content view or library enviro
126
127
  const autocompleteScope = mockAutocomplete(nockInstance, autocompleteUrl);
127
128
  const scope = nockInstance
128
129
  .get(hostRepositorySets)
129
- .query(defaultQuery)
130
+ .query(limitToEnvQuery)
130
131
  .reply(200, mockRepoSetData);
131
132
 
132
133
  const {
@@ -141,7 +142,7 @@ test('Toggle Group shows if it\'s not the default content view or library enviro
141
142
  assertNockRequest(scope, done); // Pass jest callback to confirm test is done
142
143
  });
143
144
 
144
- test('Toggle Group does not show if it\'s the default content view ', async (done) => {
145
+ test('Toggle Group shows if it\'s the default content view but non-library environment', async (done) => {
145
146
  const options = renderOptions({
146
147
  ...contentFacetAttributes,
147
148
  content_view_default: true,
@@ -150,7 +151,7 @@ test('Toggle Group does not show if it\'s the default content view ', async (don
150
151
  const autocompleteScope = mockAutocomplete(nockInstance, autocompleteUrl);
151
152
  const scope = nockInstance
152
153
  .get(hostRepositorySets)
153
- .query(libraryQuery)
154
+ .query(limitToEnvQuery)
154
155
  .reply(200, mockRepoSetData);
155
156
 
156
157
  const {
@@ -160,21 +161,46 @@ test('Toggle Group does not show if it\'s the default content view ', async (don
160
161
 
161
162
  // Assert that the errata are now showing on the screen, but wait for them to appear.
162
163
  await patientlyWaitFor(() => expect(getByText(firstRepoSet.contentUrl)).toBeInTheDocument());
163
- expect(queryByLabelText('Limit to environment')).not.toBeInTheDocument();
164
+ expect(queryByLabelText('Limit to environment')).toBeInTheDocument();
165
+ assertNockRequest(autocompleteScope);
166
+ assertNockRequest(scope, done); // Pass jest callback to confirm test is done
167
+ });
168
+
169
+ test('Toggle Group shows if it\'s the library environment but a non-default content view', async (done) => {
170
+ const options = renderOptions({
171
+ ...contentFacetAttributes,
172
+ lifecycle_environment_library: true,
173
+ });
174
+ const autocompleteScope = mockAutocomplete(nockInstance, autocompleteUrl);
175
+ // return errata data results when we look for errata
176
+ const scope = nockInstance
177
+ .get(hostRepositorySets)
178
+ .query(limitToEnvQuery)
179
+ .reply(200, mockRepoSetData);
180
+
181
+ const {
182
+ queryByLabelText,
183
+ getByText,
184
+ } = renderWithRedux(<RepositorySetsTab />, options);
185
+
186
+ // Assert that the errata are now showing on the screen, but wait for them to appear.
187
+ await patientlyWaitFor(() => expect(getByText(firstRepoSet.contentUrl)).toBeInTheDocument());
188
+ expect(queryByLabelText('Limit to environment')).toBeInTheDocument();
164
189
  assertNockRequest(autocompleteScope);
165
190
  assertNockRequest(scope, done); // Pass jest callback to confirm test is done
166
191
  });
167
192
 
168
- test('Toggle Group does not show if it\'s the library environment', async (done) => {
193
+ test('Toggle Group does not show if it\'s the library environment and default content view', async (done) => {
169
194
  const options = renderOptions({
170
195
  ...contentFacetAttributes,
171
196
  lifecycle_environment_library: true,
197
+ content_view_default: true,
172
198
  });
173
199
  const autocompleteScope = mockAutocomplete(nockInstance, autocompleteUrl);
174
200
  // return errata data results when we look for errata
175
201
  const scope = nockInstance
176
202
  .get(hostRepositorySets)
177
- .query(libraryQuery)
203
+ .query(showAllQuery)
178
204
  .reply(200, mockRepoSetData);
179
205
 
180
206
  const {
@@ -195,7 +221,7 @@ test('Can toggle with the Toggle Group ', async (done) => {
195
221
  // return errata data results when we look for errata
196
222
  const scope = nockInstance
197
223
  .get(hostRepositorySets)
198
- .query(defaultQuery)
224
+ .query(limitToEnvQuery)
199
225
  .reply(200, mockRepoSetData);
200
226
 
201
227
  const {
@@ -215,7 +241,7 @@ test('Can override to disabled', async (done) => {
215
241
  const autocompleteScope = mockAutocomplete(nockInstance, autocompleteUrl);
216
242
  const scope = nockInstance
217
243
  .get(hostRepositorySets)
218
- .query(defaultQuery)
244
+ .query(limitToEnvQuery)
219
245
  .reply(200, mockRepoSetData);
220
246
  const overrides = JSON.parse(JSON.stringify(mockContentOverride));
221
247
  overrides.results[0].enabled_content_override = false;
@@ -253,7 +279,7 @@ test('Can override to enabled', async (done) => {
253
279
  const autocompleteScope = mockAutocomplete(nockInstance, autocompleteUrl);
254
280
  const scope = nockInstance
255
281
  .get(hostRepositorySets)
256
- .query(defaultQuery)
282
+ .query(limitToEnvQuery)
257
283
  .reply(200, mockRepoSetData);
258
284
  const overrides = JSON.parse(JSON.stringify(mockContentOverride));
259
285
  overrides.results[1].enabled_content_override = true;
@@ -292,7 +318,7 @@ test('Can reset to default', async (done) => {
292
318
  const autocompleteScope = mockAutocomplete(nockInstance, autocompleteUrl);
293
319
  const scope = nockInstance
294
320
  .get(hostRepositorySets)
295
- .query(defaultQuery)
321
+ .query(limitToEnvQuery)
296
322
  .reply(200, mockRepoSetData);
297
323
  const overrides = JSON.parse(JSON.stringify(mockContentOverride));
298
324
  overrides.results[1].enabled_content_override = null;
@@ -331,7 +357,7 @@ test('Can override in bulk', async (done) => {
331
357
  const autocompleteScope = mockAutocomplete(nockInstance, autocompleteUrl);
332
358
  const scope = nockInstance
333
359
  .get(hostRepositorySets)
334
- .query(defaultQuery)
360
+ .query(limitToEnvQuery)
335
361
  .reply(200, mockRepoSetData);
336
362
  const contentOverrideScope = nockInstance
337
363
  .put(contentOverride)
@@ -359,12 +385,12 @@ test('Can filter by status', async (done) => {
359
385
  const autocompleteScope = mockAutocomplete(nockInstance, autocompleteUrl);
360
386
  const scope = nockInstance
361
387
  .get(hostRepositorySets)
362
- .query(defaultQuery)
388
+ .query(limitToEnvQuery)
363
389
  .reply(200, mockRepoSetData);
364
390
 
365
391
  const scope2 = nockInstance
366
392
  .get(hostRepositorySets)
367
- .query({ ...defaultQuery, status: 'overridden' })
393
+ .query({ ...limitToEnvQuery, status: 'overridden' })
368
394
  .reply(200, { ...mockRepoSetData, results: [secondRepoSet] });
369
395
 
370
396
  const {
@@ -389,11 +415,11 @@ test('Can filter by status', async (done) => {
389
415
  assertNockRequest(scope2, done); // Pass jest callback to confirm test is done
390
416
  });
391
417
 
392
- test('Can display osRestricted as a label', async (done) => {
418
+ test('Can display restrictions as labels', async (done) => {
393
419
  const autocompleteScope = mockAutocomplete(nockInstance, autocompleteUrl);
394
420
  const scope = nockInstance
395
421
  .get(hostRepositorySets)
396
- .query(defaultQuery)
422
+ .query(limitToEnvQuery)
397
423
  .reply(200, mockRepoSetData);
398
424
 
399
425
  const { getByText } = renderWithRedux(<RepositorySetsTab />, renderOptions());
@@ -401,6 +427,8 @@ test('Can display osRestricted as a label', async (done) => {
401
427
  await patientlyWaitFor(() => expect(getByText(secondRepoSet.contentUrl)).toBeInTheDocument());
402
428
  expect(secondRepoSet.osRestricted).not.toBeNull();
403
429
  expect(getByText(secondRepoSet.osRestricted)).toBeInTheDocument();
430
+ expect(secondRepoSet.archRestricted).not.toBeNull();
431
+ expect(getByText(secondRepoSet.archRestricted)).toBeInTheDocument();
404
432
  assertNockRequest(autocompleteScope);
405
433
  assertNockRequest(scope, done); // Pass jest callback to confirm test is done
406
434
  });
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { renderWithRedux, waitFor, patientlyWaitFor, fireEvent, act } from 'react-testing-lib-wrapper';
3
- import nock, { nockInstance, assertNockRequest, mockForemanAutocomplete, mockSetting } from '../../../../../test-utils/nockWrapper';
3
+ import { nockInstance, assertNockRequest, mockForemanAutocomplete, mockSetting } from '../../../../../test-utils/nockWrapper';
4
4
  import { foremanApi } from '../../../../../services/api';
5
5
  import { REX_FEATURES } from '../RemoteExecutionConstants';
6
6
  import { HOST_TRACES_KEY, TRACES_SEARCH_QUERY } from '../TracesTab/HostTracesConstants';
@@ -74,7 +74,6 @@ describe('With tracer installed', () => {
74
74
  assertNockRequest(searchDelayScope);
75
75
  assertNockRequest(autoSearchScope);
76
76
  assertNockRequest(bookmarkScope);
77
- nock.cleanAll();
78
77
  });
79
78
 
80
79
  test('Can call API for traces and show on screen on page load', async (done) => {
@@ -345,10 +344,6 @@ describe('With tracer installed', () => {
345
344
  [firstTrace] = results;
346
345
  });
347
346
 
348
- afterEach(() => {
349
- nock.cleanAll();
350
- });
351
-
352
347
  test('Does not allow selection of session type traces', async (done) => {
353
348
  const autocompleteScope = mockForemanAutocomplete(nockInstance, autocompleteUrl);
354
349
 
@@ -374,10 +369,6 @@ describe('With tracer installed', () => {
374
369
  });
375
370
 
376
371
  describe('Without tracer installed', () => {
377
- afterEach(() => {
378
- nock.cleanAll();
379
- });
380
-
381
372
  test('Shows Enable Tracer empty state', async () => {
382
373
  const { queryByText } = renderWithRedux(<TracesTab />, renderOptions(false));
383
374
 
@@ -35,7 +35,7 @@ export const userPermissionsFromHostDetails = ({ hostDetails }) => {
35
35
 
36
36
  // requiredPermissions is an array
37
37
  // userPermissions is an object, e.g. { view_hosts: true }
38
- export const hasRequiredPermissions = (requiredPermissions = [], userPermissions) => {
38
+ export const hasRequiredPermissions = (requiredPermissions = [], userPermissions = {}) => {
39
39
  const permittedActions = Object.keys(userPermissions).filter(key => userPermissions[key]);
40
40
  return requiredPermissions.every(permission => permittedActions.includes(permission));
41
41
  };
@@ -7,32 +7,20 @@ import LifecycleEnvironment from './fields/LifecycleEnvironment';
7
7
  import IgnoreSubmanErrors from './fields/IgnoreSubmanErrors';
8
8
  import Force from './fields/Force';
9
9
 
10
- const RegistrationCommands = ({
10
+ export const RegistrationCommands = ({
11
11
  organizationId,
12
12
  hostGroupId,
13
13
  pluginValues,
14
14
  pluginData,
15
15
  onChange,
16
- handleInvalidField,
17
16
  isLoading,
18
17
  }) => {
19
18
  useEffect(() => {
20
- onChange({ activationKeys: [], lifecycleEnvironmentId: '' });
19
+ onChange({ lifecycleEnvironmentId: '' });
21
20
  }, [onChange, organizationId, hostGroupId]);
22
21
 
23
22
  return (
24
23
  <>
25
- <ActivationKeys
26
- activationKeys={pluginData?.activationKeys}
27
- organizationId={organizationId}
28
- selectedKeys={(pluginValues?.activationKeys || [])}
29
- hostGroupActivationKeys={pluginData?.hostGroupActivationKeys}
30
- hostGroupId={hostGroupId}
31
- pluginValues={pluginValues}
32
- onChange={onChange}
33
- handleInvalidField={handleInvalidField}
34
- isLoading={isLoading}
35
- />
36
24
  <LifecycleEnvironment
37
25
  pluginValues={pluginValues}
38
26
  lifecycleEnvironments={pluginData?.lifecycleEnvironments}
@@ -63,7 +51,6 @@ RegistrationCommands.propTypes = {
63
51
  pluginValues: PropTypes.object, // eslint-disable-line react/forbid-prop-types
64
52
  pluginData: PropTypes.object, // eslint-disable-line react/forbid-prop-types
65
53
  onChange: PropTypes.func,
66
- handleInvalidField: PropTypes.func,
67
54
  isLoading: PropTypes.bool,
68
55
  };
69
56
 
@@ -74,7 +61,52 @@ RegistrationCommands.defaultProps = {
74
61
  pluginData: {},
75
62
  isLoading: false,
76
63
  onChange: noop,
77
- handleInvalidField: noop,
78
64
  };
79
65
 
80
- export default RegistrationCommands;
66
+ export const RegistrationActivationKeys = ({
67
+ organizationId,
68
+ hostGroupId,
69
+ pluginValues,
70
+ pluginData,
71
+ onChange,
72
+ handleInvalidField,
73
+ isLoading,
74
+ }) => {
75
+ useEffect(() => {
76
+ onChange({ activationKeys: [] });
77
+ }, [onChange, organizationId, hostGroupId]);
78
+
79
+ return (
80
+ <ActivationKeys
81
+ activationKeys={pluginData?.activationKeys}
82
+ organizationId={organizationId}
83
+ selectedKeys={(pluginValues?.activationKeys || [])}
84
+ hostGroupActivationKeys={pluginData?.hostGroupActivationKeys}
85
+ hostGroupId={hostGroupId}
86
+ pluginValues={pluginValues}
87
+ onChange={onChange}
88
+ handleInvalidField={handleInvalidField}
89
+ isLoading={isLoading}
90
+ />
91
+ );
92
+ };
93
+
94
+ RegistrationActivationKeys.propTypes = {
95
+ organizationId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
96
+ hostGroupId: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
97
+ pluginValues: PropTypes.object, // eslint-disable-line react/forbid-prop-types
98
+ pluginData: PropTypes.object, // eslint-disable-line react/forbid-prop-types
99
+ onChange: PropTypes.func,
100
+ handleInvalidField: PropTypes.func,
101
+ isLoading: PropTypes.bool,
102
+ };
103
+
104
+ RegistrationActivationKeys.defaultProps = {
105
+ organizationId: undefined,
106
+ hostGroupId: undefined,
107
+ pluginValues: {},
108
+ pluginData: {},
109
+ isLoading: false,
110
+ onChange: noop,
111
+ handleInvalidField: noop,
112
+ };