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.
- checksums.yaml +4 -4
- data/app/assets/javascripts/katello/common/vendor.js +0 -1
- data/app/controllers/katello/api/v2/activation_keys_controller.rb +1 -0
- data/app/controllers/katello/api/v2/alternate_content_sources_controller.rb +4 -4
- data/app/controllers/katello/api/v2/capsule_content_controller.rb +5 -0
- data/app/controllers/katello/api/v2/content_imports_controller.rb +1 -0
- data/app/controllers/katello/api/v2/content_view_components_controller.rb +1 -1
- data/app/controllers/katello/api/v2/host_subscriptions_controller.rb +2 -1
- data/app/controllers/katello/api/v2/hosts_bulk_actions_controller.rb +1 -1
- data/app/controllers/katello/api/v2/organizations_controller.rb +1 -0
- data/app/controllers/katello/api/v2/repositories_controller.rb +78 -12
- data/app/controllers/katello/api/v2/upstream_subscriptions_controller.rb +1 -1
- data/app/controllers/katello/concerns/api/v2/registration_controller_extensions.rb +7 -1
- data/app/controllers/katello/concerns/api/v2/smart_proxies_controller_extensions.rb +1 -0
- data/app/controllers/katello/concerns/hosts_controller_extensions.rb +11 -9
- data/app/helpers/katello/content_source_helper.rb +9 -0
- data/app/helpers/katello/hosts_and_hostgroups_helper.rb +31 -0
- data/app/lib/actions/katello/activation_key/destroy.rb +1 -0
- data/app/lib/actions/katello/agent_action.rb +1 -0
- data/app/lib/actions/katello/alternate_content_source/create.rb +1 -1
- data/app/lib/actions/katello/alternate_content_source/update.rb +2 -2
- data/app/lib/actions/katello/capsule_content/sync.rb +10 -2
- data/app/lib/actions/katello/cdn_configuration/update.rb +1 -1
- data/app/lib/actions/katello/content_view/promote.rb +1 -0
- data/app/lib/actions/katello/content_view/publish.rb +5 -2
- data/app/lib/actions/katello/content_view_version/auto_create_redhat_repositories.rb +7 -3
- data/app/lib/actions/katello/content_view_version/auto_create_repositories.rb +4 -2
- data/app/lib/actions/katello/content_view_version/import.rb +22 -10
- data/app/lib/actions/katello/product/destroy.rb +1 -1
- data/app/lib/actions/katello/repository/destroy.rb +3 -3
- data/app/lib/actions/katello/repository/errata_mail.rb +9 -6
- data/app/lib/actions/katello/repository/refresh_repository.rb +1 -1
- data/app/lib/actions/katello/repository/sync.rb +13 -6
- data/app/lib/actions/katello/repository_set/enable_repository.rb +6 -2
- data/app/lib/actions/pulp3/alternate_content_source/refresh_remote.rb +16 -0
- data/app/lib/actions/pulp3/orchestration/alternate_content_source/refresh.rb +1 -0
- data/app/lib/actions/pulp3/orchestration/content_view_version/export_library.rb +1 -1
- data/app/lib/actions/pulp3/orchestration/content_view_version/export_repository.rb +10 -2
- data/app/lib/katello/concerns/renderer_extensions.rb +2 -1
- data/app/lib/katello/errors.rb +2 -2
- data/app/lib/katello/resources/candlepin.rb +7 -1
- data/app/lib/katello/resources/cdn/katello_cdn.rb +3 -13
- data/app/lib/katello/resources/cdn.rb +14 -9
- data/app/lib/katello/util/candlepin_repository_checker.rb +73 -0
- data/app/models/katello/activation_key.rb +12 -1
- data/app/models/katello/alternate_content_source.rb +15 -4
- data/app/models/katello/alternate_content_source_product.rb +1 -1
- data/app/models/katello/authorization/repository.rb +2 -2
- data/app/models/katello/cdn_configuration.rb +12 -3
- data/app/models/katello/concerns/host_managed_extensions.rb +15 -2
- data/app/models/katello/concerns/http_proxy_extensions.rb +5 -10
- data/app/models/katello/concerns/smart_proxy_extensions.rb +30 -15
- data/app/models/katello/content.rb +15 -0
- data/app/models/katello/content_credential.rb +8 -9
- data/app/models/katello/content_view.rb +7 -3
- data/app/models/katello/content_view_component.rb +4 -0
- data/app/models/katello/content_view_version.rb +1 -1
- data/app/models/katello/erratum.rb +6 -2
- data/app/models/katello/host/content_facet.rb +13 -3
- data/app/models/katello/repository.rb +15 -1
- data/app/models/katello/root_repository.rb +0 -2
- data/app/overrides/add_smart_proxy_form.rb +5 -0
- data/app/presenters/katello/content_view_version_compare_presenter.rb +5 -0
- data/app/presenters/katello/host_package_presenter.rb +4 -4
- data/app/services/katello/pulp3/alternate_content_source.rb +23 -15
- data/app/services/katello/pulp3/ansible_collection.rb +7 -10
- data/app/services/katello/pulp3/content_view_version/export.rb +19 -6
- data/app/services/katello/pulp3/content_view_version/import.rb +2 -0
- data/app/services/katello/pulp3/content_view_version/import_validator.rb +21 -5
- data/app/services/katello/pulp3/content_view_version/importable_products.rb +11 -1
- data/app/services/katello/pulp3/content_view_version/importable_repositories.rb +38 -9
- data/app/services/katello/pulp3/content_view_version/metadata_generator.rb +12 -5
- data/app/services/katello/pulp3/content_view_version/metadata_map.rb +13 -2
- data/app/services/katello/pulp3/content_view_version/syncable_format_export.rb +5 -1
- data/app/services/katello/pulp3/pulp_content_unit.rb +3 -0
- data/app/services/katello/pulp3/repository.rb +18 -6
- data/app/services/katello/pulp3/repository_mirror.rb +0 -1
- data/app/services/katello/pulp3/smart_proxy_mirror_repository.rb +2 -2
- data/app/services/katello/pulp3/task_group.rb +18 -1
- data/app/services/katello/repository_type.rb +5 -2
- data/app/services/katello/repository_type_manager.rb +4 -3
- data/app/views/dashboard/_content_views_widget.html.erb +1 -1
- data/app/views/foreman/job_templates/change_content_source.erb +6 -0
- data/app/views/foreman/job_templates/update_packages_by_search_query.erb +7 -1
- data/app/views/katello/api/v2/alternate_content_sources/base.json.rabl +4 -4
- data/app/views/katello/api/v2/alternate_content_sources/index.json.rabl +1 -0
- data/app/views/katello/api/v2/alternate_content_sources/permissions.rabl +11 -0
- data/app/views/katello/api/v2/content_credentials/show.json.rabl +12 -0
- data/app/views/katello/api/v2/content_views/permissions.rabl +1 -0
- data/app/views/katello/api/v2/host_packages/base.json.rabl +1 -1
- data/app/views/katello/api/v2/module_streams/show.json.rabl +7 -0
- data/app/views/katello/api/v2/repositories/compare.json.rabl +10 -0
- data/app/views/katello/api/v2/smart_proxies/pulp_info.json.rabl +1 -0
- data/app/views/katello/hosts/_errata_counts.html.erb +46 -0
- data/app/views/overrides/activation_keys/_host_synced_content_select.html.erb +1 -0
- data/app/views/overrides/smart_proxies/_acs_http_proxy.html.erb +6 -0
- data/config/initializers/monkeys.rb +1 -0
- data/config/routes/api/v2.rb +2 -0
- data/config/routes.rb +3 -0
- data/db/migrate/20220730033504_update_custom_cdn.rb +13 -0
- data/db/migrate/20220920173656_add_http_proxy_to_smart_proxy.rb +7 -0
- data/db/migrate/20220920180858_remove_http_proxy_from_katello_alternate_content_sources.rb +6 -0
- data/engines/bastion/app/assets/javascripts/bastion/components/notification.service.js +1 -1
- data/engines/bastion/app/views/bastion/layouts/assets.html.erb +5 -5
- data/engines/bastion/vendor/assets/javascripts/bastion/angular/angular.js +1 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/content-credential.factory.js +17 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/content-credentials.routes.js +10 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/details/content-credential-acs.controller.js +36 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/details/content-credential-details.controller.js +7 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/details/views/content-credential-acs.html +38 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/details/views/content-credential-details.html +3 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/views/content-credentials.html +7 -2
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-hosts.controller.js +4 -2
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-info.html +1 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/content-hosts.html +4 -3
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +14 -1392
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/katello-features.run.js +1 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details.controller.js +7 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-details.html +1 -1
- data/lib/katello/permission_creator.rb +1 -0
- data/lib/katello/plugin.rb +34 -11
- data/lib/katello/repository_types/deb.rb +1 -1
- data/lib/katello/repository_types/docker.rb +1 -1
- data/lib/katello/repository_types/python.rb +3 -3
- data/lib/katello/tasks/check_candlepin_content.rake +16 -0
- data/lib/katello/tasks/reset.rake +1 -1
- data/lib/katello/version.rb +1 -1
- data/lib/monkeys/try_pulp_container_path.rb +35 -0
- data/locale/action_names.rb +7 -7
- data/locale/bn/katello.po +395 -63
- data/locale/cs/katello.po +396 -64
- data/locale/de/katello.po +399 -67
- data/locale/en/katello.po +395 -63
- data/locale/es/katello.po +399 -67
- data/locale/fr/katello.po +400 -68
- data/locale/gu/katello.po +395 -63
- data/locale/hi/katello.po +395 -63
- data/locale/it/katello.po +396 -64
- data/locale/ja/katello.po +400 -68
- data/locale/katello.pot +1916 -1213
- data/locale/kn/katello.po +395 -63
- data/locale/ko/katello.po +396 -64
- data/locale/mr/katello.po +395 -63
- data/locale/or/katello.po +395 -63
- data/locale/pa/katello.po +395 -63
- data/locale/pt/katello.po +395 -63
- data/locale/pt_BR/katello.po +399 -67
- data/locale/ru/katello.po +396 -64
- data/locale/ta/katello.po +395 -63
- data/locale/te/katello.po +395 -63
- data/locale/zh_CN/katello.po +400 -68
- data/locale/zh_TW/katello.po +396 -64
- data/webpack/components/Bookmark/index.js +5 -1
- data/webpack/components/Content/Details/ContentDetails.js +1 -1
- data/webpack/components/Content/Details/__tests__/__snapshots__/ContentDetails.test.js.snap +6 -0
- data/webpack/components/EditableSwitch.js +1 -0
- data/webpack/components/EditableTextInput/EditableTextInput.js +3 -3
- data/webpack/components/Errata/errataHelpers.js +33 -0
- data/webpack/components/Errata/index.js +45 -12
- data/webpack/components/Loading.js +18 -8
- data/webpack/components/Packages/index.js +8 -24
- data/webpack/components/RoutedTabs/index.js +1 -0
- data/webpack/components/Search/Search.js +20 -2
- data/webpack/components/Search/__tests__/search.test.js +3 -3
- data/webpack/components/Table/EmptyStateMessage.js +1 -1
- data/webpack/components/Table/PageControls.js +1 -0
- data/webpack/components/Table/TableHooks.js +4 -0
- data/webpack/components/Table/TableWrapper.js +7 -7
- data/webpack/components/TypeAhead/pf4Search/TypeAheadInput.js +1 -0
- data/webpack/components/TypeAhead/pf4Search/TypeAheadItems.js +2 -0
- data/webpack/components/TypeAhead/pf4Search/TypeAheadSearch.js +1 -1
- data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/ChangeHostCVModal.js +3 -1
- data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/ContentViewDetailsCard.js +2 -1
- data/webpack/components/extensions/HostDetails/Cards/ErrataOverviewCard.js +124 -68
- data/webpack/components/extensions/HostDetails/Cards/ErrataOverviewCard.scss +5 -0
- data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsCard.js +30 -4
- data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsCard.scss +23 -0
- data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsModal.js +5 -4
- data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/__tests__/hostCollectionsCard.test.js +25 -10
- data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeCard.js +3 -3
- data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeEditModal.js +6 -0
- data/webpack/components/extensions/HostDetails/Cards/__tests__/errataOverviewCard.test.js +145 -32
- data/webpack/components/extensions/HostDetails/DetailsTabCards/RegistrationCard.js +3 -1
- data/webpack/components/extensions/HostDetails/Tabs/ContentTab/constants.js +2 -1
- data/webpack/components/extensions/HostDetails/Tabs/ContentTab/index.js +1 -0
- data/webpack/components/extensions/HostDetails/Tabs/ErrataTab/ErrataTab.js +78 -26
- data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsTab.js +23 -10
- data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/HostPackagesConstants.js +1 -0
- data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackageInstallModal.js +9 -4
- data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackagesTab.js +141 -23
- data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackagesTab.scss +6 -1
- data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionActions.js +9 -8
- data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsTab.js +24 -3
- data/webpack/components/extensions/HostDetails/Tabs/TracesTab/EnableTracerModal.js +7 -2
- data/webpack/components/extensions/HostDetails/Tabs/TracesTab/TracesEnabler.js +2 -1
- data/webpack/components/extensions/HostDetails/Tabs/TracesTab/TracesTab.js +20 -4
- data/webpack/components/extensions/HostDetails/Tabs/__tests__/errataTab.test.js +56 -38
- data/webpack/components/extensions/HostDetails/Tabs/__tests__/packages.fixtures.json +3 -3
- data/webpack/components/extensions/HostDetails/Tabs/__tests__/packagesTab.test.js +5 -4
- data/webpack/components/extensions/HostDetails/Tabs/customizedRexUrlHelpers.js +3 -3
- data/webpack/containers/Application/config.js +2 -2
- data/webpack/containers/Application/overrides.scss +12 -0
- data/webpack/global_test_setup.js +19 -1
- data/webpack/ouia_id_check.js +0 -2
- data/webpack/redux/actions/RedHatRepositories/helpers.js +4 -8
- data/webpack/scenes/AlternateContentSources/ACSActions.js +37 -6
- data/webpack/scenes/AlternateContentSources/ACSConstants.js +2 -0
- data/webpack/scenes/AlternateContentSources/ACSIndexPage.js +1 -1
- data/webpack/scenes/AlternateContentSources/ACSSelectors.js +6 -6
- data/webpack/scenes/AlternateContentSources/Acs.scss +3 -0
- data/webpack/scenes/AlternateContentSources/Create/ACSCreateWizard.js +24 -3
- data/webpack/scenes/AlternateContentSources/Create/Steps/ACSCreateFinish.js +10 -8
- data/webpack/scenes/AlternateContentSources/Create/Steps/ACSCredentials.js +25 -4
- data/webpack/scenes/AlternateContentSources/Create/Steps/ACSReview.js +22 -11
- data/webpack/scenes/AlternateContentSources/Create/Steps/ACSSmartProxies.js +27 -2
- data/webpack/scenes/AlternateContentSources/Create/Steps/AcsUrlPaths.js +49 -17
- data/webpack/scenes/AlternateContentSources/Create/Steps/SelectSource.js +76 -23
- data/webpack/scenes/AlternateContentSources/Create/__tests__/acsCreate.test.js +159 -11
- data/webpack/scenes/AlternateContentSources/Details/ACSExpandableDetails.js +83 -29
- data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditCredentials.js +9 -8
- data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditDetails.js +2 -2
- data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditProducts.js +2 -2
- data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditSmartProxies.js +39 -7
- data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditURLPaths.js +27 -11
- data/webpack/scenes/AlternateContentSources/Details/__tests__/ACSEdits.test.js +58 -55
- data/webpack/scenes/AlternateContentSources/Details/__tests__/ACSExpandableDetails.test.js +35 -32
- data/webpack/scenes/AlternateContentSources/MainTable/ACSTable.js +323 -150
- data/webpack/scenes/AlternateContentSources/MainTable/__tests__/acsIndex.fixtures.json +5 -1
- data/webpack/scenes/AlternateContentSources/MainTable/__tests__/acsTable.test.js +10 -11
- data/webpack/scenes/AlternateContentSources/helpers.js +26 -0
- data/webpack/scenes/ContentViews/ContentViewsConstants.js +1 -0
- data/webpack/scenes/ContentViews/ContentViewsPage.js +1 -1
- data/webpack/scenes/ContentViews/Copy/CopyContentViewForm.js +1 -0
- data/webpack/scenes/ContentViews/Copy/CopyContentViewModal.js +1 -0
- data/webpack/scenes/ContentViews/Create/ContentViewFormComponents.js +10 -5
- data/webpack/scenes/ContentViews/Create/CreateContentViewForm.js +30 -7
- data/webpack/scenes/ContentViews/Create/CreateContentViewModal.js +1 -0
- data/webpack/scenes/ContentViews/Create/__tests__/createContentView.test.js +21 -6
- data/webpack/scenes/ContentViews/Delete/Steps/CVDeleteEnvironmentsSelection.js +3 -3
- data/webpack/scenes/ContentViews/Delete/Steps/CVDeletionReassignActivationKeysForm.js +1 -0
- data/webpack/scenes/ContentViews/Delete/Steps/CVDeletionReassignHostsForm.js +1 -0
- data/webpack/scenes/ContentViews/Delete/__tests__/CvData.fixtures.json +2 -0
- data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewAddModal.js +3 -0
- data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewBulkAddModal.js +4 -1
- data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentVersion.js +1 -1
- data/webpack/scenes/ContentViews/Details/ComponentContentViews/ContentViewComponents.js +2 -1
- data/webpack/scenes/ContentViews/Details/ContentViewDetailActions.js +14 -0
- data/webpack/scenes/ContentViews/Details/ContentViewDetailSelectors.js +11 -1
- data/webpack/scenes/ContentViews/Details/ContentViewDetails.js +1 -1
- data/webpack/scenes/ContentViews/Details/ContentViewInfo.js +2 -0
- data/webpack/scenes/ContentViews/Details/Filters/Add/CVFilterAddModal.js +5 -0
- data/webpack/scenes/ContentViews/Details/Filters/AffectedRepositories/AffectedRepositorySelection.js +1 -0
- data/webpack/scenes/ContentViews/Details/Filters/ArtifactsWithNoErrata.js +1 -0
- data/webpack/scenes/ContentViews/Details/Filters/CVContainerImageFilterContent.js +8 -2
- data/webpack/scenes/ContentViews/Details/Filters/CVDebFilterContent.js +5 -1
- data/webpack/scenes/ContentViews/Details/Filters/CVErrataDateFilterContent.js +22 -6
- data/webpack/scenes/ContentViews/Details/Filters/CVErrataIDFilterContent.js +19 -9
- data/webpack/scenes/ContentViews/Details/Filters/CVModuleStreamFilterContent.js +9 -2
- data/webpack/scenes/ContentViews/Details/Filters/CVPackageGroupFilterContent.js +9 -2
- data/webpack/scenes/ContentViews/Details/Filters/CVRpmFilterContent.js +8 -2
- data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilterDetailsHeader.js +1 -1
- data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilters.js +2 -1
- data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/CVRpmMatchContentModal.js +3 -2
- data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/__tests__/CVRpmMatchContentModal.test.js +1 -1
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVContainerImageFilterContent.test.js +2 -2
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVRpmFilterContent.test.js +1 -1
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilterDetails.test.js +1 -1
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.test.js +1 -1
- data/webpack/scenes/ContentViews/Details/Histories/ContentViewHistories.js +2 -2
- data/webpack/scenes/ContentViews/Details/Promote/ContentViewVersionPromote.js +2 -0
- data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +2 -1
- data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/Steps/ReviewEnvironments.js +3 -3
- data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompare.js +9 -1
- data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompareConfig.js +83 -0
- data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompareTable.js +32 -8
- data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/CVVersionCompare.test.js +56 -3
- data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/cvCompareRepositories.fixtures.json +175 -0
- data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersions.js +6 -2
- data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVEnvironmentSelectionForm.js +3 -3
- data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVReassignActivationKeysForm.js +1 -0
- data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVReassignHostsForm.js +1 -0
- data/webpack/scenes/ContentViews/Details/Versions/Delete/affectedActivationKeys.js +2 -2
- data/webpack/scenes/ContentViews/Details/Versions/Delete/affectedHosts.js +2 -2
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailConfig.js +2 -2
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetails.js +1 -0
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailsHeader.js +4 -1
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailsTable.js +5 -4
- data/webpack/scenes/ContentViews/Publish/CVPublishForm.js +5 -1
- data/webpack/scenes/ContentViews/Publish/CVPublishReview.js +3 -3
- data/webpack/scenes/ContentViews/Table/ContentViewsTable.js +10 -5
- data/webpack/scenes/ContentViews/__tests__/basicContentViews.fixtures.js +2 -0
- data/webpack/scenes/ContentViews/__tests__/contentViewList.fixtures.json +1 -0
- data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +81 -19
- data/webpack/scenes/ContentViews/components/CVBreadCrumb.js +1 -1
- data/webpack/scenes/ContentViews/components/EnvironmentPaths/EnvironmentPaths.js +1 -0
- data/webpack/scenes/ContentViews/components/InactiveText.js +9 -1
- data/webpack/scenes/ContentViews/expansions/RelatedCompositeContentViewsModal.js +4 -2
- data/webpack/scenes/ContentViews/expansions/RelatedContentViewComponentsModal.js +3 -2
- data/webpack/scenes/Hosts/ChangeContentSource/actions.js +18 -11
- data/webpack/scenes/Hosts/ChangeContentSource/components/ContentSourceForm.js +15 -8
- data/webpack/scenes/Hosts/ChangeContentSource/components/FormField.js +3 -4
- data/webpack/scenes/Hosts/ChangeContentSource/components/Hosts.js +55 -0
- data/webpack/scenes/Hosts/ChangeContentSource/components/HostsModal.js +59 -0
- data/webpack/scenes/Hosts/ChangeContentSource/constants.js +1 -0
- data/webpack/scenes/Hosts/ChangeContentSource/helpers.js +2 -5
- data/webpack/scenes/Hosts/ChangeContentSource/index.js +46 -41
- data/webpack/scenes/Hosts/ChangeContentSource/selectors.js +5 -5
- data/webpack/scenes/ModuleStreams/Details/ModuleDetailsSchema.js +10 -1
- data/webpack/scenes/ModuleStreams/Details/ModuleStreamDetails.js +1 -1
- data/webpack/scenes/ModuleStreams/Details/__tests__/__snapshots__/ModuleStreamDetails.test.js.snap +97 -2
- data/webpack/scenes/Organizations/OrganizationSelectors.js +1 -0
- data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/CdnConfigurationConstants.js +2 -1
- data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/CdnTypeForm.js +10 -25
- data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/CustomCdnTypeForm.js +154 -0
- data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/ExportSyncForm.js +4 -4
- data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/NetworkSyncForm.js +59 -44
- data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/__tests__/CdnTypeForm.test.js +3 -28
- data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/__tests__/CustomCdnTypeForm.test.js +97 -0
- data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/__tests__/ExportSyncForm.test.js +1 -1
- data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/__tests__/NetworkSyncForm.test.js +4 -4
- data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/index.js +23 -10
- data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.js +1 -1
- data/webpack/scenes/Subscriptions/SubscriptionConstants.js +2 -1
- data/webpack/scenes/Subscriptions/SubscriptionsPage.js +5 -5
- data/webpack/scenes/Subscriptions/UpstreamSubscriptions/UpstreamSubscriptionsPage.js +3 -3
- data/webpack/scenes/Subscriptions/UpstreamSubscriptions/__tests__/__snapshots__/UpstreamSubscriptionsPage.test.js.snap +2 -2
- data/webpack/scenes/Subscriptions/__tests__/__snapshots__/SubscriptionsPage.test.js.snap +3 -3
- data/webpack/scenes/Subscriptions/components/SubscriptionsToolbar/SubscriptionsToolbar.js +3 -3
- data/webpack/scenes/Tasks/helpers.js +14 -7
- metadata +54 -35
- data/app/lib/actions/pulp3/orchestration/alternate_content_source/refresh_remote.rb +0 -18
- data/db/migrate/20221206170122_update_ignore_srpm_to_false_for_mirror_complete.rb +0 -5
- data/vendor/assets/javascripts/katello/jquery.trunk8.js +0 -203
@@ -355,13 +355,34 @@ const RepositorySetsTab = () => {
|
|
355
355
|
cannot(createBookmarks, userPermissionsFromHostDetails({ hostDetails }));
|
356
356
|
|
357
357
|
const dropdownItems = [
|
358
|
-
<DropdownItem
|
358
|
+
<DropdownItem
|
359
|
+
aria-label="bulk_enable"
|
360
|
+
key="bulk_enable"
|
361
|
+
ouiaId="bulk_enable"
|
362
|
+
component="button"
|
363
|
+
onClick={enableRepoSets}
|
364
|
+
isDisabled={selectedCount === 0}
|
365
|
+
>
|
359
366
|
{__('Override to enabled')}
|
360
367
|
</DropdownItem>,
|
361
|
-
<DropdownItem
|
368
|
+
<DropdownItem
|
369
|
+
aria-label="bulk_disable"
|
370
|
+
key="bulk_disable"
|
371
|
+
ouiaId="bulk_disable"
|
372
|
+
component="button"
|
373
|
+
onClick={disableRepoSets}
|
374
|
+
isDisabled={selectedCount === 0}
|
375
|
+
>
|
362
376
|
{__('Override to disabled')}
|
363
377
|
</DropdownItem>,
|
364
|
-
<DropdownItem
|
378
|
+
<DropdownItem
|
379
|
+
aria-label="bulk_reset_default"
|
380
|
+
key="bulk_reset_default"
|
381
|
+
ouiaId="bulk_reset_default"
|
382
|
+
component="button"
|
383
|
+
onClick={resetToDefaultRepoSets}
|
384
|
+
isDisabled={selectedCount === 0}
|
385
|
+
>
|
365
386
|
{__('Reset to default')}
|
366
387
|
</DropdownItem>,
|
367
388
|
];
|
@@ -43,7 +43,7 @@ const EnableTracerModal = ({ isOpen, setIsOpen, triggerJobStart }) => {
|
|
43
43
|
};
|
44
44
|
|
45
45
|
const dropdownItems = dropdownOptions.map(text => (
|
46
|
-
<DropdownItem key={`option_${text}`} onClick={() => setSelectedOption(text)}>{text}</DropdownItem>
|
46
|
+
<DropdownItem key={`option_${text}`} ouiaId={`option_${text}`} onClick={() => setSelectedOption(text)}>{text}</DropdownItem>
|
47
47
|
));
|
48
48
|
|
49
49
|
const customizedRexUrl = katelloPackageInstallUrl({ hostname, packages: KATELLO_TRACER_PACKAGE });
|
@@ -54,6 +54,7 @@ const EnableTracerModal = ({ isOpen, setIsOpen, triggerJobStart }) => {
|
|
54
54
|
return (
|
55
55
|
<Button
|
56
56
|
key="enable_button"
|
57
|
+
ouiaId="enable-button-via-rex"
|
57
58
|
type="submit"
|
58
59
|
variant="primary"
|
59
60
|
isLoading={buttonLoading}
|
@@ -67,6 +68,7 @@ const EnableTracerModal = ({ isOpen, setIsOpen, triggerJobStart }) => {
|
|
67
68
|
return (
|
68
69
|
<Button
|
69
70
|
key="enable_button"
|
71
|
+
ouiaId="enable-button-via-customized-rex"
|
70
72
|
component="a"
|
71
73
|
isLoading={buttonLoading}
|
72
74
|
isDisabled={buttonLoading}
|
@@ -83,12 +85,13 @@ const EnableTracerModal = ({ isOpen, setIsOpen, triggerJobStart }) => {
|
|
83
85
|
<Modal
|
84
86
|
variant={ModalVariant.small}
|
85
87
|
title={title}
|
88
|
+
ouiaId="enable-tracer-modal"
|
86
89
|
width="28em"
|
87
90
|
isOpen={isOpen}
|
88
91
|
onClose={handleClose}
|
89
92
|
actions={[
|
90
93
|
getEnableTracerButton(),
|
91
|
-
<Button key="cancel_button" variant="link" onClick={() => setIsOpen(false)}>{__('Cancel')}</Button>,
|
94
|
+
<Button key="cancel_button" ouiaId="cancel-button" variant="link" onClick={() => setIsOpen(false)}>{__('Cancel')}</Button>,
|
92
95
|
]}
|
93
96
|
>
|
94
97
|
<Flex direction={{ default: 'column' }}>
|
@@ -96,9 +99,11 @@ const EnableTracerModal = ({ isOpen, setIsOpen, triggerJobStart }) => {
|
|
96
99
|
<FlexItem><div>{__('Select a provider to install katello-host-tools-tracer')}</div></FlexItem>
|
97
100
|
<FlexItem>
|
98
101
|
<Dropdown
|
102
|
+
ouiaId="enable-tracer-modal-dropdown"
|
99
103
|
toggle={
|
100
104
|
<DropdownToggle
|
101
105
|
id="toggle-enable-tracer-modal-dropdown"
|
106
|
+
ouiaId="enable-tracer-modal-dropdown-toggle"
|
102
107
|
onToggle={toggleDropdownOpen}
|
103
108
|
toggleIndicator={CaretDownIcon}
|
104
109
|
isDisabled={buttonLoading}
|
@@ -23,6 +23,7 @@ const EnableTracerButton = ({ setEnableTracerModalOpen, pollingStarted }) => (
|
|
23
23
|
<Button
|
24
24
|
onClick={() => setEnableTracerModalOpen(true)}
|
25
25
|
isDisabled={pollingStarted}
|
26
|
+
ouiaId="enable-traces-button"
|
26
27
|
>
|
27
28
|
{__('Enable Traces')}
|
28
29
|
</Button>
|
@@ -70,7 +71,7 @@ const TracesEnabler = ({ hostname }) => {
|
|
70
71
|
<Spinner /> :
|
71
72
|
<EmptyStateIcon icon={WrenchIcon} />
|
72
73
|
}
|
73
|
-
<Title headingLevel="h2" size="lg">
|
74
|
+
<Title ouiaId="enable-tracer-title" headingLevel="h2" size="lg">
|
74
75
|
{pollingStarted ? enablingTitle : title}
|
75
76
|
</Title>
|
76
77
|
<EmptyStateBody>
|
@@ -125,10 +125,24 @@ const TracesTab = () => {
|
|
125
125
|
cannot(createBookmarks, userPermissionsFromHostDetails({ hostDetails }));
|
126
126
|
|
127
127
|
const dropdownItems = [
|
128
|
-
<DropdownItem
|
128
|
+
<DropdownItem
|
129
|
+
isDisabled={selectedCount === 0}
|
130
|
+
aria-label="bulk_rex"
|
131
|
+
ouiaId="bulk_rex"
|
132
|
+
key="bulk_rex"
|
133
|
+
component="button"
|
134
|
+
onClick={onBulkRestartApp}
|
135
|
+
>
|
129
136
|
{__('Restart via remote execution')}
|
130
137
|
</DropdownItem>,
|
131
|
-
<DropdownItem
|
138
|
+
<DropdownItem
|
139
|
+
isDisabled={selectedCount === 0}
|
140
|
+
aria-label="bulk_rex_customized"
|
141
|
+
ouiaId="bulk_rex_customized"
|
142
|
+
key="bulk_rex_customized"
|
143
|
+
component="a"
|
144
|
+
href={bulkCustomizedRexUrl()}
|
145
|
+
>
|
132
146
|
{__('Restart via customized remote execution')}
|
133
147
|
</DropdownItem>,
|
134
148
|
];
|
@@ -140,9 +154,11 @@ const TracesTab = () => {
|
|
140
154
|
<ActionListItem>
|
141
155
|
<Dropdown
|
142
156
|
aria-label="bulk_actions_dropdown"
|
157
|
+
ouiaId="bulk_actions_dropdown"
|
143
158
|
toggle={
|
144
159
|
<DropdownToggle
|
145
160
|
aria-label="bulk_actions"
|
161
|
+
ouiaId="bulk_actions"
|
146
162
|
splitButtonItems={[
|
147
163
|
<DropdownToggleAction key="action" onClick={onBulkRestartApp}>
|
148
164
|
{__('Restart app')}
|
@@ -205,7 +221,7 @@ const TracesTab = () => {
|
|
205
221
|
requestKey={HOST_TRACES_KEY}
|
206
222
|
>
|
207
223
|
<Thead>
|
208
|
-
<Tr>
|
224
|
+
<Tr ouiaId="row-header">
|
209
225
|
<Th key="select_checkbox" />
|
210
226
|
<SortableColumnHeaders
|
211
227
|
columnHeaders={columnHeaders}
|
@@ -239,7 +255,7 @@ const TracesTab = () => {
|
|
239
255
|
];
|
240
256
|
}
|
241
257
|
return (
|
242
|
-
<Tr key={id} >
|
258
|
+
<Tr key={id} ouiaId={`row-${id}`} >
|
243
259
|
{showActions ? (
|
244
260
|
<Td
|
245
261
|
select={{
|
@@ -23,7 +23,20 @@ const contentFacetAttributes = {
|
|
23
23
|
uuid: 'e5761ea3-4117-4ecf-83d0-b694f99b389e',
|
24
24
|
content_view_default: false,
|
25
25
|
lifecycle_environment_library: false,
|
26
|
+
errata_counts: {
|
27
|
+
total: 3,
|
28
|
+
},
|
26
29
|
};
|
30
|
+
|
31
|
+
const cfWithErrataTotal = total => ({
|
32
|
+
...contentFacetAttributes,
|
33
|
+
errata_counts: {
|
34
|
+
total,
|
35
|
+
},
|
36
|
+
});
|
37
|
+
|
38
|
+
const cfNoErrata = cfWithErrataTotal(0);
|
39
|
+
|
27
40
|
const hostName = 'foo.example.com';
|
28
41
|
|
29
42
|
const errataBookmarks = foremanApi.getApiUrl('/bookmarks?search=controller%3Dkatello_errata');
|
@@ -36,6 +49,8 @@ const renderOptions = (facetAttributes = contentFacetAttributes) => ({
|
|
36
49
|
response: {
|
37
50
|
id: 1,
|
38
51
|
name: hostName,
|
52
|
+
errata_status_label: 'Security errata applicable',
|
53
|
+
errata_status: 2,
|
39
54
|
content_facet_attributes: { ...facetAttributes },
|
40
55
|
},
|
41
56
|
status: 'RESOLVED',
|
@@ -145,7 +160,7 @@ test('Can handle no errata being present', async (done) => {
|
|
145
160
|
.query(defaultQuery)
|
146
161
|
.reply(200, noResults);
|
147
162
|
|
148
|
-
const { queryByText } = renderWithRedux(<ErrataTab />, renderOptions());
|
163
|
+
const { queryByText } = renderWithRedux(<ErrataTab />, renderOptions(cfNoErrata));
|
149
164
|
|
150
165
|
// Assert that there are not any errata showing on the screen.
|
151
166
|
await patientlyWaitFor(() => expect(queryByText('This host has errata that are applicable, but not installable.')).toBeInTheDocument());
|
@@ -252,7 +267,7 @@ test('Can select all errata across pages through checkbox', async (done) => {
|
|
252
267
|
getAllByText,
|
253
268
|
getByLabelText,
|
254
269
|
getAllByLabelText,
|
255
|
-
} = renderWithRedux(<ErrataTab />, renderOptions());
|
270
|
+
} = renderWithRedux(<ErrataTab />, renderOptions(cfWithErrataTotal(mockErrata.total)));
|
256
271
|
|
257
272
|
// Assert that the errata are now showing on the screen, but wait for them to appear.
|
258
273
|
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
@@ -293,7 +308,7 @@ test('Can deselect all errata across pages through checkbox', async (done) => {
|
|
293
308
|
getAllByText,
|
294
309
|
getByLabelText,
|
295
310
|
getAllByLabelText,
|
296
|
-
} = renderWithRedux(<ErrataTab />, renderOptions());
|
311
|
+
} = renderWithRedux(<ErrataTab />, renderOptions(cfWithErrataTotal(mockErrata.total)));
|
297
312
|
|
298
313
|
// Assert that the errata are now showing on the screen, but wait for them to appear.
|
299
314
|
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
@@ -337,7 +352,7 @@ test('Can select & deselect errata across pages', async (done) => {
|
|
337
352
|
getAllByText,
|
338
353
|
getByLabelText,
|
339
354
|
getAllByLabelText,
|
340
|
-
} = renderWithRedux(<ErrataTab />, renderOptions());
|
355
|
+
} = renderWithRedux(<ErrataTab />, renderOptions(cfWithErrataTotal(100)));
|
341
356
|
|
342
357
|
// Assert that the errata are now showing on the screen, but wait for them to appear.
|
343
358
|
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
@@ -373,7 +388,7 @@ test('Can select & de-select all errata through selectDropDown', async (done) =>
|
|
373
388
|
queryByText,
|
374
389
|
getAllByText,
|
375
390
|
getByLabelText,
|
376
|
-
} = renderWithRedux(<ErrataTab />, renderOptions());
|
391
|
+
} = renderWithRedux(<ErrataTab />, renderOptions(cfWithErrataTotal(mockErrata.total)));
|
377
392
|
|
378
393
|
// Assert that the errata are now showing on the screen, but wait for them to appear.
|
379
394
|
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
@@ -425,7 +440,7 @@ test('Can de-select items in select all mode across pages', async (done) => {
|
|
425
440
|
getAllByText,
|
426
441
|
getByLabelText,
|
427
442
|
getAllByLabelText,
|
428
|
-
} = renderWithRedux(<ErrataTab />, renderOptions());
|
443
|
+
} = renderWithRedux(<ErrataTab />, renderOptions(cfWithErrataTotal(mockErrata.total)));
|
429
444
|
|
430
445
|
// Assert that the errata are now showing on the screen, but wait for them to appear.
|
431
446
|
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
@@ -482,7 +497,7 @@ test('Can select page and select only items on the page', async (done) => {
|
|
482
497
|
queryByText,
|
483
498
|
getAllByText,
|
484
499
|
getByLabelText,
|
485
|
-
} = renderWithRedux(<ErrataTab />, renderOptions());
|
500
|
+
} = renderWithRedux(<ErrataTab />, renderOptions(cfWithErrataTotal(mockErrata.total)));
|
486
501
|
|
487
502
|
// Assert that the errata are now showing on the screen, but wait for them to appear.
|
488
503
|
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
@@ -516,7 +531,7 @@ test('Select all is disabled if all rows are selected', async (done) => {
|
|
516
531
|
queryByText,
|
517
532
|
getAllByText,
|
518
533
|
getByLabelText,
|
519
|
-
} = renderWithRedux(<ErrataTab />, renderOptions());
|
534
|
+
} = renderWithRedux(<ErrataTab />, renderOptions(cfWithErrataTotal(mockErrata.total)));
|
520
535
|
|
521
536
|
// Assert that the errata are now showing on the screen, but wait for them to appear.
|
522
537
|
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
@@ -568,7 +583,7 @@ test('Toggle Group shows if it\'s not the default content view or library enviro
|
|
568
583
|
const {
|
569
584
|
queryByLabelText,
|
570
585
|
getAllByText,
|
571
|
-
} = renderWithRedux(<ErrataTab />, renderOptions());
|
586
|
+
} = renderWithRedux(<ErrataTab />, renderOptions(cfWithErrataTotal(mockErrata.total)));
|
572
587
|
|
573
588
|
// Assert that the errata are now showing on the screen, but wait for them to appear.
|
574
589
|
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
@@ -578,13 +593,13 @@ test('Toggle Group shows if it\'s not the default content view or library enviro
|
|
578
593
|
});
|
579
594
|
|
580
595
|
test('Toggle Group shows if it\'s the default content view but non-library environment', async (done) => {
|
581
|
-
const options = renderOptions({
|
582
|
-
...contentFacetAttributes,
|
583
|
-
content_view_default: true,
|
584
|
-
});
|
585
596
|
// Setup autocomplete with mockForemanAutoComplete since we aren't adding /katello
|
586
597
|
const autocompleteScope = mockForemanAutocomplete(nockInstance, autocompleteUrl);
|
587
598
|
const mockErrata = makeMockErrata({});
|
599
|
+
const options = renderOptions({
|
600
|
+
...cfWithErrataTotal(mockErrata.total),
|
601
|
+
content_view_default: true,
|
602
|
+
});
|
588
603
|
// return errata data results when we look for errata
|
589
604
|
const scope = nockInstance
|
590
605
|
.get(hostErrata)
|
@@ -604,13 +619,14 @@ test('Toggle Group shows if it\'s the default content view but non-library envir
|
|
604
619
|
});
|
605
620
|
|
606
621
|
test('Toggle Group shows if it\'s the library environment but non-default content view', async (done) => {
|
607
|
-
const options = renderOptions({
|
608
|
-
...contentFacetAttributes,
|
609
|
-
lifecycle_environment_library: true,
|
610
|
-
});
|
611
622
|
// Setup autocomplete with mockForemanAutoComplete since we aren't adding /katello
|
612
623
|
const autocompleteScope = mockForemanAutocomplete(nockInstance, autocompleteUrl);
|
613
624
|
const mockErrata = makeMockErrata({});
|
625
|
+
const options = renderOptions({
|
626
|
+
...cfWithErrataTotal(mockErrata.total),
|
627
|
+
lifecycle_environment_library: true,
|
628
|
+
});
|
629
|
+
|
614
630
|
// return errata data results when we look for errata
|
615
631
|
const scope = nockInstance
|
616
632
|
.get(hostErrata)
|
@@ -630,14 +646,14 @@ test('Toggle Group shows if it\'s the library environment but non-default conten
|
|
630
646
|
});
|
631
647
|
|
632
648
|
test('Toggle Group does not show if it\'s the default content view and library environment', async (done) => {
|
649
|
+
// Setup autocomplete with mockForemanAutoComplete since we aren't adding /katello
|
650
|
+
const autocompleteScope = mockForemanAutocomplete(nockInstance, autocompleteUrl);
|
651
|
+
const mockErrata = makeMockErrata({});
|
633
652
|
const options = renderOptions({
|
634
|
-
...
|
653
|
+
...cfWithErrataTotal(mockErrata.total),
|
635
654
|
content_view_default: true,
|
636
655
|
lifecycle_environment_library: true,
|
637
656
|
});
|
638
|
-
// Setup autocomplete with mockForemanAutoComplete since we aren't adding /katello
|
639
|
-
const autocompleteScope = mockForemanAutocomplete(nockInstance, autocompleteUrl);
|
640
|
-
const mockErrata = makeMockErrata({});
|
641
657
|
// return errata data results when we look for errata
|
642
658
|
const scope = nockInstance
|
643
659
|
.get(hostErrata)
|
@@ -669,7 +685,7 @@ test('Selection is disabled for errata which are applicable but not installable'
|
|
669
685
|
const {
|
670
686
|
getAllByText,
|
671
687
|
getByLabelText,
|
672
|
-
} = renderWithRedux(<ErrataTab />, renderOptions());
|
688
|
+
} = renderWithRedux(<ErrataTab />, renderOptions(cfWithErrataTotal(3)));
|
673
689
|
|
674
690
|
// Assert that the errata are now showing on the screen, but wait for them to appear.
|
675
691
|
await patientlyWaitFor(() => expect(getAllByText(firstErrata.severity)[0]).toBeInTheDocument());
|
@@ -705,7 +721,7 @@ test('Can select only installable errata across pages through checkbox', async (
|
|
705
721
|
getAllByText,
|
706
722
|
getByLabelText,
|
707
723
|
getAllByLabelText,
|
708
|
-
} = renderWithRedux(<ErrataTab />, renderOptions());
|
724
|
+
} = renderWithRedux(<ErrataTab />, renderOptions(cfWithErrataTotal(mockErrata.total)));
|
709
725
|
|
710
726
|
// Assert that the errata are now showing on the screen, but wait for them to appear.
|
711
727
|
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
@@ -736,14 +752,16 @@ test('Can toggle with the Toggle Group ', async (done) => {
|
|
736
752
|
|
737
753
|
const {
|
738
754
|
queryByLabelText,
|
755
|
+
getByText,
|
739
756
|
getAllByText,
|
740
|
-
} = renderWithRedux(<ErrataTab />, renderOptions());
|
757
|
+
} = renderWithRedux(<ErrataTab />, renderOptions(cfWithErrataTotal(mockErrata.total)));
|
741
758
|
|
742
759
|
// Assert that the errata are now showing on the screen, but wait for them to appear.
|
743
760
|
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
744
761
|
expect(queryByLabelText('Installable Errata')).toBeInTheDocument();
|
745
|
-
expect(
|
746
|
-
expect(
|
762
|
+
expect(getByText('Applicable')).toBeInTheDocument();
|
763
|
+
expect(getByText('Applicable').parentElement).toHaveAttribute('aria-pressed', 'false');
|
764
|
+
expect(getAllByText('Installable')[0].parentElement).toHaveAttribute('aria-pressed', 'true');
|
747
765
|
assertNockRequest(autocompleteScope);
|
748
766
|
assertNockRequest(scope, done); // Pass jest callback to confirm test is done
|
749
767
|
});
|
@@ -766,7 +784,7 @@ test('Can filter by errata type', async (done) => {
|
|
766
784
|
getByRole,
|
767
785
|
getAllByText,
|
768
786
|
getByText,
|
769
|
-
} = renderWithRedux(<ErrataTab />, renderOptions());
|
787
|
+
} = renderWithRedux(<ErrataTab />, renderOptions(cfWithErrataTotal(3)));
|
770
788
|
|
771
789
|
// Assert that the errata are now showing on the screen, but wait for them to appear.
|
772
790
|
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
@@ -810,7 +828,7 @@ test('Can filter by severity', async (done) => {
|
|
810
828
|
queryByLabelText,
|
811
829
|
getAllByText,
|
812
830
|
getByText,
|
813
|
-
} = renderWithRedux(<ErrataTab />, renderOptions());
|
831
|
+
} = renderWithRedux(<ErrataTab />, renderOptions(cfWithErrataTotal(3)));
|
814
832
|
|
815
833
|
// Assert that the errata are now showing on the screen, but wait for them to appear.
|
816
834
|
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
@@ -844,7 +862,7 @@ test('apply button chooses katello agent if enabled', async (done) => {
|
|
844
862
|
const autocompleteScope = mockForemanAutocomplete(nockInstance, autocompleteUrl);
|
845
863
|
const mockErrata = makeMockErrata({});
|
846
864
|
const options = renderOptions({
|
847
|
-
...
|
865
|
+
...cfWithErrataTotal(mockErrata.total),
|
848
866
|
katelloAgentInstalled: true,
|
849
867
|
katelloAgentEnabled: true,
|
850
868
|
});
|
@@ -882,7 +900,7 @@ test('Can bulk apply via katello agent', async (done) => {
|
|
882
900
|
const mockErrata = makeMockErrata({});
|
883
901
|
const { results } = mockErrata;
|
884
902
|
const options = renderOptions({
|
885
|
-
...
|
903
|
+
...cfWithErrataTotal(mockErrata.total),
|
886
904
|
katelloAgentInstalled: true,
|
887
905
|
katelloAgentEnabled: true,
|
888
906
|
});
|
@@ -928,7 +946,7 @@ test('Can select all, exclude and bulk apply via katello agent', async (done) =>
|
|
928
946
|
const mockErrata = makeMockErrata({});
|
929
947
|
const { results } = mockErrata;
|
930
948
|
const options = renderOptions({
|
931
|
-
...
|
949
|
+
...cfWithErrataTotal(mockErrata.total),
|
932
950
|
katelloAgentInstalled: true,
|
933
951
|
katelloAgentEnabled: true,
|
934
952
|
});
|
@@ -973,7 +991,7 @@ test('Apply button chooses remote execution', async (done) => {
|
|
973
991
|
const autocompleteScope = mockForemanAutocomplete(nockInstance, autocompleteUrl);
|
974
992
|
const mockErrata = makeMockErrata({});
|
975
993
|
const options = renderOptions({
|
976
|
-
...
|
994
|
+
...cfWithErrataTotal(mockErrata.total),
|
977
995
|
katelloAgentInstalled: true,
|
978
996
|
katelloAgentEnabled: true,
|
979
997
|
remoteExecutionByDefault: true,
|
@@ -1029,7 +1047,7 @@ test('Can bulk apply via remote execution', async (done) => {
|
|
1029
1047
|
|
1030
1048
|
const { getAllByText, getByLabelText, queryByText } = renderWithRedux(
|
1031
1049
|
<ErrataTab />,
|
1032
|
-
renderOptions(),
|
1050
|
+
renderOptions(cfWithErrataTotal(mockErrata.total)),
|
1033
1051
|
);
|
1034
1052
|
// Assert that the errata are now showing on the screen, but wait for them to appear.
|
1035
1053
|
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
@@ -1068,7 +1086,7 @@ test('Can select all, exclude and bulk apply via remote execution', async (done)
|
|
1068
1086
|
|
1069
1087
|
const { getAllByText, getByLabelText, queryByText } = renderWithRedux(
|
1070
1088
|
<ErrataTab />,
|
1071
|
-
renderOptions(),
|
1089
|
+
renderOptions(cfWithErrataTotal(mockErrata.total)),
|
1072
1090
|
);
|
1073
1091
|
// Assert that the errata are now showing on the screen, but wait for them to appear.
|
1074
1092
|
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
@@ -1099,7 +1117,7 @@ test('Can apply errata in bulk via customized remote execution', async (done) =>
|
|
1099
1117
|
|
1100
1118
|
const { getAllByText, getByLabelText, queryByText } = renderWithRedux(
|
1101
1119
|
<ErrataTab />,
|
1102
|
-
renderOptions(),
|
1120
|
+
renderOptions(cfWithErrataTotal(mockErrata.total)),
|
1103
1121
|
);
|
1104
1122
|
|
1105
1123
|
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
@@ -1127,7 +1145,7 @@ test('Can apply a single erratum to the host via katello agent', async (done) =>
|
|
1127
1145
|
const mockErrata = makeMockErrata({});
|
1128
1146
|
const { results } = mockErrata;
|
1129
1147
|
const options = renderOptions({
|
1130
|
-
...
|
1148
|
+
...cfWithErrataTotal(mockErrata.total),
|
1131
1149
|
katelloAgentInstalled: true,
|
1132
1150
|
katelloAgentEnabled: true,
|
1133
1151
|
});
|
@@ -1183,7 +1201,7 @@ test('Can apply a single erratum to the host via remote execution', async (done)
|
|
1183
1201
|
|
1184
1202
|
const { getByText, getAllByText, getByLabelText } = renderWithRedux(
|
1185
1203
|
<ErrataTab />,
|
1186
|
-
renderOptions(),
|
1204
|
+
renderOptions(cfWithErrataTotal(mockErrata.total)),
|
1187
1205
|
);
|
1188
1206
|
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
1189
1207
|
const erratumActionMenu = within(getByLabelText('Select row 0').closest('tr')).getByLabelText('Actions');
|
@@ -1215,7 +1233,7 @@ test('Can apply a single erratum to the host via customized remote execution', a
|
|
1215
1233
|
|
1216
1234
|
const { getByText, getAllByText, getByLabelText } = renderWithRedux(
|
1217
1235
|
<ErrataTab />,
|
1218
|
-
renderOptions(),
|
1236
|
+
renderOptions(cfWithErrataTotal(mockErrata.total)),
|
1219
1237
|
);
|
1220
1238
|
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
1221
1239
|
const erratumActionMenu = within(getByLabelText('Select row 0').closest('tr')).getByLabelText('Actions');
|
@@ -10,19 +10,19 @@
|
|
10
10
|
"id": 738,
|
11
11
|
"name": "coreutils",
|
12
12
|
"nvra": "coreutils-8.30-6.el8.x86_64",
|
13
|
-
"
|
13
|
+
"upgradable_versions": ["coreutils-9.0-1.el8.x86_64"]
|
14
14
|
},
|
15
15
|
{
|
16
16
|
"id": 646,
|
17
17
|
"name": "chrony",
|
18
18
|
"nvra": "chrony-3.3-3.el8.x86_64",
|
19
|
-
"
|
19
|
+
"upgradable_versions": ["chrony-4.0-1.el8.x86_64"]
|
20
20
|
},
|
21
21
|
{
|
22
22
|
"id": 676,
|
23
23
|
"name": "acl",
|
24
24
|
"nvra": "acl-2.2.53-1.el8.x86_64",
|
25
|
-
"
|
25
|
+
"upgradable_versions": null
|
26
26
|
}
|
27
27
|
]
|
28
28
|
}
|
@@ -2,7 +2,7 @@ import React from 'react';
|
|
2
2
|
import { renderWithRedux, patientlyWaitFor, fireEvent } from 'react-testing-lib-wrapper';
|
3
3
|
import { nockInstance, assertNockRequest, mockForemanAutocomplete, mockSetting } from '../../../../../test-utils/nockWrapper';
|
4
4
|
import { foremanApi } from '../../../../../services/api';
|
5
|
-
import { HOST_PACKAGES_KEY, PACKAGES_SEARCH_QUERY } from '../PackagesTab/HostPackagesConstants';
|
5
|
+
import { HOST_PACKAGES_KEY, PACKAGES_SEARCH_QUERY, SELECTED_UPDATE_VERSIONS } from '../PackagesTab/HostPackagesConstants';
|
6
6
|
import { PackagesTab } from '../PackagesTab/PackagesTab.js';
|
7
7
|
import mockPackagesData from './packages.fixtures.json';
|
8
8
|
import { REX_FEATURES } from '../RemoteExecutionConstants';
|
@@ -181,7 +181,7 @@ test('Can upgrade a package via remote execution', async (done) => {
|
|
181
181
|
.post(jobInvocations, {
|
182
182
|
job_invocation: {
|
183
183
|
inputs: {
|
184
|
-
package: firstPackage.
|
184
|
+
package: firstPackage.upgradable_versions[0],
|
185
185
|
},
|
186
186
|
search_query: `name ^ (${hostname})`,
|
187
187
|
feature: REX_FEATURES.KATELLO_PACKAGE_UPDATE,
|
@@ -256,7 +256,7 @@ test('Can upgrade a package via customized remote execution', async (done) => {
|
|
256
256
|
|
257
257
|
const rexAction = getByText('Upgrade via customized remote execution');
|
258
258
|
const feature = REX_FEATURES.KATELLO_PACKAGE_UPDATE;
|
259
|
-
const packageName = firstPackage.
|
259
|
+
const packageName = firstPackage.upgradable_versions[0];
|
260
260
|
|
261
261
|
expect(rexAction).toBeInTheDocument();
|
262
262
|
expect(rexAction).toHaveAttribute(
|
@@ -284,6 +284,7 @@ test('Can bulk upgrade via remote execution', async (done) => {
|
|
284
284
|
job_invocation: {
|
285
285
|
inputs: {
|
286
286
|
[PACKAGES_SEARCH_QUERY]: `id ^ (${firstPackage.id},${secondPackage.id})`,
|
287
|
+
[SELECTED_UPDATE_VERSIONS]: JSON.stringify([]),
|
287
288
|
},
|
288
289
|
search_query: `name ^ (${hostname})`,
|
289
290
|
feature: REX_FEATURES.KATELLO_PACKAGES_UPDATE_BY_SEARCH,
|
@@ -337,7 +338,7 @@ test('Can bulk upgrade via customized remote execution', async (done) => {
|
|
337
338
|
const feature = REX_FEATURES.KATELLO_PACKAGES_UPDATE_BY_SEARCH;
|
338
339
|
const packages = `${firstPackage.id},${secondPackage.id}`;
|
339
340
|
const job =
|
340
|
-
`/job_invocations/new?feature=${feature}&host_ids=name%20%5E%20(${hostname})&inputs%5BPackages%20search%20query%5D=id%20%5E%20(${packages})`;
|
341
|
+
`/job_invocations/new?feature=${feature}&host_ids=name%20%5E%20(${hostname})&inputs%5BPackages%20search%20query%5D=id%20%5E%20(${packages})&inputs%5BSelected%20update%20versions%5D=%5B%5D`;
|
341
342
|
|
342
343
|
getByRole('checkbox', { name: 'Select row 0' }).click();
|
343
344
|
expect(getByLabelText('Select row 0').checked).toEqual(true);
|
@@ -2,7 +2,7 @@ import { REX_FEATURES } from './RemoteExecutionConstants';
|
|
2
2
|
import { TRACES_SEARCH_QUERY } from './TracesTab/HostTracesConstants';
|
3
3
|
import { ERRATA_SEARCH_QUERY } from './ErrataTab/HostErrataConstants';
|
4
4
|
import { PACKAGE_SEARCH_QUERY } from './PackagesTab/YumInstallablePackagesConstants';
|
5
|
-
import { PACKAGES_SEARCH_QUERY } from './PackagesTab/HostPackagesConstants';
|
5
|
+
import { PACKAGES_SEARCH_QUERY, SELECTED_UPDATE_VERSIONS } from './PackagesTab/HostPackagesConstants';
|
6
6
|
|
7
7
|
export const createJob = ({
|
8
8
|
hostname, feature, inputs,
|
@@ -35,10 +35,10 @@ export const katelloPackageUpdateUrl = ({ hostname, packageName }) => createJob(
|
|
35
35
|
inputs: { package: packageName },
|
36
36
|
});
|
37
37
|
|
38
|
-
export const packagesUpdateUrl = ({ hostname, search }) => createJob({
|
38
|
+
export const packagesUpdateUrl = ({ hostname, search, versions }) => createJob({
|
39
39
|
hostname,
|
40
40
|
feature: REX_FEATURES.KATELLO_PACKAGES_UPDATE_BY_SEARCH,
|
41
|
-
inputs: { [PACKAGES_SEARCH_QUERY]: search },
|
41
|
+
inputs: { [PACKAGES_SEARCH_QUERY]: search, [SELECTED_UPDATE_VERSIONS]: versions },
|
42
42
|
});
|
43
43
|
|
44
44
|
export const resolveTraceUrl = ({ hostname, search }) => createJob({
|
@@ -72,11 +72,11 @@ export const links = [
|
|
72
72
|
component: WithOrganization(withHeader(ChangeContentSource, { title: __('Change host content source') })),
|
73
73
|
},
|
74
74
|
{
|
75
|
-
path: '
|
75
|
+
path: 'alternate_content_sources',
|
76
76
|
component: WithOrganization(withHeader(AlternateContentSource, { title: __('Alternate Content Sources') })),
|
77
77
|
},
|
78
78
|
{
|
79
|
-
path: '
|
79
|
+
path: 'alternate_content_sources/:id([0-9]+)',
|
80
80
|
component: WithOrganization(withHeader(AlternateContentSource, { title: __('Alternate Content Sources') })),
|
81
81
|
exact: false,
|
82
82
|
},
|
@@ -164,4 +164,16 @@ html .pagination-pf-pagesize.btn-group {
|
|
164
164
|
animation-duration: 2s;
|
165
165
|
animation-iteration-count: 1;
|
166
166
|
animation-fill-mode: forwards;
|
167
|
+
}
|
168
|
+
|
169
|
+
.primary-detail-border {
|
170
|
+
border-top: 0.2px;
|
171
|
+
border-top-color: var(--pf-c-table--BorderColor);
|
172
|
+
border-top-style: inset;
|
173
|
+
}
|
174
|
+
|
175
|
+
.primary-detail-stack-items-border {
|
176
|
+
border-bottom: 0.2px;
|
177
|
+
border-bottom-color: var(--pf-c-table--BorderColor);
|
178
|
+
border-bottom-style: inset;
|
167
179
|
}
|
@@ -6,9 +6,27 @@ import nock from 'nock';
|
|
6
6
|
// output and traceback for actual error.
|
7
7
|
const originalConsoleError = global.console.error;
|
8
8
|
global.console.error = (error, stack) => {
|
9
|
-
originalConsoleError(error); // ensure error is printed to console
|
9
|
+
originalConsoleError(error); // ensure error is printed to console, comment
|
10
|
+
// in case of ouia-id check
|
11
|
+
|
12
|
+
/* Uncomment block below to filter out PF4 ouiaId errors */
|
13
|
+
// const ignore = ['in ForwardRef (created by Tabs)',
|
14
|
+
// 'in Button (created by Label)', 'created by _default',
|
15
|
+
// 'created by PaginationOptionsMenu', 'created by TypeAheadItems',
|
16
|
+
// 'The prop `ouiaId` is marked as required in `Modal`, but its value is `undefined`',
|
17
|
+
// 'created by WizardHeader', 'created by Navigation',
|
18
|
+
// 'created by ActionsColumn', 'created by InactiveText', 'created by Select',
|
19
|
+
// 'created by Context.Consumer'];
|
20
|
+
|
10
21
|
/* eslint-disable-next-line no-console */
|
11
22
|
if (stack) console.log(stack); // Prints out original stack trace
|
23
|
+
|
24
|
+
/* Uncomment block below to filter out PF4 ouiaId errors */
|
25
|
+
// if (error && !ignore.some(e => error.includes(e))) {
|
26
|
+
// originalConsoleError(error); // ensure error is printed to console
|
27
|
+
// console.log(stack); // Prints out original stack trace
|
28
|
+
// }
|
29
|
+
|
12
30
|
throw new Error(error); // comment this and uncomment the next line when checking for ouia ids
|
13
31
|
// if (!error.includes('Failed prop type')) throw new Error(error);
|
14
32
|
};
|
data/webpack/ouia_id_check.js
CHANGED
@@ -34,7 +34,6 @@ import {
|
|
34
34
|
Toolbar,
|
35
35
|
} from '@patternfly/react-core';
|
36
36
|
import {
|
37
|
-
RowWrapper,
|
38
37
|
Table,
|
39
38
|
TableComposable,
|
40
39
|
Tr,
|
@@ -74,7 +73,6 @@ const checkForOuiaIds = () => {
|
|
74
73
|
TextInput,
|
75
74
|
Title,
|
76
75
|
Toolbar,
|
77
|
-
RowWrapper,
|
78
76
|
Table,
|
79
77
|
TableComposable,
|
80
78
|
Tr,
|
@@ -22,6 +22,7 @@ const recommendedRepositoriesRHEL = [
|
|
22
22
|
'rhel-7-server-optional-rpms',
|
23
23
|
'rhel-7-server-extras-rpms',
|
24
24
|
'rhel-7-server-kickstart',
|
25
|
+
'rhel-6-server-els-rpms',
|
25
26
|
];
|
26
27
|
|
27
28
|
const recommendedRepositoriesSatTools = [
|
@@ -32,15 +33,10 @@ const recommendedRepositoriesSatTools = [
|
|
32
33
|
];
|
33
34
|
|
34
35
|
const recommendedRepositoriesMisc = [
|
35
|
-
'rhel-
|
36
|
-
'rhel-7-server-satellite-capsule-6.11-rpms',
|
37
|
-
'satellite-capsule-6.11-for-rhel-8-x86_64-rpms',
|
38
|
-
'rhel-7-server-ansible-2.9-rpms',
|
36
|
+
'satellite-capsule-6.12-for-rhel-8-x86_64-rpms',
|
39
37
|
'ansible-2-for-rhel-8-x86_64-rpms',
|
40
|
-
'
|
41
|
-
'
|
42
|
-
'satellite-maintenance-6.11-for-rhel-8-x86_64-rpms',
|
43
|
-
'satellite-utils-6.11-for-rhel-8-x86_64-rpms',
|
38
|
+
'satellite-maintenance-6.12-for-rhel-8-x86_64-rpms',
|
39
|
+
'satellite-utils-6.12-for-rhel-8-x86_64-rpms',
|
44
40
|
];
|
45
41
|
|
46
42
|
const recommendedRepositorySetLables = recommendedRepositoriesRHEL
|