katello 4.6.2.1 → 4.7.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 (333) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/katello/common/vendor.js +0 -1
  3. data/app/controllers/katello/api/v2/activation_keys_controller.rb +1 -0
  4. data/app/controllers/katello/api/v2/alternate_content_sources_controller.rb +4 -4
  5. data/app/controllers/katello/api/v2/capsule_content_controller.rb +5 -0
  6. data/app/controllers/katello/api/v2/content_imports_controller.rb +1 -0
  7. data/app/controllers/katello/api/v2/content_view_components_controller.rb +1 -1
  8. data/app/controllers/katello/api/v2/host_subscriptions_controller.rb +2 -1
  9. data/app/controllers/katello/api/v2/hosts_bulk_actions_controller.rb +1 -1
  10. data/app/controllers/katello/api/v2/organizations_controller.rb +1 -0
  11. data/app/controllers/katello/api/v2/repositories_controller.rb +78 -12
  12. data/app/controllers/katello/api/v2/upstream_subscriptions_controller.rb +1 -1
  13. data/app/controllers/katello/concerns/api/v2/registration_controller_extensions.rb +7 -1
  14. data/app/controllers/katello/concerns/api/v2/smart_proxies_controller_extensions.rb +1 -0
  15. data/app/controllers/katello/concerns/hosts_controller_extensions.rb +11 -9
  16. data/app/helpers/katello/content_source_helper.rb +9 -0
  17. data/app/helpers/katello/hosts_and_hostgroups_helper.rb +31 -0
  18. data/app/lib/actions/katello/activation_key/destroy.rb +1 -0
  19. data/app/lib/actions/katello/agent_action.rb +1 -0
  20. data/app/lib/actions/katello/alternate_content_source/create.rb +1 -1
  21. data/app/lib/actions/katello/alternate_content_source/update.rb +2 -2
  22. data/app/lib/actions/katello/capsule_content/sync.rb +10 -2
  23. data/app/lib/actions/katello/cdn_configuration/update.rb +1 -1
  24. data/app/lib/actions/katello/content_view/promote.rb +1 -0
  25. data/app/lib/actions/katello/content_view/publish.rb +5 -2
  26. data/app/lib/actions/katello/content_view_version/auto_create_redhat_repositories.rb +7 -3
  27. data/app/lib/actions/katello/content_view_version/auto_create_repositories.rb +4 -2
  28. data/app/lib/actions/katello/content_view_version/import.rb +22 -10
  29. data/app/lib/actions/katello/product/destroy.rb +1 -1
  30. data/app/lib/actions/katello/repository/destroy.rb +3 -3
  31. data/app/lib/actions/katello/repository/errata_mail.rb +9 -6
  32. data/app/lib/actions/katello/repository/refresh_repository.rb +1 -1
  33. data/app/lib/actions/katello/repository/sync.rb +13 -6
  34. data/app/lib/actions/katello/repository_set/enable_repository.rb +6 -2
  35. data/app/lib/actions/pulp3/alternate_content_source/refresh_remote.rb +16 -0
  36. data/app/lib/actions/pulp3/orchestration/alternate_content_source/refresh.rb +1 -0
  37. data/app/lib/actions/pulp3/orchestration/content_view_version/export_library.rb +1 -1
  38. data/app/lib/actions/pulp3/orchestration/content_view_version/export_repository.rb +10 -2
  39. data/app/lib/katello/concerns/renderer_extensions.rb +2 -1
  40. data/app/lib/katello/errors.rb +2 -2
  41. data/app/lib/katello/resources/candlepin.rb +7 -1
  42. data/app/lib/katello/resources/cdn/katello_cdn.rb +3 -13
  43. data/app/lib/katello/resources/cdn.rb +14 -9
  44. data/app/lib/katello/util/candlepin_repository_checker.rb +73 -0
  45. data/app/models/katello/activation_key.rb +12 -1
  46. data/app/models/katello/alternate_content_source.rb +15 -4
  47. data/app/models/katello/alternate_content_source_product.rb +1 -1
  48. data/app/models/katello/authorization/repository.rb +2 -2
  49. data/app/models/katello/cdn_configuration.rb +12 -3
  50. data/app/models/katello/concerns/host_managed_extensions.rb +15 -2
  51. data/app/models/katello/concerns/http_proxy_extensions.rb +5 -10
  52. data/app/models/katello/concerns/smart_proxy_extensions.rb +30 -15
  53. data/app/models/katello/content.rb +15 -0
  54. data/app/models/katello/content_credential.rb +8 -9
  55. data/app/models/katello/content_view.rb +7 -3
  56. data/app/models/katello/content_view_component.rb +4 -0
  57. data/app/models/katello/content_view_version.rb +1 -1
  58. data/app/models/katello/erratum.rb +6 -2
  59. data/app/models/katello/host/content_facet.rb +13 -3
  60. data/app/models/katello/repository.rb +15 -1
  61. data/app/models/katello/root_repository.rb +0 -2
  62. data/app/overrides/add_smart_proxy_form.rb +5 -0
  63. data/app/presenters/katello/content_view_version_compare_presenter.rb +5 -0
  64. data/app/presenters/katello/host_package_presenter.rb +4 -4
  65. data/app/services/katello/pulp3/alternate_content_source.rb +23 -15
  66. data/app/services/katello/pulp3/ansible_collection.rb +7 -10
  67. data/app/services/katello/pulp3/content_view_version/export.rb +19 -6
  68. data/app/services/katello/pulp3/content_view_version/import.rb +2 -0
  69. data/app/services/katello/pulp3/content_view_version/import_validator.rb +21 -5
  70. data/app/services/katello/pulp3/content_view_version/importable_products.rb +11 -1
  71. data/app/services/katello/pulp3/content_view_version/importable_repositories.rb +38 -9
  72. data/app/services/katello/pulp3/content_view_version/metadata_generator.rb +12 -5
  73. data/app/services/katello/pulp3/content_view_version/metadata_map.rb +13 -2
  74. data/app/services/katello/pulp3/content_view_version/syncable_format_export.rb +5 -1
  75. data/app/services/katello/pulp3/pulp_content_unit.rb +3 -0
  76. data/app/services/katello/pulp3/repository.rb +18 -6
  77. data/app/services/katello/pulp3/repository_mirror.rb +0 -1
  78. data/app/services/katello/pulp3/smart_proxy_mirror_repository.rb +2 -2
  79. data/app/services/katello/pulp3/task_group.rb +18 -1
  80. data/app/services/katello/repository_type.rb +5 -2
  81. data/app/services/katello/repository_type_manager.rb +4 -3
  82. data/app/views/dashboard/_content_views_widget.html.erb +1 -1
  83. data/app/views/foreman/job_templates/change_content_source.erb +6 -0
  84. data/app/views/foreman/job_templates/update_packages_by_search_query.erb +7 -1
  85. data/app/views/katello/api/v2/alternate_content_sources/base.json.rabl +4 -4
  86. data/app/views/katello/api/v2/alternate_content_sources/index.json.rabl +1 -0
  87. data/app/views/katello/api/v2/alternate_content_sources/permissions.rabl +11 -0
  88. data/app/views/katello/api/v2/content_credentials/show.json.rabl +12 -0
  89. data/app/views/katello/api/v2/content_views/permissions.rabl +1 -0
  90. data/app/views/katello/api/v2/host_packages/base.json.rabl +1 -1
  91. data/app/views/katello/api/v2/module_streams/show.json.rabl +7 -0
  92. data/app/views/katello/api/v2/repositories/compare.json.rabl +10 -0
  93. data/app/views/katello/api/v2/smart_proxies/pulp_info.json.rabl +1 -0
  94. data/app/views/katello/hosts/_errata_counts.html.erb +46 -0
  95. data/app/views/overrides/activation_keys/_host_synced_content_select.html.erb +1 -0
  96. data/app/views/overrides/smart_proxies/_acs_http_proxy.html.erb +6 -0
  97. data/config/initializers/monkeys.rb +1 -0
  98. data/config/routes/api/v2.rb +2 -0
  99. data/config/routes.rb +3 -0
  100. data/db/migrate/20220730033504_update_custom_cdn.rb +13 -0
  101. data/db/migrate/20220920173656_add_http_proxy_to_smart_proxy.rb +7 -0
  102. data/db/migrate/20220920180858_remove_http_proxy_from_katello_alternate_content_sources.rb +6 -0
  103. data/engines/bastion/app/assets/javascripts/bastion/components/notification.service.js +1 -1
  104. data/engines/bastion/app/views/bastion/layouts/assets.html.erb +5 -5
  105. data/engines/bastion/vendor/assets/javascripts/bastion/angular/angular.js +1 -1
  106. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/content-credential.factory.js +17 -0
  107. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/content-credentials.routes.js +10 -0
  108. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/details/content-credential-acs.controller.js +36 -0
  109. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/details/content-credential-details.controller.js +7 -1
  110. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/details/views/content-credential-acs.html +38 -0
  111. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/details/views/content-credential-details.html +3 -0
  112. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/views/content-credentials.html +7 -2
  113. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-hosts.controller.js +4 -2
  114. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-info.html +1 -1
  115. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/content-hosts.html +4 -3
  116. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +14 -1392
  117. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/katello-features.run.js +1 -0
  118. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details.controller.js +7 -0
  119. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-details.html +1 -1
  120. data/lib/katello/permission_creator.rb +1 -0
  121. data/lib/katello/plugin.rb +34 -11
  122. data/lib/katello/repository_types/deb.rb +1 -1
  123. data/lib/katello/repository_types/docker.rb +1 -1
  124. data/lib/katello/repository_types/python.rb +3 -3
  125. data/lib/katello/tasks/check_candlepin_content.rake +16 -0
  126. data/lib/katello/tasks/reset.rake +1 -1
  127. data/lib/katello/version.rb +1 -1
  128. data/lib/monkeys/try_pulp_container_path.rb +35 -0
  129. data/locale/action_names.rb +7 -7
  130. data/locale/bn/katello.po +395 -63
  131. data/locale/cs/katello.po +396 -64
  132. data/locale/de/katello.po +399 -67
  133. data/locale/en/katello.po +395 -63
  134. data/locale/es/katello.po +399 -67
  135. data/locale/fr/katello.po +400 -68
  136. data/locale/gu/katello.po +395 -63
  137. data/locale/hi/katello.po +395 -63
  138. data/locale/it/katello.po +396 -64
  139. data/locale/ja/katello.po +400 -68
  140. data/locale/katello.pot +1916 -1213
  141. data/locale/kn/katello.po +395 -63
  142. data/locale/ko/katello.po +396 -64
  143. data/locale/mr/katello.po +395 -63
  144. data/locale/or/katello.po +395 -63
  145. data/locale/pa/katello.po +395 -63
  146. data/locale/pt/katello.po +395 -63
  147. data/locale/pt_BR/katello.po +399 -67
  148. data/locale/ru/katello.po +396 -64
  149. data/locale/ta/katello.po +395 -63
  150. data/locale/te/katello.po +395 -63
  151. data/locale/zh_CN/katello.po +400 -68
  152. data/locale/zh_TW/katello.po +396 -64
  153. data/webpack/components/Bookmark/index.js +5 -1
  154. data/webpack/components/Content/Details/ContentDetails.js +1 -1
  155. data/webpack/components/Content/Details/__tests__/__snapshots__/ContentDetails.test.js.snap +6 -0
  156. data/webpack/components/EditableSwitch.js +1 -0
  157. data/webpack/components/EditableTextInput/EditableTextInput.js +3 -3
  158. data/webpack/components/Errata/errataHelpers.js +33 -0
  159. data/webpack/components/Errata/index.js +45 -12
  160. data/webpack/components/Loading.js +18 -8
  161. data/webpack/components/Packages/index.js +8 -24
  162. data/webpack/components/RoutedTabs/index.js +1 -0
  163. data/webpack/components/Search/Search.js +20 -2
  164. data/webpack/components/Search/__tests__/search.test.js +3 -3
  165. data/webpack/components/Table/EmptyStateMessage.js +1 -1
  166. data/webpack/components/Table/PageControls.js +1 -0
  167. data/webpack/components/Table/TableHooks.js +4 -0
  168. data/webpack/components/Table/TableWrapper.js +7 -7
  169. data/webpack/components/TypeAhead/pf4Search/TypeAheadInput.js +1 -0
  170. data/webpack/components/TypeAhead/pf4Search/TypeAheadItems.js +2 -0
  171. data/webpack/components/TypeAhead/pf4Search/TypeAheadSearch.js +1 -1
  172. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/ChangeHostCVModal.js +3 -1
  173. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/ContentViewDetailsCard.js +2 -1
  174. data/webpack/components/extensions/HostDetails/Cards/ErrataOverviewCard.js +124 -68
  175. data/webpack/components/extensions/HostDetails/Cards/ErrataOverviewCard.scss +5 -0
  176. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsCard.js +30 -4
  177. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsCard.scss +23 -0
  178. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsModal.js +5 -4
  179. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/__tests__/hostCollectionsCard.test.js +25 -10
  180. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeCard.js +3 -3
  181. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeEditModal.js +6 -0
  182. data/webpack/components/extensions/HostDetails/Cards/__tests__/errataOverviewCard.test.js +145 -32
  183. data/webpack/components/extensions/HostDetails/DetailsTabCards/RegistrationCard.js +3 -1
  184. data/webpack/components/extensions/HostDetails/Tabs/ContentTab/constants.js +2 -1
  185. data/webpack/components/extensions/HostDetails/Tabs/ContentTab/index.js +1 -0
  186. data/webpack/components/extensions/HostDetails/Tabs/ErrataTab/ErrataTab.js +78 -26
  187. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsTab.js +23 -10
  188. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/HostPackagesConstants.js +1 -0
  189. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackageInstallModal.js +9 -4
  190. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackagesTab.js +141 -23
  191. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackagesTab.scss +6 -1
  192. data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionActions.js +9 -8
  193. data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsTab.js +24 -3
  194. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/EnableTracerModal.js +7 -2
  195. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/TracesEnabler.js +2 -1
  196. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/TracesTab.js +20 -4
  197. data/webpack/components/extensions/HostDetails/Tabs/__tests__/errataTab.test.js +56 -38
  198. data/webpack/components/extensions/HostDetails/Tabs/__tests__/packages.fixtures.json +3 -3
  199. data/webpack/components/extensions/HostDetails/Tabs/__tests__/packagesTab.test.js +5 -4
  200. data/webpack/components/extensions/HostDetails/Tabs/customizedRexUrlHelpers.js +3 -3
  201. data/webpack/containers/Application/config.js +2 -2
  202. data/webpack/containers/Application/overrides.scss +12 -0
  203. data/webpack/global_test_setup.js +19 -1
  204. data/webpack/ouia_id_check.js +0 -2
  205. data/webpack/redux/actions/RedHatRepositories/helpers.js +4 -8
  206. data/webpack/scenes/AlternateContentSources/ACSActions.js +37 -6
  207. data/webpack/scenes/AlternateContentSources/ACSConstants.js +2 -0
  208. data/webpack/scenes/AlternateContentSources/ACSIndexPage.js +1 -1
  209. data/webpack/scenes/AlternateContentSources/ACSSelectors.js +6 -6
  210. data/webpack/scenes/AlternateContentSources/Acs.scss +3 -0
  211. data/webpack/scenes/AlternateContentSources/Create/ACSCreateWizard.js +24 -3
  212. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSCreateFinish.js +10 -8
  213. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSCredentials.js +25 -4
  214. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSReview.js +22 -11
  215. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSSmartProxies.js +27 -2
  216. data/webpack/scenes/AlternateContentSources/Create/Steps/AcsUrlPaths.js +49 -17
  217. data/webpack/scenes/AlternateContentSources/Create/Steps/SelectSource.js +76 -23
  218. data/webpack/scenes/AlternateContentSources/Create/__tests__/acsCreate.test.js +159 -11
  219. data/webpack/scenes/AlternateContentSources/Details/ACSExpandableDetails.js +83 -29
  220. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditCredentials.js +9 -8
  221. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditDetails.js +2 -2
  222. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditProducts.js +2 -2
  223. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditSmartProxies.js +39 -7
  224. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditURLPaths.js +27 -11
  225. data/webpack/scenes/AlternateContentSources/Details/__tests__/ACSEdits.test.js +58 -55
  226. data/webpack/scenes/AlternateContentSources/Details/__tests__/ACSExpandableDetails.test.js +35 -32
  227. data/webpack/scenes/AlternateContentSources/MainTable/ACSTable.js +323 -150
  228. data/webpack/scenes/AlternateContentSources/MainTable/__tests__/acsIndex.fixtures.json +5 -1
  229. data/webpack/scenes/AlternateContentSources/MainTable/__tests__/acsTable.test.js +10 -11
  230. data/webpack/scenes/AlternateContentSources/helpers.js +26 -0
  231. data/webpack/scenes/ContentViews/ContentViewsConstants.js +1 -0
  232. data/webpack/scenes/ContentViews/ContentViewsPage.js +1 -1
  233. data/webpack/scenes/ContentViews/Copy/CopyContentViewForm.js +1 -0
  234. data/webpack/scenes/ContentViews/Copy/CopyContentViewModal.js +1 -0
  235. data/webpack/scenes/ContentViews/Create/ContentViewFormComponents.js +10 -5
  236. data/webpack/scenes/ContentViews/Create/CreateContentViewForm.js +30 -7
  237. data/webpack/scenes/ContentViews/Create/CreateContentViewModal.js +1 -0
  238. data/webpack/scenes/ContentViews/Create/__tests__/createContentView.test.js +21 -6
  239. data/webpack/scenes/ContentViews/Delete/Steps/CVDeleteEnvironmentsSelection.js +3 -3
  240. data/webpack/scenes/ContentViews/Delete/Steps/CVDeletionReassignActivationKeysForm.js +1 -0
  241. data/webpack/scenes/ContentViews/Delete/Steps/CVDeletionReassignHostsForm.js +1 -0
  242. data/webpack/scenes/ContentViews/Delete/__tests__/CvData.fixtures.json +2 -0
  243. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewAddModal.js +3 -0
  244. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewBulkAddModal.js +4 -1
  245. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentVersion.js +1 -1
  246. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ContentViewComponents.js +2 -1
  247. data/webpack/scenes/ContentViews/Details/ContentViewDetailActions.js +14 -0
  248. data/webpack/scenes/ContentViews/Details/ContentViewDetailSelectors.js +11 -1
  249. data/webpack/scenes/ContentViews/Details/ContentViewDetails.js +1 -1
  250. data/webpack/scenes/ContentViews/Details/ContentViewInfo.js +2 -0
  251. data/webpack/scenes/ContentViews/Details/Filters/Add/CVFilterAddModal.js +5 -0
  252. data/webpack/scenes/ContentViews/Details/Filters/AffectedRepositories/AffectedRepositorySelection.js +1 -0
  253. data/webpack/scenes/ContentViews/Details/Filters/ArtifactsWithNoErrata.js +1 -0
  254. data/webpack/scenes/ContentViews/Details/Filters/CVContainerImageFilterContent.js +8 -2
  255. data/webpack/scenes/ContentViews/Details/Filters/CVDebFilterContent.js +5 -1
  256. data/webpack/scenes/ContentViews/Details/Filters/CVErrataDateFilterContent.js +22 -6
  257. data/webpack/scenes/ContentViews/Details/Filters/CVErrataIDFilterContent.js +19 -9
  258. data/webpack/scenes/ContentViews/Details/Filters/CVModuleStreamFilterContent.js +9 -2
  259. data/webpack/scenes/ContentViews/Details/Filters/CVPackageGroupFilterContent.js +9 -2
  260. data/webpack/scenes/ContentViews/Details/Filters/CVRpmFilterContent.js +8 -2
  261. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilterDetailsHeader.js +1 -1
  262. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilters.js +2 -1
  263. data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/CVRpmMatchContentModal.js +3 -2
  264. data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/__tests__/CVRpmMatchContentModal.test.js +1 -1
  265. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVContainerImageFilterContent.test.js +2 -2
  266. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVRpmFilterContent.test.js +1 -1
  267. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilterDetails.test.js +1 -1
  268. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.test.js +1 -1
  269. data/webpack/scenes/ContentViews/Details/Histories/ContentViewHistories.js +2 -2
  270. data/webpack/scenes/ContentViews/Details/Promote/ContentViewVersionPromote.js +2 -0
  271. data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +2 -1
  272. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/Steps/ReviewEnvironments.js +3 -3
  273. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompare.js +9 -1
  274. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompareConfig.js +83 -0
  275. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompareTable.js +32 -8
  276. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/CVVersionCompare.test.js +56 -3
  277. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/cvCompareRepositories.fixtures.json +175 -0
  278. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersions.js +6 -2
  279. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVEnvironmentSelectionForm.js +3 -3
  280. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVReassignActivationKeysForm.js +1 -0
  281. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVReassignHostsForm.js +1 -0
  282. data/webpack/scenes/ContentViews/Details/Versions/Delete/affectedActivationKeys.js +2 -2
  283. data/webpack/scenes/ContentViews/Details/Versions/Delete/affectedHosts.js +2 -2
  284. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailConfig.js +2 -2
  285. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetails.js +1 -0
  286. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailsHeader.js +4 -1
  287. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailsTable.js +5 -4
  288. data/webpack/scenes/ContentViews/Publish/CVPublishForm.js +5 -1
  289. data/webpack/scenes/ContentViews/Publish/CVPublishReview.js +3 -3
  290. data/webpack/scenes/ContentViews/Table/ContentViewsTable.js +10 -5
  291. data/webpack/scenes/ContentViews/__tests__/basicContentViews.fixtures.js +2 -0
  292. data/webpack/scenes/ContentViews/__tests__/contentViewList.fixtures.json +1 -0
  293. data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +81 -19
  294. data/webpack/scenes/ContentViews/components/CVBreadCrumb.js +1 -1
  295. data/webpack/scenes/ContentViews/components/EnvironmentPaths/EnvironmentPaths.js +1 -0
  296. data/webpack/scenes/ContentViews/components/InactiveText.js +9 -1
  297. data/webpack/scenes/ContentViews/expansions/RelatedCompositeContentViewsModal.js +4 -2
  298. data/webpack/scenes/ContentViews/expansions/RelatedContentViewComponentsModal.js +3 -2
  299. data/webpack/scenes/Hosts/ChangeContentSource/actions.js +18 -11
  300. data/webpack/scenes/Hosts/ChangeContentSource/components/ContentSourceForm.js +15 -8
  301. data/webpack/scenes/Hosts/ChangeContentSource/components/FormField.js +3 -4
  302. data/webpack/scenes/Hosts/ChangeContentSource/components/Hosts.js +55 -0
  303. data/webpack/scenes/Hosts/ChangeContentSource/components/HostsModal.js +59 -0
  304. data/webpack/scenes/Hosts/ChangeContentSource/constants.js +1 -0
  305. data/webpack/scenes/Hosts/ChangeContentSource/helpers.js +2 -5
  306. data/webpack/scenes/Hosts/ChangeContentSource/index.js +46 -41
  307. data/webpack/scenes/Hosts/ChangeContentSource/selectors.js +5 -5
  308. data/webpack/scenes/ModuleStreams/Details/ModuleDetailsSchema.js +10 -1
  309. data/webpack/scenes/ModuleStreams/Details/ModuleStreamDetails.js +1 -1
  310. data/webpack/scenes/ModuleStreams/Details/__tests__/__snapshots__/ModuleStreamDetails.test.js.snap +97 -2
  311. data/webpack/scenes/Organizations/OrganizationSelectors.js +1 -0
  312. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/CdnConfigurationConstants.js +2 -1
  313. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/CdnTypeForm.js +10 -25
  314. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/CustomCdnTypeForm.js +154 -0
  315. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/ExportSyncForm.js +4 -4
  316. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/NetworkSyncForm.js +59 -44
  317. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/__tests__/CdnTypeForm.test.js +3 -28
  318. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/__tests__/CustomCdnTypeForm.test.js +97 -0
  319. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/__tests__/ExportSyncForm.test.js +1 -1
  320. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/__tests__/NetworkSyncForm.test.js +4 -4
  321. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/index.js +23 -10
  322. data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.js +1 -1
  323. data/webpack/scenes/Subscriptions/SubscriptionConstants.js +2 -1
  324. data/webpack/scenes/Subscriptions/SubscriptionsPage.js +5 -5
  325. data/webpack/scenes/Subscriptions/UpstreamSubscriptions/UpstreamSubscriptionsPage.js +3 -3
  326. data/webpack/scenes/Subscriptions/UpstreamSubscriptions/__tests__/__snapshots__/UpstreamSubscriptionsPage.test.js.snap +2 -2
  327. data/webpack/scenes/Subscriptions/__tests__/__snapshots__/SubscriptionsPage.test.js.snap +3 -3
  328. data/webpack/scenes/Subscriptions/components/SubscriptionsToolbar/SubscriptionsToolbar.js +3 -3
  329. data/webpack/scenes/Tasks/helpers.js +14 -7
  330. metadata +54 -35
  331. data/app/lib/actions/pulp3/orchestration/alternate_content_source/refresh_remote.rb +0 -18
  332. data/db/migrate/20221206170122_update_ignore_srpm_to_false_for_mirror_complete.rb +0 -5
  333. data/vendor/assets/javascripts/katello/jquery.trunk8.js +0 -203
@@ -37,6 +37,7 @@ const Bookmark = ({
37
37
  const dropDownItems = [
38
38
  ...results.map(({ name, id, query }) => (
39
39
  <DropdownItem
40
+ ouiaId={`bookmarkItem-${id}`}
40
41
  onClick={() => setSelectItem(query)}
41
42
  key={id}
42
43
  tooltip={query}
@@ -46,8 +47,9 @@ const Bookmark = ({
46
47
  ];
47
48
  if (showActions) {
48
49
  dropDownItems.push(
49
- <DropdownSeparator key="separator" />,
50
+ <DropdownSeparator key="separator" ouiaId="bookmark-separator" />,
50
51
  <DropdownItem
52
+ ouiaId="add-bookmark"
51
53
  onClick={() => {
52
54
  setDropdownOpen(false);
53
55
  setModalOpen(true);
@@ -63,9 +65,11 @@ const Bookmark = ({
63
65
  return (
64
66
  <>
65
67
  <Dropdown
68
+ ouiaId="bookmark-dropdown"
66
69
  aria-label="bookmark-dropdown"
67
70
  toggle={
68
71
  <DropdownToggle
72
+ ouiaId="bookmark-toggle"
69
73
  isDisabled={isDisabled || status !== STATUS.RESOLVED}
70
74
  onToggle={setDropdownOpen}
71
75
  id="toggle-id"
@@ -36,7 +36,7 @@ const ContentDetails = (props) => {
36
36
  loading={loading}
37
37
  loadingText={__('Loading')}
38
38
  >
39
- <TabContainer id="content-tabs-container" defaultActiveKey={1}>
39
+ <TabContainer id="content-tabs-container" defaultActiveKey={1} style={{ margin: '0', padding: '0' }}>
40
40
  <Grid>
41
41
  <Row>
42
42
  <Col sm={12}>
@@ -10,6 +10,12 @@ exports[`Content Details Info should render and contain appropriate components 1
10
10
  <ForwardRef
11
11
  defaultActiveKey={1}
12
12
  id="content-tabs-container"
13
+ style={
14
+ Object {
15
+ "margin": "0",
16
+ "padding": "0",
17
+ }
18
+ }
13
19
  >
14
20
  <Grid
15
21
  bsClass="container"
@@ -16,6 +16,7 @@ const EditableSwitch = ({
16
16
  <Switch
17
17
  id={identifier}
18
18
  aria-label={identifier}
19
+ ouiaId={`switch-${identifier}`}
19
20
  isChecked={value}
20
21
  onChange={onSwitch}
21
22
  disabled={disabled}
@@ -76,7 +76,7 @@ const EditableTextInput = ({
76
76
  <Split>
77
77
  <SplitItem>
78
78
  {textArea ?
79
- (<TextArea {...inputProps} aria-label={`${attribute} text area`} ouiaId={ouiaId} />) :
79
+ (<TextArea {...inputProps} aria-label={`${attribute} text area`} />) :
80
80
  (<TextInput
81
81
  {...inputProps}
82
82
  type={(isPassword && !showPassword) ? 'password' : 'text'}
@@ -120,10 +120,10 @@ const EditableTextInput = ({
120
120
  <Split>
121
121
  <SplitItem>
122
122
  {inputValue ?
123
- <Text aria-label={`${attribute} text value`} component={component}>
123
+ <Text ouiaId={`${attribute}-text-value`} aria-label={`${attribute} text value`} component={component}>
124
124
  {editing ? inputValue : passwordPlaceholder || inputValue}
125
125
  </Text> :
126
- <Text className="textInput-placeholder" aria-label={`${attribute} text value`} component={component}>
126
+ <Text ouiaId={`${attribute}-text-value`} className="textInput-placeholder" aria-label={`${attribute} text value`} component={component}>
127
127
  {passwordPlaceholder || placeholder}
128
128
  </Text>}
129
129
  </SplitItem >
@@ -0,0 +1,33 @@
1
+ export const errataStatusContemplation = (errataStatus) => {
2
+ // from backend errata_status.rb:
3
+ // NEEDED_SECURITY_ERRATA = 3
4
+ // NEEDED_ERRATA = 2
5
+ // UNKNOWN = 1
6
+ // UP_TO_DATE = 0
7
+ const neededErrata = ([2, 3].includes(Number(errataStatus)));
8
+ const allUpToDate = (errataStatus === 0);
9
+ const otherErrataStatus = (!allUpToDate && !neededErrata);
10
+
11
+ return {
12
+ neededErrata,
13
+ allUpToDate,
14
+ otherErrataStatus,
15
+ };
16
+ };
17
+
18
+ export const friendlyErrataStatus = (errataStatus) => {
19
+ switch (errataStatus) {
20
+ case 0:
21
+ return 'All up to date';
22
+ case 1:
23
+ return 'Unknown';
24
+ // eslint-disable-next-line no-sequences
25
+ case 2:
26
+ case 3:
27
+ return 'Needed';
28
+ default:
29
+ return 'Unknown';
30
+ }
31
+ };
32
+
33
+ export default errataStatusContemplation;
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import { TableText } from '@patternfly/react-table';
4
- import { Tooltip } from '@patternfly/react-core';
4
+ import { Tooltip, ToggleGroupItem } from '@patternfly/react-core';
5
5
  import {
6
6
  chart_color_black_500 as pfBlack,
7
7
  chart_color_gold_400 as pfGold,
@@ -17,9 +17,11 @@ import {
17
17
  } from '@patternfly/react-icons';
18
18
  import { TranslatedAnchor } from '../Table/components/TranslatedPlural';
19
19
 
20
- export const ErrataMapper = ({ data, id }) => data.map(({ x: type, y: count }) => <ErrataSummary count={count} type={type} key={`${count} ${type}`} id={id} />);
20
+ export const ErrataMapper = ({ data, id, errataCategory }) =>
21
+ data.map(({ x: type, y: count }) =>
22
+ <ErrataSummary count={count} type={type} key={`${count} ${type}`} id={id} errataCategory={errataCategory} />);
21
23
 
22
- export const ErrataSummary = ({ type, count }) => {
24
+ export const ErrataSummary = ({ type, count, errataCategory }) => {
23
25
  let ErrataIcon;
24
26
  let label;
25
27
  let url;
@@ -33,7 +35,7 @@ export const ErrataSummary = ({ type, count }) => {
33
35
  <TranslatedAnchor
34
36
  id="errata-card-security-count"
35
37
  style={{ marginLeft: '0.4rem' }}
36
- href="#/Content/errata?type=security"
38
+ href={`#/Content/errata?type=security&show=${errataCategory}`}
37
39
  count={count}
38
40
  plural="security advisories"
39
41
  singular="security advisory"
@@ -51,7 +53,7 @@ export const ErrataSummary = ({ type, count }) => {
51
53
  <TranslatedAnchor
52
54
  id="errata-card-bugfix-count"
53
55
  style={{ marginLeft: '0.4rem' }}
54
- href="#/Content/errata?type=bugfix"
56
+ href={`#/Content/errata?type=bugfix&show=${errataCategory}`}
55
57
  count={count}
56
58
  plural="bug fixes"
57
59
  singular="bug fix"
@@ -69,7 +71,7 @@ export const ErrataSummary = ({ type, count }) => {
69
71
  <TranslatedAnchor
70
72
  id="errata-card-enhancement-count"
71
73
  style={{ marginLeft: '0.4rem' }}
72
- href="#/Content/errata?type=enhancement"
74
+ href={`#/Content/errata?type=enhancement&show=${errataCategory}`}
73
75
  count={count}
74
76
  plural="enhancements"
75
77
  singular="enhancement"
@@ -100,15 +102,18 @@ export const ErrataSummary = ({ type, count }) => {
100
102
  ErrataSummary.propTypes = {
101
103
  type: PropTypes.string.isRequired,
102
104
  count: PropTypes.number.isRequired,
105
+ errataCategory: PropTypes.string.isRequired,
103
106
  };
104
107
 
105
108
  export const ErrataType = ({ type }) => {
106
109
  let ErrataIcon;
107
110
  let label;
111
+ let verticalAlign = '-0.125em';
108
112
  switch (type) {
109
113
  case 'security':
110
114
  label = __('Security');
111
115
  ErrataIcon = SecurityIcon;
116
+ verticalAlign = '-0.2em';
112
117
  break;
113
118
  case 'recommended':
114
119
  case 'bugfix':
@@ -127,9 +132,11 @@ export const ErrataType = ({ type }) => {
127
132
 
128
133
  return (
129
134
  <TableText wrapModifier="nowrap">
130
- <Tooltip content={label} >
131
- <ErrataIcon style={{ marginRight: '4px' }} />
132
- </Tooltip>
135
+ <span style={{ marginRight: '4px' }}>
136
+ <Tooltip content={label}>
137
+ <ErrataIcon style={{ verticalAlign }} />
138
+ </Tooltip>
139
+ </span>
133
140
  {label}
134
141
  </TableText>
135
142
  );
@@ -166,9 +173,11 @@ export const ErrataSeverity = ({ severity }) => {
166
173
  return (
167
174
  <TableText wrapModifier="nowrap">
168
175
  {color &&
169
- <Tooltip content={label} >
170
- <SecurityIcon color={color} />
171
- </Tooltip>
176
+ <span style={{ marginRight: '4px' }}>
177
+ <Tooltip content={label} >
178
+ <SecurityIcon color={color} style={{ verticalAlign: '-0.2em' }} />
179
+ </Tooltip>
180
+ </span>
172
181
  }
173
182
  {label}
174
183
  </TableText>
@@ -178,3 +187,27 @@ export const ErrataSeverity = ({ severity }) => {
178
187
  ErrataSeverity.propTypes = {
179
188
  severity: PropTypes.string.isRequired,
180
189
  };
190
+
191
+ export const ErrataToggleGroupItem = ({
192
+ text, tooltipText, isSelected, onChange, ...toggleGroupItemProps
193
+ }) => (
194
+ <Tooltip
195
+ content={tooltipText}
196
+ position="top"
197
+ enableFlip
198
+ >
199
+ <ToggleGroupItem
200
+ text={text}
201
+ isSelected={isSelected}
202
+ onChange={onChange}
203
+ {...toggleGroupItemProps}
204
+ />
205
+ </Tooltip>
206
+ );
207
+
208
+ ErrataToggleGroupItem.propTypes = {
209
+ text: PropTypes.string.isRequired,
210
+ tooltipText: PropTypes.string.isRequired,
211
+ isSelected: PropTypes.bool.isRequired,
212
+ onChange: PropTypes.func.isRequired,
213
+ };
@@ -6,31 +6,41 @@ import {
6
6
  EmptyState,
7
7
  EmptyStateIcon,
8
8
  Spinner,
9
+ Skeleton,
9
10
  } from '@patternfly/react-core';
10
11
  import { translate as __ } from 'foremanReact/common/I18n';
11
12
 
12
- const Loading = ({ size, showText, loadingText }) => (
13
- <Bullseye>
14
- <EmptyState>
15
- <EmptyStateIcon size={size} variant="container" component={Spinner} />
16
- {showText && (
13
+ const Loading = ({
14
+ size, showText, loadingText, skeleton,
15
+ }) => {
16
+ if (skeleton) {
17
+ return <Skeleton height="100%" />;
18
+ }
19
+ return (
20
+ <Bullseye>
21
+ <EmptyState>
22
+ <EmptyStateIcon size={size} variant="container" component={Spinner} />
23
+ {showText && (
17
24
  <Title size={size} headingLevel="h4" ouiaId="loading-title">
18
25
  {loadingText || __('Loading')}
19
26
  </Title>)}
20
- </EmptyState>
21
- </Bullseye>
22
- );
27
+ </EmptyState>
28
+ </Bullseye>
29
+ );
30
+ };
23
31
 
24
32
  Loading.propTypes = {
25
33
  size: PropTypes.string,
26
34
  showText: PropTypes.bool,
27
35
  loadingText: PropTypes.string,
36
+ skeleton: PropTypes.bool,
28
37
  };
29
38
 
30
39
  Loading.defaultProps = {
31
40
  size: 'lg',
32
41
  showText: true,
33
42
  loadingText: null,
43
+ skeleton: false,
34
44
  };
35
45
 
36
46
 
@@ -7,12 +7,12 @@ import {
7
7
  } from '@patternfly/react-icons';
8
8
  import PropTypes from 'prop-types';
9
9
 
10
- export const PackagesStatus = ({ upgradable_version: upgradableVersion }) => {
10
+ const PackagesStatus = ({ upgradable_versions: upgradableVersions }) => {
11
11
  let PackagesIcon;
12
12
  let label;
13
13
  let color;
14
14
 
15
- if (upgradableVersion == null) {
15
+ if (upgradableVersions === null) {
16
16
  color = 'green';
17
17
  label = __('Up-to date');
18
18
  PackagesIcon = CheckIcon;
@@ -31,30 +31,14 @@ export const PackagesStatus = ({ upgradable_version: upgradableVersion }) => {
31
31
  };
32
32
 
33
33
  PackagesStatus.propTypes = {
34
- upgradable_version: PropTypes.string,
34
+ upgradable_versions: PropTypes.arrayOf(PropTypes.oneOfType([
35
+ PropTypes.string,
36
+ PropTypes.arrayOf(PropTypes.string),
37
+ ])),
35
38
  };
36
39
 
37
40
  PackagesStatus.defaultProps = {
38
- upgradable_version: null,
41
+ upgradable_versions: null,
39
42
  };
40
43
 
41
- export const PackagesLatestVersion = ({ name, upgradable_version: upgradableVersion }) => {
42
- let label;
43
-
44
- if (upgradableVersion == null) {
45
- label = '';
46
- } else {
47
- label = upgradableVersion.replace(`${name}-`, '');
48
- }
49
-
50
- return <TableText wrapModifier="nowrap">{label || '—'} </TableText>;
51
- };
52
-
53
- PackagesLatestVersion.propTypes = {
54
- name: PropTypes.string.isRequired,
55
- upgradable_version: PropTypes.string,
56
- };
57
-
58
- PackagesLatestVersion.defaultProps = {
59
- upgradable_version: null,
60
- };
44
+ export default PackagesStatus;
@@ -18,6 +18,7 @@ const RoutedTabs = ({
18
18
  <>
19
19
  <Tabs
20
20
  activeKey={currentTabFromUrl}
21
+ ouiaId="routed-tabs"
21
22
  className="margin-0-24"
22
23
  >
23
24
  {tabs.map(({ key, title }) => (
@@ -12,6 +12,25 @@ import {
12
12
  AUTOSEARCH_WHILE_TYPING,
13
13
  } from '../../scenes/Settings/SettingsConstants';
14
14
 
15
+ // Don't trigger auto-search until you've typed an operator and begun to type a value
16
+ const searchContainsOperator = (search = '') => {
17
+ const operators = ['>=', '<=', '>', '<', '~', '^', '!^', '=', '!=', '~', '!~'];
18
+ return operators.some(operator => search.includes(operator) && !search.trim().endsWith(operator));
19
+ };
20
+ // Apply the above function only to the last 'key = value' pair, if there are multiple
21
+ const allowSearch = (originalSearch = '') => {
22
+ const search = originalSearch.toLowerCase().trim();
23
+ // find the last occurrence of 'or' or 'and'
24
+ const lastOr = originalSearch.lastIndexOf(' or ');
25
+ const lastAnd = originalSearch.lastIndexOf(' and ');
26
+ if (lastOr === -1 && lastAnd === -1) {
27
+ return searchContainsOperator(search);
28
+ }
29
+ const winningOperator = lastOr > lastAnd ? ' or ' : ' and ';
30
+ const lastSearch = search.split(winningOperator);
31
+ return searchContainsOperator(lastSearch[lastSearch.length - 1]);
32
+ };
33
+
15
34
  const Search = ({
16
35
  onSearch,
17
36
  updateSearchQuery,
@@ -61,8 +80,7 @@ const Search = ({
61
80
  })));
62
81
  }
63
82
  }
64
-
65
- if (autoSearchEnabled && patternfly4) {
83
+ if (autoSearchEnabled && patternfly4 && allowSearch(searchTerm)) {
66
84
  onSearch(searchTerm || '');
67
85
  }
68
86
  };
@@ -77,8 +77,8 @@ test('search function is called when search is typed into with autosearch', asyn
77
77
  const mockSearch = jest.fn();
78
78
 
79
79
  const { getByLabelText } = renderWithRedux(<Search {...{ ...props, onSearch: mockSearch }} />);
80
- fireEvent.change(getByLabelText(/text input for search/i), { target: { value: 'foo' } });
81
- await patientlyWaitFor(() => expect(mockSearch.mock.calls).toHaveLength(2));
80
+ fireEvent.change(getByLabelText(/text input for search/i), { target: { value: 'name = foo' } });
81
+ await patientlyWaitFor(() => expect(mockSearch.mock.calls).toHaveLength(1));
82
82
 
83
83
  assertNockRequest(autoSearchScope);
84
84
  assertNockRequest(autocompleteScope, done);
@@ -98,7 +98,7 @@ test('search function is called by clicking search button without autosearch', a
98
98
  expect(searchButton).toBeInTheDocument();
99
99
  });
100
100
  searchButton.click();
101
- expect(mockSearch.mock.calls).toHaveLength(3);
101
+ expect(mockSearch.mock.calls).toHaveLength(1);
102
102
  assertNockRequest(autoSearchScope);
103
103
  assertNockRequest(autocompleteScope, done);
104
104
  });
@@ -86,7 +86,7 @@ const EmptyStateMessage = ({
86
86
  <EmptyStateBody>
87
87
  {emptyStateBody}
88
88
  </EmptyStateBody>
89
- {showPrimaryAction ? actionButton : null}
89
+ {showPrimaryAction && actionButton}
90
90
  {showSecondaryAction &&
91
91
  <EmptyStateSecondaryActions>
92
92
  <Button variant="link">
@@ -12,6 +12,7 @@ const PageControls = ({
12
12
  return (
13
13
  <FlexItem align={{ default: 'alignRight' }}>
14
14
  <Pagination
15
+ ouiaId={`pagination-${variant}`}
15
16
  key={variant}
16
17
  itemCount={total}
17
18
  itemsStart={firstIndex}
@@ -281,6 +281,10 @@ export const useTableSort = ({
281
281
  const [activeSortColumn, setActiveSortColumn] = useState(translatedInitialSortColumnName);
282
282
  const [activeSortDirection, setActiveSortDirection] = useState('asc');
283
283
 
284
+ if (!allColumns.includes(activeSortColumn)) {
285
+ setActiveSortColumn(translatedInitialSortColumnName);
286
+ }
287
+
284
288
  // Patternfly sort function
285
289
  const onSort = (_event, index, direction) => {
286
290
  setActiveSortColumn(allColumns?.[index]);
@@ -42,7 +42,7 @@ const TableWrapper = ({
42
42
  selectedResults,
43
43
  clearSelectedResults,
44
44
  emptySearchBody,
45
- disableSearch,
45
+ hideSearch,
46
46
  nodesBelowSearch,
47
47
  bookmarkController,
48
48
  readOnlyBookmarks,
@@ -101,8 +101,8 @@ const TableWrapper = ({
101
101
  let paramsOverride;
102
102
  const activeFiltersHaveChanged = hasChanged(activeFilters, prevActiveFilters.current);
103
103
  const searchQueryHasChanged = hasChanged(searchQuery, prevSearch.current);
104
- if (searchQuery && !disableSearch) paramsOverride = { search: searchQuery };
105
- if (!disableSearch && (searchQueryHasChanged || activeFiltersHaveChanged)) {
104
+ if (searchQuery && !hideSearch) paramsOverride = { search: searchQuery };
105
+ if (!hideSearch && (searchQueryHasChanged || activeFiltersHaveChanged)) {
106
106
  // Reset page back to 1 when filter or search changes
107
107
  prevSearch.current = searchQuery;
108
108
  prevActiveFilters.current = activeFilters;
@@ -118,7 +118,7 @@ const TableWrapper = ({
118
118
  fetchWithParams();
119
119
  }
120
120
  }, [
121
- disableSearch,
121
+ hideSearch,
122
122
  activeFilters,
123
123
  dispatch,
124
124
  fetchItems,
@@ -184,7 +184,7 @@ const TableWrapper = ({
184
184
  />
185
185
  </FlexItem>
186
186
  }
187
- {!disableSearch && !hideToolbar &&
187
+ {!hideSearch && !hideToolbar &&
188
188
  <FlexItem>
189
189
  <Search
190
190
  isDisabled={unresolvedStatusOrNoRows && !searchQuery}
@@ -304,7 +304,7 @@ TableWrapper.propTypes = {
304
304
  areAllRowsOnPageSelected: PropTypes.func,
305
305
  areAllRowsSelected: PropTypes.func,
306
306
  emptySearchBody: PropTypes.string,
307
- disableSearch: PropTypes.bool,
307
+ hideSearch: PropTypes.bool,
308
308
  nodesBelowSearch: PropTypes.node,
309
309
  bookmarkController: PropTypes.string,
310
310
  readOnlyBookmarks: PropTypes.bool,
@@ -334,7 +334,7 @@ TableWrapper.defaultProps = {
334
334
  areAllRowsOnPageSelected: noop,
335
335
  areAllRowsSelected: noop,
336
336
  emptySearchBody: __('Try changing your search settings.'),
337
- disableSearch: false,
337
+ hideSearch: false,
338
338
  nodesBelowSearch: null,
339
339
  bookmarkController: undefined,
340
340
  readOnlyBookmarks: false,
@@ -41,6 +41,7 @@ const TypeAheadInput = ({
41
41
  <Button
42
42
  variant={autoSearchEnabled ? 'plain' : 'control'}
43
43
  className="search-clear"
44
+ ouiaId="search-clear-button"
44
45
  onClick={clearSearch}
45
46
  >
46
47
  <TimesIcon />
@@ -25,6 +25,7 @@ const TypeAheadItems = ({
25
25
  const { onClick, ...dropdownProps } = itemProps;
26
26
  return (
27
27
  <DropdownItem
28
+ ouiaId={text}
28
29
  {...dropdownProps}
29
30
  component={
30
31
  <button onClick={onClick}>{text}</button>
@@ -41,6 +42,7 @@ const TypeAheadItems = ({
41
42
  isOpen={isOpen}
42
43
  dropdownItems={buildDropdownItems()}
43
44
  className="typeahead-dropdown"
45
+ ouiaId="typeahead-dropdown"
44
46
  />
45
47
  );
46
48
  };
@@ -50,7 +50,7 @@ const TypeAheadSearch = ({
50
50
  controller={bookmarkController}
51
51
  />}
52
52
  {(!autoSearchEnabled && !isTextInput) &&
53
- <Button aria-label="search button" variant="control" onClick={() => onSearch(inputValue)}>
53
+ <Button ouiaId="search-button" aria-label="search button" variant="control" onClick={() => onSearch(inputValue)}>
54
54
  <SearchIcon />
55
55
  </Button>}
56
56
  </>
@@ -138,6 +138,7 @@ const ChangeHostCVModal = ({
138
138
  const modalActions = ([
139
139
  <Button
140
140
  key="add"
141
+ ouiaId="change-host-cv-modal-add-button"
141
142
  variant="primary"
142
143
  onClick={handleSave}
143
144
  isDisabled={!canSave}
@@ -145,7 +146,7 @@ const ChangeHostCVModal = ({
145
146
  >
146
147
  {__('Save')}
147
148
  </Button>,
148
- <Button key="cancel" variant="link" onClick={handleModalClose}>
149
+ <Button key="cancel" ouiaId="change-host-cv-modal-cancel-button" variant="link" onClick={handleModalClose}>
149
150
  Cancel
150
151
  </Button>,
151
152
  ]);
@@ -159,6 +160,7 @@ const ChangeHostCVModal = ({
159
160
  position="top"
160
161
  actions={modalActions}
161
162
  id="change-host-cv-modal"
163
+ ouiaId="change-host-cv-modal"
162
164
  >
163
165
  {contentViewsInEnvStatus === STATUS.RESOLVED &&
164
166
  !!selectedEnvForHost.length && contentViewsInEnv.length === 0 &&
@@ -53,6 +53,7 @@ const HostContentViewDetails = ({
53
53
  const dropdownItems = [
54
54
  <DropdownItem
55
55
  aria-label="change-host-content-view"
56
+ ouiaId="change-host-content-view"
56
57
  key="change-host-content-view"
57
58
  component="button"
58
59
  onClick={openModal}
@@ -63,7 +64,7 @@ const HostContentViewDetails = ({
63
64
 
64
65
  return (
65
66
  <GridItem rowSpan={1} md={6} lg={4} xl2={3} >
66
- <Card isHoverable>
67
+ <Card ouiaId="content-view-details-card">
67
68
  <CardHeader>
68
69
  <Flex
69
70
  alignItems={{ default: 'alignItemsCenter' }}