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
@@ -1,4 +1,4 @@
|
|
1
|
-
import React from 'react';
|
1
|
+
import React, { useState } from 'react';
|
2
2
|
import {
|
3
3
|
Card,
|
4
4
|
CardHeader,
|
@@ -7,24 +7,29 @@ import {
|
|
7
7
|
Flex,
|
8
8
|
FlexItem,
|
9
9
|
GridItem,
|
10
|
+
ToggleGroup,
|
10
11
|
} from '@patternfly/react-core';
|
12
|
+
import { ExclamationTriangleIcon } from '@patternfly/react-icons';
|
11
13
|
import { translate as __ } from 'foremanReact/common/I18n';
|
12
14
|
import { propsToCamelCase } from 'foremanReact/common/helpers';
|
13
15
|
import PropTypes from 'prop-types';
|
14
16
|
import { ChartPie } from '@patternfly/react-charts';
|
15
|
-
import { ErrataMapper } from '../../../../components/Errata';
|
17
|
+
import { ErrataMapper, ErrataToggleGroupItem } from '../../../../components/Errata';
|
16
18
|
import { hostIsRegistered } from '../hostDetailsHelpers';
|
17
19
|
import { TranslatedAnchor } from '../../../Table/components/TranslatedPlural';
|
18
20
|
import EmptyStateMessage from '../../../Table/EmptyStateMessage';
|
19
21
|
import './ErrataOverviewCard.scss';
|
22
|
+
import { errataStatusContemplation } from '../../../Errata/errataHelpers';
|
20
23
|
|
21
24
|
function HostInstallableErrata({
|
22
|
-
id, errataCounts, errataStatus,
|
25
|
+
id, errataCounts, errataStatus, errataCategory, errataStatusLabel,
|
23
26
|
}) {
|
24
|
-
const
|
25
|
-
const
|
26
|
-
const
|
27
|
-
const
|
27
|
+
const counts = errataCategory === 'applicable' ? errataCounts.applicable : errataCounts;
|
28
|
+
const errataTotal = counts.total;
|
29
|
+
const errataSecurity = counts.security;
|
30
|
+
const errataBug = counts.bugfix;
|
31
|
+
const errataEnhance = counts.enhancement;
|
32
|
+
const { neededErrata, allUpToDate, otherErrataStatus } = errataStatusContemplation(errataStatus);
|
28
33
|
const chartData = [{
|
29
34
|
w: 'security advisories', x: 'security', y: errataSecurity, z: errataTotal,
|
30
35
|
}, {
|
@@ -33,74 +38,115 @@ function HostInstallableErrata({
|
|
33
38
|
w: 'enhancements', x: 'enhancement', y: errataEnhance, z: errataTotal,
|
34
39
|
}];
|
35
40
|
return (
|
36
|
-
<
|
37
|
-
|
38
|
-
<
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
41
|
+
<CardBody>
|
42
|
+
{allUpToDate &&
|
43
|
+
<EmptyStateMessage
|
44
|
+
title={__('All errata up-to-date')}
|
45
|
+
body={__('No action required')}
|
46
|
+
happy
|
47
|
+
/>
|
48
|
+
}
|
49
|
+
{otherErrataStatus &&
|
50
|
+
<EmptyStateMessage
|
51
|
+
title={null}
|
52
|
+
body={errataStatusLabel}
|
53
|
+
customIcon={ExclamationTriangleIcon}
|
54
|
+
secondaryActionTitle={__('Enable repository sets')}
|
55
|
+
secondaryActionLink="#/Content/Repository%20sets?show=all"
|
56
|
+
showSecondaryAction
|
57
|
+
/>
|
58
|
+
}
|
59
|
+
{neededErrata &&
|
60
|
+
<Flex direction="column">
|
61
|
+
<FlexItem>
|
62
|
+
<TranslatedAnchor
|
63
|
+
id="errata-card-total-count"
|
64
|
+
href={`#/Content/errata?show=${errataCategory}`}
|
65
|
+
count={errataTotal}
|
66
|
+
plural="errata"
|
67
|
+
singular="erratum"
|
68
|
+
ariaLabel={`${errataTotal} total errata`}
|
47
69
|
/>
|
48
|
-
|
49
|
-
{
|
50
|
-
<
|
51
|
-
<
|
52
|
-
<
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
70
|
+
</FlexItem>
|
71
|
+
<Flex flexWrap={{ xl: 'nowrap' }} direction="row" alignItems={{ default: 'alignItemsCenter' }}>
|
72
|
+
<div className="piechart-overflow" style={{ overflow: 'visible', minWidth: '140px', maxHeight: '155px' }}>
|
73
|
+
<div className="erratachart" style={{ minWidth: '300px', minHeight: '300px' }}>
|
74
|
+
<ChartPie
|
75
|
+
ariaDesc="errataChart"
|
76
|
+
data={chartData}
|
77
|
+
constrainToVisibleArea
|
78
|
+
labels={({ datum }) => `${datum.y} ${datum.w}`}
|
79
|
+
padding={{
|
80
|
+
bottom: 20,
|
81
|
+
left: 20,
|
82
|
+
right: 140,
|
83
|
+
top: 20,
|
84
|
+
}}
|
85
|
+
width={250}
|
86
|
+
height={130}
|
59
87
|
/>
|
88
|
+
</div>
|
89
|
+
</div>
|
90
|
+
<div className="erratalegend" style={{ minWidth: '140px' }}>
|
91
|
+
<FlexItem>
|
92
|
+
<ErrataMapper data={chartData} id={id} errataCategory={errataCategory} />
|
60
93
|
</FlexItem>
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
data={chartData}
|
67
|
-
constrainToVisibleArea
|
68
|
-
labels={({ datum }) => `${datum.y} ${datum.w}`}
|
69
|
-
padding={{
|
70
|
-
bottom: 20,
|
71
|
-
left: 20,
|
72
|
-
right: 140,
|
73
|
-
top: 20,
|
74
|
-
}}
|
75
|
-
width={250}
|
76
|
-
height={130}
|
77
|
-
/>
|
78
|
-
</div>
|
79
|
-
</div>
|
80
|
-
<div className="erratalegend" style={{ minWidth: '140px' }}>
|
81
|
-
<FlexItem>
|
82
|
-
<ErrataMapper data={chartData} id={id} />
|
83
|
-
</FlexItem>
|
84
|
-
</div>
|
85
|
-
</Flex>
|
86
|
-
</Flex>
|
87
|
-
}
|
88
|
-
</CardBody>
|
89
|
-
</Card>
|
90
|
-
</GridItem>
|
94
|
+
</div>
|
95
|
+
</Flex>
|
96
|
+
</Flex>
|
97
|
+
}
|
98
|
+
</CardBody>
|
91
99
|
);
|
92
100
|
}
|
93
101
|
|
94
102
|
const ErrataOverviewCard = ({ hostDetails }) => {
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
103
|
+
const hostPopulated = (hostIsRegistered({ hostDetails }) &&
|
104
|
+
!!hostDetails.content_facet_attributes);
|
105
|
+
|
106
|
+
const [errataCategory, setErrataCategory] = useState('applicable');
|
107
|
+
if (!hostPopulated) return null;
|
108
|
+
const {
|
109
|
+
id: hostId,
|
110
|
+
errata_status: errataStatus,
|
111
|
+
errata_status_label: errataStatusLabel,
|
112
|
+
} = hostDetails;
|
113
|
+
const { neededErrata } = errataStatusContemplation(errataStatus);
|
114
|
+
return (
|
115
|
+
<GridItem rowSpan={1} md={6} lg={4} xl2={3} >
|
116
|
+
<Card ouiaId="errata-card">
|
117
|
+
<CardHeader>
|
118
|
+
<Flex spaceItems={{ default: 'spaceItemsXl' }}>
|
119
|
+
<CardTitle>{__('Errata')}</CardTitle>
|
120
|
+
{neededErrata &&
|
121
|
+
<ToggleGroup isCompact>
|
122
|
+
<ErrataToggleGroupItem
|
123
|
+
text={__('Applicable')}
|
124
|
+
aria-label="Show applicable errata chart"
|
125
|
+
tooltipText={__('Applicable errata apply to at least one package installed on the host.')}
|
126
|
+
isSelected={errataCategory === 'applicable'}
|
127
|
+
onChange={selected => selected && setErrataCategory('applicable')}
|
128
|
+
/>
|
129
|
+
<ErrataToggleGroupItem
|
130
|
+
text={__('Installable')}
|
131
|
+
aria-label="Show installable errata chart"
|
132
|
+
tooltipText={__('Installable errata are applicable errata that are available in the host\'s content view and lifecycle environment.')}
|
133
|
+
isSelected={errataCategory === 'installable'}
|
134
|
+
onChange={selected => selected && setErrataCategory('installable')}
|
135
|
+
/>
|
136
|
+
</ToggleGroup>
|
137
|
+
}
|
138
|
+
</Flex>
|
139
|
+
</CardHeader>
|
140
|
+
<HostInstallableErrata
|
141
|
+
{...propsToCamelCase(hostDetails.content_facet_attributes)}
|
142
|
+
id={hostId}
|
143
|
+
errataCategory={errataCategory}
|
144
|
+
errataStatus={errataStatus}
|
145
|
+
errataStatusLabel={errataStatusLabel}
|
146
|
+
/>
|
147
|
+
</Card>
|
148
|
+
</GridItem>
|
149
|
+
);
|
104
150
|
};
|
105
151
|
|
106
152
|
HostInstallableErrata.propTypes = {
|
@@ -110,12 +156,21 @@ HostInstallableErrata.propTypes = {
|
|
110
156
|
enhancement: PropTypes.number,
|
111
157
|
security: PropTypes.number,
|
112
158
|
total: PropTypes.number,
|
159
|
+
applicable: PropTypes.shape({
|
160
|
+
bugfix: PropTypes.number,
|
161
|
+
enhancement: PropTypes.number,
|
162
|
+
security: PropTypes.number,
|
163
|
+
}),
|
113
164
|
}).isRequired,
|
114
165
|
errataStatus: PropTypes.number,
|
166
|
+
errataStatusLabel: PropTypes.string,
|
167
|
+
errataCategory: PropTypes.string,
|
115
168
|
};
|
116
169
|
|
117
170
|
HostInstallableErrata.defaultProps = {
|
118
171
|
errataStatus: undefined,
|
172
|
+
errataStatusLabel: __('Unknown errata status'),
|
173
|
+
errataCategory: 'applicable',
|
119
174
|
};
|
120
175
|
|
121
176
|
ErrataOverviewCard.propTypes = {
|
@@ -123,6 +178,7 @@ ErrataOverviewCard.propTypes = {
|
|
123
178
|
content_facet_attributes: PropTypes.shape({}),
|
124
179
|
id: PropTypes.number,
|
125
180
|
errata_status: PropTypes.number,
|
181
|
+
errata_status_label: PropTypes.string,
|
126
182
|
}),
|
127
183
|
};
|
128
184
|
|
data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsCard.js
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
import React, { useState } from 'react';
|
2
2
|
import {
|
3
3
|
Badge,
|
4
|
+
Button,
|
4
5
|
Card,
|
5
6
|
CardHeader,
|
6
7
|
CardTitle,
|
@@ -13,12 +14,15 @@ import {
|
|
13
14
|
GridItem,
|
14
15
|
DropdownItem,
|
15
16
|
} from '@patternfly/react-core';
|
17
|
+
import { PlusCircleIcon } from '@patternfly/react-icons';
|
16
18
|
import { translate as __ } from 'foremanReact/common/I18n';
|
17
19
|
import { propsToCamelCase } from 'foremanReact/common/helpers';
|
18
20
|
import PropTypes from 'prop-types';
|
19
21
|
import { useSet } from '../../../../Table/TableHooks';
|
20
22
|
import { HostCollectionsAddModal, HostCollectionsRemoveModal } from './HostCollectionsModal';
|
21
23
|
import { hasRequiredPermissions, hostIsRegistered, userPermissionsFromHostDetails } from '../../hostDetailsHelpers';
|
24
|
+
import EmptyStateMessage from '../../../../Table/EmptyStateMessage';
|
25
|
+
import './HostCollectionsCard.scss';
|
22
26
|
|
23
27
|
const requiredPermissions = ['edit_hosts', 'view_host_collections'];
|
24
28
|
|
@@ -49,6 +53,7 @@ const HostCollectionsDetails = ({
|
|
49
53
|
const dropdownItems = [
|
50
54
|
<DropdownItem
|
51
55
|
aria-label="add_host_to_collections"
|
56
|
+
ouiaId="add_host_to_collections"
|
52
57
|
key="add_host_to_collections"
|
53
58
|
component="button"
|
54
59
|
onClick={openAddHostCollectionsModal}
|
@@ -57,6 +62,7 @@ const HostCollectionsDetails = ({
|
|
57
62
|
</DropdownItem>,
|
58
63
|
<DropdownItem
|
59
64
|
aria-label="remove_host_from_collections"
|
65
|
+
ouiaId="remove_host_from_collections"
|
60
66
|
key="remove_host_from_collections"
|
61
67
|
component="button"
|
62
68
|
isDisabled={!hostCollections.length}
|
@@ -66,9 +72,19 @@ const HostCollectionsDetails = ({
|
|
66
72
|
</DropdownItem>,
|
67
73
|
];
|
68
74
|
|
75
|
+
const primaryActionButton =
|
76
|
+
(
|
77
|
+
<Button
|
78
|
+
ouiaId="add-to-a-host-collection-button"
|
79
|
+
onClick={openAddHostCollectionsModal}
|
80
|
+
variant="secondary"
|
81
|
+
aria-label="add_to_a_host_collection"
|
82
|
+
> {__('Add to a host collection')}
|
83
|
+
</Button>);
|
84
|
+
|
69
85
|
return (
|
70
86
|
<GridItem rowSpan={1} md={6} lg={4} xl2={3}>
|
71
|
-
<Card
|
87
|
+
<Card ouiaId="host-collections-card">
|
72
88
|
<CardHeader>
|
73
89
|
<Flex
|
74
90
|
alignItems={{ default: 'alignItemsCenter' }}
|
@@ -88,10 +104,11 @@ const HostCollectionsDetails = ({
|
|
88
104
|
</FlexItem>
|
89
105
|
</Flex>
|
90
106
|
</FlexItem>
|
91
|
-
{showKebab && (
|
107
|
+
{showKebab && hostCollections?.length > 0 && (
|
92
108
|
<FlexItem>
|
93
109
|
<Dropdown
|
94
110
|
toggle={<KebabToggle aria-label="host_collections_bulk_actions" onToggle={toggleBulkAction} />}
|
111
|
+
ouiaId="host-collections-bulk-actions-dropdown"
|
95
112
|
isOpen={isDropdownOpen}
|
96
113
|
isPlain
|
97
114
|
position="right"
|
@@ -101,7 +118,16 @@ const HostCollectionsDetails = ({
|
|
101
118
|
}
|
102
119
|
</Flex>
|
103
120
|
</CardHeader>
|
104
|
-
<CardBody>
|
121
|
+
<CardBody className={`host-collection-card-body${hostCollections?.length === 0 ? ' empty' : ''}`}>
|
122
|
+
{hostCollections?.length === 0 &&
|
123
|
+
<EmptyStateMessage
|
124
|
+
title={__('No host collections yet')}
|
125
|
+
body={__('To get started, add this host to a host collection.')}
|
126
|
+
customIcon={PlusCircleIcon}
|
127
|
+
showPrimaryAction
|
128
|
+
primaryActionButton={primaryActionButton}
|
129
|
+
/>
|
130
|
+
}
|
105
131
|
{hostCollections?.map((hostCollection) => {
|
106
132
|
const {
|
107
133
|
id, name, description, maxHosts, unlimitedHosts, totalHosts,
|
@@ -130,7 +156,7 @@ const HostCollectionsDetails = ({
|
|
130
156
|
</div>
|
131
157
|
</ExpandableSection>
|
132
158
|
</FlexItem>
|
133
|
-
<FlexItem component="span">
|
159
|
+
<FlexItem component="span" spacer={{ default: 'spacerXl' }}>
|
134
160
|
{totalHosts}/{unlimitedHosts ? 'unlimited' : maxHosts}
|
135
161
|
</FlexItem>
|
136
162
|
</Flex>
|
data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsCard.scss
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
.host-collection-card-body {
|
2
|
+
.pf-l-bullseye {
|
3
|
+
position: relative;
|
4
|
+
top: -20px;
|
5
|
+
}
|
6
|
+
.pf-c-empty-state__icon {
|
7
|
+
font-size: 2em;
|
8
|
+
}
|
9
|
+
.pf-m-lg {
|
10
|
+
margin: -20px;
|
11
|
+
}
|
12
|
+
.pf-c-empty-state__body {
|
13
|
+
font-size: smaller;
|
14
|
+
margin-top: 1.4em;
|
15
|
+
margin-bottom: 1em;
|
16
|
+
}
|
17
|
+
.pf-m-secondary {
|
18
|
+
margin-top: 5px;
|
19
|
+
}
|
20
|
+
}
|
21
|
+
.host-collection-card-body.empty {
|
22
|
+
padding-bottom: 0;
|
23
|
+
}
|
data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsModal.js
CHANGED
@@ -120,10 +120,10 @@ export const HostCollectionsModal = ({
|
|
120
120
|
};
|
121
121
|
|
122
122
|
const modalActions = ([
|
123
|
-
<Button key="add" variant="primary" onClick={handleModalAction} isDisabled={!selectedCount}>
|
123
|
+
<Button key="add" ouiaId="add-button" variant="primary" onClick={handleModalAction} isDisabled={!selectedCount}>
|
124
124
|
{adding ? __('Add') : __('Remove')}
|
125
125
|
</Button>,
|
126
|
-
<Button key="cancel" variant="link" onClick={handleModalCancel}>
|
126
|
+
<Button key="cancel" ouiaId="cancel-button" variant="link" onClick={handleModalCancel}>
|
127
127
|
{__('Cancel')}
|
128
128
|
</Button>,
|
129
129
|
]);
|
@@ -136,6 +136,7 @@ export const HostCollectionsModal = ({
|
|
136
136
|
position="top"
|
137
137
|
actions={modalActions}
|
138
138
|
id={adding ? 'add-host-to-host-collections-modal' : 'remove-host-from-host-collections-modal'}
|
139
|
+
ouiaId="host-collections-modal"
|
139
140
|
>
|
140
141
|
<FormattedMessage
|
141
142
|
className="host-collections-modal-blurb"
|
@@ -175,7 +176,7 @@ export const HostCollectionsModal = ({
|
|
175
176
|
requestKey={adding ? AVAILABLE_HOST_COLLECTIONS_KEY : REMOVABLE_HOST_COLLECTIONS_KEY}
|
176
177
|
>
|
177
178
|
<Thead>
|
178
|
-
<Tr>
|
179
|
+
<Tr ouiaId="row-header">
|
179
180
|
{columnHeaders.map(col =>
|
180
181
|
<Th key={col}>{col}</Th>)}
|
181
182
|
<Th />
|
@@ -188,7 +189,7 @@ export const HostCollectionsModal = ({
|
|
188
189
|
} = propsToCamelCase(hostCollection);
|
189
190
|
const isDisabled = (adding && hostLimitExceeded(hostCollection));
|
190
191
|
return (
|
191
|
-
<Tr key={id}>
|
192
|
+
<Tr key={id} ouiaId={`row-${id}`}>
|
192
193
|
<Td
|
193
194
|
select={{
|
194
195
|
disable: isDisabled,
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import React from 'react';
|
2
|
-
import { render, fireEvent } from 'react-testing-lib-wrapper';
|
2
|
+
import { render, fireEvent, renderWithRedux } from 'react-testing-lib-wrapper';
|
3
|
+
|
3
4
|
import HostCollectionsCard from '../HostCollectionsCard';
|
4
5
|
|
5
6
|
const hostDetails = {
|
@@ -41,6 +42,17 @@ const emptyHostDetails = {
|
|
41
42
|
},
|
42
43
|
};
|
43
44
|
|
45
|
+
const renderOptions = {
|
46
|
+
initialState: {
|
47
|
+
// This is the API state that your tests depend on for their data
|
48
|
+
// You can cross reference the needed useSelectors from your tested components
|
49
|
+
// with the data found within the redux chrome add-on to help determine this fixture data.
|
50
|
+
katello: {
|
51
|
+
hostDetails: {},
|
52
|
+
},
|
53
|
+
},
|
54
|
+
};
|
55
|
+
|
44
56
|
jest.mock('../../../hostDetailsHelpers', () => ({
|
45
57
|
...jest.requireActual('../../../hostDetailsHelpers'),
|
46
58
|
userPermissionsFromHostDetails: () => ({
|
@@ -59,9 +71,15 @@ test('shows host collections and host limits when present', () => {
|
|
59
71
|
});
|
60
72
|
|
61
73
|
test('shows empty card when no host collections present', () => {
|
62
|
-
const {
|
74
|
+
const {
|
75
|
+
queryByText,
|
76
|
+
getByText,
|
77
|
+
queryByLabelText,
|
78
|
+
} = renderWithRedux(<HostCollectionsCard hostDetails={emptyHostDetails} />, renderOptions);
|
63
79
|
expect(queryByText('Host collections')).toBeInTheDocument();
|
64
80
|
expect(queryByText('Jturel hosts')).not.toBeInTheDocument();
|
81
|
+
expect(getByText('No host collections yet')).toBeInTheDocument();
|
82
|
+
expect(queryByLabelText('add_to_a_host_collection')).toBeInTheDocument();
|
65
83
|
});
|
66
84
|
|
67
85
|
test('expands to show description', () => {
|
@@ -98,15 +116,12 @@ test('shows add and remove options in kebab', () => {
|
|
98
116
|
expect(remove).toHaveAttribute('aria-disabled', 'false');
|
99
117
|
});
|
100
118
|
|
101
|
-
test('
|
102
|
-
const {
|
119
|
+
test('kebab is not displayed when no host collections present', () => {
|
120
|
+
const {
|
121
|
+
queryByLabelText,
|
122
|
+
} = renderWithRedux(<HostCollectionsCard hostDetails={emptyHostDetails} />, renderOptions);
|
103
123
|
const kebab = queryByLabelText('host_collections_bulk_actions');
|
104
|
-
expect(kebab).toBeInTheDocument();
|
105
|
-
fireEvent.click(kebab);
|
106
|
-
|
107
|
-
const remove = queryByLabelText('remove_host_from_collections');
|
108
|
-
expect(remove).toBeInTheDocument();
|
109
|
-
expect(remove).toHaveAttribute('aria-disabled', 'true');
|
124
|
+
expect(kebab).not.toBeInTheDocument();
|
110
125
|
});
|
111
126
|
|
112
127
|
test('does not show card when host not registered', () => {
|
@@ -50,7 +50,7 @@ const SystemPurposeCard = ({ hostDetails }) => {
|
|
50
50
|
if (!hostDetails?.id) {
|
51
51
|
return (
|
52
52
|
<GridItem rowSpan={1} md={6} lg={4} xl2={3}>
|
53
|
-
<Card
|
53
|
+
<Card ouiaId="system-purpose-card">
|
54
54
|
<Skeleton />
|
55
55
|
</Card>
|
56
56
|
</GridItem>
|
@@ -61,7 +61,7 @@ const SystemPurposeCard = ({ hostDetails }) => {
|
|
61
61
|
|
62
62
|
return (
|
63
63
|
<GridItem rowSpan={1} md={6} lg={4} xl2={3}>
|
64
|
-
<Card
|
64
|
+
<Card ouiaId="system-purpose-card">
|
65
65
|
<CardHeader>
|
66
66
|
<Flex
|
67
67
|
alignItems={{ default: 'alignItemsCenter' }}
|
@@ -78,7 +78,7 @@ const SystemPurposeCard = ({ hostDetails }) => {
|
|
78
78
|
</FlexItem>
|
79
79
|
<FlexItem>
|
80
80
|
<Tooltip
|
81
|
-
content={__('System purpose
|
81
|
+
content={__('System purpose enables you to set the system\'s intended use on your network and improves reporting accuracy in the Subscriptions service of the Red Hat Hybrid Cloud Console.')}
|
82
82
|
position="top"
|
83
83
|
enableFlip
|
84
84
|
isContentLeftAligned
|
data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeEditModal.js
CHANGED
@@ -175,6 +175,7 @@ const SystemPurposeEditModal = ({
|
|
175
175
|
position="top"
|
176
176
|
actions={modalActions}
|
177
177
|
id="syspurpose-edit-modal"
|
178
|
+
ouiaId="syspurpose-edit-modal"
|
178
179
|
>
|
179
180
|
<FormattedMessage
|
180
181
|
className="syspurpose-edit-modal-blurb"
|
@@ -189,6 +190,7 @@ const SystemPurposeEditModal = ({
|
|
189
190
|
<FormSelect
|
190
191
|
id="role"
|
191
192
|
name="role"
|
193
|
+
ouiaId="role-select"
|
192
194
|
value={selectedRole}
|
193
195
|
onChange={setSelectedRole}
|
194
196
|
>
|
@@ -205,6 +207,7 @@ const SystemPurposeEditModal = ({
|
|
205
207
|
<FormSelect
|
206
208
|
id="serviceLevel"
|
207
209
|
name="serviceLevel"
|
210
|
+
ouiaId="service-level-select"
|
208
211
|
value={selectedServiceLevel}
|
209
212
|
onChange={setSelectedServiceLevel}
|
210
213
|
>
|
@@ -221,6 +224,7 @@ const SystemPurposeEditModal = ({
|
|
221
224
|
<FormSelect
|
222
225
|
id="usage"
|
223
226
|
name="usage"
|
227
|
+
ouiaId="usage-select"
|
224
228
|
value={selectedUsage}
|
225
229
|
onChange={setSelectedUsage}
|
226
230
|
>
|
@@ -237,6 +241,7 @@ const SystemPurposeEditModal = ({
|
|
237
241
|
<FormSelect
|
238
242
|
id="release_version"
|
239
243
|
name="release_version"
|
244
|
+
ouiaId="release-version-select"
|
240
245
|
value={selectedReleaseVersion}
|
241
246
|
onChange={setSelectedReleaseVersion}
|
242
247
|
>
|
@@ -256,6 +261,7 @@ const SystemPurposeEditModal = ({
|
|
256
261
|
<Select
|
257
262
|
variant={SelectVariant.typeaheadMulti}
|
258
263
|
aria-label="syspurpose-addons"
|
264
|
+
ouiaId="syspurpose-addons-select"
|
259
265
|
onToggle={toggleAddonSelect}
|
260
266
|
onSelect={onAddonSelect}
|
261
267
|
selections={selectedAddons}
|