katello 4.7.3 → 4.8.0.rc1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of katello might be problematic. Click here for more details.

Files changed (333) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/katello/api/registry/registry_proxies_controller.rb +6 -4
  3. data/app/controllers/katello/api/rhsm/candlepin_proxies_controller.rb +15 -12
  4. data/app/controllers/katello/api/v2/capsule_content_controller.rb +0 -4
  5. data/app/controllers/katello/api/v2/content_export_incrementals_controller.rb +22 -81
  6. data/app/controllers/katello/api/v2/content_exports_controller.rb +11 -80
  7. data/app/controllers/katello/api/v2/content_imports_controller.rb +1 -0
  8. data/app/controllers/katello/api/v2/exports_controller.rb +130 -0
  9. data/app/controllers/katello/api/v2/host_subscriptions_controller.rb +7 -8
  10. data/app/controllers/katello/api/v2/hosts_bulk_actions_controller.rb +8 -4
  11. data/app/controllers/katello/api/v2/organizations_controller.rb +3 -0
  12. data/app/controllers/katello/api/v2/package_groups_controller.rb +0 -52
  13. data/app/controllers/katello/concerns/api/v2/bulk_hosts_extensions.rb +4 -6
  14. data/app/controllers/katello/concerns/api/v2/registration_controller_extensions.rb +1 -2
  15. data/app/controllers/katello/concerns/authorization/api/v2/content_views_controller.rb +4 -1
  16. data/app/controllers/katello/concerns/content_facet_hosts_controller_extensions.rb +24 -0
  17. data/app/controllers/katello/concerns/hosts_controller_extensions.rb +3 -3
  18. data/app/helpers/katello/hosts_and_hostgroups_helper.rb +55 -24
  19. data/app/helpers/katello/katello_urls_helper.rb +0 -15
  20. data/app/helpers/katello/sync_management_helper.rb +0 -4
  21. data/app/lib/actions/candlepin/owner/destroy_imports.rb +1 -1
  22. data/app/lib/actions/katello/capsule_content/sync.rb +0 -4
  23. data/app/lib/actions/katello/capsule_content/sync_capsule.rb +1 -2
  24. data/app/lib/actions/katello/content_view/publish.rb +6 -2
  25. data/app/lib/actions/katello/content_view/remove.rb +8 -2
  26. data/app/lib/actions/katello/content_view_version/destroy.rb +1 -1
  27. data/app/lib/actions/katello/environment/destroy.rb +8 -2
  28. data/app/lib/actions/katello/host/reassign.rb +4 -2
  29. data/app/lib/actions/katello/orphan_cleanup/remove_orphans.rb +0 -1
  30. data/app/lib/actions/katello/product/destroy.rb +2 -1
  31. data/app/lib/actions/katello/repository/filtered_index_content.rb +2 -10
  32. data/app/lib/actions/katello/repository/import_upload.rb +0 -1
  33. data/app/lib/actions/katello/repository/sync.rb +0 -1
  34. data/app/lib/actions/katello/repository/update.rb +5 -3
  35. data/app/lib/actions/katello/repository/upload_files.rb +0 -1
  36. data/app/lib/actions/pulp3/abstract.rb +0 -6
  37. data/app/lib/actions/pulp3/content_view/delete_repository_references.rb +1 -2
  38. data/app/lib/actions/pulp3/content_view_version/create_syncable_export_history.rb +4 -0
  39. data/app/lib/actions/pulp3/orchestration/content_view_version/export.rb +1 -0
  40. data/app/lib/actions/pulp3/orchestration/content_view_version/export_repository.rb +7 -2
  41. data/app/lib/actions/pulp3/orchestration/content_view_version/syncable_export.rb +7 -2
  42. data/app/lib/actions/pulp3/repository/refresh_distribution.rb +1 -2
  43. data/app/lib/actions/pulp3/repository/save_distribution_references.rb +2 -2
  44. data/app/lib/katello/concerns/renderer_extensions.rb +1 -1
  45. data/app/lib/katello/event_daemon/runner.rb +12 -9
  46. data/app/lib/katello/resources/candlepin/consumer.rb +6 -6
  47. data/app/lib/katello/resources/candlepin/owner.rb +1 -1
  48. data/app/lib/katello/resources/candlepin/upstream_consumer.rb +3 -4
  49. data/app/lib/katello/resources/candlepin.rb +4 -4
  50. data/app/lib/katello/util/errata.rb +12 -10
  51. data/app/lib/katello/util/search.rb +0 -1
  52. data/app/lib/katello/validators/content_view_environment_org_validator.rb +5 -2
  53. data/app/lib/katello/validators/content_view_environment_validator.rb +1 -2
  54. data/app/lib/katello/validators/generated_content_view_validator.rb +16 -0
  55. data/app/mailers/katello/errata_mailer.rb +4 -2
  56. data/app/models/katello/alternate_content_source.rb +5 -1
  57. data/app/models/katello/concerns/content_facet_host_extensions.rb +25 -14
  58. data/app/models/katello/concerns/host_managed_extensions.rb +17 -8
  59. data/app/models/katello/concerns/redhat_extensions.rb +16 -6
  60. data/app/models/katello/concerns/smart_proxy_extensions.rb +0 -12
  61. data/app/models/katello/concerns/subscription_facet_host_extensions.rb +1 -0
  62. data/app/models/katello/content_view.rb +22 -5
  63. data/app/models/katello/content_view_environment.rb +11 -2
  64. data/app/models/katello/content_view_environment_content_facet.rb +9 -0
  65. data/app/models/katello/content_view_version.rb +10 -5
  66. data/app/models/katello/erratum.rb +6 -1
  67. data/app/models/katello/glue/candlepin/pool.rb +6 -0
  68. data/app/models/katello/glue/candlepin/product.rb +7 -1
  69. data/app/models/katello/glue/candlepin/subscription.rb +5 -0
  70. data/app/models/katello/glue/provider.rb +26 -26
  71. data/app/models/katello/host/content_facet.rb +106 -18
  72. data/app/models/katello/host/info_provider.rb +25 -21
  73. data/app/models/katello/host/subscription_facet.rb +18 -14
  74. data/app/models/katello/kt_environment.rb +12 -7
  75. data/app/models/katello/package_group.rb +0 -12
  76. data/app/models/katello/pool.rb +4 -1
  77. data/app/models/katello/product.rb +11 -1
  78. data/app/models/katello/repository.rb +11 -11
  79. data/app/models/katello/root_repository.rb +5 -4
  80. data/app/models/katello/task_status.rb +0 -18
  81. data/app/services/katello/candlepin/consumer.rb +2 -2
  82. data/app/services/katello/host/package_profile_uploader.rb +1 -1
  83. data/app/services/katello/product_content_finder.rb +11 -8
  84. data/app/services/katello/pulp3/content_view_version/export.rb +8 -65
  85. data/app/services/katello/pulp3/content_view_version/export_validation_error.rb +7 -0
  86. data/app/services/katello/pulp3/content_view_version/export_validator.rb +105 -0
  87. data/app/services/katello/pulp3/content_view_version/importable_products.rb +1 -1
  88. data/app/services/katello/pulp3/content_view_version/syncable_format_export.rb +7 -1
  89. data/app/services/katello/pulp3/erratum.rb +1 -0
  90. data/app/services/katello/pulp3/module_stream.rb +26 -11
  91. data/app/services/katello/pulp3/repository/yum.rb +2 -1
  92. data/app/services/katello/pulp3/smart_proxy_mirror_repository.rb +2 -1
  93. data/app/services/katello/registration_manager.rb +46 -26
  94. data/app/services/katello/repository_type.rb +3 -9
  95. data/app/services/katello/simple_package.rb +22 -0
  96. data/app/views/foreman/smart_proxies/_content_sync.html.erb +1 -0
  97. data/app/views/foreman/smart_proxies/_reclaim_space.html.erb +1 -0
  98. data/app/views/katello/api/v2/content_facet/base.json.rabl +23 -2
  99. data/app/views/katello/api/v2/content_facet/show.json.rabl +11 -8
  100. data/app/views/katello/api/v2/content_views/base.json.rabl +1 -1
  101. data/app/views/katello/api/v2/hosts/base.json.rabl +22 -2
  102. data/app/views/overrides/activation_keys/_host_environment_select.html.erb +2 -2
  103. data/config/initializers/monkeys.rb +0 -2
  104. data/config/routes/api/registry.rb +8 -7
  105. data/config/routes/api/v2.rb +0 -2
  106. data/config/routes.rb +3 -0
  107. data/db/migrate/20200429153103_installed_package_bad_nvrea.rb +1 -1
  108. data/db/migrate/20220228173251_remove_drpm_from_ignorable_content.rb +7 -3
  109. data/db/migrate/20220419193414_content_settings_to_dsl_category.rb +1 -1
  110. data/db/migrate/20220929204746_add_content_view_environment_content_facet.rb +52 -0
  111. data/db/migrate/20221123212341_remove_pulp_docker_registry_port_setting.rb +5 -0
  112. data/db/seeds.d/111-upgrade_tasks.rb +2 -1
  113. data/engines/bastion/app/assets/stylesheets/bastion/bastion.scss +4 -0
  114. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/activation-key-details.controller.js +2 -4
  115. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/content-hosts-bulk-errata-modal.controller.js +0 -1
  116. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-details.controller.js +2 -4
  117. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/content-hosts.html +2 -1
  118. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/apply-errata.controller.js +11 -3
  119. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/host-collections/details/views/host-collection-hosts-list.html +1 -1
  120. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +8 -4
  121. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de.po +5485 -0
  122. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/es.po +5397 -0
  123. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/fr.po +5658 -0
  124. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ja.po +5284 -0
  125. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ka.po +5231 -0
  126. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ko.po +5275 -0
  127. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pt_BR.po +5389 -0
  128. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_CN.po +5212 -0
  129. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_TW.po +5145 -0
  130. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/translations.js +9 -0
  131. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/views/content-access-mode-banner.html +2 -2
  132. data/lib/katello/engine.rb +2 -1
  133. data/lib/katello/permission_creator.rb +2 -4
  134. data/lib/katello/permissions/registry_permissions.rb +5 -5
  135. data/lib/katello/plugin.rb +22 -14
  136. data/lib/katello/repository_types/README.md +136 -19
  137. data/lib/katello/repository_types/deb.rb +0 -1
  138. data/lib/katello/repository_types/docker.rb +0 -1
  139. data/lib/katello/repository_types/file.rb +0 -1
  140. data/lib/katello/repository_types/yum.rb +0 -4
  141. data/lib/katello/tasks/clean_candlepin_orphaned_products.rake +38 -0
  142. data/lib/katello/tasks/clean_orphaned_facets.rb +20 -0
  143. data/lib/katello/tasks/reimport.rake +1 -2
  144. data/lib/katello/tasks/repository.rake +1 -22
  145. data/lib/katello/tasks/reset.rake +1 -0
  146. data/lib/katello/tasks/upgrades/4.8/fix_incorrect_providers.rake +29 -0
  147. data/lib/katello/version.rb +1 -1
  148. data/lib/katello.rb +0 -5
  149. data/locale/bn/katello.po +69 -27
  150. data/locale/cs/katello.po +69 -27
  151. data/locale/de/katello.po +78 -36
  152. data/locale/en/katello.po +69 -27
  153. data/locale/es/katello.po +70 -28
  154. data/locale/fr/katello.po +73 -31
  155. data/locale/gu/katello.po +69 -27
  156. data/locale/hi/katello.po +69 -27
  157. data/locale/it/katello.po +69 -27
  158. data/locale/ja/katello.po +73 -31
  159. data/locale/ka/katello.po +73 -31
  160. data/locale/katello.pot +335 -262
  161. data/locale/kn/katello.po +69 -27
  162. data/locale/ko/katello.po +69 -27
  163. data/locale/mr/katello.po +69 -27
  164. data/locale/or/katello.po +69 -27
  165. data/locale/pa/katello.po +69 -27
  166. data/locale/pt/katello.po +69 -27
  167. data/locale/pt_BR/katello.po +70 -28
  168. data/locale/ru/katello.po +70 -28
  169. data/locale/ta/katello.po +69 -27
  170. data/locale/te/katello.po +69 -27
  171. data/locale/zh_CN/katello.po +73 -31
  172. data/locale/zh_TW/katello.po +70 -28
  173. data/webpack/components/Content/ContentPage.js +51 -35
  174. data/webpack/components/Content/__tests__/ContentPage.test.js +2 -4
  175. data/webpack/components/Content/__tests__/__snapshots__/ContentPage.test.js.snap +22 -3
  176. data/webpack/components/Table/EmptyStateMessage.js +14 -11
  177. data/webpack/components/Table/MainTable.js +36 -15
  178. data/webpack/components/Table/TableWrapper.js +25 -25
  179. data/webpack/components/Table/__test__/emptyStateMessage.test.js +51 -0
  180. data/webpack/components/extensions/HostDetails/Cards/ErrataOverviewCard.js +5 -4
  181. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsModal.js +1 -1
  182. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/__tests__/hostCollectionsModal.test.js +1 -17
  183. data/webpack/components/extensions/HostDetails/Tabs/ErrataTab/ErrataTab.js +18 -9
  184. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsTab.js +1 -2
  185. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackageInstallModal.js +1 -2
  186. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackagesTab.js +1 -2
  187. data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsTab.js +47 -27
  188. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/TracesTab.js +1 -2
  189. data/webpack/components/extensions/HostDetails/Tabs/__tests__/errataTab.test.js +2 -21
  190. data/webpack/components/extensions/HostDetails/Tabs/__tests__/moduleStreamsTab.test.js +1 -28
  191. data/webpack/components/extensions/HostDetails/Tabs/__tests__/packageInstallModal.test.js +1 -10
  192. data/webpack/components/extensions/HostDetails/Tabs/__tests__/packagesTab.test.js +1 -18
  193. data/webpack/components/extensions/HostDetails/Tabs/__tests__/repositorySetsTab.test.js +1 -17
  194. data/webpack/components/extensions/HostDetails/Tabs/__tests__/tracesTab.test.js +1 -15
  195. data/webpack/global_test_setup.js +1 -1
  196. data/webpack/scenes/AlternateContentSources/Create/ACSCreateWizard.js +12 -10
  197. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSCredentials.js +6 -0
  198. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSSmartProxies.js +1 -0
  199. data/webpack/scenes/AlternateContentSources/Create/Steps/AcsUrlPaths.js +3 -10
  200. data/webpack/scenes/AlternateContentSources/Create/Steps/NameACS.js +1 -0
  201. data/webpack/scenes/AlternateContentSources/Create/__tests__/acsCreate.test.js +3 -3
  202. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditDetails.js +1 -0
  203. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditURLPaths.js +12 -4
  204. data/webpack/scenes/AlternateContentSources/MainTable/ACSTable.js +7 -4
  205. data/webpack/scenes/AlternateContentSources/MainTable/__tests__/acsTable.test.js +4 -8
  206. data/webpack/scenes/AlternateContentSources/helpers.js +1 -1
  207. data/webpack/scenes/Content/Details/ContentRepositories.js +5 -4
  208. data/webpack/scenes/Content/Details/__tests__/contentDetail.test.js +1 -12
  209. data/webpack/scenes/Content/Table/ContentTable.js +2 -1
  210. data/webpack/scenes/Content/__tests__/contentTable.test.js +1 -14
  211. data/webpack/scenes/ContentViews/Delete/__tests__/contentViewDelete.test.js +1 -25
  212. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ContentViewComponents.js +2 -1
  213. data/webpack/scenes/ContentViews/Details/ComponentContentViews/__tests__/contentViewComponents.test.js +44 -31
  214. data/webpack/scenes/ContentViews/Details/ContentViewDetails.js +2 -0
  215. data/webpack/scenes/ContentViews/Details/Filters/AffectedRepositories/AffectedRepositoryTable.js +6 -1
  216. data/webpack/scenes/ContentViews/Details/Filters/CVContainerImageFilterContent.js +2 -1
  217. data/webpack/scenes/ContentViews/Details/Filters/CVDebFilterContent.js +2 -1
  218. data/webpack/scenes/ContentViews/Details/Filters/CVErrataIDFilterContent.js +3 -1
  219. data/webpack/scenes/ContentViews/Details/Filters/CVModuleStreamFilterContent.js +3 -1
  220. data/webpack/scenes/ContentViews/Details/Filters/CVPackageGroupFilterContent.js +3 -1
  221. data/webpack/scenes/ContentViews/Details/Filters/CVRpmFilterContent.js +2 -1
  222. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilterDetailsHeader.js +2 -0
  223. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilters.js +2 -1
  224. data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/CVDebMatchContentModal.js +1 -1
  225. data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/CVRpmMatchContentModal.js +1 -1
  226. data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/__tests__/CVRpmMatchContentModal.test.js +35 -33
  227. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVContainerImageFilterContent.test.js +48 -45
  228. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVRpmFilterContent.test.js +58 -24
  229. data/webpack/scenes/ContentViews/Details/Filters/__tests__/ContentViewPackageGroupFilter.test.js +64 -0
  230. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilterDetails.test.js +36 -20
  231. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.test.js +40 -23
  232. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvErrataIDFilter.test.js +0 -13
  233. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvModuleStreamFilter.test.js +0 -13
  234. data/webpack/scenes/ContentViews/Details/Histories/ContentViewHistories.js +2 -1
  235. data/webpack/scenes/ContentViews/Details/Histories/__tests__/contentViewHistory.test.js +1 -10
  236. data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +2 -1
  237. data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewAddRemove.test.js +1 -10
  238. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompareConfig.js +21 -9
  239. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompareTable.js +4 -0
  240. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/CVVersionCompare.test.js +1 -32
  241. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersions.js +3 -1
  242. data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvVersionRemove.test.js +1 -15
  243. data/webpack/scenes/ContentViews/Details/Versions/Delete/affectedActivationKeys.js +1 -1
  244. data/webpack/scenes/ContentViews/Details/Versions/Delete/affectedHosts.js +1 -2
  245. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailConfig.js +31 -9
  246. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailsTable.js +4 -0
  247. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetails.test.js +30 -14
  248. data/webpack/scenes/ContentViews/Table/ContentViewsTable.js +1 -1
  249. data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +55 -120
  250. data/webpack/scenes/ContentViews/components/WizardHeader.js +1 -1
  251. data/webpack/scenes/ContentViews/expansions/RelatedContentViewComponentsModal.js +1 -1
  252. data/webpack/scenes/ContentViews/expansions/__tests__/contentViewComponentsModal.test.js +8 -1
  253. data/webpack/scenes/ModuleStreams/ModuleStreamsPage.js +3 -9
  254. data/webpack/scenes/ModuleStreams/__tests__/__snapshots__/ModuleStreamPage.test.js.snap +7 -1
  255. data/webpack/scenes/RedHatRepositories/components/Search.js +22 -16
  256. data/webpack/scenes/RedHatRepositories/index.scss +20 -1
  257. data/webpack/scenes/SmartProxy/SmartProxyContentTable.js +12 -1
  258. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/CdnTypeForm.js +1 -1
  259. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/CustomCdnTypeForm.js +1 -1
  260. data/webpack/scenes/Subscriptions/SubscriptionsPage.js +21 -19
  261. data/webpack/scenes/Subscriptions/__tests__/__snapshots__/SubscriptionsPage.test.js.snap +34 -1
  262. data/webpack/scenes/Subscriptions/components/SubscriptionsToolbar/SubscriptionsToolbar.js +20 -7
  263. data/webpack/scenes/Subscriptions/components/SubscriptionsToolbar/SubscriptionsToolbar.test.js +0 -1
  264. data/webpack/scenes/Subscriptions/components/SubscriptionsToolbar/__snapshots__/SubscriptionsToolbar.test.js.snap +65 -15
  265. metadata +47 -113
  266. data/app/lib/actions/katello/pulp_selector.rb +0 -24
  267. data/app/lib/actions/katello/repository/correct_checksum.rb +0 -24
  268. data/app/lib/actions/katello/repository/destroy_package_group.rb +0 -26
  269. data/app/lib/actions/katello/repository/upload_package_group.rb +0 -24
  270. data/app/lib/actions/pulp/abstract.rb +0 -37
  271. data/app/lib/actions/pulp/abstract_async_task.rb +0 -154
  272. data/app/lib/actions/pulp/abstract_async_task_group.rb +0 -94
  273. data/app/lib/actions/pulp/consumer/sync_capsule.rb +0 -45
  274. data/app/lib/actions/pulp/consumer/unassociate_units.rb +0 -20
  275. data/app/lib/actions/pulp/expect_one_task.rb +0 -11
  276. data/app/lib/actions/pulp/orchestration/orphan_cleanup/remove_orphans.rb +0 -16
  277. data/app/lib/actions/pulp/orchestration/repository/copy_all_units.rb +0 -19
  278. data/app/lib/actions/pulp/orchestration/repository/delete.rb +0 -15
  279. data/app/lib/actions/pulp/orchestration/repository/refresh.rb +0 -14
  280. data/app/lib/actions/pulp/orchestration/repository/refresh_if_needed.rb +0 -13
  281. data/app/lib/actions/pulp/orchestration/repository/refresh_repos.rb +0 -19
  282. data/app/lib/actions/pulp/orchestration/repository/remove_units.rb +0 -14
  283. data/app/lib/actions/pulp/orchestration/repository/smart_proxy_sync.rb +0 -34
  284. data/app/lib/actions/pulp/orchestration/repository/sync.rb +0 -18
  285. data/app/lib/actions/pulp/orchestration/repository/upload_content.rb +0 -37
  286. data/app/lib/actions/pulp/orphan_cleanup/remove_orphans.rb +0 -15
  287. data/app/lib/actions/pulp/orphan_cleanup/remove_unneeded_repos.rb +0 -16
  288. data/app/lib/actions/pulp/repository/abstract_copy_content.rb +0 -45
  289. data/app/lib/actions/pulp/repository/abstract_remove_content.rb +0 -32
  290. data/app/lib/actions/pulp/repository/clear.rb +0 -18
  291. data/app/lib/actions/pulp/repository/copy_all_units.rb +0 -30
  292. data/app/lib/actions/pulp/repository/copy_units.rb +0 -25
  293. data/app/lib/actions/pulp/repository/create.rb +0 -28
  294. data/app/lib/actions/pulp/repository/create_in_plan.rb +0 -15
  295. data/app/lib/actions/pulp/repository/create_upload_request.rb +0 -20
  296. data/app/lib/actions/pulp/repository/delete_upload_request.rb +0 -19
  297. data/app/lib/actions/pulp/repository/destroy.rb +0 -28
  298. data/app/lib/actions/pulp/repository/distributor_publish.rb +0 -25
  299. data/app/lib/actions/pulp/repository/download.rb +0 -16
  300. data/app/lib/actions/pulp/repository/import_upload.rb +0 -19
  301. data/app/lib/actions/pulp/repository/presenters/abstract_sync_presenter.rb +0 -47
  302. data/app/lib/actions/pulp/repository/presenters/deb_presenter.rb +0 -95
  303. data/app/lib/actions/pulp/repository/presenters/docker_presenter.rb +0 -103
  304. data/app/lib/actions/pulp/repository/presenters/file_unit_presenter.rb +0 -42
  305. data/app/lib/actions/pulp/repository/presenters/yum_presenter.rb +0 -131
  306. data/app/lib/actions/pulp/repository/refresh.rb +0 -21
  307. data/app/lib/actions/pulp/repository/regenerate_applicability.rb +0 -21
  308. data/app/lib/actions/pulp/repository/remove_distribution.rb +0 -11
  309. data/app/lib/actions/pulp/repository/remove_units.rb +0 -44
  310. data/app/lib/actions/pulp/repository/sync.rb +0 -99
  311. data/app/lib/actions/pulp/repository/upload_file.rb +0 -28
  312. data/app/lib/actions/pulp/repository_group/create.rb +0 -31
  313. data/app/lib/actions/pulp/repository_group/delete.rb +0 -17
  314. data/app/lib/actions/pulp/repository_group/export.rb +0 -51
  315. data/app/lib/katello/util/package_clause_generator.rb +0 -77
  316. data/app/models/katello/glue/pulp/pulp_errors.rb +0 -9
  317. data/app/models/katello/glue/pulp/repo.rb +0 -353
  318. data/app/models/katello/pulp_sync_status.rb +0 -165
  319. data/app/models/katello/pulp_task_status.rb +0 -63
  320. data/app/services/katello/pulp/content.rb +0 -24
  321. data/app/services/katello/pulp/importer_comparison.rb +0 -28
  322. data/app/services/katello/pulp/repository/deb.rb +0 -61
  323. data/app/services/katello/pulp/repository/docker.rb +0 -82
  324. data/app/services/katello/pulp/repository/file.rb +0 -52
  325. data/app/services/katello/pulp/repository/yum.rb +0 -205
  326. data/app/services/katello/pulp/repository.rb +0 -327
  327. data/app/services/katello/pulp/server.rb +0 -35
  328. data/app/services/katello/pulp/simple_package.rb +0 -24
  329. data/app/services/katello/pulp/smart_proxy_repository.rb +0 -52
  330. data/lib/monkeys/fix_deb_optimized_sync.rb +0 -35
  331. data/lib/monkeys/fix_pulp_container_path.rb +0 -35
  332. data/locale/zanata.xml +0 -30
  333. data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/__tests__/CVRpmMatchContentSearch.fixtures.json +0 -33
@@ -152,7 +152,8 @@ const CVContainerImageFilterContent = ({
152
152
  onSelect={hasPermission(permissions, 'edit_content_views') ? onSelect(rows, setRows) : null}
153
153
  cells={columnHeaders}
154
154
  variant={TableVariant.compact}
155
- autocompleteEndpoint={`/content_view_filters/${filterId}/rules/auto_complete_search`}
155
+ autocompleteEndpoint={`/katello/api/v2/content_view_filters/${filterId}/rules`}
156
+ bookmarkController="katello_content_view_docker_filter_rules"
156
157
  fetchItems={useCallback(params => getCVFilterRules(filterId, params), [filterId])}
157
158
  actionButtons={hasPermission(permissions, 'edit_content_views') &&
158
159
  <>
@@ -170,7 +170,8 @@ const CVDebFilterContent = ({
170
170
  onSelect={hasPermission(permissions, 'edit_content_views') ? onSelect(rows, setRows) : null}
171
171
  cells={columnHeaders}
172
172
  variant={TableVariant.compact}
173
- autocompleteEndpoint={`/content_view_filters/${filterId}/rules/auto_complete_search`}
173
+ autocompleteEndpoint={`/katello/api/v2/content_view_filters/${filterId}/rules`}
174
+ bookmarkController="katello_content_view_deb_filter_rules"
174
175
  fetchItems={useCallback(params => getCVFilterRules(filterId, params), [filterId])}
175
176
  actionButtons={
176
177
  <>
@@ -276,7 +276,9 @@ const CVErrataIDFilterContent = ({
276
276
  onSelect={hasPermission(permissions, 'edit_content_views') ? onSelect(rows, setRows) : null}
277
277
  cells={columnHeaders}
278
278
  variant={TableVariant.compact}
279
- autocompleteEndpoint={`/errata/auto_complete_search?filterid=${filterId}`}
279
+ autocompleteEndpoint="/katello/api/v2/errata"
280
+ autocompleteQueryParams={{ filterid: filterId }}
281
+ bookmarkController="katello_content_view_erratum_filter_rules"
280
282
  additionalListeners={[statusSelected, selectedTypes.length,
281
283
  dateType, apiStartDate, apiEndDate]}
282
284
  fetchItems={useCallback(params =>
@@ -229,7 +229,9 @@ const CVModuleStreamFilterContent = ({
229
229
  defaultFilters={[allAddedNotAdded[0]]}
230
230
  cells={columnHeaders}
231
231
  variant={TableVariant.compact}
232
- autocompleteEndpoint={`/module_streams/auto_complete_search?filterid=${filterId}`}
232
+ autocompleteEndpoint="/katello/api/v2/module_streams"
233
+ autocompleteQueryParams={{ filterid: filterId }}
234
+ bookmarkController="katello_content_view_module_stream_filter_rules"
233
235
  fetchItems={fetchItems}
234
236
  actionResolver={hasPermission(permissions, 'edit_content_views') ? actionResolver : null}
235
237
  onSelect={hasPermission(permissions, 'edit_content_views') ? onSelect(rows, setRows) : null}
@@ -219,7 +219,9 @@ const CVPackageGroupFilterContent = ({
219
219
  defaultFilters={[allAddedNotAdded[0]]}
220
220
  cells={columnHeaders}
221
221
  variant={TableVariant.compact}
222
- autocompleteEndpoint={`/package_groups/auto_complete_search?filterid=${filterId}`}
222
+ autocompleteEndpoint="/katello/api/v2/package_groups"
223
+ autocompleteQueryParams={{ filterid: filterId }}
224
+ bookmarkController="katello_content_view_package_group_filter_rules"
223
225
  fetchItems={fetchItems}
224
226
  actionResolver={hasPermission(permissions, 'edit_content_views') ? actionResolver : null}
225
227
  onSelect={hasPermission(permissions, 'edit_content_views') ? onSelect(rows, setRows) : null}
@@ -183,7 +183,8 @@ const CVRpmFilterContent = ({
183
183
  onSelect={hasPermission(permissions, 'edit_content_views') ? onSelect(rows, setRows) : null}
184
184
  cells={columnHeaders}
185
185
  variant={TableVariant.compact}
186
- autocompleteEndpoint={`/content_view_filters/${filterId}/rules/auto_complete_search`}
186
+ autocompleteEndpoint={`/katello/api/v2/content_view_filters/${filterId}/rules`}
187
+ bookmarkController="katello_content_view_package_filter_rules"
187
188
  fetchItems={useCallback(params => getCVFilterRules(filterId, params), [filterId])}
188
189
  actionButtons={
189
190
  <>
@@ -67,6 +67,7 @@ const ContentViewFilterDetailsHeader = ({
67
67
  const dropDownItems = [
68
68
  <DropdownItem
69
69
  key="delete"
70
+ ouiaId="cv-filter-delete"
70
71
  onClick={() => {
71
72
  dispatch(deleteContentViewFilter(filterId, () => {
72
73
  push(`/content_views/${cvId}#/filters/`);
@@ -129,6 +130,7 @@ const ContentViewFilterDetailsHeader = ({
129
130
  </FlexItem>
130
131
  <FlexItem>
131
132
  <Dropdown
133
+ ouiaId="cv-filter-actions-kebab"
132
134
  position={DropdownPosition.right}
133
135
  style={{ marginLeft: 'auto' }}
134
136
  toggle={<KebabToggle onToggle={setDropdownOpen} id="toggle-dropdown" />}
@@ -142,7 +142,8 @@ const ContentViewFilters = ({ cvId, details }) => {
142
142
  onSelect={hasPermission(permissions, 'edit_content_views') ? onSelect(rows, setRows) : null}
143
143
  cells={columnHeaders}
144
144
  variant={TableVariant.compact}
145
- autocompleteEndpoint="/content_view_filters/auto_complete_search"
145
+ autocompleteEndpoint="/katello/api/v2/content_view_filters"
146
+ bookmarkController="katello_content_view_filters"
146
147
  fetchItems={useCallback(params => getContentViewFilters(cvId, params), [cvId])}
147
148
  actionButtons={hasPermission(permissions, 'edit_content_views') &&
148
149
  <>
@@ -54,7 +54,7 @@ const CVDebMatchContentModal = ({ filterId, onClose, filterRuleId }) => {
54
54
  status,
55
55
  }}
56
56
  ouiaId="content-view-deb-match-content-table"
57
- autocompleteEndpoint="/debs/auto_complete_search"
57
+ autocompleteEndpoint="/katello/api/v2/debs"
58
58
  variant={TableVariant.compact}
59
59
  >
60
60
  <Thead>
@@ -55,7 +55,7 @@ const CVRpmMatchContentModal = ({ filterId, onClose, filterRuleId }) => {
55
55
  status,
56
56
  }}
57
57
  ouiaId="content-view-rpm-match-content-table"
58
- autocompleteEndpoint="/packages/auto_complete_search"
58
+ autocompleteEndpoint="/katello/api/v2/packages"
59
59
  variant={TableVariant.compact}
60
60
  >
61
61
  <Thead>
@@ -1,39 +1,28 @@
1
1
  import React from 'react';
2
2
  import { renderWithRedux, patientlyWaitFor, fireEvent } from 'react-testing-lib-wrapper';
3
3
 
4
-
5
4
  import api from '../../../../../../services/api';
6
5
  import CVRpmMatchContentModal from '../CVRpmMatchContentModal';
7
- import { nockInstance, assertNockRequest, mockSetting, mockAutocomplete } from '../../../../../../test-utils/nockWrapper';
6
+ import { nockInstance, assertNockRequest, mockAutocomplete } from '../../../../../../test-utils/nockWrapper';
8
7
 
9
8
  import CVMatchedContent from './CVRpmMatchContent.fixtures.json';
10
- import CVMatchContentSearch from './CVRpmMatchContentSearch.fixtures.json';
11
9
 
12
10
  const firstMatchContent = CVMatchedContent.results[0];
13
11
  const { nvra: secondMatchContentName } = CVMatchedContent.results[1];
14
12
  const cvMatchContentPath = api.getApiUrl('/packages');
15
13
  const autocompleteUrl = '/packages/auto_complete_search';
14
+ const autocompleteQuery = {
15
+ organization_id: 1,
16
+ search: '',
17
+ };
16
18
 
17
19
  const onClose = jest.fn();
18
20
 
19
21
  const MatchContentModal =
20
22
  <CVRpmMatchContentModal filterId={194} filterRuleId={13} onClose={onClose} />;
21
23
 
22
- let searchDelayScope;
23
- let autoSearchScope;
24
- beforeEach(() => {
25
- searchDelayScope = mockSetting(nockInstance, 'autosearch_delay', 0);
26
- autoSearchScope = mockSetting(nockInstance, 'autosearch_while_typing');
27
- });
28
-
29
- afterEach(() => {
30
- assertNockRequest(searchDelayScope);
31
- assertNockRequest(autoSearchScope);
32
- });
33
-
34
-
35
24
  test('Can show matching content modal', async (done) => {
36
- const autocompleteScope = mockAutocomplete(nockInstance, autocompleteUrl);
25
+ const autocompleteScope = mockAutocomplete(nockInstance, autocompleteUrl, autocompleteQuery);
37
26
  const cvMatchContentscope = nockInstance
38
27
  .get(cvMatchContentPath)
39
28
  .query(true)
@@ -50,22 +39,36 @@ test('Can show matching content modal', async (done) => {
50
39
  });
51
40
 
52
41
  test('Can search with filter', async (done) => {
53
- const autocompleteScope = mockAutocomplete(nockInstance, autocompleteUrl);
42
+ const matchQuery = {
43
+ organization_id: 1,
44
+ search: `nvra = ${firstMatchContent.nvra}`,
45
+ };
46
+ const searchResults = [
47
+ {
48
+ completed: `nvra = ${firstMatchContent.nvra}`,
49
+ part: 'and',
50
+ label: `nvra = ${firstMatchContent.nvra} and`,
51
+ category: 'Operators',
52
+ },
53
+ {
54
+ completed: `nvra = ${firstMatchContent.nvra}`,
55
+ part: 'or',
56
+ label: `nvra = ${firstMatchContent.nvra} or`,
57
+ category: 'Operators',
58
+ },
59
+ ];
60
+ const autocompleteScope = mockAutocomplete(nockInstance, autocompleteUrl, autocompleteQuery);
61
+ const secondGetMatchContentscope = mockAutocomplete(
62
+ nockInstance,
63
+ autocompleteUrl,
64
+ matchQuery,
65
+ searchResults,
66
+ );
54
67
  const getMatchContentscope = nockInstance
55
68
  .get(cvMatchContentPath)
56
69
  .query(true)
57
70
  .reply(200, CVMatchedContent);
58
71
 
59
- const autocompleteSearchScope = nockInstance
60
- .get(api.getApiUrl(autocompleteUrl))
61
- .query(true)
62
- .reply(200, []);
63
-
64
- const secondGetMatchContentscope = nockInstance
65
- .get(cvMatchContentPath)
66
- .query(true)
67
- .reply(200, CVMatchContentSearch);
68
-
69
72
  const { queryByText, getByLabelText } = renderWithRedux(MatchContentModal);
70
73
 
71
74
  await patientlyWaitFor(() => {
@@ -73,17 +76,16 @@ test('Can search with filter', async (done) => {
73
76
  expect(queryByText(secondMatchContentName)).toBeInTheDocument();
74
77
  });
75
78
 
76
- fireEvent.change(getByLabelText(/text input for search/i), { target: { value: `nvra = ${firstMatchContent.nvra}` } });
79
+ getByLabelText('Search input').focus();
80
+ fireEvent.change(getByLabelText('Search input'), { target: { value: `nvra = ${firstMatchContent.nvra}` } });
77
81
 
78
82
  await patientlyWaitFor(() => {
79
- expect(queryByText('Matching content')).toBeInTheDocument();
83
+ expect(queryByText(`nvra = ${firstMatchContent.nvra} and`)).toBeInTheDocument();
80
84
  expect(queryByText(firstMatchContent.nvra)).toBeInTheDocument();
81
- expect(queryByText(secondMatchContentName)).not.toBeInTheDocument();
85
+ expect(queryByText(`nvra = ${secondMatchContentName} and`)).not.toBeInTheDocument();
82
86
  });
83
87
 
84
-
85
88
  assertNockRequest(autocompleteScope);
86
89
  assertNockRequest(getMatchContentscope);
87
- assertNockRequest(autocompleteSearchScope);
88
90
  assertNockRequest(secondGetMatchContentscope, done);
89
91
  });
@@ -32,6 +32,10 @@ const addedRule = {
32
32
  };
33
33
 
34
34
  const autocompleteUrl = '/content_view_filters/195/rules/auto_complete_search';
35
+ const autocompleteQuery = {
36
+ organization_id: 1,
37
+ search: '',
38
+ };
35
39
  const renderOptions = {
36
40
  apiNamespace: cvFilterDetailsKey(13, 195),
37
41
  routerParams: {
@@ -42,20 +46,8 @@ const renderOptions = {
42
46
 
43
47
  const withCVRoute = component => <Route path="/content_views/:id([0-9]+)#/filters/:filterId([0-9]+)">{component}</Route>;
44
48
 
45
- let searchDelayScope;
46
- let autoSearchScope;
47
- beforeEach(() => {
48
- searchDelayScope = mockSetting(nockInstance, 'autosearch_delay', 0);
49
- autoSearchScope = mockSetting(nockInstance, 'autosearch_while_typing');
50
- });
51
-
52
- afterEach(() => {
53
- assertNockRequest(searchDelayScope);
54
- assertNockRequest(autoSearchScope);
55
- });
56
-
57
49
  test('Can view container image filter rules', async (done) => {
58
- const autocompleteScope = mockAutocomplete(nockInstance, autocompleteUrl);
50
+ const autocompleteScope = mockAutocomplete(nockInstance, autocompleteUrl, autocompleteQuery);
59
51
  const cvFiltersScope = nockInstance
60
52
  .get(cvFilterRulesPath)
61
53
  .query(true)
@@ -89,7 +81,7 @@ test('Can view container image filter rules', async (done) => {
89
81
 
90
82
  // Remove
91
83
  test('Can remove filter rules', async (done) => {
92
- const autocompleteScope = mockAutocomplete(nockInstance, autocompleteUrl);
84
+ const autocompleteScope = mockAutocomplete(nockInstance, autocompleteUrl, autocompleteQuery);
93
85
 
94
86
  const cvFiltersScope = nockInstance
95
87
  .get(cvFilterRulesPath)
@@ -140,10 +132,16 @@ test('Can remove filter rules', async (done) => {
140
132
 
141
133
  // Add
142
134
  test('Can add filter rules', async (done) => {
143
- const autocompleteScope = mockAutocomplete(nockInstance, autocompleteUrl, true, [], 2);
135
+ const autocompleteScope = mockAutocomplete(
136
+ nockInstance,
137
+ autocompleteUrl,
138
+ autocompleteQuery,
139
+ [],
140
+ 2,
141
+ );
144
142
  const autocompleteNameScope = mockAutocomplete(nockInstance, autocompleteNameUrl, true, [], 2);
145
- const inputSearchDelayScope = mockSetting(nockInstance, 'autosearch_delay', 0, 2);
146
- const inputAutoSearchScope = mockSetting(nockInstance, 'autosearch_while_typing', undefined, 2);
143
+ const searchDelayScope = mockSetting(nockInstance, 'autosearch_delay', 0);
144
+ const autoSearchScope = mockSetting(nockInstance, 'autosearch_while_typing');
147
145
 
148
146
  const cvFiltersScope = nockInstance
149
147
  .get(cvFilterRulesPath)
@@ -160,7 +158,7 @@ test('Can add filter rules', async (done) => {
160
158
  .query(true)
161
159
  .reply(200, { ...cvFilterFixtures, results: [...cvFilterFixtures.results, addedRule] });
162
160
 
163
- const { queryByText, getByLabelText, getAllByLabelText } =
161
+ const { queryByText, getByLabelText } =
164
162
  renderWithRedux(
165
163
  withCVRoute(<CVContainerImageFilterContent filterId={195} details={details} />),
166
164
  renderOptions,
@@ -174,29 +172,23 @@ test('Can add filter rules', async (done) => {
174
172
  fireEvent.click(getByLabelText('add_filter_rule'));
175
173
  });
176
174
 
177
-
178
- await patientlyWaitFor(() => {
179
- expect(getAllByLabelText('text input for search')[0]).toBeInTheDocument();
180
- });
181
-
182
- fireEvent.change(getAllByLabelText('text input for search')[0], { target: { value: `name = ${addedRule.name}` } });
183
-
184
175
  await patientlyWaitFor(() => {
185
176
  expect(getByLabelText('add_edit_filter_rule')).toBeInTheDocument();
186
177
  expect(getByLabelText('add_edit_filter_rule')).toHaveAttribute('aria-disabled', 'true');
187
178
  });
188
179
 
189
- fireEvent.submit(getAllByLabelText('text input for search')[1]);
180
+ fireEvent.change(getByLabelText('text input for search'), { target: { value: 'new-rule' } });
181
+ fireEvent.submit(getByLabelText('add_edit_filter_rule'));
190
182
 
191
183
  await patientlyWaitFor(() => {
192
- expect(queryByText(addedRule.name)).toBeInTheDocument();
184
+ expect(queryByText('Add rule')).not.toBeInTheDocument();
193
185
  });
194
186
 
195
187
  assertNockRequest(autocompleteScope);
188
+ assertNockRequest(searchDelayScope);
189
+ assertNockRequest(autoSearchScope);
196
190
  assertNockRequest(cvFiltersScope);
197
191
  assertNockRequest(cvFilterAddScope);
198
- assertNockRequest(inputSearchDelayScope);
199
- assertNockRequest(inputAutoSearchScope);
200
192
  assertNockRequest(autocompleteNameScope);
201
193
  assertNockRequest(cvFiltersCallbackScope, done);
202
194
  act(done);
@@ -205,10 +197,16 @@ test('Can add filter rules', async (done) => {
205
197
 
206
198
  // Edit
207
199
  test('Can edit filter rules', async (done) => {
208
- const autocompleteScope = mockAutocomplete(nockInstance, autocompleteUrl, true, [], 2);
200
+ const autocompleteScope = mockAutocomplete(
201
+ nockInstance,
202
+ autocompleteUrl,
203
+ autocompleteQuery,
204
+ [],
205
+ 2,
206
+ );
209
207
  const autocompleteNameScope = mockAutocomplete(nockInstance, autocompleteNameUrl, true, [], 2);
210
- const inputSearchDelayScope = mockSetting(nockInstance, 'autosearch_delay', 0, 2);
211
- const inputAutoSearchScope = mockSetting(nockInstance, 'autosearch_while_typing', undefined, 2);
208
+ const searchDelayScope = mockSetting(nockInstance, 'autosearch_delay', 0);
209
+ const autoSearchScope = mockSetting(nockInstance, 'autosearch_while_typing');
212
210
 
213
211
  const cvFiltersScope = nockInstance
214
212
  .get(cvFilterRulesPath)
@@ -255,37 +253,42 @@ test('Can edit filter rules', async (done) => {
255
253
  fireEvent.click(queryByText('Edit'));
256
254
  });
257
255
 
258
- fireEvent.change(getAllByLabelText('text input for search')[0], { target: { value: `name = ${addedRule.name}` } });
259
-
260
256
  await patientlyWaitFor(() => {
261
257
  expect(getByLabelText('add_edit_filter_rule')).toBeInTheDocument();
262
258
  expect(getByLabelText('add_edit_filter_rule')).toHaveAttribute('aria-disabled', 'false');
263
259
  });
264
260
 
265
- fireEvent.submit(getAllByLabelText('text input for search')[1]);
261
+ fireEvent.change(getByLabelText('text input for search'), { target: { value: 'changed-name' } });
262
+ fireEvent.submit(getByLabelText('add_edit_filter_rule'));
266
263
 
267
264
  await patientlyWaitFor(() => {
268
- expect(queryByText(firstResultName)).not.toBeInTheDocument();
269
- expect(queryByText(addedRule.name)).toBeInTheDocument();
265
+ expect(queryByText('Edit rule')).not.toBeInTheDocument();
270
266
  });
271
267
 
272
268
  assertNockRequest(autocompleteScope);
269
+ assertNockRequest(searchDelayScope);
270
+ assertNockRequest(autoSearchScope);
273
271
  assertNockRequest(cvFiltersScope);
274
272
  assertNockRequest(cvFilterAddScope);
275
- assertNockRequest(inputSearchDelayScope);
276
- assertNockRequest(inputAutoSearchScope);
277
273
  assertNockRequest(autocompleteNameScope);
278
274
  assertNockRequest(cvFiltersCallbackScope, done);
279
275
  act(done);
280
276
  });
281
277
 
282
278
  test('Shows call-to-action when there are no filter rules', async (done) => {
283
- const autocompleteScope = mockAutocomplete(nockInstance, autocompleteUrl, true, [], 2);
279
+ const autocompleteScope = mockAutocomplete(
280
+ nockInstance,
281
+ autocompleteUrl,
282
+ autocompleteQuery,
283
+ [],
284
+ 2,
285
+ );
284
286
  const autocompleteNameScope = mockAutocomplete(nockInstance, autocompleteNameUrl, true, [], 2);
285
- const inputSearchDelayScope = mockSetting(nockInstance, 'autosearch_delay', 0, 2);
286
- const inputAutoSearchScope = mockSetting(nockInstance, 'autosearch_while_typing', undefined, 2);
287
+ const searchDelayScope = mockSetting(nockInstance, 'autosearch_delay', 0);
288
+ const autoSearchScope = mockSetting(nockInstance, 'autosearch_while_typing');
287
289
  const cvFiltersScope = nockInstance
288
290
  .get(cvFilterRulesPath)
291
+ .times(2)
289
292
  .query(true)
290
293
  .reply(200, emptyCVContainerImageData);
291
294
 
@@ -303,15 +306,15 @@ test('Shows call-to-action when there are no filter rules', async (done) => {
303
306
  });
304
307
 
305
308
  assertNockRequest(autocompleteScope);
306
- assertNockRequest(inputSearchDelayScope);
307
- assertNockRequest(inputAutoSearchScope);
308
309
  assertNockRequest(autocompleteNameScope);
310
+ assertNockRequest(searchDelayScope);
311
+ assertNockRequest(autoSearchScope);
309
312
  assertNockRequest(cvFiltersScope, done);
310
313
  act(done);
311
314
  });
312
315
 
313
316
  test('Hides bulk_remove dropdownItem when there are no filter rules', async (done) => {
314
- const autocompleteScope = mockAutocomplete(nockInstance, autocompleteUrl);
317
+ const autocompleteScope = mockAutocomplete(nockInstance, autocompleteUrl, autocompleteQuery);
315
318
  const cvFiltersScope = nockInstance
316
319
  .get(cvFilterRulesPath)
317
320
  .query(true)
@@ -33,13 +33,15 @@ const renderOptions = {
33
33
  initialIndex: 1,
34
34
  },
35
35
  };
36
+ const autocompleteQuery = {
37
+ organization_id: 1,
38
+ search: '',
39
+ };
36
40
 
37
41
  const withCVRoute = component => <Route path="/content_views/:id([0-9]+)#/filters/:filterId([0-9]+)">{component}</Route>;
38
42
 
39
43
  test('Can show filter details and package groups on page load', async (done) => {
40
44
  const { name: cvFilterName } = cvFilterDetails;
41
- const searchDelayScope = mockSetting(nockInstance, 'autosearch_delay', 0);
42
- const autoSearchScope = mockSetting(nockInstance, 'autosearch_while_typing');
43
45
  const cvFilterScope = nockInstance
44
46
  .get(cvFilterDetailsPath)
45
47
  .query(true)
@@ -52,7 +54,7 @@ test('Can show filter details and package groups on page load', async (done) =>
52
54
  .get(cvPackageFilterRulesPath)
53
55
  .query(true)
54
56
  .reply(200, cvPackageFilterRules);
55
- const autocompleteScope = mockAutocomplete(nockInstance, autocompleteUrl);
57
+ const autocompleteScope = mockAutocomplete(nockInstance, autocompleteUrl, autocompleteQuery);
56
58
 
57
59
  const { getByText, queryByText } =
58
60
  renderWithRedux(withCVRoute(<ContentViewFilterDetails
@@ -67,8 +69,6 @@ test('Can show filter details and package groups on page load', async (done) =>
67
69
  });
68
70
 
69
71
  assertNockRequest(autocompleteScope);
70
- assertNockRequest(searchDelayScope);
71
- assertNockRequest(autoSearchScope);
72
72
  assertNockRequest(cvFilterScope);
73
73
  assertNockRequest(cvFiltersScope);
74
74
  assertNockRequest(cvPackageFilterRulesScope);
@@ -81,10 +81,24 @@ test('Can search for package rules in package filter details', async (done) => {
81
81
  const { name: cvFilterName } = cvFilterDetails;
82
82
  const { name: firstPackageRuleName } = firstPackageRule;
83
83
  const { name: lastPackageRuleName } = lastPackageRule;
84
- const searchQueryMatcher = actualParams =>
85
- actualParams?.search?.includes(lastPackageRuleName);
86
- const searchDelayScope = mockSetting(nockInstance, 'autosearch_delay', 0);
87
- const autoSearchScope = mockSetting(nockInstance, 'autosearch_while_typing');
84
+ const searchQueryMatcher = {
85
+ organization_id: 1,
86
+ search: `name = ${lastPackageRuleName}`,
87
+ };
88
+ const searchResults = [
89
+ {
90
+ completed: `name = ${lastPackageRuleName}`,
91
+ part: 'and',
92
+ label: `name = ${lastPackageRuleName} and`,
93
+ category: 'Operators',
94
+ },
95
+ {
96
+ completed: `name = ${lastPackageRuleName}`,
97
+ part: 'or',
98
+ label: `name = ${lastPackageRuleName} or`,
99
+ category: 'Operators',
100
+ },
101
+ ];
88
102
 
89
103
  const cvFilterScope = nockInstance
90
104
  .get(cvFilterDetailsPath)
@@ -103,8 +117,13 @@ test('Can search for package rules in package filter details', async (done) => {
103
117
  .query(searchQueryMatcher)
104
118
  .reply(200, { results: [lastPackageRule] });
105
119
 
106
- const autocompleteScope = mockAutocomplete(nockInstance, autocompleteUrl);
107
- const withSearchScope = mockAutocomplete(nockInstance, autocompleteUrl, searchQueryMatcher);
120
+ const autocompleteScope = mockAutocomplete(nockInstance, autocompleteUrl, autocompleteQuery);
121
+ const withSearchScope = mockAutocomplete(
122
+ nockInstance,
123
+ autocompleteUrl,
124
+ searchQueryMatcher,
125
+ searchResults,
126
+ );
108
127
  const { getByText, queryByText, getByLabelText } =
109
128
  renderWithRedux(withCVRoute(<ContentViewFilterDetails
110
129
  cvId={1}
@@ -117,15 +136,14 @@ test('Can search for package rules in package filter details', async (done) => {
117
136
  });
118
137
 
119
138
  // Search and only searched result shows
120
- fireEvent.change(getByLabelText(/text input for search/i), { target: { value: `name = ${lastPackageRuleName}` } });
139
+ getByLabelText('Search input').focus();
140
+ fireEvent.change(getByLabelText('Search input'), { target: { value: `name = ${lastPackageRuleName}` } });
121
141
  await patientlyWaitFor(() => {
122
- expect(getByText(lastPackageRuleName)).toBeInTheDocument();
123
- expect(queryByText(firstPackageRuleName)).not.toBeInTheDocument();
142
+ expect(getByText(`name = ${lastPackageRuleName} and`)).toBeInTheDocument();
143
+ expect(queryByText(`name = ${firstPackageRuleName} and`)).not.toBeInTheDocument();
124
144
  });
125
145
 
126
146
  assertNockRequest(autocompleteScope);
127
- assertNockRequest(searchDelayScope);
128
- assertNockRequest(autoSearchScope);
129
147
  assertNockRequest(cvFilterScope);
130
148
  assertNockRequest(cvFiltersScope);
131
149
  assertNockRequest(cvPackageFilterRulesScope);
@@ -136,9 +154,15 @@ test('Can search for package rules in package filter details', async (done) => {
136
154
 
137
155
  test('Can add package rules to filter in a self-closing modal', async (done) => {
138
156
  const { name: cvFilterName } = cvFilterDetails;
139
- const autocompleteScope = mockAutocomplete(nockInstance, autocompleteUrl);
140
- const autocompleteNameScope = mockAutocomplete(nockInstance, autocompleteNameUrl);
141
- const autocompleteArchScope = mockAutocomplete(nockInstance, autocompleteArchUrl);
157
+ const autocompleteScope = mockAutocomplete(nockInstance, autocompleteUrl, true, undefined, 2);
158
+ const autocompleteNameScope = mockAutocomplete(
159
+ nockInstance, autocompleteNameUrl, true,
160
+ undefined, 2,
161
+ );
162
+ const autocompleteArchScope = mockAutocomplete(
163
+ nockInstance, autocompleteArchUrl, true,
164
+ undefined, 2,
165
+ );
142
166
  const searchDelayScope = mockSetting(nockInstance, 'autosearch_delay', 0, 3);
143
167
  const autoSearchScope = mockSetting(nockInstance, 'autosearch_while_typing', undefined, 3);
144
168
 
@@ -190,12 +214,12 @@ test('Can add package rules to filter in a self-closing modal', async (done) =>
190
214
  });
191
215
  getByLabelText('add_rpm_rule').click();
192
216
  await patientlyWaitFor(() => {
217
+ expect(getAllByLabelText('text input for search')[0]).toBeInTheDocument();
193
218
  expect(getAllByLabelText('text input for search')[1]).toBeInTheDocument();
194
- expect(getAllByLabelText('text input for search')[2]).toBeInTheDocument();
195
219
  expect(getByLabelText('add_package_filter_rule')).toBeInTheDocument();
196
220
  });
197
- fireEvent.change(getAllByLabelText('text input for search')[1], { target: { value: 'elephant' } });
198
- fireEvent.change(getAllByLabelText('text input for search')[2], { target: { value: 'noarch' } });
221
+ fireEvent.change(getAllByLabelText('text input for search')[0], { target: { value: 'elephant' } });
222
+ fireEvent.change(getAllByLabelText('text input for search')[1], { target: { value: 'noarch' } });
199
223
  fireEvent.submit(getByLabelText('add_package_filter_rule'));
200
224
 
201
225
  await patientlyWaitFor(() => {
@@ -259,6 +283,10 @@ test('Remove rpm filter rule in a self-closing modal', async (done) => {
259
283
  });
260
284
 
261
285
  getByText('Remove').click();
286
+ await patientlyWaitFor(() => {
287
+ expect(getByText(cvFilterName)).toBeInTheDocument();
288
+ expect(getAllByLabelText('Actions')[1]).toBeInTheDocument();
289
+ });
262
290
 
263
291
  assertNockRequest(autocompleteScope);
264
292
  assertNockRequest(searchDelayScope);
@@ -274,8 +302,14 @@ test('Remove rpm filter rule in a self-closing modal', async (done) => {
274
302
  test('Edit rpm filter rule in a self-closing modal', async (done) => {
275
303
  const { name: cvFilterName } = cvFilterDetails;
276
304
  const autocompleteScope = mockAutocomplete(nockInstance, autocompleteUrl, true, undefined, 2);
277
- const autocompleteNameScope = mockAutocomplete(nockInstance, autocompleteNameUrl);
278
- const autocompleteArchScope = mockAutocomplete(nockInstance, autocompleteArchUrl);
305
+ const autocompleteNameScope = mockAutocomplete(
306
+ nockInstance, autocompleteNameUrl, true,
307
+ undefined, 2,
308
+ );
309
+ const autocompleteArchScope = mockAutocomplete(
310
+ nockInstance, autocompleteArchUrl, true,
311
+ undefined, 2,
312
+ );
279
313
  const searchDelayScope = mockSetting(nockInstance, 'autosearch_delay', 0, 3);
280
314
  const autoSearchScope = mockSetting(nockInstance, 'autosearch_while_typing', undefined, 3);
281
315
  const cvFiltersScope = nockInstance