katello 4.5.1 → 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 (440) 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_uploads_controller.rb +2 -0
  6. data/app/controllers/katello/api/v2/content_view_filter_rules_controller.rb +1 -1
  7. data/app/controllers/katello/api/v2/content_view_filters_controller.rb +1 -1
  8. data/app/controllers/katello/api/v2/debs_controller.rb +42 -10
  9. data/app/controllers/katello/api/v2/host_collections_controller.rb +5 -1
  10. data/app/controllers/katello/api/v2/host_errata_controller.rb +1 -0
  11. data/app/controllers/katello/api/v2/host_module_streams_controller.rb +9 -1
  12. data/app/controllers/katello/api/v2/host_subscriptions_controller.rb +8 -1
  13. data/app/controllers/katello/api/v2/organizations_controller.rb +3 -1
  14. data/app/controllers/katello/api/v2/simple_content_access_controller.rb +8 -0
  15. data/app/controllers/katello/concerns/api/v2/repository_content_controller.rb +34 -11
  16. data/app/controllers/katello/concerns/organizations_controller_extensions.rb +7 -16
  17. data/app/lib/actions/katello/alternate_content_source/alternate_content_source_common.rb +16 -0
  18. data/app/lib/actions/katello/alternate_content_source/create.rb +11 -5
  19. data/app/lib/actions/katello/alternate_content_source/destroy.rb +3 -4
  20. data/app/lib/actions/katello/alternate_content_source/refresh.rb +3 -5
  21. data/app/lib/actions/katello/alternate_content_source/update.rb +57 -13
  22. data/app/lib/actions/katello/applicability/hosts/bulk_generate.rb +2 -2
  23. data/app/lib/actions/katello/organization/manifest_refresh.rb +8 -4
  24. data/app/lib/actions/katello/organization/simple_content_access/toggle.rb +1 -9
  25. data/app/lib/actions/katello/repository/create.rb +9 -0
  26. data/app/lib/actions/katello/repository/destroy.rb +21 -0
  27. data/app/lib/actions/katello/repository/errata_mail.rb +3 -3
  28. data/app/lib/actions/katello/repository/refresh_repository.rb +3 -0
  29. data/app/lib/actions/katello/repository/update.rb +33 -0
  30. data/app/lib/actions/katello/repository/update_redhat_repository.rb +1 -1
  31. data/app/lib/actions/pulp3/alternate_content_source/create.rb +5 -4
  32. data/app/lib/actions/pulp3/alternate_content_source/create_remote.rb +5 -4
  33. data/app/lib/actions/pulp3/alternate_content_source/delete.rb +4 -4
  34. data/app/lib/actions/pulp3/alternate_content_source/delete_remote.rb +4 -4
  35. data/app/lib/actions/pulp3/alternate_content_source/refresh.rb +4 -4
  36. data/app/lib/actions/pulp3/alternate_content_source/update.rb +4 -4
  37. data/app/lib/actions/pulp3/alternate_content_source/update_remote.rb +5 -5
  38. data/app/lib/actions/pulp3/capsule_content/reclaim_space.rb +1 -0
  39. data/app/lib/actions/pulp3/orchestration/alternate_content_source/create.rb +3 -3
  40. data/app/lib/actions/pulp3/orchestration/alternate_content_source/delete.rb +6 -7
  41. data/app/lib/actions/pulp3/orchestration/alternate_content_source/refresh.rb +2 -2
  42. data/app/lib/actions/pulp3/orchestration/alternate_content_source/refresh_remote.rb +18 -0
  43. data/app/lib/actions/pulp3/orchestration/alternate_content_source/update.rb +3 -3
  44. data/app/lib/actions/pulp3/orchestration/repository/generate_metadata.rb +1 -1
  45. data/app/lib/katello/concerns/base_template_scope_extensions.rb +1 -1
  46. data/app/lib/katello/errors.rb +1 -1
  47. data/app/lib/katello/resources/candlepin/owner.rb +9 -2
  48. data/app/lib/katello/validators/alternate_content_source_products_validator.rb +17 -0
  49. data/app/models/katello/alternate_content_source.rb +39 -8
  50. data/app/models/katello/alternate_content_source_product.rb +13 -0
  51. data/app/models/katello/concerns/host_managed_extensions.rb +12 -2
  52. data/app/models/katello/concerns/pulp_database_unit.rb +2 -2
  53. data/app/models/katello/concerns/smart_proxy_extensions.rb +5 -6
  54. data/app/models/katello/content_view.rb +4 -0
  55. data/app/models/katello/content_view_deb_filter.rb +51 -0
  56. data/app/models/katello/content_view_deb_filter_rule.rb +24 -0
  57. data/app/models/katello/content_view_filter.rb +10 -3
  58. data/app/models/katello/glue/candlepin/owner.rb +0 -1
  59. data/app/models/katello/installed_package.rb +1 -0
  60. data/app/models/katello/product.rb +3 -0
  61. data/app/models/katello/repository.rb +2 -0
  62. data/app/models/katello/smart_proxy_alternate_content_source.rb +6 -0
  63. data/app/services/cert/certs.rb +8 -16
  64. data/app/services/katello/content_unit_indexer.rb +2 -1
  65. data/app/services/katello/organization_creator.rb +4 -4
  66. data/app/services/katello/pulp/server.rb +2 -2
  67. data/app/services/katello/pulp3/alternate_content_source.rb +22 -4
  68. data/app/services/katello/pulp3/api/apt.rb +12 -0
  69. data/app/services/katello/pulp3/erratum.rb +1 -4
  70. data/app/services/katello/pulp3/repository/apt.rb +186 -2
  71. data/app/services/katello/pulp3/repository.rb +4 -3
  72. data/app/services/katello/pulp3/service_common.rb +1 -1
  73. data/app/services/katello/pulp3/smart_proxy_mirror_repository.rb +1 -1
  74. data/app/views/foreman/smart_proxies/show.html.erb +3 -3
  75. data/app/views/katello/api/v2/alternate_content_sources/base.json.rabl +18 -3
  76. data/app/views/katello/api/v2/alternate_content_sources/show.json.rabl +20 -0
  77. data/app/views/katello/api/v2/ansible_collections/compare.json.rabl +10 -0
  78. data/app/views/katello/api/v2/content_view_filters/base.json.rabl +5 -0
  79. data/app/views/katello/api/v2/module_streams/compare.json.rabl +10 -0
  80. data/app/views/katello/api/v2/repository_sets/show.json.rabl +4 -0
  81. data/app/views/katello/layouts/foreman_with_bastion.html.erb +1 -1
  82. data/app/views/katello/layouts/react.html.erb +1 -1
  83. data/app/views/overrides/organizations/_edit_override.html.erb +5 -8
  84. data/app/views/overrides/organizations/_index_row_override.html.erb +1 -1
  85. data/app/views/overrides/organizations/_step_1_override.html.erb +5 -0
  86. data/ca/redhat-uep.pem +18 -23
  87. data/config/katello.yaml.example +0 -2
  88. data/config/routes/api/v2.rb +2 -0
  89. data/config/routes/overrides.rb +1 -0
  90. data/db/migrate/20201116161820_create_content_view_deb_filter_rules.rb +17 -0
  91. data/db/migrate/20220524132259_remove_last_refreshed_from_katello_alternate_content_sources.rb +5 -0
  92. data/db/migrate/20220601163911_add_vendor_to_katello_installed_packages.rb +5 -0
  93. data/db/migrate/20220610165621_add_repositories_and_products_to_acs.rb +23 -0
  94. data/db/seeds.d/102-organizations.rb +1 -1
  95. data/engines/bastion/app/views/bastion/layouts/application.html.erb +1 -1
  96. data/engines/bastion/app/views/bastion/layouts/application_ie.html.erb +1 -1
  97. data/engines/bastion/app/views/bastion/layouts/assets.html.erb +1 -1
  98. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/environment-content.controller.js +2 -0
  99. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/environment.controller.js +2 -0
  100. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/views/environment-content-views.html +1 -1
  101. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/environments.controller.js +1 -0
  102. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/views/environments.html +3 -3
  103. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +4 -5
  104. data/engines/bastion_katello/lib/bastion_katello/engine.rb +0 -1
  105. data/lib/katello/engine.rb +1 -2
  106. data/lib/katello/permission_creator.rb +2 -2
  107. data/lib/katello/permissions/host_permissions.rb +1 -0
  108. data/lib/katello/plugin.rb +6 -12
  109. data/lib/katello/version.rb +1 -1
  110. data/locale/action_names.rb +49 -46
  111. data/locale/bn/katello.po +361 -53
  112. data/{webpack/scenes/AnsibleCollections/AnsibleCollectionsTables.scss → locale/bn/katello.po.time_stamp} +0 -0
  113. data/locale/cs/katello.po +361 -53
  114. data/locale/cs/katello.po.time_stamp +0 -0
  115. data/locale/de/katello.po +366 -58
  116. data/locale/de/katello.po.time_stamp +0 -0
  117. data/locale/en/katello.po +361 -53
  118. data/locale/en/katello.po.time_stamp +0 -0
  119. data/locale/es/katello.po +364 -56
  120. data/locale/es/katello.po.time_stamp +0 -0
  121. data/locale/fr/katello.po +376 -68
  122. data/locale/fr/katello.po.time_stamp +0 -0
  123. data/locale/gu/katello.po +361 -53
  124. data/locale/gu/katello.po.time_stamp +0 -0
  125. data/locale/hi/katello.po +361 -53
  126. data/locale/hi/katello.po.time_stamp +0 -0
  127. data/locale/it/katello.po +361 -53
  128. data/locale/it/katello.po.time_stamp +0 -0
  129. data/locale/ja/katello.po +374 -66
  130. data/locale/ja/katello.po.time_stamp +0 -0
  131. data/locale/katello.pot +1626 -1079
  132. data/locale/kn/katello.po +361 -53
  133. data/locale/kn/katello.po.time_stamp +0 -0
  134. data/locale/ko/katello.po +361 -53
  135. data/locale/ko/katello.po.time_stamp +0 -0
  136. data/locale/mr/katello.po +361 -53
  137. data/locale/mr/katello.po.time_stamp +0 -0
  138. data/locale/or/katello.po +361 -53
  139. data/locale/or/katello.po.time_stamp +0 -0
  140. data/locale/pa/katello.po +361 -53
  141. data/locale/pa/katello.po.time_stamp +0 -0
  142. data/locale/pt/katello.po +361 -53
  143. data/locale/pt/katello.po.time_stamp +0 -0
  144. data/locale/pt_BR/katello.po +364 -56
  145. data/locale/pt_BR/katello.po.time_stamp +0 -0
  146. data/locale/ru/katello.po +361 -53
  147. data/locale/ru/katello.po.time_stamp +0 -0
  148. data/locale/ta/katello.po +361 -53
  149. data/locale/ta/katello.po.time_stamp +0 -0
  150. data/locale/te/katello.po +361 -53
  151. data/locale/te/katello.po.time_stamp +0 -0
  152. data/locale/zh_CN/katello.po +374 -66
  153. data/locale/zh_CN/katello.po.time_stamp +0 -0
  154. data/locale/zh_TW/katello.po +361 -53
  155. data/locale/zh_TW/katello.po.time_stamp +0 -0
  156. data/package.json +0 -3
  157. data/webpack/components/EditableTextInput/EditableTextInput.js +3 -16
  158. data/webpack/components/EditableTextInput/PencilEditButton.js +33 -0
  159. data/webpack/components/Errata/index.js +18 -3
  160. data/webpack/components/Loading.js +1 -1
  161. data/webpack/components/RoutedTabs/index.js +1 -17
  162. data/webpack/components/Search/Search.js +0 -1
  163. data/webpack/components/Search/__tests__/search.test.js +1 -2
  164. data/webpack/components/SelectAllCheckbox/index.js +7 -4
  165. data/webpack/components/SelectableDropdown/SelectableDropdown.js +1 -0
  166. data/webpack/components/Table/EmptyStateMessage.js +77 -2
  167. data/webpack/components/Table/MainTable.js +46 -4
  168. data/webpack/components/Table/TableHooks.js +9 -6
  169. data/webpack/components/Table/TableWrapper.js +14 -8
  170. data/webpack/components/TypeAhead/TypeAhead.js +26 -11
  171. data/webpack/components/TypeAhead/pf3Search/TypeAheadItems.js +1 -1
  172. data/webpack/components/TypeAhead/pf4Search/TypeAheadInput.js +1 -0
  173. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/ChangeHostCVModal.js +2 -1
  174. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsModal.js +9 -4
  175. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeActions.js +37 -0
  176. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeCard.js +173 -0
  177. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeCard.scss +6 -0
  178. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeConstants.js +6 -0
  179. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeEditModal.js +301 -0
  180. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeSelectors.js +25 -0
  181. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/__tests__/SystemPurposeCard.test.js +108 -0
  182. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/__tests__/SystemPurposeEditModal.test.js +161 -0
  183. data/webpack/components/extensions/HostDetails/Cards/__tests__/errataOverviewCard.test.js +12 -12
  184. data/webpack/components/extensions/HostDetails/DetailsTabCards/HwPropertiesCard.js +100 -0
  185. data/webpack/components/extensions/HostDetails/DetailsTabCards/SystemPropertiesCardExtensions.js +26 -4
  186. data/webpack/components/extensions/HostDetails/HostDetailsConstants.js +3 -1
  187. data/webpack/components/extensions/HostDetails/HostDetailsReducer.js +14 -0
  188. data/webpack/components/extensions/HostDetails/HostDetailsSelectors.js +8 -2
  189. data/webpack/components/extensions/HostDetails/Tabs/ErrataTab/ErrataTab.js +8 -12
  190. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsTab.js +23 -2
  191. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackagesTab.js +5 -0
  192. data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsTab.js +57 -7
  193. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/TracesTab.js +2 -0
  194. data/webpack/components/extensions/HostDetails/Tabs/__tests__/repositorySets.fixtures.json +3 -0
  195. data/webpack/components/extensions/HostDetails/Tabs/__tests__/repositorySetsTab.test.js +4 -1
  196. data/webpack/components/extensions/HostDetails/Tabs/__tests__/tracesTab.test.js +1 -10
  197. data/webpack/components/extensions/HostDetails/hostDetailsHelpers.js +1 -1
  198. data/webpack/components/extensions/RegistrationCommands/index.js +49 -17
  199. data/webpack/containers/Application/config.js +5 -10
  200. data/webpack/global_index.js +19 -7
  201. data/webpack/global_test_setup.js +14 -2
  202. data/webpack/ouia_id_check.js +95 -0
  203. data/webpack/redux/actions/RedHatRepositories/helpers.js +2 -0
  204. data/webpack/redux/reducers/index.js +2 -4
  205. data/webpack/scenes/AlternateContentSources/ACSActions.js +36 -3
  206. data/webpack/scenes/AlternateContentSources/ACSConstants.js +3 -0
  207. data/webpack/scenes/AlternateContentSources/ACSSelectors.js +15 -6
  208. data/webpack/scenes/AlternateContentSources/Create/ACSCreateWizard.js +73 -42
  209. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSCreateFinish.js +26 -10
  210. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSProducts.js +44 -0
  211. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSReview.js +59 -45
  212. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSSmartProxies.js +2 -1
  213. data/webpack/scenes/AlternateContentSources/Create/Steps/AcsUrlPaths.js +0 -1
  214. data/webpack/scenes/AlternateContentSources/Create/Steps/SelectSource.js +35 -19
  215. data/webpack/scenes/AlternateContentSources/Create/__tests__/acsCreate.test.js +120 -13
  216. data/webpack/scenes/AlternateContentSources/Create/__tests__/products.fixtures.json +92 -0
  217. data/webpack/scenes/AlternateContentSources/Details/ACSExpandableDetails.js +459 -0
  218. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditCredentials.js +354 -0
  219. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditDetails.js +104 -0
  220. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditProducts.js +120 -0
  221. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditSmartProxies.js +118 -0
  222. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditURLPaths.js +118 -0
  223. data/webpack/scenes/AlternateContentSources/Details/__tests__/ACSEdits.test.js +242 -0
  224. data/webpack/scenes/AlternateContentSources/Details/__tests__/ACSExpandableDetails.test.js +106 -0
  225. data/webpack/scenes/AlternateContentSources/Details/__tests__/acsDetails.fixtures.json +49 -0
  226. data/webpack/scenes/AlternateContentSources/Details/__tests__/acsProducts.fixtures.json +95 -0
  227. data/webpack/scenes/AlternateContentSources/Details/__tests__/simplifiedAcsDetails.fixtures.json +39 -0
  228. data/webpack/scenes/AlternateContentSources/MainTable/ACSTable.js +215 -87
  229. data/webpack/scenes/AlternateContentSources/MainTable/ACSTable.scss +3 -0
  230. data/webpack/scenes/AlternateContentSources/MainTable/__tests__/acsTable.test.js +1 -2
  231. data/webpack/scenes/Content/__tests__/contentTable.test.js +1 -2
  232. data/webpack/scenes/ContentViews/ContentViewsConstants.js +15 -4
  233. data/webpack/scenes/ContentViews/Delete/__tests__/contentViewDelete.test.js +1 -2
  234. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ContentViewComponents.js +2 -0
  235. data/webpack/scenes/ContentViews/Details/ComponentContentViews/__tests__/contentViewComponents.test.js +1 -2
  236. data/webpack/scenes/ContentViews/Details/ContentViewDetailActions.js +113 -0
  237. data/webpack/scenes/ContentViews/Details/ContentViewDetailSelectors.js +89 -0
  238. data/webpack/scenes/ContentViews/Details/Filters/Add/CVFilterAddModal.js +32 -9
  239. data/webpack/scenes/ContentViews/Details/Filters/Add/__tests__/cvFilterAdd.test.js +13 -3
  240. data/webpack/scenes/ContentViews/Details/Filters/CVContainerImageFilterContent.js +39 -27
  241. data/webpack/scenes/ContentViews/Details/Filters/CVDebFilterContent.js +236 -0
  242. data/webpack/scenes/ContentViews/Details/Filters/CVErrataIDFilterContent.js +1 -0
  243. data/webpack/scenes/ContentViews/Details/Filters/CVFilterDetailType.js +10 -0
  244. data/webpack/scenes/ContentViews/Details/Filters/CVModuleStreamFilterContent.js +3 -0
  245. data/webpack/scenes/ContentViews/Details/Filters/CVPackageGroupFilterContent.js +3 -1
  246. data/webpack/scenes/ContentViews/Details/Filters/CVRpmFilterContent.js +17 -4
  247. data/webpack/scenes/ContentViews/Details/Filters/ContentType.js +1 -0
  248. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilters.js +34 -22
  249. data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/CVDebMatchContentModal.js +97 -0
  250. data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/__tests__/CVRpmMatchContentModal.test.js +1 -2
  251. data/webpack/scenes/ContentViews/Details/Filters/Rules/DebPackage/AddEditDebPackageRuleModal.js +128 -0
  252. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVContainerImageFilterContent.test.js +56 -3
  253. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVRpmFilterContent.test.js +62 -8
  254. data/webpack/scenes/ContentViews/Details/Filters/__tests__/ContentViewPackageGroupFilter.test.js +1 -5
  255. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilterDetails.test.js +1 -2
  256. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.test.js +32 -2
  257. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvErrataIDFilter.test.js +1 -2
  258. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvModuleStreamFilter.test.js +1 -2
  259. data/webpack/scenes/ContentViews/Details/Filters/__tests__/emptyCVContainerImageFilterContent.fixtures.json +13 -0
  260. data/webpack/scenes/ContentViews/Details/Filters/__tests__/emptyCVPackageFilterRules.fixtures.json +13 -0
  261. data/webpack/scenes/ContentViews/Details/Filters/__tests__/emptyContentViewFilters.fixtures.json +13 -0
  262. data/webpack/scenes/ContentViews/Details/Histories/__tests__/contentViewHistory.test.js +1 -2
  263. data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +5 -1
  264. data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewAddRemove.test.js +1 -2
  265. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/__tests__/BulkDeleteModal.test.js +3 -0
  266. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompare.js +143 -0
  267. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompare.scss +51 -0
  268. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompareConfig.js +314 -0
  269. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompareHeader.js +186 -0
  270. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompareTable.js +74 -0
  271. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/AnsibleCollectionsCompareAllContentData.fixtures.json +63 -0
  272. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/CVVersionCompare.test.js +657 -0
  273. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/CVVersionEmptyContentCompareData.fixtures.json +14 -0
  274. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/ContainerTagsCompareAllContentData.fixtures.json +95 -0
  275. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/DebPackagesCompareAllContentData.fixtures.json +87 -0
  276. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/ErrataCompareAllContentData.fixtures.json +319 -0
  277. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/ErrataCompareThreeContentTypesData.fixtures.json +131 -0
  278. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/FilesCompareAllContentData.fixtures.json +51 -0
  279. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/FilesCompareThreeContentTypesData.fixtures.json +48 -0
  280. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/ModuleStreamsCompareAllContentData.fixtures.json +239 -0
  281. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/PackageGroupsCompareAllContentData.fixtures.json +51 -0
  282. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/PythonPackagesCompareAllContentData.fixtures.json +315 -0
  283. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/RPMPackagesCompareAllContentData.fixtures.json +470 -0
  284. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/RPMPackagesCompareThreeContentTypesData.fixtures.json +475 -0
  285. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/contentViewDetails.fixtures.json +160 -0
  286. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/contentViewVersionOneDetials.fixtures.json +161 -0
  287. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/contentViewVersionThreeDetails.fixtures.json +154 -0
  288. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/contentViewVersionTwoDetails.fixtures.json +211 -0
  289. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/contentViewVersions.fixtures.json +1013 -0
  290. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/emptyStateCVVersionOneDetails.fixtures.json +145 -0
  291. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/emptyStateCVVersionTwoDetails.fixtures.json +145 -0
  292. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersions.js +102 -36
  293. data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvVersionRemove.test.js +1 -2
  294. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailConfig.js +4 -2
  295. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetails.test.js +1 -2
  296. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetailsEmpty.test.js +1 -2
  297. data/webpack/scenes/ContentViews/Details/Versions/__tests__/contentViewVersions.test.js +113 -40
  298. data/webpack/scenes/ContentViews/Table/ContentViewsTable.js +96 -81
  299. data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +1 -2
  300. data/webpack/scenes/ContentViews/__tests__/mockDetails.fixtures.json +7 -2
  301. data/webpack/scenes/SmartProxy/SmartProxyContentActions.js +1 -1
  302. data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.js +0 -30
  303. data/webpack/test-utils/nockWrapper.js +7 -0
  304. metadata +100 -145
  305. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/content-views.controller.js +0 -34
  306. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/content-views.routes.js +0 -751
  307. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-deletion.controller.js +0 -42
  308. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-activation-keys.controller.js +0 -81
  309. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-confirm.controller.js +0 -65
  310. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-content-hosts.controller.js +0 -82
  311. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-environments.controller.js +0 -76
  312. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion.controller.js +0 -160
  313. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/views/content-view-deletion.html +0 -58
  314. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/views/version-deletion-activation-keys.html +0 -94
  315. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/views/version-deletion-confirm.html +0 -76
  316. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/views/version-deletion-content-hosts.html +0 -88
  317. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/views/version-deletion-environments.html +0 -73
  318. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/content-view-component.factory.js +0 -32
  319. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/content-view-composite-available-content-views.controller.js +0 -75
  320. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/content-view-composite-content-views-list.controller.js +0 -68
  321. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/views/content-view-composite-available-content-views.html +0 -81
  322. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/views/content-view-composite-content-views-list.html +0 -81
  323. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/views/content-view-composite.html +0 -24
  324. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-available-deb-repositories.controller.js +0 -50
  325. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-available-docker-repositories.controller.js +0 -42
  326. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-available-file-repositories.controller.js +0 -50
  327. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-available-ostree-repositories.controller.js +0 -42
  328. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-available-repositories.controller.js +0 -45
  329. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-deb-repositories-list.controller.js +0 -48
  330. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-details.controller.js +0 -100
  331. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-docker-repositories-list.controller.js +0 -49
  332. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-file-repositories-list.controller.js +0 -48
  333. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-ostree-repositories-list.controller.js +0 -49
  334. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-promotion.controller.js +0 -129
  335. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-publish.controller.js +0 -46
  336. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-repositories-list.controller.js +0 -42
  337. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-repositories.service.js +0 -91
  338. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-versions.controller.js +0 -240
  339. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/available-errata-filter.controller.js +0 -115
  340. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/available-module-stream-filter.controller.js +0 -68
  341. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/available-package-group-filter.controller.js +0 -66
  342. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/date-type-errata-filter.controller.js +0 -77
  343. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/docker-tag-filter.controller.js +0 -137
  344. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/edit-filter.controller.js +0 -36
  345. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/errata-filter-list.controller.js +0 -78
  346. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/errata-filter.controller.js +0 -74
  347. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-content-type.filter.js +0 -21
  348. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-details.controller.js +0 -34
  349. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-helper.service.js +0 -30
  350. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-repositories.controller.js +0 -86
  351. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-rule-matching-package-modal.controller.js +0 -37
  352. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-type.filter.js +0 -21
  353. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter.factory.js +0 -66
  354. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filters.controller.js +0 -85
  355. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/module-stream-list-filter.controller.js +0 -73
  356. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/new-filter.controller.js +0 -100
  357. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/package-filter.controller.js +0 -179
  358. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/package-group-list-filter.controller.js +0 -75
  359. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/rule.factory.js +0 -21
  360. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/date-type-errata-filter.html +0 -9
  361. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/date-type-errata.html +0 -75
  362. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/docker-filter.html +0 -28
  363. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/docker-tag-filter-details.html +0 -65
  364. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/edit-filter.html +0 -19
  365. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/errata-filter-details.html +0 -63
  366. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/errata-filter.html +0 -50
  367. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/filter-details.html +0 -9
  368. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/filter-repositories.html +0 -121
  369. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/filter-rule-matching-package-modal.html +0 -43
  370. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/filters.html +0 -85
  371. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/module-stream-filter-details.html +0 -58
  372. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/module-stream-filter.html +0 -43
  373. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/new-filter.html +0 -62
  374. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/package-filter-details.html +0 -182
  375. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/package-filter.html +0 -28
  376. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/package-group-filter-details.html +0 -42
  377. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/package-group-filter.html +0 -43
  378. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/partials/filter-repositories-count.html +0 -2
  379. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/histories/content-view-history.controller.js +0 -47
  380. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/histories/content-view-history.factory.js +0 -22
  381. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/histories/views/content-view-history.html +0 -36
  382. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-copy.html +0 -20
  383. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-deb-repositories.html +0 -87
  384. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-details-tasks.html +0 -4
  385. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-details.html +0 -144
  386. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-docker-repositories.html +0 -114
  387. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-file-repositories.html +0 -87
  388. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-info.html +0 -63
  389. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-ostree-repositories.html +0 -87
  390. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-promotion.html +0 -59
  391. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-publish.html +0 -58
  392. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-repositories.html +0 -116
  393. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-versions.html +0 -126
  394. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/new/content-view-new.controller.js +0 -78
  395. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/new/views/content-view-new.html +0 -127
  396. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/content-view-version-content.controller.js +0 -138
  397. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/content-view-version.controller.js +0 -59
  398. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-apt.html +0 -25
  399. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-components.html +0 -19
  400. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-deb.html +0 -19
  401. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-details.html +0 -15
  402. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-docker.html +0 -23
  403. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-errata.html +0 -48
  404. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-file.html +0 -21
  405. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-module-streams.html +0 -8
  406. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-package-groups.html +0 -21
  407. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-packages.html +0 -27
  408. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-yum.html +0 -42
  409. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version.html +0 -83
  410. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/views/content-views.html +0 -74
  411. data/webpack/components/Table/__test__/useBulkSelect.test.js +0 -99
  412. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsActions.js +0 -30
  413. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsConstants.js +0 -3
  414. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsPage.js +0 -80
  415. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsReducer.js +0 -39
  416. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsTableSchema.js +0 -60
  417. data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionDetails.js +0 -94
  418. data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionDetailsActions.js +0 -23
  419. data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionDetailsConstants.js +0 -3
  420. data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionDetailsReducer.js +0 -30
  421. data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionsSchema.js +0 -35
  422. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetailInfo.test.js +0 -16
  423. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetails.fixtures.js +0 -25
  424. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetails.test.js +0 -27
  425. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetailsActions.test.js +0 -41
  426. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetailsReducer.test.js +0 -33
  427. data/webpack/scenes/AnsibleCollections/Details/__tests__/__snapshots__/AnsibleCollectionDetailInfo.test.js.snap +0 -83
  428. data/webpack/scenes/AnsibleCollections/Details/__tests__/__snapshots__/AnsibleCollectionDetails.test.js.snap +0 -190
  429. data/webpack/scenes/AnsibleCollections/Details/__tests__/__snapshots__/AnsibleCollectionDetailsActions.test.js.snap +0 -58
  430. data/webpack/scenes/AnsibleCollections/Details/__tests__/__snapshots__/AnsibleCollectionDetailsReducer.test.js.snap +0 -50
  431. data/webpack/scenes/AnsibleCollections/Details/index.js +0 -17
  432. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionPage.test.js +0 -23
  433. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollections.fixtures.js +0 -52
  434. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionsActions.test.js +0 -48
  435. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionsReducer.test.js +0 -46
  436. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionsTable.test.js +0 -25
  437. data/webpack/scenes/AnsibleCollections/__tests__/__snapshots__/AnsibleCollectionPage.test.js.snap +0 -73
  438. data/webpack/scenes/AnsibleCollections/__tests__/__snapshots__/AnsibleCollectionsTable.test.js.snap +0 -81
  439. data/webpack/scenes/AnsibleCollections/index.js +0 -17
  440. data/webpack/scenes/Subscriptions/Manifest/__tests__/ManageManifestModal.test.js +0 -123
@@ -0,0 +1,25 @@
1
+ import {
2
+ selectAPIStatus,
3
+ selectAPIError,
4
+ selectAPIResponse,
5
+ } from 'foremanReact/redux/API/APISelectors';
6
+ import { STATUS } from 'foremanReact/constants';
7
+
8
+ export const selectOrganization = (state, orgId) =>
9
+ selectAPIResponse(state, `ORGANIZATION_${orgId}`) ?? {};
10
+
11
+ export const selectOrganizationStatus = (state, orgId) =>
12
+ selectAPIStatus(state, `ORGANIZATION_${orgId}`) ?? STATUS.PENDING;
13
+
14
+ export const selectOrganizationError = (state, orgId) =>
15
+ selectAPIError(state, `ORGANIZATION_${orgId}`);
16
+
17
+ export const selectAvailableReleaseVersions = (state, hostId) =>
18
+ selectAPIResponse(state, `AVAILABLE_RELEASE_VERSIONS_${hostId}`) ?? {};
19
+
20
+ export const selectAvailableReleaseVersionsStatus = (state, hostId) =>
21
+ selectAPIStatus(state, `AVAILABLE_RELEASE_VERSIONS_${hostId}`) ??
22
+ STATUS.PENDING;
23
+
24
+ export const selectAvailableReleaseVersionsError = (state, hostId) =>
25
+ selectAPIError(state, `AVAILABLE_RELEASE_VERSIONS_${hostId}`);
@@ -0,0 +1,108 @@
1
+ import React from 'react';
2
+ import { renderWithRedux, act } from 'react-testing-lib-wrapper';
3
+ import HOST_DETAILS from '../../../HostDetailsConstants';
4
+ import SystemPurposeCard from '../SystemPurposeCard';
5
+ import katelloApi, { foremanApi } from '../../../../../../services/api';
6
+ import { assertNockRequest, nockInstance } from '../../../../../../test-utils/nockWrapper';
7
+
8
+ const organizationDetails = katelloApi.getApiUrl('/organizations/1');
9
+ const availableReleaseVersions = foremanApi.getApiUrl('/hosts/1/subscriptions/available_release_versions');
10
+
11
+ const baseHostDetails = {
12
+ id: 1,
13
+ organization_id: 1,
14
+ permissions: {
15
+ edit_hosts: true,
16
+ },
17
+ subscription_facet_attributes: {
18
+ purpose_addons: ['Addon1', 'Addon2'],
19
+ purpose_role: 'Red Hat Enterprise Linux Server',
20
+ purpose_usage: 'Production',
21
+ service_level: 'Premium',
22
+ release_version: '8',
23
+ },
24
+ };
25
+
26
+ const renderOptions = () => ({
27
+ apiNamespace: HOST_DETAILS,
28
+ initialState: {
29
+ API: {
30
+ HOST_DETAILS: {
31
+ response: {
32
+ id: 1,
33
+ name: 'test-host',
34
+ ...baseHostDetails,
35
+ },
36
+ status: 'RESOLVED',
37
+ },
38
+ },
39
+ },
40
+ });
41
+
42
+ test('shows system purpose details', async (done) => {
43
+ const orgScope = nockInstance
44
+ .get(organizationDetails)
45
+ .reply(200, {
46
+ id: 1,
47
+ });
48
+ const availableReleaseVersionsScope = nockInstance
49
+ .get(availableReleaseVersions)
50
+ .reply(200, []);
51
+
52
+ const { getByText }
53
+ = renderWithRedux(<SystemPurposeCard hostDetails={baseHostDetails} />, renderOptions());
54
+ expect(getByText('Red Hat Enterprise Linux Server')).toBeInTheDocument();
55
+ expect(getByText('Production')).toBeInTheDocument();
56
+ expect(getByText('Premium')).toBeInTheDocument();
57
+ expect(getByText('Addon1')).toBeInTheDocument();
58
+ expect(getByText('Addon2')).toBeInTheDocument();
59
+ expect(getByText('8')).toBeInTheDocument();
60
+
61
+ assertNockRequest(orgScope);
62
+ assertNockRequest(availableReleaseVersionsScope, done);
63
+ });
64
+
65
+
66
+ test('shows edit button for a user with edit_hosts permission', async (done) => {
67
+ const orgScope = nockInstance
68
+ .get(organizationDetails)
69
+ .reply(200, {
70
+ id: 1,
71
+ });
72
+ const availableReleaseVersionsScope = nockInstance
73
+ .get(availableReleaseVersions)
74
+ .reply(200, []);
75
+
76
+ const { queryByText }
77
+ = renderWithRedux(<SystemPurposeCard hostDetails={baseHostDetails} />, renderOptions());
78
+ expect(queryByText('Edit')).toBeInTheDocument();
79
+
80
+ assertNockRequest(orgScope);
81
+ assertNockRequest(availableReleaseVersionsScope, done);
82
+ });
83
+
84
+ test('does not show edit button for a user without edit_hosts permission', (done) => {
85
+ const orgScope = nockInstance
86
+ .get(organizationDetails)
87
+ .reply(200, {
88
+ id: 1,
89
+ });
90
+ const availableReleaseVersionsScope = nockInstance
91
+ .get(availableReleaseVersions)
92
+ .reply(200, []);
93
+
94
+ const limitedUser = {
95
+ ...baseHostDetails,
96
+ permissions: {
97
+ edit_hosts: false,
98
+ },
99
+ };
100
+
101
+ const { queryByText }
102
+ = renderWithRedux(<SystemPurposeCard hostDetails={limitedUser} />);
103
+ expect(queryByText('Edit')).not.toBeInTheDocument();
104
+
105
+ assertNockRequest(orgScope);
106
+ assertNockRequest(availableReleaseVersionsScope, done);
107
+ act(done);
108
+ });
@@ -0,0 +1,161 @@
1
+ import React from 'react';
2
+ import { propsToCamelCase } from 'foremanReact/common/helpers';
3
+ import { renderWithRedux, patientlyWaitFor, fireEvent } from 'react-testing-lib-wrapper';
4
+ import HOST_DETAILS from '../../../HostDetailsConstants';
5
+ import SystemPurposeEditModal from '../SystemPurposeEditModal';
6
+ import { assertNockRequest, nockInstance } from '../../../../../../test-utils/nockWrapper';
7
+ import katelloApi, { foremanApi } from '../../../../../../services/api';
8
+
9
+ const organizationDetails = katelloApi.getApiUrl('/organizations/1');
10
+ const availableReleaseVersions = foremanApi.getApiUrl('/hosts/1/subscriptions/available_release_versions');
11
+ const hostEditUrl = foremanApi.getApiUrl('/hosts/1');
12
+ const hostDetailsGetUrl = '/api/hosts/test-host';
13
+
14
+ const baseHostDetails = {
15
+ id: 1,
16
+ organization_id: 1,
17
+ permissions: {
18
+ edit_hosts: true,
19
+ },
20
+ subscription_facet_attributes: {
21
+ purpose_addons: ['Addon1', 'Addon2'],
22
+ purpose_role: 'Red Hat Enterprise Linux Server',
23
+ purpose_usage: 'Production',
24
+ service_level: 'Premium',
25
+ release_version: '8',
26
+ },
27
+ };
28
+
29
+ const facetAttributes = propsToCamelCase(baseHostDetails.subscription_facet_attributes);
30
+ const baseAttributes = {
31
+ hostName: 'test-host',
32
+ closeModal: jest.fn(),
33
+ isOpen: true,
34
+ orgId: 1,
35
+ hostId: 1,
36
+ };
37
+
38
+ const renderOptions = () => ({
39
+ apiNamespace: HOST_DETAILS,
40
+ initialState: {
41
+ API: {
42
+ HOST_DETAILS: {
43
+ response: {
44
+ id: 1,
45
+ name: 'test-host',
46
+ ...baseHostDetails,
47
+ },
48
+ status: 'RESOLVED',
49
+ },
50
+ },
51
+ },
52
+ });
53
+
54
+ describe('SystemPurposeEditModal', () => {
55
+ test('Shows currently selected attributes as defaults', (done) => {
56
+ const orgScope = nockInstance
57
+ .get(organizationDetails)
58
+ .reply(200, {
59
+ id: 1,
60
+ });
61
+ const availableReleaseVersionsScope = nockInstance
62
+ .get(availableReleaseVersions)
63
+ .reply(200, []);
64
+
65
+ const { getByText }
66
+ = renderWithRedux(<SystemPurposeEditModal
67
+ {...baseAttributes}
68
+ {...facetAttributes}
69
+ />, renderOptions());
70
+
71
+ expect(getByText('Red Hat Enterprise Linux Server')).toBeInTheDocument();
72
+ expect(getByText('Production')).toBeInTheDocument();
73
+ expect(getByText('Premium')).toBeInTheDocument();
74
+ expect(getByText('Addon1')).toBeInTheDocument();
75
+ expect(getByText('Addon2')).toBeInTheDocument();
76
+ expect(getByText('8')).toBeInTheDocument();
77
+
78
+ assertNockRequest(orgScope);
79
+ assertNockRequest(availableReleaseVersionsScope, done);
80
+ });
81
+
82
+ test('Shows blank options as (unset)', () => {
83
+ const orgScope = nockInstance
84
+ .get(organizationDetails)
85
+ .reply(200, {
86
+ id: 1,
87
+ });
88
+ const availableReleaseVersionsScope = nockInstance
89
+ .get(availableReleaseVersions)
90
+ .reply(200, []);
91
+ const { getAllByText }
92
+ = renderWithRedux(<SystemPurposeEditModal
93
+ {...
94
+ {
95
+ ...baseAttributes,
96
+ purposeRole: '',
97
+ }}
98
+ {...facetAttributes}
99
+ />, renderOptions());
100
+
101
+ expect(getAllByText('(unset)')[0]).toBeVisible();
102
+
103
+ assertNockRequest(orgScope);
104
+ assertNockRequest(availableReleaseVersionsScope);
105
+ });
106
+ test('Calls API and changes syspurpose values', async (done) => {
107
+ const orgScope = nockInstance
108
+ .get(organizationDetails)
109
+ .reply(200, {
110
+ id: 1,
111
+ });
112
+ const availableReleaseVersionsScope = nockInstance
113
+ .get(availableReleaseVersions)
114
+ .reply(200, []);
115
+ const hostEditScope = nockInstance
116
+ .put(hostEditUrl, {
117
+ id: 1,
118
+ host: {
119
+ subscription_facet_attributes: {
120
+ autoheal: true,
121
+ // we're going to change role from 'Server' to 'Workstation'
122
+ purpose_role: 'Red Hat Enterprise Linux Workstation',
123
+ purpose_usage: 'Production',
124
+ purpose_addons: ['Addon1', 'Addon2'],
125
+ release_version: '8',
126
+ service_level: 'Premium',
127
+ },
128
+ },
129
+ })
130
+ .reply(200);
131
+ const hostDetailsScope = nockInstance
132
+ .get(hostDetailsGetUrl)
133
+ .reply(200);
134
+
135
+ const { getByLabelText, getByRole }
136
+ = renderWithRedux(<SystemPurposeEditModal
137
+ {...baseAttributes}
138
+ {...facetAttributes}
139
+ />, renderOptions());
140
+
141
+ const saveButton = getByRole('button', { name: 'Save' });
142
+ // Save button should be disabled if no values have been changed
143
+ expect(saveButton).toHaveAttribute('aria-disabled', 'true');
144
+
145
+ const roleDropdown = getByLabelText('Role');
146
+ fireEvent.change(roleDropdown, { target: { value: 'Red Hat Enterprise Linux Workstation' } });
147
+
148
+ // Save button should now be enabled
149
+ expect(saveButton).toHaveAttribute('aria-disabled', 'false');
150
+ fireEvent.click(saveButton);
151
+
152
+ await patientlyWaitFor(() => {
153
+ expect(baseAttributes.closeModal).toHaveBeenCalled();
154
+ });
155
+
156
+ [orgScope, availableReleaseVersionsScope, hostEditScope].forEach((scope) => {
157
+ assertNockRequest(scope);
158
+ });
159
+ assertNockRequest(hostDetailsScope, done);
160
+ });
161
+ });
@@ -1,7 +1,6 @@
1
1
  import React from 'react';
2
- import { render } from 'react-testing-lib-wrapper';
2
+ import { render, renderWithRedux } from 'react-testing-lib-wrapper';
3
3
  import ErrataOverviewCard from '../ErrataOverviewCard';
4
- import nock from '../../../../../test-utils/nockWrapper';
5
4
 
6
5
  const baseHostDetails = {
7
6
  id: 2,
@@ -9,12 +8,17 @@ const baseHostDetails = {
9
8
  uuid: '123',
10
9
  },
11
10
  };
12
-
11
+ const renderOptions = {
12
+ initialState: {
13
+ // This is the API state that your tests depend on for their data
14
+ // You can cross reference the needed useSelectors from your tested components
15
+ // with the data found within the redux chrome add-on to help determine this fixture data.
16
+ katello: {
17
+ hostDetails: {},
18
+ },
19
+ },
20
+ };
13
21
  describe('Without errata', () => {
14
- afterEach(() => {
15
- nock.cleanAll();
16
- });
17
-
18
22
  test('shows zero counts when there are 0 installable errata', () => {
19
23
  const hostDetails = {
20
24
  ...baseHostDetails,
@@ -52,7 +56,7 @@ describe('Without errata', () => {
52
56
  },
53
57
  };
54
58
  /* eslint-disable max-len */
55
- const { queryByLabelText, getByText } = render(<ErrataOverviewCard hostDetails={hostDetails} />);
59
+ const { queryByLabelText, getByText } = renderWithRedux(<ErrataOverviewCard hostDetails={hostDetails} />, renderOptions);
56
60
  /* eslint-enable max-len */
57
61
  expect(queryByLabelText('errataChart')).not.toBeInTheDocument();
58
62
  expect(getByText('All errata up-to-date')).toBeInTheDocument();
@@ -80,10 +84,6 @@ describe('Without errata', () => {
80
84
  });
81
85
 
82
86
  describe('With errata', () => {
83
- afterEach(() => {
84
- nock.cleanAll();
85
- });
86
-
87
87
  test('shows links when there are errata', () => {
88
88
  const hostDetails = {
89
89
  ...baseHostDetails,
@@ -0,0 +1,100 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { propsToCamelCase } from 'foremanReact/common/helpers';
4
+ import { translate as __ } from 'foremanReact/common/I18n';
5
+ import {
6
+ DescriptionList,
7
+ DescriptionListTerm,
8
+ DescriptionListGroup,
9
+ DescriptionListDescription,
10
+ Text,
11
+ TextVariants,
12
+ } from '@patternfly/react-core';
13
+ import CardTemplate from 'foremanReact/components/HostDetails/Templates/CardItem/CardTemplate';
14
+ import { TranslatedPlural } from '../../../Table/components/TranslatedPlural';
15
+
16
+ const HostDisks = ({ totalDisks }) => {
17
+ if (!totalDisks) return null;
18
+ return (
19
+ <>
20
+ <DescriptionListTerm>{__('Storage')}</DescriptionListTerm>
21
+ <Text component={TextVariants.h4}><TranslatedPlural count={totalDisks} singular={__('disk')} id="total-disks" /></Text>
22
+ </>
23
+ );
24
+ };
25
+
26
+ HostDisks.propTypes = {
27
+ totalDisks: PropTypes.number,
28
+ };
29
+
30
+ HostDisks.defaultProps = {
31
+ totalDisks: null,
32
+ };
33
+
34
+ const HwPropertiesCard = ({ isExpandedGlobal, hostDetails }) => {
35
+ const { facts } = hostDetails || {};
36
+ const model = facts?.['virt::host_type'];
37
+ const cpuCount = facts?.['cpu::cpu(s)'];
38
+ const cpuSockets = facts?.['cpu::cpu_socket(s)'];
39
+ const coreSocket = facts?.['cpu::core(s)_per_socket'];
40
+ const reportedFacts = propsToCamelCase(hostDetails?.reported_data || {});
41
+ const totalDisks = reportedFacts?.disksTotal;
42
+ const memory = facts?.['dmi::memory::maximum_capacity'];
43
+
44
+ return (
45
+ <CardTemplate
46
+ header={__('HW properties')}
47
+ expandable
48
+ isExpandedGlobal={isExpandedGlobal}
49
+ >
50
+ <DescriptionList isHorizontal>
51
+ <DescriptionListGroup>
52
+ <DescriptionListTerm>{__('Model')}</DescriptionListTerm>
53
+ <DescriptionListDescription>{model}</DescriptionListDescription>
54
+ </DescriptionListGroup>
55
+ <DescriptionListGroup>
56
+ <DescriptionListTerm>{__('Number of CPU(s)')}</DescriptionListTerm>
57
+ <DescriptionListDescription>{cpuCount}</DescriptionListDescription>
58
+ </DescriptionListGroup>
59
+ <DescriptionListGroup>
60
+ <DescriptionListTerm>{__('Sockets')}</DescriptionListTerm>
61
+ <DescriptionListDescription>{cpuSockets}</DescriptionListDescription>
62
+ </DescriptionListGroup>
63
+ <DescriptionListGroup>
64
+ <DescriptionListTerm>{__('Cores per socket')}</DescriptionListTerm>
65
+ <DescriptionListDescription>{coreSocket}</DescriptionListDescription>
66
+ </DescriptionListGroup>
67
+ <DescriptionListGroup>
68
+ <DescriptionListTerm>{__('RAM')}</DescriptionListTerm>
69
+ <DescriptionListDescription>{memory}</DescriptionListDescription>
70
+ </DescriptionListGroup>
71
+ <DescriptionListGroup>
72
+ <HostDisks totalDisks={totalDisks} />
73
+ </DescriptionListGroup>
74
+ </DescriptionList>
75
+ </CardTemplate>
76
+ );
77
+ };
78
+
79
+ HwPropertiesCard.propTypes = {
80
+ isExpandedGlobal: PropTypes.bool,
81
+ hostDetails: PropTypes.shape({
82
+ facts: PropTypes.shape({
83
+ model: PropTypes.string,
84
+ cpuCount: PropTypes.number,
85
+ cpuSockets: PropTypes.number,
86
+ coreSocket: PropTypes.number,
87
+ memory: PropTypes.string,
88
+ }),
89
+ reported_data: PropTypes.shape({
90
+ totalDisks: PropTypes.number,
91
+ }),
92
+ }),
93
+ };
94
+
95
+ HwPropertiesCard.defaultProps = {
96
+ isExpandedGlobal: false,
97
+ hostDetails: {},
98
+ };
99
+
100
+ export default HwPropertiesCard;
@@ -8,7 +8,7 @@ import {
8
8
  } from '@patternfly/react-core';
9
9
  import { translate as __ } from 'foremanReact/common/I18n';
10
10
 
11
- const SystemPropertiesCardExtensions = ({ hostDetails }) => {
11
+ export const SystemPropertiesCardSubscription = ({ hostDetails }) => {
12
12
  const subscriptionUuid = hostDetails?.subscription_facet_attributes?.uuid;
13
13
  if (!subscriptionUuid) return null;
14
14
  return (
@@ -23,7 +23,7 @@ const SystemPropertiesCardExtensions = ({ hostDetails }) => {
23
23
  );
24
24
  };
25
25
 
26
- SystemPropertiesCardExtensions.propTypes = {
26
+ SystemPropertiesCardSubscription.propTypes = {
27
27
  hostDetails: PropTypes.shape({
28
28
  subscription_facet_attributes: PropTypes.shape({
29
29
  uuid: PropTypes.string,
@@ -31,8 +31,30 @@ SystemPropertiesCardExtensions.propTypes = {
31
31
  }),
32
32
  };
33
33
 
34
- SystemPropertiesCardExtensions.defaultProps = {
34
+ SystemPropertiesCardSubscription.defaultProps = {
35
35
  hostDetails: {},
36
36
  };
37
37
 
38
- export default SystemPropertiesCardExtensions;
38
+ export const SystemPropertiesCardTracer = ({ hostDetails }) => {
39
+ const tracerStatus = hostDetails?.content_facet_attributes?.katello_tracer_installed;
40
+ return (
41
+ <DescriptionListGroup>
42
+ <DescriptionListTerm>{__('Tracer')}</DescriptionListTerm>
43
+ <DescriptionListDescription>
44
+ {tracerStatus ? __('Installed') : __('Not installed')}
45
+ </DescriptionListDescription>
46
+ </DescriptionListGroup>
47
+ );
48
+ };
49
+
50
+ SystemPropertiesCardTracer.propTypes = {
51
+ hostDetails: PropTypes.shape({
52
+ content_facet_attributes: PropTypes.shape({
53
+ katello_tracer_installed: PropTypes.bool,
54
+ }),
55
+ }),
56
+ };
57
+
58
+ SystemPropertiesCardTracer.defaultProps = {
59
+ hostDetails: {},
60
+ };
@@ -1 +1,3 @@
1
- export default 'HOST_DETAILS';
1
+ export const SET_CLEAR_SEARCH = 'SET_CLEAR_SEARCH';
2
+ const HOST_DETAILS = 'HOST_DETAILS';
3
+ export default HOST_DETAILS;
@@ -0,0 +1,14 @@
1
+ import Immutable from 'seamless-immutable';
2
+
3
+ import { SET_CLEAR_SEARCH } from './HostDetailsConstants';
4
+
5
+ const initialState = Immutable({ clearSearch: undefined });
6
+
7
+ export default (state = initialState, action) => {
8
+ switch (action.type) {
9
+ case SET_CLEAR_SEARCH:
10
+ return state.set('clearSearch', action.payload);
11
+ default:
12
+ return state;
13
+ }
14
+ };
@@ -7,10 +7,16 @@ import { STATUS } from 'foremanReact/constants';
7
7
  import HOST_DETAILS_KEY from './HostDetailsConstants';
8
8
 
9
9
  export const selectHostDetails = state =>
10
- selectAPIResponse(state, HOST_DETAILS_KEY) || {};
10
+ selectAPIResponse(state, HOST_DETAILS_KEY) ?? {};
11
11
 
12
12
  export const selectHostDetailsStatus = state =>
13
- selectAPIStatus(state, HOST_DETAILS_KEY) || STATUS.PENDING;
13
+ selectAPIStatus(state, HOST_DETAILS_KEY) ?? STATUS.PENDING;
14
14
 
15
15
  export const selectHostDetailsError = state =>
16
16
  selectAPIError(state, HOST_DETAILS_KEY);
17
+
18
+ export const selectHostDetailsState = state =>
19
+ state.katello.hostDetails;
20
+
21
+ export const selectHostDetailsClearSearch = state =>
22
+ selectHostDetailsState(state).clearSearch;
@@ -120,17 +120,6 @@ export const ErrataTab = () => {
120
120
  initialSortColumnName: 'Errata',
121
121
  });
122
122
 
123
- const filtersQuery = () => {
124
- const query = [];
125
- if (errataTypeSelected !== ERRATA_TYPE) {
126
- query.push(`type=${TYPES_TO_PARAM[errataTypeSelected]}`);
127
- }
128
- if (errataSeveritySelected !== ERRATA_SEVERITY) {
129
- query.push(`severity=${SEVERITIES_TO_PARAM[errataSeveritySelected]}`);
130
- }
131
- return query.join(' and ');
132
- };
133
-
134
123
  const fetchItems = useCallback(
135
124
  (params) => {
136
125
  if (!hostId) return hostIdNotReady;
@@ -166,7 +155,6 @@ export const ErrataTab = () => {
166
155
  results,
167
156
  metadata,
168
157
  idColumn: 'errata_id',
169
- filtersQuery: filtersQuery(),
170
158
  isSelectable: result => result.installable,
171
159
  initialSearchQuery: searchParam || '',
172
160
  });
@@ -243,6 +231,11 @@ export const ErrataTab = () => {
243
231
  }
244
232
  };
245
233
 
234
+ const resetFilters = () => {
235
+ setErrataTypeSelected(ERRATA_TYPE);
236
+ setErrataSeveritySelected(ERRATA_SEVERITY);
237
+ };
238
+
246
239
  const readOnlyBookmarks =
247
240
  cannot(createBookmarks, userPermissionsFromHostDetails({ hostDetails }));
248
241
 
@@ -418,6 +411,7 @@ export const ErrataTab = () => {
418
411
  selectedCount,
419
412
  selectNone,
420
413
  toggleGroup,
414
+ resetFilters,
421
415
  }
422
416
  }
423
417
  happyEmptyContent={allUpToDate}
@@ -435,6 +429,8 @@ export const ErrataTab = () => {
435
429
  variant={TableVariant.compact}
436
430
  {...selectAll}
437
431
  displaySelectAllCheckbox={showActions}
432
+ requestKey={HOST_ERRATA_KEY}
433
+ alwaysShowActionButtons={false}
438
434
  >
439
435
  <Thead>
440
436
  <Tr>
@@ -35,7 +35,7 @@ import SortableColumnHeaders from '../../../../Table/components/SortableColumnHe
35
35
  import SelectableDropdown from '../../../../SelectableDropdown/SelectableDropdown';
36
36
  import {
37
37
  HOST_MODULE_STREAM_STATUSES, INSTALL_STATUS_PARAM_TO_FRIENDLY_NAME, INSTALLED_STATE,
38
- STATUS_PARAM_TO_FRIENDLY_NAME,
38
+ STATUS_PARAM_TO_FRIENDLY_NAME, MODULE_STREAMS_KEY,
39
39
  } from './ModuleStreamsConstants';
40
40
  import { moduleStreamAction } from '../RemoteExecutionActions';
41
41
  import { katelloModuleStreamActionUrl } from '../customizedRexUrlHelpers';
@@ -212,9 +212,15 @@ export const ModuleStreamsTab = () => {
212
212
  const [hostModuleStreamAction, setHostModuleStreamAction] = useState(null);
213
213
 
214
214
  const emptyContentTitle = __('This host does not have any Module streams.');
215
- const emptyContentBody = __('Module streams will appear here when available.');
215
+ const emptyContentBody = __('Module streams will appear here after enabling Red Hat repositories or creating custom products.');
216
216
  const emptySearchTitle = __('Your search returned no matching Module streams.');
217
217
  const emptySearchBody = __('Try changing your search criteria.');
218
+ const showPrimaryAction = true;
219
+ const showSecondaryAction = true;
220
+ const primaryActionTitle = __('Enable Red Hat repositories');
221
+ const secondaryActionTitle = __('Create a custom product');
222
+ const primaryActionLink = '/redhat_repositories';
223
+ const secondaryActionLink = '/products/new';
218
224
  const errorSearchTitle = __('Problem searching module streams');
219
225
  const {
220
226
  status: initialStatus,
@@ -323,6 +329,12 @@ export const ModuleStreamsTab = () => {
323
329
 
324
330
  const activeFilters = [statusSelected, installStatusSelected];
325
331
  const defaultFilters = [MODULE_STREAM_STATUS, MODULE_STREAM_INSTALLATION_STATUS];
332
+
333
+ const resetFilters = () => {
334
+ setStatusSelected(MODULE_STREAM_STATUS);
335
+ setInstallStatusSelected(MODULE_STREAM_INSTALLATION_STATUS);
336
+ };
337
+
326
338
  return (
327
339
  <div>
328
340
  <div id="modulestreams-tab">
@@ -341,6 +353,13 @@ export const ModuleStreamsTab = () => {
341
353
  activeFilters,
342
354
  defaultFilters,
343
355
  status,
356
+ showPrimaryAction,
357
+ showSecondaryAction,
358
+ primaryActionTitle,
359
+ secondaryActionTitle,
360
+ primaryActionLink,
361
+ secondaryActionLink,
362
+ resetFilters,
344
363
  }}
345
364
  ouiaId="host-module-stream-table"
346
365
  additionalListeners={[hostId, activeSortColumn, activeSortDirection,
@@ -353,6 +372,8 @@ export const ModuleStreamsTab = () => {
353
372
  foremanApiAutoComplete
354
373
  rowsCount={results?.length}
355
374
  variant={TableVariant.compact}
375
+ requestKey={MODULE_STREAMS_KEY}
376
+ alwaysShowActionButtons={false}
356
377
  actionButtons={
357
378
  <Split hasGutter>
358
379
  <SplitItem>
@@ -384,6 +384,8 @@ export const PackagesTab = () => {
384
384
  </Split>
385
385
  );
386
386
 
387
+ const resetFilters = () => setPackageStatusSelected(PACKAGE_STATUS);
388
+
387
389
  return (
388
390
  <div>
389
391
  <div id="packages-tab">
@@ -406,6 +408,7 @@ export const PackagesTab = () => {
406
408
  selectedCount,
407
409
  selectNone,
408
410
  areAllRowsSelected,
411
+ resetFilters,
409
412
  }
410
413
  }
411
414
  ouiaId="host-packages-table"
@@ -422,6 +425,8 @@ export const PackagesTab = () => {
422
425
  variant={TableVariant.compact}
423
426
  {...selectAll}
424
427
  displaySelectAllCheckbox={showActions}
428
+ requestKey={HOST_PACKAGES_KEY}
429
+ alwaysShowActionButtons={false}
425
430
  >
426
431
  <Thead>
427
432
  <Tr>