katello 4.2.1 → 4.3.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/katello.common.js +0 -67
- data/app/assets/javascripts/katello/common/katello.js +0 -27
- data/app/assets/javascripts/katello/common/vendor.js +0 -1
- data/app/assets/stylesheets/katello/katello.scss +0 -1
- data/app/controllers/katello/api/rhsm/candlepin_proxies_controller.rb +10 -2
- data/app/controllers/katello/api/v2/api_controller.rb +35 -9
- data/app/controllers/katello/api/v2/capsule_content_controller.rb +16 -2
- data/app/controllers/katello/api/v2/content_view_components_controller.rb +22 -1
- data/app/controllers/katello/api/v2/content_view_filters_controller.rb +65 -1
- data/app/controllers/katello/api/v2/content_view_versions_controller.rb +5 -1
- data/app/controllers/katello/api/v2/content_views_controller.rb +13 -6
- data/app/controllers/katello/api/v2/debs_controller.rb +74 -1
- data/app/controllers/katello/api/v2/errata_controller.rb +13 -10
- data/app/controllers/katello/api/v2/file_units_controller.rb +1 -0
- data/app/controllers/katello/api/v2/generic_content_units_controller.rb +1 -1
- data/app/controllers/katello/api/v2/host_errata_controller.rb +46 -5
- data/app/controllers/katello/api/v2/host_tracer_controller.rb +2 -1
- data/app/controllers/katello/api/v2/module_streams_controller.rb +4 -0
- data/app/controllers/katello/api/v2/organizations_controller.rb +22 -7
- data/app/controllers/katello/api/v2/products_bulk_actions_controller.rb +1 -1
- data/app/controllers/katello/api/v2/repositories_controller.rb +36 -19
- data/app/controllers/katello/api/v2/subscriptions_controller.rb +0 -8
- data/app/controllers/katello/api/v2/upstream_subscriptions_controller.rb +5 -1
- data/app/controllers/katello/concerns/api/v2/bulk_extensions.rb +40 -0
- data/app/controllers/katello/concerns/api/v2/host_errata_extensions.rb +4 -31
- data/app/controllers/katello/concerns/api/v2/registration_controller_extensions.rb +1 -1
- data/app/controllers/katello/concerns/api/v2/repository_content_controller.rb +1 -1
- data/app/helpers/katello/concerns/smart_proxy_helper_extensions.rb +2 -6
- data/app/helpers/katello/katello_url_helper.rb +1 -1
- data/app/lib/actions/candlepin/abstract_async_task.rb +6 -3
- data/app/lib/actions/candlepin/async_hypervisors.rb +12 -8
- data/app/lib/actions/katello/applicability/hosts/bulk_generate.rb +10 -1
- data/app/lib/actions/katello/capsule_content/sync_capsule.rb +3 -3
- data/app/lib/actions/katello/cdn_configuration/update.rb +38 -0
- data/app/lib/actions/katello/content_view/remove.rb +18 -7
- data/app/lib/actions/katello/content_view_version/destroy.rb +2 -2
- data/app/lib/actions/katello/content_view_version/republish_repositories.rb +1 -1
- data/app/lib/actions/katello/repository/clone_contents.rb +1 -2
- data/app/lib/actions/katello/repository/destroy.rb +21 -5
- data/app/lib/actions/katello/repository/fetch_pxe_files.rb +1 -1
- data/app/lib/actions/katello/repository/finish_upload.rb +1 -1
- data/app/lib/actions/katello/repository/import_upload.rb +1 -1
- data/app/lib/actions/katello/repository/index_content.rb +19 -6
- data/app/lib/actions/katello/repository/metadata_generate.rb +2 -0
- data/app/lib/actions/katello/repository/multi_clone_contents.rb +1 -1
- data/app/lib/actions/katello/repository/remove_content.rb +1 -1
- data/app/lib/actions/katello/repository/sync.rb +3 -7
- data/app/lib/actions/katello/repository_set/scan_cdn.rb +0 -4
- data/app/lib/actions/middleware/record_smart_proxy_sync_history.rb +1 -1
- data/app/lib/actions/pulp/orphan_cleanup/remove_unneeded_repos.rb +1 -1
- data/app/lib/actions/pulp/repository/clear.rb +1 -1
- data/app/lib/actions/pulp3/abstract_async_task.rb +10 -1
- data/app/lib/actions/pulp3/capsule_content/generate_metadata.rb +13 -18
- data/app/lib/actions/pulp3/capsule_content/refresh_distribution.rb +1 -11
- data/app/lib/actions/pulp3/content_view_version/create_export_history.rb +1 -1
- data/app/lib/actions/pulp3/orchestration/repository/generate_metadata.rb +3 -1
- data/app/lib/actions/pulp3/orchestration/repository/import_upload.rb +25 -42
- data/app/lib/actions/pulp3/orchestration/repository/sync.rb +8 -1
- data/app/lib/actions/pulp3/orchestration/repository/upload_content.rb +3 -3
- data/app/lib/actions/pulp3/repository/commit_upload.rb +1 -1
- data/app/lib/actions/pulp3/repository/import_upload.rb +8 -4
- data/app/lib/actions/pulp3/repository/multi_copy_content.rb +1 -1
- data/app/lib/actions/pulp3/repository/multi_copy_units.rb +1 -1
- data/app/lib/actions/pulp3/repository/presenters/abstract_sync_presenter.rb +18 -0
- data/app/lib/actions/pulp3/repository/presenters/content_unit_presenter.rb +7 -2
- data/app/lib/actions/pulp3/repository/presenters/repair_presenter.rb +6 -1
- data/app/lib/actions/pulp3/repository/save_artifact.rb +14 -4
- data/app/lib/katello/errors.rb +2 -0
- data/app/lib/katello/resources/candlepin/consumer.rb +0 -20
- data/app/lib/katello/resources/candlepin/proxy.rb +8 -2
- data/app/lib/katello/resources/candlepin/upstream_consumer.rb +2 -0
- data/app/lib/katello/resources/cdn/katello_cdn.rb +68 -0
- data/app/lib/katello/resources/cdn.rb +61 -29
- data/app/lib/katello/util/cdn_var_substitutor.rb +15 -9
- data/app/lib/katello/util/package.rb +22 -0
- data/app/lib/katello/util/path_with_substitutions.rb +12 -14
- data/app/models/katello/activation_key.rb +10 -0
- data/app/models/katello/ansible_collection.rb +1 -1
- data/app/models/katello/authorization/repository.rb +4 -4
- data/app/models/katello/candlepin/repository_mapper.rb +5 -1
- data/app/models/katello/cdn_configuration.rb +32 -0
- data/app/models/katello/concerns/content_facet_host_extensions.rb +40 -0
- data/app/models/katello/concerns/host_managed_extensions.rb +28 -2
- data/app/models/katello/concerns/hostgroup_extensions.rb +1 -1
- data/app/models/katello/concerns/organization_extensions.rb +3 -1
- data/app/models/katello/concerns/pulp_database_unit.rb +15 -5
- data/app/models/katello/concerns/remote_execution_provider_extensions.rb +9 -0
- data/app/models/katello/concerns/setting_extensions.rb +1 -1
- data/app/models/katello/concerns/smart_proxy_extensions.rb +4 -3
- data/app/models/katello/content_credential.rb +4 -0
- data/app/models/katello/content_facet_applicable_deb.rb +7 -0
- data/app/models/katello/content_view.rb +24 -1
- data/app/models/katello/content_view_component.rb +4 -0
- data/app/models/katello/content_view_erratum_filter.rb +2 -0
- data/app/models/katello/content_view_filter.rb +1 -1
- data/app/models/katello/content_view_package_filter_rule.rb +2 -1
- data/app/models/katello/content_view_version.rb +30 -1
- data/app/models/katello/deb.rb +71 -0
- data/app/models/katello/erratum.rb +13 -1
- data/app/models/katello/generic_content_unit.rb +3 -1
- data/app/models/katello/glue/pulp/repos.rb +2 -2
- data/app/models/katello/host/content_facet.rb +23 -2
- data/app/models/katello/host/subscription_facet.rb +1 -1
- data/app/models/katello/host_tracer.rb +21 -2
- data/app/models/katello/installed_deb.rb +1 -1
- data/app/models/katello/module_stream.rb +4 -0
- data/app/models/katello/ping.rb +20 -4
- data/app/models/katello/product.rb +7 -5
- data/app/models/katello/provider.rb +1 -24
- data/app/models/katello/repository.rb +37 -10
- data/app/models/katello/root_repository.rb +28 -14
- data/app/models/setting/content.rb +8 -13
- data/app/services/katello/applicability/applicable_content_helper.rb +20 -0
- data/app/services/katello/organization_creator.rb +8 -0
- data/app/services/katello/pulp3/api/ansible_collection.rb +0 -40
- data/app/services/katello/pulp3/api/apt.rb +0 -47
- data/app/services/katello/pulp3/api/content_guard.rb +1 -1
- data/app/services/katello/pulp3/api/core.rb +28 -23
- data/app/services/katello/pulp3/api/docker.rb +0 -50
- data/app/services/katello/pulp3/api/file.rb +0 -48
- data/app/services/katello/pulp3/api/generic.rb +1 -44
- data/app/services/katello/pulp3/api/yum.rb +4 -44
- data/app/services/katello/pulp3/generic_content_unit.rb +8 -4
- data/app/services/katello/pulp3/repository/ansible_collection.rb +4 -0
- data/app/services/katello/pulp3/repository/apt.rb +3 -3
- data/app/services/katello/pulp3/repository/generic.rb +10 -65
- data/app/services/katello/pulp3/repository/yum.rb +10 -0
- data/app/services/katello/pulp3/repository.rb +47 -21
- data/app/services/katello/pulp3/repository_mirror.rb +30 -11
- data/app/services/katello/pulp3/rpm.rb +2 -32
- data/app/services/katello/pulp3/smart_proxy_mirror_repository.rb +7 -8
- data/app/services/katello/pulp3/smart_proxy_repository.rb +1 -1
- data/app/services/katello/registration_manager.rb +2 -0
- data/app/services/katello/repository_type.rb +103 -15
- data/app/services/katello/repository_type_manager.rb +14 -8
- data/app/services/katello/ui_notifications/subscriptions/manifest_expired_warning.rb +1 -1
- data/app/services/katello/upstream_connection_checker.rb +1 -0
- data/app/views/foreman/job_templates/resolve_traces.erb +25 -0
- data/app/views/foreman/job_templates/resolve_traces_-_katello_ansible_default.erb +28 -0
- data/app/views/katello/api/v2/capsule_content/sync_status.json.rabl +1 -1
- data/app/views/katello/api/v2/common/_metadata.json.rabl +1 -0
- data/app/views/katello/api/v2/content_facet/base.json.rabl +3 -1
- data/app/views/katello/api/v2/content_facet/show.json.rabl +2 -1
- data/app/views/katello/api/v2/content_view_components/show.json.rabl +4 -0
- data/app/views/katello/api/v2/content_view_versions/base.json.rabl +7 -0
- data/app/views/katello/api/v2/content_views/base.json.rabl +12 -8
- data/app/views/katello/api/v2/content_views/index.json.rabl +1 -0
- data/app/views/katello/api/v2/content_views/permissions.rabl +8 -0
- data/app/views/katello/api/v2/debs/base.json.rabl +5 -0
- data/app/views/katello/api/v2/errata/index.json.rabl +4 -0
- data/app/views/katello/api/v2/generic_content_units/base.json.rabl +2 -0
- data/app/views/katello/api/v2/generic_content_units/show.json.rabl +7 -0
- data/app/views/katello/api/v2/host_tracer/base.json.rabl +1 -0
- data/app/views/katello/api/v2/module_streams/index.json.rabl +4 -0
- data/app/views/katello/api/v2/organizations/cdn_configuration.rabl +1 -0
- data/app/views/katello/api/v2/organizations/show.json.rabl +7 -0
- data/app/views/katello/api/v2/repositories/base.json.rabl +10 -17
- data/app/views/overrides/activation_keys/_host_synced_content_select.html.erb +2 -6
- data/config/routes/api/v2.rb +13 -0
- data/config/routes/overrides.rb +2 -0
- data/config/routes.rb +14 -2
- data/db/migrate/20140110000001_update_environments_add_katello_id.rb +1 -3
- data/db/migrate/20140610154745_content_view_puppet_environment_id.rb +0 -35
- data/db/migrate/20190802112101_add_applicable_debs.rb +16 -0
- data/db/migrate/20210201163238_migrate_background_download_policy_to_migrate.rb +2 -2
- data/db/migrate/20210909140337_add_last_indexed_to_repos.rb +5 -0
- data/db/migrate/20210910190324_move_background_settings_to_immediate.rb +25 -0
- data/db/migrate/20211006161617_add_filename_to_katello_generic_content_units.rb +5 -0
- data/db/migrate/20211019192121_create_cdn_configuration.katello.rb +30 -0
- data/db/migrate/20211025181315_add_additional_metadata_to_katello_generic_content_units.rb +5 -0
- data/engines/bastion/README.md +15 -0
- data/engines/bastion/app/assets/javascripts/bastion/components/nutupane.factory.js +2 -2
- data/engines/bastion/config/routes.rb +2 -0
- data/engines/bastion/vendor/assets/javascripts/bastion/angular/angular.js +3 -3
- data/engines/bastion/vendor/assets/javascripts/bastion/angular-sanitize/angular-sanitize.js +1 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/bastion_katello.js +3 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/common/views/registration.html +1 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-debs-applicable.controller.js +44 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-debs.controller.js +1 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-debs-applicable.html +70 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-debs.html +1 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-hosts.routes.js +10 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-details.html +5 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/content-hosts.html +25 -9
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/content-views.routes.js +2 -2
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-versions.html +0 -9
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/debs.controller.js +22 -2
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/debs.routes.js +1 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/details/deb.controller.js +22 -2
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/details/views/deb-content-views.html +1 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/details/views/deb-info.html +36 -4
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/details/views/deb-repositories.html +1 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/details/views/deb.html +4 -4
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/views/debs.html +31 -4
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/generic-content/generic-content.factory.js +21 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/generic-content/generic-content.module.js +17 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/packages/details/package.controller.js +4 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/packages/details/views/package-info.html +3 -3
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/product-repositories.controller.js +6 -2
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-info.controller.js +30 -2
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-info.filter.js +1 -13
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-manage-content.controller.js +32 -9
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details.controller.js +15 -4
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-details.html +32 -19
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +28 -28
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-manage-generic-content.html +57 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/new-repository.controller.js +46 -4
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/views/new-repository.html +57 -27
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/repositories.module.js +1 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/repositories.routes.js +16 -7
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/repository-types.service.js +30 -4
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/repository.factory.js +2 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/views/product-repositories.html +8 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/sync-plans/details/sync-plan-details-info.controller.js +6 -2
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/sync-plans/details/views/sync-plan-info.html +1 -1
- data/engines/bastion_katello/lib/bastion_katello/engine.rb +1 -1
- data/lib/katello/engine.rb +0 -1
- data/lib/katello/permission_creator.rb +4 -3
- data/lib/katello/permissions/host_permissions.rb +1 -0
- data/lib/katello/permissions/organization_permissions.rb +2 -1
- data/lib/katello/plugin.rb +15 -11
- data/lib/katello/repository_types/ansible_collection.rb +13 -1
- data/lib/katello/repository_types/deb.rb +13 -0
- data/lib/katello/repository_types/docker.rb +13 -1
- data/lib/katello/repository_types/file.rb +13 -0
- data/lib/katello/repository_types/ostree.rb +48 -4
- data/lib/katello/repository_types/python.rb +26 -12
- data/lib/katello/repository_types/yum.rb +16 -1
- data/lib/katello/tasks/repository.rake +3 -12
- data/lib/katello/tasks/reset.rake +4 -5
- data/lib/katello/version.rb +1 -1
- data/package.json +3 -2
- data/webpack/__mocks__/react-intl/index.js +4 -0
- data/webpack/components/ActionableDetail.js +23 -3
- data/webpack/components/AddedStatusLabel.js +1 -1
- data/webpack/components/Bookmark/AddBookmarkModal.js +96 -0
- data/webpack/components/Bookmark/Bookmark.scss +28 -0
- data/webpack/components/Bookmark/BookmarkActions.js +24 -0
- data/webpack/components/Bookmark/BookmarkConstants.js +3 -0
- data/webpack/components/Bookmark/BookmarkSelectors.js +15 -0
- data/webpack/components/Bookmark/index.js +94 -0
- data/webpack/components/EditableSwitch.js +6 -1
- data/webpack/components/EditableTextInput/EditableTextInput.js +41 -13
- data/webpack/components/Errata/index.js +69 -0
- data/webpack/components/ErratumTypeLabel.js +31 -0
- data/webpack/components/Loading.js +5 -2
- data/webpack/components/RoutedTabs/__tests__/RoutedTabs.test.js +5 -11
- data/webpack/components/RoutedTabs/index.js +77 -2
- data/webpack/components/Search/Search.js +67 -80
- data/webpack/components/Search/__tests__/search.test.js +8 -26
- data/webpack/components/SelectAllCheckbox/SelectAllCheckbox.scss +3 -0
- data/webpack/components/SelectAllCheckbox/index.js +126 -0
- data/webpack/components/SelectableDropdown/SelectableDropdown.js +7 -2
- data/webpack/components/Table/EmptyStateMessage.js +38 -17
- data/webpack/components/Table/MainTable.js +49 -10
- data/webpack/components/Table/MainTable.scss +11 -0
- data/webpack/components/Table/PageControls.js +45 -0
- data/webpack/components/Table/TableHooks.js +230 -0
- data/webpack/components/Table/TableWrapper.js +221 -50
- data/webpack/components/Table/helpers.js +17 -0
- data/webpack/components/TypeAhead/TypeAhead.js +74 -58
- data/webpack/components/TypeAhead/pf4Search/TypeAheadInput.js +25 -10
- data/webpack/components/TypeAhead/pf4Search/TypeAheadInput.scss +9 -8
- data/webpack/components/TypeAhead/pf4Search/TypeAheadItems.js +2 -2
- data/webpack/components/TypeAhead/pf4Search/TypeAheadSearch.js +32 -22
- data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard.js +101 -0
- data/webpack/components/extensions/HostDetails/Cards/__tests__/contentViewDetailsCard.test.js +53 -0
- data/webpack/components/extensions/HostDetails/HostErrata/HostErrataActions.js +47 -0
- data/webpack/components/extensions/HostDetails/HostErrata/HostErrataConstants.js +32 -0
- data/webpack/components/extensions/HostDetails/HostErrata/HostErrataSelectors.js +16 -0
- data/webpack/components/extensions/HostDetails/Tabs/ContentTab/EmptyPage.js +19 -0
- data/webpack/components/extensions/HostDetails/Tabs/ContentTab/SecondaryTabsRoutes.js +17 -0
- data/webpack/components/extensions/HostDetails/Tabs/ContentTab/constants.js +7 -0
- data/webpack/components/extensions/HostDetails/Tabs/ContentTab/helpers.js +3 -0
- data/webpack/components/extensions/HostDetails/Tabs/ContentTab/index.js +40 -0
- data/webpack/components/extensions/HostDetails/Tabs/EnableTracerEmptyState.js +42 -0
- data/webpack/components/extensions/HostDetails/Tabs/EnableTracerModal.js +118 -0
- data/webpack/components/extensions/HostDetails/Tabs/ErrataTab.js +347 -0
- data/webpack/components/extensions/HostDetails/Tabs/ErrataTab.scss +16 -0
- data/webpack/components/extensions/HostDetails/Tabs/ErratumExpansionContents.js +60 -0
- data/webpack/components/extensions/HostDetails/Tabs/ErratumExpansionDetail.js +69 -0
- data/webpack/components/extensions/HostDetails/Tabs/HostTracesActions.js +19 -0
- data/webpack/components/extensions/HostDetails/Tabs/HostTracesConstants.js +2 -0
- data/webpack/components/extensions/HostDetails/Tabs/HostTracesSelectors.js +19 -0
- data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionActions.js +56 -0
- data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionConstants.js +5 -0
- data/webpack/components/extensions/HostDetails/Tabs/TracesTab.js +188 -0
- data/webpack/components/extensions/HostDetails/Tabs/TracesTab.scss +12 -0
- data/webpack/components/extensions/HostDetails/Tabs/__tests__/errata.fixtures.json +67 -0
- data/webpack/components/extensions/HostDetails/Tabs/__tests__/errataTab.test.js +785 -0
- data/webpack/components/extensions/HostDetails/Tabs/__tests__/resolveTraces.fixtures.json +35 -0
- data/webpack/components/extensions/HostDetails/Tabs/__tests__/tracerEmptyTraceResults.fixtures.json +7 -0
- data/webpack/components/extensions/HostDetails/Tabs/__tests__/tracerEnableJobInvocation.fixtures.json +35 -0
- data/webpack/components/extensions/HostDetails/Tabs/__tests__/traces.fixtures.json +44 -0
- data/webpack/components/extensions/HostDetails/Tabs/__tests__/tracesTab.test.js +386 -0
- data/webpack/components/extensions/HostDetails/Tabs/customizedRexUrlHelpers.js +20 -0
- data/webpack/components/extensions/RegistrationCommands/fields/ActivationKeys.js +1 -1
- data/webpack/components/extensions/RegistrationCommands/index.js +1 -1
- data/webpack/components/pf3Table/components/Table.js +1 -1
- data/webpack/components/pf3Table/components/__snapshots__/Table.test.js.snap +3 -3
- data/webpack/containers/Application/Routes.js +3 -3
- data/webpack/containers/Application/config.js +21 -6
- data/webpack/containers/Application/overrides.scss +34 -3
- data/webpack/{fills_index.js → global_index.js} +11 -2
- data/webpack/global_test_setup.js +6 -1
- data/webpack/redux/actions/RedHatRepositories/helpers.js +4 -4
- data/webpack/scenes/AnsibleCollections/AnsibleCollectionsTableSchema.js +1 -1
- data/webpack/scenes/Content/ContentActions.js +31 -0
- data/webpack/scenes/Content/ContentConfig.js +138 -0
- data/webpack/scenes/Content/ContentConstants.js +7 -0
- data/webpack/scenes/Content/ContentPage.js +89 -0
- data/webpack/scenes/Content/ContentSelectors.js +43 -0
- data/webpack/scenes/Content/Details/ContentCounts.js +42 -0
- data/webpack/scenes/Content/Details/ContentDetails.js +66 -0
- data/webpack/scenes/Content/Details/ContentInfo.js +60 -0
- data/webpack/scenes/Content/Details/ContentRepositories.js +78 -0
- data/webpack/scenes/Content/Details/__tests__/ansibleCollectionDetails.fixtures.json +20 -0
- data/webpack/scenes/Content/Details/__tests__/ansibleCollectionRepositoryDetails.fixtures.json +71 -0
- data/webpack/scenes/Content/Details/__tests__/contentDetail.test.js +152 -0
- data/webpack/scenes/Content/Details/__tests__/pythonPackageDetails.fixtures.json +20 -0
- data/webpack/scenes/Content/Details/__tests__/pythonPackageRepositoryDetails.fixtures.json +71 -0
- data/webpack/scenes/Content/Details/index.js +4 -0
- data/webpack/scenes/Content/Table/ContentTable.js +90 -0
- data/webpack/scenes/Content/Table/index.js +3 -0
- data/webpack/scenes/Content/__tests__/ansibleCollections.fixtures.json +50 -0
- data/webpack/scenes/Content/__tests__/contentTable.test.js +89 -0
- data/webpack/scenes/Content/__tests__/contentTypes.fixtures.json +66 -0
- data/webpack/scenes/Content/__tests__/pythonPackages.fixtures.json +30 -0
- data/webpack/scenes/Content/index.js +4 -0
- data/webpack/scenes/ContentViews/ContentViewSelectors.js +5 -6
- data/webpack/scenes/ContentViews/ContentViewsActions.js +13 -8
- data/webpack/scenes/ContentViews/ContentViewsConstants.js +31 -4
- data/webpack/scenes/ContentViews/ContentViewsPage.js +4 -0
- data/webpack/scenes/ContentViews/Copy/CopyContentViewForm.js +19 -7
- data/webpack/scenes/ContentViews/Copy/CopyContentViewModal.js +7 -5
- data/webpack/scenes/ContentViews/Copy/__tests__/copyContentView.test.js +1 -1
- data/webpack/scenes/ContentViews/Create/CreateContentViewForm.js +7 -3
- data/webpack/scenes/ContentViews/Create/__tests__/createContentView.test.js +1 -2
- data/webpack/scenes/ContentViews/Delete/CVDeleteContext.js +4 -0
- data/webpack/scenes/ContentViews/Delete/ContentViewDeleteWizard.js +170 -0
- data/webpack/scenes/ContentViews/Delete/Steps/CVDeleteEnvironmentsSelection.js +108 -0
- data/webpack/scenes/ContentViews/Delete/Steps/CVDeletionFinish.js +69 -0
- data/webpack/scenes/ContentViews/Delete/Steps/CVDeletionReassignActivationKeysForm.js +121 -0
- data/webpack/scenes/ContentViews/Delete/Steps/CVDeletionReassignHostsForm.js +120 -0
- data/webpack/scenes/ContentViews/Delete/Steps/CVDeletionReview.js +62 -0
- data/webpack/scenes/ContentViews/Delete/Steps/CVEnvironmentSelectionForm.scss +4 -0
- data/webpack/scenes/ContentViews/Delete/__tests__/CvData.fixtures.json +259 -0
- data/webpack/scenes/ContentViews/Delete/__tests__/affectedHosts.fixtures.json +155 -0
- data/webpack/scenes/ContentViews/Delete/__tests__/contentViewDelete.test.js +241 -0
- data/webpack/scenes/ContentViews/Delete/__tests__/cvDetails.fixtures.json +248 -0
- data/webpack/scenes/ContentViews/Delete/__tests__/cvVersionsData.fixtures.json +865 -0
- data/webpack/scenes/ContentViews/Delete/__tests__/envPathData.fixtures.json +424 -0
- data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewAddModal.js +15 -7
- data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewBulkAddModal.js +123 -0
- data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentEnvironments.js +1 -1
- data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentVersion.js +8 -5
- data/webpack/scenes/ContentViews/Details/ComponentContentViews/ContentViewComponents.js +109 -51
- data/webpack/scenes/ContentViews/Details/ComponentContentViews/__tests__/contentViewComponents.fixtures.json +21 -6
- data/webpack/scenes/ContentViews/Details/ComponentContentViews/__tests__/contentViewComponents.test.js +80 -16
- data/webpack/scenes/ContentViews/Details/ContentViewDetailActions.js +248 -3
- data/webpack/scenes/ContentViews/Details/ContentViewDetailSelectors.js +141 -0
- data/webpack/scenes/ContentViews/Details/ContentViewDetails.js +36 -54
- data/webpack/scenes/ContentViews/Details/ContentViewInfo.js +20 -4
- data/webpack/scenes/ContentViews/Details/Filters/Add/CVFilterAddModal.js +63 -38
- data/webpack/scenes/ContentViews/Details/Filters/Add/__tests__/cvFilterAdd.test.js +3 -4
- data/webpack/scenes/ContentViews/Details/Filters/AffectedRepositories/AffectedRepositorySelection.js +65 -0
- data/webpack/scenes/ContentViews/Details/Filters/AffectedRepositories/AffectedRepositoryTable.js +260 -0
- data/webpack/scenes/ContentViews/Details/Filters/ArtifactsWithNoErrata.js +54 -0
- data/webpack/scenes/ContentViews/Details/Filters/CVContainerImageFilterContent.js +202 -0
- data/webpack/scenes/ContentViews/Details/Filters/CVErrataDateFilterContent.js +291 -0
- data/webpack/scenes/ContentViews/Details/Filters/CVErrataIDFilterContent.js +441 -0
- data/webpack/scenes/ContentViews/Details/Filters/CVFilterDetailType.js +62 -3
- data/webpack/scenes/ContentViews/Details/Filters/CVModuleStreamFilterContent.js +302 -0
- data/webpack/scenes/ContentViews/Details/Filters/CVPackageGroupFilterContent.js +186 -23
- data/webpack/scenes/ContentViews/Details/Filters/CVRpmFilterContent.js +144 -19
- data/webpack/scenes/ContentViews/Details/Filters/ContentType.js +2 -0
- data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilterDetails.js +44 -13
- data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilterDetailsHeader.js +81 -17
- data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilters.js +43 -43
- data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/CVRpmMatchContentModal.js +96 -0
- data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/__tests__/CVRpmMatchContent.fixtures.json +166 -0
- data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/__tests__/CVRpmMatchContentModal.test.js +90 -0
- data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/__tests__/CVRpmMatchContentSearch.fixtures.json +33 -0
- data/webpack/scenes/ContentViews/Details/Filters/Rules/ContainerTag/AddEditContainerTagRuleModal.js +91 -0
- data/webpack/scenes/ContentViews/Details/Filters/Rules/Package/AddEditPackageRuleModal.js +237 -0
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVContainerImageFilterContent.fixtures.json +42 -0
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVContainerImageFilterContent.test.js +265 -0
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVRpmFilterContent.test.js +218 -11
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/ContentViewPackageGroupFilter.test.js +517 -0
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/allFilterErrata.fixtures.json +122 -0
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/allFilterModulesStreams.fixtures.json +60 -0
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewErrataByDateDetails.fixtures.json +359 -0
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilterDetail.fixtures.json +88 -102
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilterDetails.test.js +34 -9
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.fixtures.json +148 -132
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.test.js +25 -7
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvAllRepos.fixtures.json +150 -0
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvErrataDateFilterContent.test.js +74 -0
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvErrataIDFilter.test.js +404 -0
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvErratumFilterDetails.fixtures.json +89 -0
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvFilterDetailModuleAffectedRepos.fixtures.json +383 -0
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvFilterDetailWithAffectedRepos.fixtures.json +375 -0
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvFilterFixutre.fixture.json +282 -0
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvModuleStreamFilter.test.js +392 -0
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvModuleStreamFilterDetails.fixtures.json +97 -0
- data/webpack/scenes/ContentViews/Details/Filters/index.js +26 -0
- data/webpack/scenes/ContentViews/Details/Histories/ContentViewHistories.js +68 -79
- data/webpack/scenes/ContentViews/Details/Histories/__tests__/contentViewHistory.test.js +1 -2
- data/webpack/scenes/ContentViews/Details/Promote/ContentViewVersionPromote.js +163 -0
- data/webpack/scenes/ContentViews/Details/Promote/ContentViewVersionPromoteSelectors.js +16 -0
- data/webpack/scenes/ContentViews/Details/Repositories/ContentCounts.js +9 -1
- data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +88 -74
- data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewAddRemove.test.js +8 -9
- data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewDetailRepos.fixtures.json +3 -3
- data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersionContent.js +30 -9
- data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersionEnvironments.js +1 -1
- data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersionErrata.js +9 -5
- data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersionErrata.scss +2 -2
- data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersions.js +132 -14
- data/webpack/scenes/ContentViews/Details/Versions/Delete/DeleteContext.js +4 -0
- data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveCVVersionWizard.js +176 -0
- data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVEnvironmentSelectionForm.js +127 -0
- data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVReassignActivationKeysForm.js +131 -0
- data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVReassignHostsForm.js +128 -0
- data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVVersionDeleteFinish.js +94 -0
- data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVVersionRemoveReview.js +67 -0
- data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvAffectedActivationKeys.fixture.json +53 -0
- data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvAffectedHosts.fixture.json +153 -0
- data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvDropDownOptionsResponse.fixture.json +192 -0
- data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvVersionRemove.test.js +313 -0
- data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvVersionRemoveResponse.fixture.json +74 -0
- data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/versionRemoveEnvPaths.fixtures.json +352 -0
- data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/versionsResponseData.fixtures.json +583 -0
- data/webpack/scenes/ContentViews/Details/Versions/Delete/affectedActivationKeys.js +96 -0
- data/webpack/scenes/ContentViews/Details/Versions/Delete/affectedHosts.js +97 -0
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailConfig.js +332 -0
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetails.js +128 -0
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetails.scss +44 -0
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailsHeader.js +66 -0
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailsTable.js +125 -0
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionRepositoryCell.js +115 -0
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionAnsibleCollections.fixtures.json +449 -0
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionComponent.fixtures.json +753 -0
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDebPackages.fixtures.json +58 -0
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetails.fixtures.json +158 -0
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetails.test.js +289 -0
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetailsCounts.fixtures.json +73 -0
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetailsEmpty.test.js +44 -0
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDockerTags.fixtures.json +3024 -0
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionErrata.fixtures.json +201 -0
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionFiles.fixtures.json +22 -0
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionModuleStreams.fixtures.json +196 -0
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionRepositories.fixtures.json +1000 -0
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionRpmPackageGroups.fixtures.json +44 -0
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionRpmPackages.fixtures.json +394 -0
- data/webpack/scenes/ContentViews/Details/Versions/__tests__/contentViewVersions.fixtures.json +4 -4
- data/webpack/scenes/ContentViews/Details/Versions/__tests__/contentViewVersions.test.js +95 -26
- data/webpack/scenes/ContentViews/Details/Versions/__tests__/contentViewVersionsWithTask.fixtures.json +2 -2
- data/webpack/scenes/ContentViews/Details/Versions/index.js +25 -0
- data/webpack/scenes/ContentViews/Details/__tests__/contentViewDetail.test.js +20 -16
- data/webpack/scenes/ContentViews/Publish/__tests__/publishContentView.test.js +3 -5
- data/webpack/scenes/ContentViews/Table/ContentViewsTable.js +106 -64
- data/webpack/scenes/ContentViews/Table/tableDataGenerator.js +25 -4
- data/webpack/scenes/ContentViews/__tests__/basicContentViews.fixtures.js +1 -1
- data/webpack/scenes/ContentViews/__tests__/contentViewList.fixtures.json +4 -1
- data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +29 -36
- data/webpack/scenes/ContentViews/__tests__/mockDetails.fixtures.json +10 -0
- data/webpack/scenes/ContentViews/components/CVBreadCrumb.js +117 -0
- data/webpack/scenes/ContentViews/components/ContentViewsCounter.js +59 -0
- data/webpack/scenes/ContentViews/components/EnvironmentLabels.js +4 -3
- data/webpack/scenes/ContentViews/components/EnvironmentPaths/EnvironmentPaths.js +30 -11
- data/webpack/scenes/ContentViews/components/TaskPresenter/TaskPresenter.js +1 -1
- data/webpack/scenes/ContentViews/expansions/DetailsExpansion.js +38 -1
- data/webpack/scenes/ContentViews/expansions/RelatedCompositeContentViewsModal.js +79 -0
- data/webpack/scenes/ContentViews/expansions/RelatedContentViewComponentsModal.js +107 -0
- data/webpack/scenes/ContentViews/expansions/__tests__/contentViewComponentsModal.test.js +59 -0
- data/webpack/scenes/ContentViews/expansions/__tests__/contentViewComponentsResponse.fixtures.json +116 -0
- data/webpack/scenes/ContentViews/expansions/__tests__/relatedCompositeCvs.fixtures.json +4 -0
- data/webpack/scenes/ContentViews/helpers.js +1 -0
- data/webpack/scenes/RedHatRepositories/components/RepositorySetRepository/RepositorySetRepository.js +1 -1
- data/webpack/scenes/RedHatRepositories/components/SearchBar.js +4 -3
- data/webpack/scenes/SmartProxy/SmartProxyContentTable.js +1 -1
- data/webpack/scenes/Subscriptions/SubscriptionsPage.js +17 -9
- data/webpack/scenes/Subscriptions/components/SubscriptionsTable/__tests__/__snapshots__/SubscriptionsTable.test.js.snap +3 -3
- data/webpack/test-utils/nockWrapper.js +20 -3
- data/webpack/utils/helpers.js +16 -2
- data/webpack/utils/useDebounce.js +20 -0
- metadata +232 -54
- data/app/assets/javascripts/katello/widgets/tabs.js +0 -13
- data/app/assets/stylesheets/katello/widgets/tabs.scss +0 -69
- data/app/lib/actions/katello/provider/update.rb +0 -38
- data/webpack/components/RoutedTabs/RoutedTabs.js +0 -90
- data/webpack/components/Search/Search.test.js +0 -23
- data/webpack/components/Search/__snapshots__/Search.test.js.snap +0 -21
- data/webpack/components/extensions/HostDetails/Tabs/ContentTab.js +0 -42
- data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewDetailRepos.test.js +0 -145
- data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersionPackages.js +0 -0
@@ -0,0 +1,785 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { renderWithRedux, patientlyWaitFor, fireEvent } from 'react-testing-lib-wrapper';
|
3
|
+
import { nockInstance, assertNockRequest, mockForemanAutocomplete, mockSetting } from '../../../../../test-utils/nockWrapper';
|
4
|
+
import { foremanApi } from '../../../../../services/api';
|
5
|
+
import { HOST_ERRATA_KEY } from '../../HostErrata/HostErrataConstants';
|
6
|
+
import { ErrataTab } from '../ErrataTab';
|
7
|
+
import mockErrataData from './errata.fixtures.json';
|
8
|
+
|
9
|
+
const contentFacetAttributes = {
|
10
|
+
id: 11,
|
11
|
+
uuid: 'e5761ea3-4117-4ecf-83d0-b694f99b389e',
|
12
|
+
content_view_default: false,
|
13
|
+
lifecycle_environment_library: false,
|
14
|
+
};
|
15
|
+
|
16
|
+
const renderOptions = (facetAttributes = contentFacetAttributes) => ({
|
17
|
+
apiNamespace: HOST_ERRATA_KEY,
|
18
|
+
initialState: {
|
19
|
+
API: {
|
20
|
+
HOST_DETAILS: {
|
21
|
+
response: {
|
22
|
+
id: 1,
|
23
|
+
content_facet_attributes: { ...facetAttributes },
|
24
|
+
},
|
25
|
+
status: 'RESOLVED',
|
26
|
+
},
|
27
|
+
},
|
28
|
+
},
|
29
|
+
});
|
30
|
+
|
31
|
+
const makeMockErrata = ({ pageSize = 20, total = 100, page = 1 }) => {
|
32
|
+
const mockErrataResults = [];
|
33
|
+
for (let i = (page * 1000); i < (page * 1000) + pageSize; i += 1) {
|
34
|
+
mockErrataResults.push({
|
35
|
+
id: i,
|
36
|
+
severity: 'Important',
|
37
|
+
title: `Errata${i}`,
|
38
|
+
type: (i % 2 === 0) ? 'security' : 'enhancement',
|
39
|
+
host_id: 1,
|
40
|
+
errata_id: `Errata${i}`,
|
41
|
+
bugs: [],
|
42
|
+
cves: [],
|
43
|
+
packages: [],
|
44
|
+
module_streams: [],
|
45
|
+
installable: true,
|
46
|
+
});
|
47
|
+
}
|
48
|
+
|
49
|
+
return {
|
50
|
+
total,
|
51
|
+
subtotal: total,
|
52
|
+
selectable: total,
|
53
|
+
page,
|
54
|
+
per_page: pageSize,
|
55
|
+
error: null,
|
56
|
+
search: null,
|
57
|
+
results: mockErrataResults,
|
58
|
+
};
|
59
|
+
};
|
60
|
+
|
61
|
+
const hostErrata = foremanApi.getApiUrl('/hosts/1/errata');
|
62
|
+
const autocompleteUrl = '/hosts/1/errata/auto_complete_search';
|
63
|
+
const defaultQueryWithoutSearch = {
|
64
|
+
include_applicable: false,
|
65
|
+
per_page: 20,
|
66
|
+
page: 1,
|
67
|
+
};
|
68
|
+
const defaultQuery = { ...defaultQueryWithoutSearch, search: '' };
|
69
|
+
const page2Query = { ...defaultQueryWithoutSearch, page: 2 };
|
70
|
+
|
71
|
+
let firstErrata;
|
72
|
+
let thirdErrata;
|
73
|
+
let searchDelayScope;
|
74
|
+
let autoSearchScope;
|
75
|
+
|
76
|
+
beforeEach(() => {
|
77
|
+
// jest.resetModules();
|
78
|
+
const { results } = mockErrataData;
|
79
|
+
[firstErrata, , thirdErrata] = results;
|
80
|
+
searchDelayScope = mockSetting(nockInstance, 'autosearch_delay', 500);
|
81
|
+
autoSearchScope = mockSetting(nockInstance, 'autosearch_while_typing', true);
|
82
|
+
});
|
83
|
+
|
84
|
+
afterEach(() => {
|
85
|
+
assertNockRequest(searchDelayScope);
|
86
|
+
assertNockRequest(autoSearchScope);
|
87
|
+
});
|
88
|
+
|
89
|
+
test('Can call API for errata and show on screen on page load', async (done) => {
|
90
|
+
// Setup autocomplete with mockForemanAutoComplete since we aren't adding /katello
|
91
|
+
const autocompleteScope = mockForemanAutocomplete(nockInstance, autocompleteUrl);
|
92
|
+
// return tracedata results when we look for errata
|
93
|
+
const scope = nockInstance
|
94
|
+
.get(hostErrata)
|
95
|
+
.query(defaultQuery)
|
96
|
+
.reply(200, mockErrataData);
|
97
|
+
|
98
|
+
const { getAllByText } = renderWithRedux(<ErrataTab />, renderOptions());
|
99
|
+
// Assert that the errata are now showing on the screen, but wait for them to appear.
|
100
|
+
await patientlyWaitFor(() => expect(getAllByText(firstErrata.severity)[0]).toBeInTheDocument());
|
101
|
+
// Assert request was made and completed, see helper function
|
102
|
+
assertNockRequest(autocompleteScope);
|
103
|
+
assertNockRequest(scope, done); // Pass jest callback to confirm test is done
|
104
|
+
});
|
105
|
+
|
106
|
+
test('Can handle no errata being present', async (done) => {
|
107
|
+
// Setup autocomplete with mockForemanAutoComplete since we aren't adding /katello
|
108
|
+
const autocompleteScope = mockForemanAutocomplete(nockInstance, autocompleteUrl);
|
109
|
+
|
110
|
+
const noResults = {
|
111
|
+
total: 0,
|
112
|
+
subtotal: 0,
|
113
|
+
page: 1,
|
114
|
+
per_page: 20,
|
115
|
+
results: [],
|
116
|
+
};
|
117
|
+
|
118
|
+
const scope = nockInstance
|
119
|
+
.get(hostErrata)
|
120
|
+
.query(defaultQuery)
|
121
|
+
.reply(200, noResults);
|
122
|
+
|
123
|
+
const { queryByText } = renderWithRedux(<ErrataTab />, renderOptions());
|
124
|
+
|
125
|
+
// Assert that there are not any errata showing on the screen.
|
126
|
+
await patientlyWaitFor(() => expect(queryByText('This host does not have any installable errata.')).toBeInTheDocument());
|
127
|
+
// Assert request was made and completed, see helper function
|
128
|
+
assertNockRequest(autocompleteScope);
|
129
|
+
assertNockRequest(scope, done); // Pass jest callback to confirm test is done
|
130
|
+
});
|
131
|
+
|
132
|
+
test('Can display expanded errata details', async (done) => {
|
133
|
+
// Setup autocomplete with mockForemanAutoComplete since we aren't adding /katello
|
134
|
+
const autocompleteScope = mockForemanAutocomplete(nockInstance, autocompleteUrl);
|
135
|
+
|
136
|
+
// return tracedata results when we look for errata
|
137
|
+
const scope = nockInstance
|
138
|
+
.get(hostErrata)
|
139
|
+
.query(defaultQuery)
|
140
|
+
.reply(200, mockErrataData);
|
141
|
+
|
142
|
+
const {
|
143
|
+
getByText,
|
144
|
+
queryByText,
|
145
|
+
getAllByText,
|
146
|
+
getAllByLabelText,
|
147
|
+
} = renderWithRedux(<ErrataTab />, renderOptions());
|
148
|
+
|
149
|
+
// Assert that the errata are now showing on the screen, but wait for them to appear.
|
150
|
+
await patientlyWaitFor(() => expect(getAllByText(firstErrata.severity)[0]).toBeInTheDocument());
|
151
|
+
const firstExpansion = getAllByLabelText('Details')[0];
|
152
|
+
|
153
|
+
firstExpansion.click();
|
154
|
+
expect(getAllByText('CVEs').length).toBeGreaterThan(0);
|
155
|
+
// the errata details should now be visible
|
156
|
+
expect(getByText(firstErrata.summary)).toBeVisible();
|
157
|
+
|
158
|
+
const cveTreeItem = getAllByText('CVEs')[0];
|
159
|
+
expect(cveTreeItem).toBeVisible();
|
160
|
+
cveTreeItem.click();
|
161
|
+
// the CVE should now be visible
|
162
|
+
expect(getByText(firstErrata.cves[0].cve_id)).toBeInTheDocument();
|
163
|
+
cveTreeItem.click();
|
164
|
+
// the CVE should now have disappeared
|
165
|
+
expect(queryByText(firstErrata.cves[0].cve_id)).not.toBeInTheDocument();
|
166
|
+
|
167
|
+
firstExpansion.click();
|
168
|
+
// the errata details should now be hidden
|
169
|
+
expect(getByText(firstErrata.summary)).not.toBeVisible();
|
170
|
+
// Assert request was made and completed, see helper function
|
171
|
+
assertNockRequest(autocompleteScope);
|
172
|
+
assertNockRequest(scope, done); // Pass jest callback to confirm test is done
|
173
|
+
});
|
174
|
+
|
175
|
+
test('Can select one errata', async (done) => {
|
176
|
+
// Setup autocomplete with mockForemanAutoComplete since we aren't adding /katello
|
177
|
+
const autocompleteScope = mockForemanAutocomplete(nockInstance, autocompleteUrl);
|
178
|
+
|
179
|
+
// return errata data results when we look for errata
|
180
|
+
const scope = nockInstance
|
181
|
+
.get(hostErrata)
|
182
|
+
.query(defaultQuery)
|
183
|
+
.reply(200, mockErrataData);
|
184
|
+
|
185
|
+
const {
|
186
|
+
queryByText,
|
187
|
+
getAllByText,
|
188
|
+
getByLabelText,
|
189
|
+
} = renderWithRedux(<ErrataTab />, renderOptions());
|
190
|
+
|
191
|
+
// Assert that the errata are now showing on the screen, but wait for them to appear.
|
192
|
+
await patientlyWaitFor(() => expect(getAllByText(firstErrata.severity)[0]).toBeInTheDocument());
|
193
|
+
|
194
|
+
expect(queryByText('1 selected')).not.toBeInTheDocument();
|
195
|
+
|
196
|
+
const firstCheckBox = getByLabelText('Select row 0');
|
197
|
+
firstCheckBox.click();
|
198
|
+
|
199
|
+
const selectAllCheckbox = getByLabelText('Select all');
|
200
|
+
expect(selectAllCheckbox.checked).toEqual(false);
|
201
|
+
|
202
|
+
expect(queryByText('1 selected')).toBeInTheDocument();
|
203
|
+
|
204
|
+
assertNockRequest(autocompleteScope);
|
205
|
+
assertNockRequest(scope, done); // Pass jest callback to confirm test is done
|
206
|
+
});
|
207
|
+
|
208
|
+
test('Can select all errata across pages through checkbox', async (done) => {
|
209
|
+
// Setup autocomplete with mockForemanAutoComplete since we aren't adding /katello
|
210
|
+
const autocompleteScope = mockForemanAutocomplete(nockInstance, autocompleteUrl);
|
211
|
+
const mockErrata = makeMockErrata({ page: 1 });
|
212
|
+
// return errata data results when we look for errata
|
213
|
+
|
214
|
+
// return errata data results when we look for errata
|
215
|
+
const scope = nockInstance
|
216
|
+
.get(hostErrata)
|
217
|
+
.query(defaultQuery)
|
218
|
+
.reply(200, mockErrata);
|
219
|
+
|
220
|
+
const scope2 = nockInstance
|
221
|
+
.get(hostErrata)
|
222
|
+
.query(page2Query)
|
223
|
+
.reply(200, makeMockErrata({ page: 2 }));
|
224
|
+
|
225
|
+
const {
|
226
|
+
queryByText,
|
227
|
+
getAllByText,
|
228
|
+
getByLabelText,
|
229
|
+
getAllByLabelText,
|
230
|
+
} = renderWithRedux(<ErrataTab />, renderOptions());
|
231
|
+
|
232
|
+
// Assert that the errata are now showing on the screen, but wait for them to appear.
|
233
|
+
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
234
|
+
|
235
|
+
const selectAllCheckbox = getByLabelText('Select all');
|
236
|
+
selectAllCheckbox.click();
|
237
|
+
expect(queryByText(`${mockErrata.total} selected`)).toBeInTheDocument();
|
238
|
+
expect(getByLabelText('Select row 0').checked).toEqual(true);
|
239
|
+
|
240
|
+
getAllByLabelText('Go to next page')[0].click();
|
241
|
+
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
242
|
+
expect(getByLabelText('Select row 0').checked).toEqual(true);
|
243
|
+
|
244
|
+
assertNockRequest(autocompleteScope);
|
245
|
+
assertNockRequest(scope, done);
|
246
|
+
assertNockRequest(scope2, done); // Pass jest callback to confirm test is done
|
247
|
+
});
|
248
|
+
|
249
|
+
test('Can deselect all errata across pages through checkbox', async (done) => {
|
250
|
+
// Setup autocomplete with mockForemanAutoComplete since we aren't adding /katello
|
251
|
+
const autocompleteScope = mockForemanAutocomplete(nockInstance, autocompleteUrl);
|
252
|
+
const mockErrata = makeMockErrata({ page: 1 });
|
253
|
+
// return errata data results when we look for errata
|
254
|
+
|
255
|
+
// return errata data results when we look for errata
|
256
|
+
const scope = nockInstance
|
257
|
+
.get(hostErrata)
|
258
|
+
.query(defaultQuery)
|
259
|
+
.reply(200, mockErrata);
|
260
|
+
|
261
|
+
const scope2 = nockInstance
|
262
|
+
.get(hostErrata)
|
263
|
+
.query(page2Query)
|
264
|
+
.reply(200, makeMockErrata({ page: 2 }));
|
265
|
+
|
266
|
+
const {
|
267
|
+
queryByText,
|
268
|
+
getAllByText,
|
269
|
+
getByLabelText,
|
270
|
+
getAllByLabelText,
|
271
|
+
} = renderWithRedux(<ErrataTab />, renderOptions());
|
272
|
+
|
273
|
+
// Assert that the errata are now showing on the screen, but wait for them to appear.
|
274
|
+
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
275
|
+
|
276
|
+
const selectAllCheckbox = getByLabelText('Select all');
|
277
|
+
selectAllCheckbox.click();
|
278
|
+
expect(queryByText(`${mockErrata.total} selected`)).toBeInTheDocument();
|
279
|
+
expect(getByLabelText('Select row 0').checked).toEqual(true);
|
280
|
+
|
281
|
+
selectAllCheckbox.click();
|
282
|
+
expect(queryByText(`${mockErrata.total} selected`)).not.toBeInTheDocument();
|
283
|
+
expect(getByLabelText('Select row 0').checked).toEqual(false);
|
284
|
+
|
285
|
+
getAllByLabelText('Go to next page')[0].click();
|
286
|
+
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
287
|
+
expect(getByLabelText('Select row 0').checked).toEqual(false);
|
288
|
+
|
289
|
+
assertNockRequest(autocompleteScope);
|
290
|
+
assertNockRequest(scope, done); // Pass jest callback to confirm test is done
|
291
|
+
assertNockRequest(scope2, done);
|
292
|
+
});
|
293
|
+
|
294
|
+
|
295
|
+
test('Can select & deselect errata across pages', async (done) => {
|
296
|
+
// Setup autocomplete with mockForemanAutoComplete since we aren't adding /katello
|
297
|
+
const autocompleteScope = mockForemanAutocomplete(nockInstance, autocompleteUrl);
|
298
|
+
|
299
|
+
// return errata data results when we look for errata
|
300
|
+
const scope = nockInstance
|
301
|
+
.get(hostErrata)
|
302
|
+
.query(defaultQuery)
|
303
|
+
.reply(200, makeMockErrata({ page: 1 }));
|
304
|
+
|
305
|
+
const scope2 = nockInstance
|
306
|
+
.get(hostErrata)
|
307
|
+
.query(page2Query)
|
308
|
+
.reply(200, makeMockErrata({ page: 2 }));
|
309
|
+
|
310
|
+
const {
|
311
|
+
queryByText,
|
312
|
+
getAllByText,
|
313
|
+
getByLabelText,
|
314
|
+
getAllByLabelText,
|
315
|
+
} = renderWithRedux(<ErrataTab />, renderOptions());
|
316
|
+
|
317
|
+
// Assert that the errata are now showing on the screen, but wait for them to appear.
|
318
|
+
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
319
|
+
|
320
|
+
getByLabelText('Select row 0').click();
|
321
|
+
getByLabelText('Select row 1').click();
|
322
|
+
|
323
|
+
getAllByLabelText('Go to next page')[0].click();
|
324
|
+
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
325
|
+
|
326
|
+
getByLabelText('Select row 0').click();
|
327
|
+
getByLabelText('Select row 1').click();
|
328
|
+
|
329
|
+
expect(queryByText('4 selected')).toBeInTheDocument();
|
330
|
+
|
331
|
+
assertNockRequest(autocompleteScope);
|
332
|
+
assertNockRequest(scope, done); // Pass jest callback to confirm test is done
|
333
|
+
assertNockRequest(scope2, done);
|
334
|
+
});
|
335
|
+
|
336
|
+
test('Can select & de-select all errata through selectDropDown', async (done) => {
|
337
|
+
// Setup autocomplete with mockForemanAutoComplete since we aren't adding /katello
|
338
|
+
const autocompleteScope = mockForemanAutocomplete(nockInstance, autocompleteUrl);
|
339
|
+
const mockErrata = makeMockErrata({});
|
340
|
+
// return errata data results when we look for errata
|
341
|
+
const scope = nockInstance
|
342
|
+
.get(hostErrata)
|
343
|
+
.query(defaultQuery)
|
344
|
+
.reply(200, mockErrata);
|
345
|
+
|
346
|
+
const {
|
347
|
+
getByText,
|
348
|
+
queryByText,
|
349
|
+
getAllByText,
|
350
|
+
getByLabelText,
|
351
|
+
} = renderWithRedux(<ErrataTab />, renderOptions());
|
352
|
+
|
353
|
+
// Assert that the errata are now showing on the screen, but wait for them to appear.
|
354
|
+
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
355
|
+
|
356
|
+
const selectDropDown = getByLabelText('Select');
|
357
|
+
selectDropDown.click();
|
358
|
+
|
359
|
+
const selectAll = getByText(`Select all (${mockErrata.total})`);
|
360
|
+
expect(selectAll).toBeInTheDocument();
|
361
|
+
selectAll.click();
|
362
|
+
|
363
|
+
expect(queryByText(`${mockErrata.total} selected`)).toBeInTheDocument();
|
364
|
+
expect(getByLabelText('Select row 0').checked).toEqual(true);
|
365
|
+
|
366
|
+
selectDropDown.click();
|
367
|
+
const selectNone = getByText('Select none (0)');
|
368
|
+
selectNone.click();
|
369
|
+
|
370
|
+
expect(queryByText(`${mockErrata.total} selected`)).not.toBeInTheDocument();
|
371
|
+
expect(getByLabelText('Select row 0').checked).toEqual(false);
|
372
|
+
|
373
|
+
assertNockRequest(autocompleteScope);
|
374
|
+
assertNockRequest(scope, done); // Pass jest callback to confirm test is done
|
375
|
+
});
|
376
|
+
|
377
|
+
test('Can de-select items in select all mode across pages', async (done) => {
|
378
|
+
// Setup autocomplete with mockForemanAutoComplete since we aren't adding /katello
|
379
|
+
const autocompleteScope = mockForemanAutocomplete(nockInstance, autocompleteUrl);
|
380
|
+
const mockErrata = makeMockErrata({ page: 1 });
|
381
|
+
|
382
|
+
// return errata data results when we look for errata
|
383
|
+
const scope = nockInstance
|
384
|
+
.get(hostErrata)
|
385
|
+
.query(defaultQuery)
|
386
|
+
.reply(200, mockErrata);
|
387
|
+
|
388
|
+
const scope2 = nockInstance
|
389
|
+
.get(hostErrata)
|
390
|
+
.query({ ...defaultQueryWithoutSearch, page: 1 })
|
391
|
+
.reply(200, makeMockErrata({ page: 2 }));
|
392
|
+
|
393
|
+
const scope3 = nockInstance
|
394
|
+
.get(hostErrata)
|
395
|
+
.query(page2Query)
|
396
|
+
.reply(200, makeMockErrata({ page: 2 }));
|
397
|
+
|
398
|
+
const {
|
399
|
+
queryByText,
|
400
|
+
getAllByText,
|
401
|
+
getByLabelText,
|
402
|
+
getAllByLabelText,
|
403
|
+
} = renderWithRedux(<ErrataTab />, renderOptions());
|
404
|
+
|
405
|
+
// Assert that the errata are now showing on the screen, but wait for them to appear.
|
406
|
+
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
407
|
+
|
408
|
+
const selectAllCheckbox = getByLabelText('Select all');
|
409
|
+
selectAllCheckbox.click();
|
410
|
+
expect(queryByText(`${mockErrata.total} selected`)).toBeInTheDocument();
|
411
|
+
|
412
|
+
expect(getByLabelText('Select row 0').checked).toEqual(true);
|
413
|
+
getByLabelText('Select row 0').click(); // de select
|
414
|
+
|
415
|
+
expect(queryByText(`${mockErrata.total - 1} selected`)).toBeInTheDocument();
|
416
|
+
expect(getByLabelText('Select row 0').checked).toEqual(false);
|
417
|
+
|
418
|
+
// goto next page
|
419
|
+
getAllByLabelText('Go to next page')[0].click();
|
420
|
+
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
421
|
+
|
422
|
+
expect(getByLabelText('Select row 0').checked).toEqual(true);
|
423
|
+
getByLabelText('Select row 0').click(); // de select
|
424
|
+
|
425
|
+
expect(queryByText(`${mockErrata.total - 2} selected`)).toBeInTheDocument();
|
426
|
+
expect(getByLabelText('Select row 0').checked).toEqual(false);
|
427
|
+
|
428
|
+
// goto previous page
|
429
|
+
getAllByLabelText('Go to previous page')[0].click();
|
430
|
+
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
431
|
+
|
432
|
+
expect(getByLabelText('Select row 0').checked).toEqual(false);
|
433
|
+
expect(getByLabelText('Select row 1').checked).toEqual(true);
|
434
|
+
getByLabelText('Select row 1').click(); // de select
|
435
|
+
|
436
|
+
expect(queryByText(`${mockErrata.total - 3} selected`)).toBeInTheDocument();
|
437
|
+
expect(getByLabelText('Select row 1').checked).toEqual(false);
|
438
|
+
|
439
|
+
assertNockRequest(autocompleteScope);
|
440
|
+
assertNockRequest(scope, done); // Pass jest callback to confirm test is done
|
441
|
+
assertNockRequest(scope2, done);
|
442
|
+
assertNockRequest(scope3, done);
|
443
|
+
});
|
444
|
+
|
445
|
+
test('Can select page and select only items on the page', async (done) => {
|
446
|
+
// Setup autocomplete with mockForemanAutoComplete since we aren't adding /katello
|
447
|
+
const autocompleteScope = mockForemanAutocomplete(nockInstance, autocompleteUrl);
|
448
|
+
const mockErrata = makeMockErrata({});
|
449
|
+
// return errata data results when we look for errata
|
450
|
+
const scope = nockInstance
|
451
|
+
.get(hostErrata)
|
452
|
+
.query(defaultQuery)
|
453
|
+
.reply(200, mockErrata);
|
454
|
+
|
455
|
+
const {
|
456
|
+
getByText,
|
457
|
+
queryByText,
|
458
|
+
getAllByText,
|
459
|
+
getByLabelText,
|
460
|
+
} = renderWithRedux(<ErrataTab />, renderOptions());
|
461
|
+
|
462
|
+
// Assert that the errata are now showing on the screen, but wait for them to appear.
|
463
|
+
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
464
|
+
|
465
|
+
const selectDropDown = getByLabelText('Select');
|
466
|
+
selectDropDown.click();
|
467
|
+
|
468
|
+
const selectPage = getByText('Select page (20)');
|
469
|
+
expect(selectPage).toBeInTheDocument();
|
470
|
+
selectPage.click();
|
471
|
+
|
472
|
+
expect(queryByText('20 selected')).toBeInTheDocument();
|
473
|
+
expect(getByLabelText('Select row 0').checked).toEqual(true);
|
474
|
+
|
475
|
+
assertNockRequest(autocompleteScope);
|
476
|
+
assertNockRequest(scope, done); // Pass jest callback to confirm test is done
|
477
|
+
});
|
478
|
+
|
479
|
+
test('Select all is disabled if all rows are selected', async (done) => {
|
480
|
+
// Setup autocomplete with mockForemanAutoComplete since we aren't adding /katello
|
481
|
+
const autocompleteScope = mockForemanAutocomplete(nockInstance, autocompleteUrl);
|
482
|
+
const mockErrata = makeMockErrata({});
|
483
|
+
// return errata data results when we look for errata
|
484
|
+
const scope = nockInstance
|
485
|
+
.get(hostErrata)
|
486
|
+
.query(defaultQuery)
|
487
|
+
.reply(200, mockErrata);
|
488
|
+
|
489
|
+
const {
|
490
|
+
getByText,
|
491
|
+
queryByText,
|
492
|
+
getAllByText,
|
493
|
+
getByLabelText,
|
494
|
+
} = renderWithRedux(<ErrataTab />, renderOptions());
|
495
|
+
|
496
|
+
// Assert that the errata are now showing on the screen, but wait for them to appear.
|
497
|
+
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
498
|
+
|
499
|
+
const selectDropDown = getByLabelText('Select');
|
500
|
+
selectDropDown.click();
|
501
|
+
|
502
|
+
const selectAll = getByText(`Select all (${mockErrata.total})`);
|
503
|
+
expect(selectAll).toBeInTheDocument();
|
504
|
+
expect(selectAll).toHaveAttribute('aria-disabled', 'false');
|
505
|
+
selectAll.click();
|
506
|
+
|
507
|
+
expect(queryByText(`${mockErrata.total} selected`)).toBeInTheDocument();
|
508
|
+
|
509
|
+
// click the dropdown again and make sure select all is disabled
|
510
|
+
selectDropDown.click();
|
511
|
+
expect(getByText(`Select all (${mockErrata.total})`)).toHaveAttribute('aria-disabled', 'true');
|
512
|
+
expect(getByText('Select page (20)')).toHaveAttribute('aria-disabled', 'true');
|
513
|
+
expect(getByText('Select none (0)')).toHaveAttribute('aria-disabled', 'false');
|
514
|
+
|
515
|
+
// Select none
|
516
|
+
getByText('Select none (0)').click();
|
517
|
+
selectDropDown.click();
|
518
|
+
expect(getByText(`Select all (${mockErrata.total})`)).toHaveAttribute('aria-disabled', 'false');
|
519
|
+
expect(getByText('Select page (20)')).toHaveAttribute('aria-disabled', 'false');
|
520
|
+
expect(getByText('Select none (0)')).toHaveAttribute('aria-disabled', 'true');
|
521
|
+
|
522
|
+
// Select page
|
523
|
+
getByText('Select page (20)').click();
|
524
|
+
selectDropDown.click();
|
525
|
+
expect(getByText(`Select all (${mockErrata.total})`)).toHaveAttribute('aria-disabled', 'false');
|
526
|
+
expect(getByText('Select page (20)')).toHaveAttribute('aria-disabled', 'true');
|
527
|
+
expect(getByText('Select none (0)')).toHaveAttribute('aria-disabled', 'false');
|
528
|
+
|
529
|
+
assertNockRequest(autocompleteScope);
|
530
|
+
assertNockRequest(scope, done); // Pass jest callback to confirm test is done
|
531
|
+
});
|
532
|
+
|
533
|
+
test('Toggle Group shows if it\'s not the default content view or library enviroment', async (done) => {
|
534
|
+
// Setup autocomplete with mockForemanAutoComplete since we aren't adding /katello
|
535
|
+
const autocompleteScope = mockForemanAutocomplete(nockInstance, autocompleteUrl);
|
536
|
+
const mockErrata = makeMockErrata({});
|
537
|
+
// return errata data results when we look for errata
|
538
|
+
const scope = nockInstance
|
539
|
+
.get(hostErrata)
|
540
|
+
.query(defaultQuery)
|
541
|
+
.reply(200, mockErrata);
|
542
|
+
|
543
|
+
const {
|
544
|
+
queryByLabelText,
|
545
|
+
getAllByText,
|
546
|
+
} = renderWithRedux(<ErrataTab />, renderOptions());
|
547
|
+
|
548
|
+
// Assert that the errata are now showing on the screen, but wait for them to appear.
|
549
|
+
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
550
|
+
expect(queryByLabelText('Installable Errata')).toBeInTheDocument();
|
551
|
+
assertNockRequest(autocompleteScope);
|
552
|
+
assertNockRequest(scope, done); // Pass jest callback to confirm test is done
|
553
|
+
});
|
554
|
+
|
555
|
+
test('Toggle Group does not show if it\'s the default content view ', async (done) => {
|
556
|
+
const options = renderOptions({
|
557
|
+
...contentFacetAttributes,
|
558
|
+
content_view_default: true,
|
559
|
+
});
|
560
|
+
// Setup autocomplete with mockForemanAutoComplete since we aren't adding /katello
|
561
|
+
const autocompleteScope = mockForemanAutocomplete(nockInstance, autocompleteUrl);
|
562
|
+
const mockErrata = makeMockErrata({});
|
563
|
+
// return errata data results when we look for errata
|
564
|
+
const scope = nockInstance
|
565
|
+
.get(hostErrata)
|
566
|
+
.query(defaultQuery)
|
567
|
+
.reply(200, mockErrata);
|
568
|
+
|
569
|
+
const {
|
570
|
+
queryByLabelText,
|
571
|
+
getAllByText,
|
572
|
+
} = renderWithRedux(<ErrataTab />, options);
|
573
|
+
|
574
|
+
// Assert that the errata are now showing on the screen, but wait for them to appear.
|
575
|
+
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
576
|
+
expect(queryByLabelText('Installable Errata')).not.toBeInTheDocument();
|
577
|
+
assertNockRequest(autocompleteScope);
|
578
|
+
assertNockRequest(scope, done); // Pass jest callback to confirm test is done
|
579
|
+
});
|
580
|
+
|
581
|
+
test('Toggle Group does not show if it\'s the library environment', async (done) => {
|
582
|
+
const options = renderOptions({
|
583
|
+
...contentFacetAttributes,
|
584
|
+
lifecycle_environment_library: true,
|
585
|
+
});
|
586
|
+
// Setup autocomplete with mockForemanAutoComplete since we aren't adding /katello
|
587
|
+
const autocompleteScope = mockForemanAutocomplete(nockInstance, autocompleteUrl);
|
588
|
+
const mockErrata = makeMockErrata({});
|
589
|
+
// return errata data results when we look for errata
|
590
|
+
const scope = nockInstance
|
591
|
+
.get(hostErrata)
|
592
|
+
.query(defaultQuery)
|
593
|
+
.reply(200, mockErrata);
|
594
|
+
|
595
|
+
const {
|
596
|
+
queryByLabelText,
|
597
|
+
getAllByText,
|
598
|
+
} = renderWithRedux(<ErrataTab />, options);
|
599
|
+
|
600
|
+
// Assert that the errata are now showing on the screen, but wait for them to appear.
|
601
|
+
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
602
|
+
expect(queryByLabelText('Installable Errata')).not.toBeInTheDocument();
|
603
|
+
assertNockRequest(autocompleteScope);
|
604
|
+
assertNockRequest(scope, done); // Pass jest callback to confirm test is done
|
605
|
+
});
|
606
|
+
|
607
|
+
test('Selection is disabled for errata which are applicable but not installable', async (done) => {
|
608
|
+
// Setup autocomplete with mockForemanAutoComplete since we aren't adding /katello
|
609
|
+
const autocompleteScope = mockForemanAutocomplete(nockInstance, autocompleteUrl);
|
610
|
+
firstErrata.installable = false;
|
611
|
+
// return errata data results when we look for errata
|
612
|
+
const scope = nockInstance
|
613
|
+
.get(hostErrata)
|
614
|
+
.query(defaultQuery)
|
615
|
+
.reply(200, mockErrataData);
|
616
|
+
|
617
|
+
const {
|
618
|
+
getAllByText,
|
619
|
+
getByLabelText,
|
620
|
+
} = renderWithRedux(<ErrataTab />, renderOptions());
|
621
|
+
|
622
|
+
// Assert that the errata are now showing on the screen, but wait for them to appear.
|
623
|
+
await patientlyWaitFor(() => expect(getAllByText(firstErrata.severity)[0]).toBeInTheDocument());
|
624
|
+
expect(getByLabelText('Select row 0')).toBeDisabled();
|
625
|
+
expect(getByLabelText('Select row 1')).not.toBeDisabled();
|
626
|
+
|
627
|
+
assertNockRequest(autocompleteScope);
|
628
|
+
assertNockRequest(scope, done); // Pass jest callback to confirm test is done
|
629
|
+
});
|
630
|
+
|
631
|
+
test('Can select only installable errata across pages through checkbox', async (done) => {
|
632
|
+
// Setup autocomplete with mockForemanAutoComplete since we aren't adding /katello
|
633
|
+
const autocompleteScope = mockForemanAutocomplete(nockInstance, autocompleteUrl);
|
634
|
+
const mockErrata = makeMockErrata({ page: 1 });
|
635
|
+
const first = mockErrata.results[0];
|
636
|
+
first.installable = false;
|
637
|
+
mockErrata.selectable = mockErrata.total - 1;
|
638
|
+
// return errata data results when we look for errata
|
639
|
+
|
640
|
+
// return errata data results when we look for errata
|
641
|
+
const scope = nockInstance
|
642
|
+
.get(hostErrata)
|
643
|
+
.query(defaultQuery)
|
644
|
+
.reply(200, mockErrata);
|
645
|
+
|
646
|
+
const scope2 = nockInstance
|
647
|
+
.get(hostErrata)
|
648
|
+
.query(page2Query)
|
649
|
+
.reply(200, makeMockErrata({ page: 2 }));
|
650
|
+
|
651
|
+
const {
|
652
|
+
queryByText,
|
653
|
+
getAllByText,
|
654
|
+
getByLabelText,
|
655
|
+
getAllByLabelText,
|
656
|
+
} = renderWithRedux(<ErrataTab />, renderOptions());
|
657
|
+
|
658
|
+
// Assert that the errata are now showing on the screen, but wait for them to appear.
|
659
|
+
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
660
|
+
|
661
|
+
const selectAllCheckbox = getByLabelText('Select all');
|
662
|
+
selectAllCheckbox.click();
|
663
|
+
expect(queryByText(`${mockErrata.selectable} selected`)).toBeInTheDocument();
|
664
|
+
expect(queryByText(`${mockErrata.total} selected`)).not.toBeInTheDocument();
|
665
|
+
expect(getByLabelText('Select row 0')).toBeDisabled();
|
666
|
+
getAllByLabelText('Go to next page')[0].click();
|
667
|
+
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
668
|
+
expect(getByLabelText('Select row 0').checked).toEqual(true);
|
669
|
+
|
670
|
+
assertNockRequest(autocompleteScope);
|
671
|
+
assertNockRequest(scope, done);
|
672
|
+
assertNockRequest(scope2, done); // Pass jest callback to confirm test is done
|
673
|
+
});
|
674
|
+
|
675
|
+
test('Can toggle with the Toggle Group ', async (done) => {
|
676
|
+
// Setup autocomplete with mockForemanAutoComplete since we aren't adding /katello
|
677
|
+
const autocompleteScope = mockForemanAutocomplete(nockInstance, autocompleteUrl);
|
678
|
+
const mockErrata = makeMockErrata({});
|
679
|
+
// return errata data results when we look for errata
|
680
|
+
const scope = nockInstance
|
681
|
+
.get(hostErrata)
|
682
|
+
.query(defaultQuery)
|
683
|
+
.reply(200, mockErrata);
|
684
|
+
|
685
|
+
const {
|
686
|
+
queryByLabelText,
|
687
|
+
getAllByText,
|
688
|
+
} = renderWithRedux(<ErrataTab />, renderOptions());
|
689
|
+
|
690
|
+
// Assert that the errata are now showing on the screen, but wait for them to appear.
|
691
|
+
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
692
|
+
expect(queryByLabelText('Installable Errata')).toBeInTheDocument();
|
693
|
+
expect(queryByLabelText('Show Installable')).toHaveAttribute('aria-pressed', 'true');
|
694
|
+
expect(queryByLabelText('Show All')).toHaveAttribute('aria-pressed', 'false');
|
695
|
+
assertNockRequest(autocompleteScope);
|
696
|
+
assertNockRequest(scope, done); // Pass jest callback to confirm test is done
|
697
|
+
});
|
698
|
+
|
699
|
+
test('Can filter by errata type', async (done) => {
|
700
|
+
const autocompleteScope = mockForemanAutocomplete(nockInstance, autocompleteUrl);
|
701
|
+
const scope = nockInstance
|
702
|
+
.get(hostErrata)
|
703
|
+
.query(defaultQuery)
|
704
|
+
.reply(200, mockErrataData);
|
705
|
+
|
706
|
+
const scope2 = nockInstance
|
707
|
+
.get(hostErrata)
|
708
|
+
.query({ ...defaultQuery, type: 'security' })
|
709
|
+
.reply(200, { ...mockErrataData, results: [firstErrata] });
|
710
|
+
|
711
|
+
const {
|
712
|
+
queryByText,
|
713
|
+
getByRole,
|
714
|
+
getAllByText,
|
715
|
+
getByText,
|
716
|
+
} = renderWithRedux(<ErrataTab />, renderOptions());
|
717
|
+
|
718
|
+
// Assert that the errata are now showing on the screen, but wait for them to appear.
|
719
|
+
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
720
|
+
// the Bugfix text in the table is just a text node, while the dropdown is a button
|
721
|
+
expect(getByText('Bugfix', { ignore: ['button', 'title'] })).toBeInTheDocument();
|
722
|
+
expect(getByText('Enhancement', { ignore: ['button', 'title'] })).toBeInTheDocument();
|
723
|
+
const typeDropdown = queryByText('Type', { ignore: 'th' });
|
724
|
+
expect(typeDropdown).toBeInTheDocument();
|
725
|
+
fireEvent.click(typeDropdown);
|
726
|
+
const security = getByRole('option', { name: 'select Security' });
|
727
|
+
fireEvent.click(security);
|
728
|
+
await patientlyWaitFor(() => {
|
729
|
+
expect(queryByText('Bugfix')).not.toBeInTheDocument();
|
730
|
+
expect(queryByText('Enhancement')).not.toBeInTheDocument();
|
731
|
+
});
|
732
|
+
|
733
|
+
|
734
|
+
assertNockRequest(autocompleteScope);
|
735
|
+
assertNockRequest(scope);
|
736
|
+
assertNockRequest(searchDelayScope);
|
737
|
+
assertNockRequest(autoSearchScope);
|
738
|
+
assertNockRequest(scope2, done); // Pass jest callback to confirm test is done
|
739
|
+
});
|
740
|
+
|
741
|
+
test('Can filter by severity', async (done) => {
|
742
|
+
const autocompleteScope = mockForemanAutocomplete(nockInstance, autocompleteUrl);
|
743
|
+
const scope = nockInstance
|
744
|
+
.get(hostErrata)
|
745
|
+
.query(defaultQuery)
|
746
|
+
.reply(200, mockErrataData);
|
747
|
+
|
748
|
+
const scope2 = nockInstance
|
749
|
+
.get(hostErrata)
|
750
|
+
.query({ ...defaultQuery, severity: 'Important' })
|
751
|
+
.reply(200, { ...mockErrataData, results: [thirdErrata] });
|
752
|
+
|
753
|
+
const {
|
754
|
+
queryByText,
|
755
|
+
getByRole,
|
756
|
+
getAllByText,
|
757
|
+
getByText,
|
758
|
+
} = renderWithRedux(<ErrataTab />, renderOptions());
|
759
|
+
|
760
|
+
// Assert that the errata are now showing on the screen, but wait for them to appear.
|
761
|
+
await patientlyWaitFor(() => expect(getAllByText('Important')[0]).toBeInTheDocument());
|
762
|
+
// the Bugfix text in the table is just a text node, while the dropdown is a button
|
763
|
+
expect(getByText('Moderate', { ignore: ['button', 'title'] })).toBeInTheDocument();
|
764
|
+
expect(getByText('Important', { ignore: ['.pf-c-select__toggle-text', 'title'] })).toBeInTheDocument();
|
765
|
+
expect(getByText('Critical', { ignore: ['button', 'title'] })).toBeInTheDocument();
|
766
|
+
const severityDropdown = queryByText('Severity', { ignore: 'th' });
|
767
|
+
expect(severityDropdown).toBeInTheDocument();
|
768
|
+
fireEvent.click(severityDropdown);
|
769
|
+
const important = getByRole('option', { name: 'select Important' });
|
770
|
+
fireEvent.click(important);
|
771
|
+
await patientlyWaitFor(() => {
|
772
|
+
expect(queryByText('Moderate', { ignore: ['.pf-c-select__toggle-text'] })).not.toBeInTheDocument();
|
773
|
+
expect(queryByText('Critical', { ignore: ['.pf-c-select__toggle-text'] })).not.toBeInTheDocument();
|
774
|
+
});
|
775
|
+
await patientlyWaitFor(() => {
|
776
|
+
expect(getByText('Important', { ignore: ['.pf-c-select__toggle-text', 'title'] })).toBeInTheDocument();
|
777
|
+
});
|
778
|
+
|
779
|
+
|
780
|
+
assertNockRequest(autocompleteScope);
|
781
|
+
assertNockRequest(scope);
|
782
|
+
assertNockRequest(searchDelayScope);
|
783
|
+
assertNockRequest(autoSearchScope);
|
784
|
+
assertNockRequest(scope2, done); // Pass jest callback to confirm test is done
|
785
|
+
});
|