katello 4.16.3 → 4.17.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (509) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/katello/hosts/host_and_hostgroup_edit.js +5 -3
  3. data/app/assets/javascripts/katello/locale/bn/katello.js +77 -263
  4. data/app/assets/javascripts/katello/locale/bn_IN/katello.js +77 -263
  5. data/app/assets/javascripts/katello/locale/ca/katello.js +77 -263
  6. data/app/assets/javascripts/katello/locale/cs/katello.js +77 -263
  7. data/app/assets/javascripts/katello/locale/cs_CZ/katello.js +77 -263
  8. data/app/assets/javascripts/katello/locale/de/katello.js +87 -273
  9. data/app/assets/javascripts/katello/locale/de_AT/katello.js +77 -263
  10. data/app/assets/javascripts/katello/locale/de_DE/katello.js +77 -263
  11. data/app/assets/javascripts/katello/locale/el/katello.js +77 -263
  12. data/app/assets/javascripts/katello/locale/en/katello.js +77 -263
  13. data/app/assets/javascripts/katello/locale/en_GB/katello.js +77 -263
  14. data/app/assets/javascripts/katello/locale/en_US/katello.js +77 -263
  15. data/app/assets/javascripts/katello/locale/es/katello.js +242 -428
  16. data/app/assets/javascripts/katello/locale/et_EE/katello.js +77 -263
  17. data/app/assets/javascripts/katello/locale/fr/katello.js +900 -1086
  18. data/app/assets/javascripts/katello/locale/gl/katello.js +77 -263
  19. data/app/assets/javascripts/katello/locale/gu/katello.js +77 -263
  20. data/app/assets/javascripts/katello/locale/he_IL/katello.js +77 -263
  21. data/app/assets/javascripts/katello/locale/hi/katello.js +77 -263
  22. data/app/assets/javascripts/katello/locale/id/katello.js +77 -263
  23. data/app/assets/javascripts/katello/locale/it/katello.js +78 -264
  24. data/app/assets/javascripts/katello/locale/ja/katello.js +628 -814
  25. data/app/assets/javascripts/katello/locale/ka/katello.js +474 -660
  26. data/app/assets/javascripts/katello/locale/kn/katello.js +77 -263
  27. data/app/assets/javascripts/katello/locale/ko/katello.js +2129 -2314
  28. data/app/assets/javascripts/katello/locale/ml_IN/katello.js +77 -263
  29. data/app/assets/javascripts/katello/locale/mr/katello.js +77 -263
  30. data/app/assets/javascripts/katello/locale/nl_NL/katello.js +77 -263
  31. data/app/assets/javascripts/katello/locale/or/katello.js +77 -263
  32. data/app/assets/javascripts/katello/locale/pa/katello.js +77 -263
  33. data/app/assets/javascripts/katello/locale/pl/katello.js +77 -263
  34. data/app/assets/javascripts/katello/locale/pl_PL/katello.js +77 -263
  35. data/app/assets/javascripts/katello/locale/pt/katello.js +77 -263
  36. data/app/assets/javascripts/katello/locale/pt_BR/katello.js +255 -441
  37. data/app/assets/javascripts/katello/locale/ro/katello.js +77 -263
  38. data/app/assets/javascripts/katello/locale/ro_RO/katello.js +77 -263
  39. data/app/assets/javascripts/katello/locale/ru/katello.js +78 -264
  40. data/app/assets/javascripts/katello/locale/sl/katello.js +77 -263
  41. data/app/assets/javascripts/katello/locale/sv_SE/katello.js +77 -263
  42. data/app/assets/javascripts/katello/locale/ta/katello.js +77 -263
  43. data/app/assets/javascripts/katello/locale/ta_IN/katello.js +77 -263
  44. data/app/assets/javascripts/katello/locale/te/katello.js +77 -263
  45. data/app/assets/javascripts/katello/locale/tr/katello.js +77 -263
  46. data/app/assets/javascripts/katello/locale/vi/katello.js +77 -263
  47. data/app/assets/javascripts/katello/locale/vi_VN/katello.js +77 -263
  48. data/app/assets/javascripts/katello/locale/zh/katello.js +77 -263
  49. data/app/assets/javascripts/katello/locale/zh_CN/katello.js +632 -818
  50. data/app/assets/javascripts/katello/locale/zh_TW/katello.js +78 -264
  51. data/app/controllers/katello/api/registry/registry_proxies_controller.rb +19 -5
  52. data/app/controllers/katello/api/v2/content_view_components_controller.rb +6 -6
  53. data/app/controllers/katello/api/v2/content_view_filters_controller.rb +3 -0
  54. data/app/controllers/katello/api/v2/content_view_versions_controller.rb +6 -0
  55. data/app/controllers/katello/api/v2/content_views_controller.rb +12 -1
  56. data/app/controllers/katello/api/v2/exports_controller.rb +3 -0
  57. data/app/controllers/katello/api/v2/host_subscriptions_controller.rb +12 -14
  58. data/app/controllers/katello/api/v2/organizations_controller.rb +10 -10
  59. data/app/controllers/katello/concerns/authorization/api/v2/content_views_controller.rb +8 -2
  60. data/app/lib/actions/helpers/rolling_cv_repos.rb +25 -0
  61. data/app/lib/actions/katello/capsule_content/sync_capsule.rb +6 -1
  62. data/app/lib/actions/katello/content_view/add_rolling_repo_clone.rb +39 -0
  63. data/app/lib/actions/katello/content_view/create.rb +3 -0
  64. data/app/lib/actions/katello/content_view/refresh_rolling_repo.rb +40 -0
  65. data/app/lib/actions/katello/content_view/remove.rb +8 -4
  66. data/app/lib/actions/katello/content_view/remove_rolling_repo_clone.rb +28 -0
  67. data/app/lib/actions/katello/content_view/update.rb +8 -0
  68. data/app/lib/actions/katello/repository/check_matching_content.rb +1 -8
  69. data/app/lib/actions/katello/repository/import_upload.rb +5 -0
  70. data/app/lib/actions/katello/repository/sync.rb +8 -4
  71. data/app/lib/actions/katello/repository/upload_files.rb +7 -1
  72. data/app/lib/actions/pulp3/orchestration/orphan_cleanup/remove_orphans.rb +3 -2
  73. data/app/lib/actions/pulp3/orphan_cleanup/delete_orphan_repository_versions.rb +8 -1
  74. data/app/lib/katello/errors.rb +8 -0
  75. data/app/lib/katello/validators/container_image_name_validator.rb +3 -2
  76. data/app/models/katello/authorization/repository.rb +11 -1
  77. data/app/models/katello/concerns/host_managed_extensions.rb +2 -2
  78. data/app/models/katello/concerns/pulp_database_unit.rb +12 -42
  79. data/app/models/katello/concerns/smart_proxy_extensions.rb +8 -0
  80. data/app/models/katello/content_view.rb +14 -1
  81. data/app/models/katello/content_view_component.rb +4 -0
  82. data/app/models/katello/content_view_environment.rb +1 -0
  83. data/app/models/katello/content_view_version.rb +3 -2
  84. data/app/models/katello/host/content_facet.rb +18 -5
  85. data/app/models/katello/product_content.rb +3 -1
  86. data/app/models/katello/repository.rb +3 -3
  87. data/app/services/katello/content_unit_indexer.rb +1 -1
  88. data/app/services/katello/pulp3/api/content_guard.rb +1 -1
  89. data/app/services/katello/pulp3/api/core.rb +6 -0
  90. data/app/services/katello/pulp3/smart_proxy_mirror_repository.rb +58 -1
  91. data/app/services/katello/pulp3/smart_proxy_repository.rb +67 -3
  92. data/app/services/katello/smart_proxy_helper.rb +6 -1
  93. data/app/views/foreman/job_templates/install_errata_-_katello_ansible_default.erb +15 -1
  94. data/app/views/foreman/job_templates/install_errata_by_search_query_-_katello_ansible_default.erb +15 -1
  95. data/app/views/foreman/job_templates/install_group_-_katello_ansible_default.erb +15 -2
  96. data/app/views/foreman/job_templates/install_packages_by_search_query_-_katello_ansible_default.erb +21 -2
  97. data/app/views/foreman/job_templates/remove_group_-_katello_ansible_default.erb +15 -1
  98. data/app/views/foreman/job_templates/remove_packages_by_search_query_-_katello_ansible_default.erb +20 -1
  99. data/app/views/foreman/job_templates/update_group_-_katello_ansible_default.erb +15 -2
  100. data/app/views/foreman/job_templates/update_packages_by_search_query_-_katello_ansible_default.erb +17 -1
  101. data/app/views/katello/api/v2/activation_keys/base.json.rabl +1 -0
  102. data/app/views/katello/api/v2/capsule_content/sync_status.json.rabl +2 -1
  103. data/app/views/katello/api/v2/content_facet/base.json.rabl +2 -0
  104. data/app/views/katello/api/v2/content_view_versions/base.json.rabl +12 -0
  105. data/app/views/katello/api/v2/content_views/base.json.rabl +1 -0
  106. data/app/views/katello/api/v2/environments/show.json.rabl +14 -0
  107. data/app/views/katello/api/v2/hosts/base.json.rabl +1 -0
  108. data/app/views/katello/api/v2/organizations/show.json.rabl +2 -0
  109. data/app/views/katello/api/v2/repositories/base.json.rabl +2 -1
  110. data/db/migrate/20190930192813_add_pulp3_hrefs_to_content_types.rb +1 -1
  111. data/db/migrate/20240924161240_katello_recreate_evr_constructs.rb +0 -20
  112. data/db/migrate/20241022122325_add_rolling_to_katello_content_views.rb +5 -0
  113. data/db/migrate/20241025151105_remove_pulp3_migrated_hrefs_from_content_tables.rb +1 -1
  114. data/db/migrate/20250215143303_drop_katello_yum_metadata_file.rb +5 -0
  115. data/db/migrate/20250409120843_fix_file_download_policy.rb +11 -0
  116. data/db/migrate/20250410155300_change_ansible_templates_category.rb +22 -0
  117. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/bn.po +0 -6
  118. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/bn_IN.po +0 -6
  119. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ca.po +0 -6
  120. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/cs_CZ.po +0 -6
  121. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de.po +0 -6
  122. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de_AT.po +0 -6
  123. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de_DE.po +0 -6
  124. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/el.po +0 -6
  125. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/en_GB.po +0 -6
  126. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/en_US.po +0 -6
  127. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/es.po +0 -6
  128. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/et_EE.po +0 -6
  129. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/fr.po +0 -6
  130. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/gl.po +0 -6
  131. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/gu.po +0 -6
  132. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/he_IL.po +0 -6
  133. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/hi.po +0 -6
  134. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/id.po +0 -6
  135. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/it.po +0 -6
  136. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ja.po +0 -6
  137. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ka.po +0 -6
  138. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/kn.po +0 -6
  139. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ko.po +0 -6
  140. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ml_IN.po +0 -6
  141. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/mr.po +0 -6
  142. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/nl_NL.po +0 -6
  143. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/or.po +0 -6
  144. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pa.po +0 -6
  145. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pl.po +0 -6
  146. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pl_PL.po +0 -6
  147. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pt.po +0 -6
  148. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pt_BR.po +0 -6
  149. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ro.po +0 -6
  150. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ro_RO.po +0 -6
  151. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ru.po +0 -6
  152. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/sl.po +0 -6
  153. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/sv_SE.po +0 -6
  154. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ta.po +0 -6
  155. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ta_IN.po +0 -6
  156. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/te.po +0 -6
  157. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/tr.po +0 -6
  158. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/vi.po +0 -6
  159. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/vi_VN.po +0 -6
  160. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh.po +0 -6
  161. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_CN.po +0 -6
  162. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_TW.po +0 -6
  163. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/repository-types.service.js +3 -0
  164. data/lib/katello/engine.rb +9 -1
  165. data/lib/katello/repository_types/python.rb +1 -1
  166. data/lib/katello/tasks/repository.rake +1 -1
  167. data/lib/katello/version.rb +1 -1
  168. data/locale/action_names.rb +3 -0
  169. data/locale/bn/LC_MESSAGES/katello.mo +0 -0
  170. data/locale/bn/katello.po +77 -263
  171. data/locale/bn_IN/LC_MESSAGES/katello.mo +0 -0
  172. data/locale/bn_IN/katello.po +77 -263
  173. data/locale/ca/LC_MESSAGES/katello.mo +0 -0
  174. data/locale/ca/katello.po +77 -263
  175. data/locale/cs/LC_MESSAGES/katello.mo +0 -0
  176. data/locale/cs/katello.po +77 -263
  177. data/locale/cs_CZ/LC_MESSAGES/katello.mo +0 -0
  178. data/locale/cs_CZ/katello.po +77 -263
  179. data/locale/de/LC_MESSAGES/katello.mo +0 -0
  180. data/locale/de/katello.po +91 -277
  181. data/locale/de_AT/LC_MESSAGES/katello.mo +0 -0
  182. data/locale/de_AT/katello.po +77 -263
  183. data/locale/de_DE/LC_MESSAGES/katello.mo +0 -0
  184. data/locale/de_DE/katello.po +77 -263
  185. data/locale/el/LC_MESSAGES/katello.mo +0 -0
  186. data/locale/el/katello.po +77 -263
  187. data/locale/en/LC_MESSAGES/katello.mo +0 -0
  188. data/locale/en/katello.po +77 -263
  189. data/locale/en_GB/LC_MESSAGES/katello.mo +0 -0
  190. data/locale/en_GB/katello.po +77 -263
  191. data/locale/en_US/LC_MESSAGES/katello.mo +0 -0
  192. data/locale/en_US/katello.po +77 -263
  193. data/locale/es/LC_MESSAGES/katello.mo +0 -0
  194. data/locale/es/katello.po +245 -432
  195. data/locale/et_EE/LC_MESSAGES/katello.mo +0 -0
  196. data/locale/et_EE/katello.po +77 -263
  197. data/locale/fr/LC_MESSAGES/katello.mo +0 -0
  198. data/locale/fr/katello.po +906 -1092
  199. data/locale/gl/LC_MESSAGES/katello.mo +0 -0
  200. data/locale/gl/katello.po +77 -263
  201. data/locale/gu/LC_MESSAGES/katello.mo +0 -0
  202. data/locale/gu/katello.po +77 -263
  203. data/locale/he_IL/LC_MESSAGES/katello.mo +0 -0
  204. data/locale/he_IL/katello.po +77 -263
  205. data/locale/hi/LC_MESSAGES/katello.mo +0 -0
  206. data/locale/hi/katello.po +77 -263
  207. data/locale/id/LC_MESSAGES/katello.mo +0 -0
  208. data/locale/id/katello.po +77 -263
  209. data/locale/it/LC_MESSAGES/katello.mo +0 -0
  210. data/locale/it/katello.po +78 -264
  211. data/locale/ja/LC_MESSAGES/katello.mo +0 -0
  212. data/locale/ja/katello.po +634 -822
  213. data/locale/ka/LC_MESSAGES/katello.mo +0 -0
  214. data/locale/ka/katello.po +474 -662
  215. data/locale/katello.pot +1194 -1472
  216. data/locale/kn/LC_MESSAGES/katello.mo +0 -0
  217. data/locale/kn/katello.po +77 -263
  218. data/locale/ko/LC_MESSAGES/katello.mo +0 -0
  219. data/locale/ko/katello.po +2125 -2324
  220. data/locale/ml_IN/LC_MESSAGES/katello.mo +0 -0
  221. data/locale/ml_IN/katello.po +77 -263
  222. data/locale/mr/LC_MESSAGES/katello.mo +0 -0
  223. data/locale/mr/katello.po +77 -263
  224. data/locale/nl_NL/LC_MESSAGES/katello.mo +0 -0
  225. data/locale/nl_NL/katello.po +77 -263
  226. data/locale/or/LC_MESSAGES/katello.mo +0 -0
  227. data/locale/or/katello.po +77 -263
  228. data/locale/pa/LC_MESSAGES/katello.mo +0 -0
  229. data/locale/pa/katello.po +77 -263
  230. data/locale/pl/LC_MESSAGES/katello.mo +0 -0
  231. data/locale/pl/katello.po +77 -263
  232. data/locale/pl_PL/LC_MESSAGES/katello.mo +0 -0
  233. data/locale/pl_PL/katello.po +77 -263
  234. data/locale/pt/LC_MESSAGES/katello.mo +0 -0
  235. data/locale/pt/katello.po +77 -263
  236. data/locale/pt_BR/LC_MESSAGES/katello.mo +0 -0
  237. data/locale/pt_BR/katello.po +258 -445
  238. data/locale/ro/LC_MESSAGES/katello.mo +0 -0
  239. data/locale/ro/katello.po +77 -263
  240. data/locale/ro_RO/LC_MESSAGES/katello.mo +0 -0
  241. data/locale/ro_RO/katello.po +77 -263
  242. data/locale/ru/LC_MESSAGES/katello.mo +0 -0
  243. data/locale/ru/katello.po +78 -264
  244. data/locale/sl/LC_MESSAGES/katello.mo +0 -0
  245. data/locale/sl/katello.po +77 -263
  246. data/locale/sv_SE/LC_MESSAGES/katello.mo +0 -0
  247. data/locale/sv_SE/katello.po +77 -263
  248. data/locale/ta/LC_MESSAGES/katello.mo +0 -0
  249. data/locale/ta/katello.po +77 -263
  250. data/locale/ta_IN/LC_MESSAGES/katello.mo +0 -0
  251. data/locale/ta_IN/katello.po +77 -263
  252. data/locale/te/LC_MESSAGES/katello.mo +0 -0
  253. data/locale/te/katello.po +77 -263
  254. data/locale/tr/LC_MESSAGES/katello.mo +0 -0
  255. data/locale/tr/katello.po +77 -263
  256. data/locale/vi/LC_MESSAGES/katello.mo +0 -0
  257. data/locale/vi/katello.po +77 -263
  258. data/locale/vi_VN/LC_MESSAGES/katello.mo +0 -0
  259. data/locale/vi_VN/katello.po +77 -263
  260. data/locale/zh/LC_MESSAGES/katello.mo +0 -0
  261. data/locale/zh/katello.po +77 -263
  262. data/locale/zh_CN/LC_MESSAGES/katello.mo +0 -0
  263. data/locale/zh_CN/katello.po +632 -824
  264. data/locale/zh_TW/LC_MESSAGES/katello.mo +0 -0
  265. data/locale/zh_TW/katello.po +78 -264
  266. data/webpack/ForemanColumnExtensions/index.js +12 -4
  267. data/webpack/components/ActivationKeysSearch/index.js +6 -7
  268. data/webpack/components/Bookmark/AddBookmarkModal.js +3 -3
  269. data/webpack/components/Bookmark/Bookmark.scss +3 -3
  270. data/webpack/components/Bookmark/index.js +7 -2
  271. data/webpack/components/EditableSwitch.js +1 -1
  272. data/webpack/components/EditableTextInput/EditableTextInput.js +1 -1
  273. data/webpack/components/EditableTextInput/editableTextInput.scss +1 -1
  274. data/webpack/components/Errata/index.js +1 -24
  275. data/webpack/components/Loading.js +10 -6
  276. data/webpack/components/Packages/index.js +2 -1
  277. data/webpack/components/SelectAllCheckbox/index.js +7 -3
  278. data/webpack/components/SelectableDropdown/SelectableDropdown.js +21 -3
  279. data/webpack/components/Table/EmptyStateMessage.js +12 -14
  280. data/webpack/components/Table/MainTable.js +8 -7
  281. data/webpack/components/Table/MainTable.scss +4 -4
  282. data/webpack/components/extensions/HostDetails/ActionsBar/index.js +4 -1
  283. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/ChangeHostCVModal.js +1 -1
  284. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/ContentViewDetailsCard.js +9 -6
  285. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/__tests__/changeHostCVModal.test.js +2 -1
  286. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/__tests__/contentViews.fixtures.json +4 -1
  287. data/webpack/components/extensions/HostDetails/Cards/ErrataOverviewCard.js +23 -6
  288. data/webpack/components/extensions/HostDetails/Cards/ErrataOverviewCard.scss +1 -1
  289. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsCard.js +5 -3
  290. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsCard.scss +3 -3
  291. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsModal.js +1 -1
  292. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/__tests__/hostCollectionsModal.test.js +25 -10
  293. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeCard.js +5 -2
  294. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeCard.scss +2 -2
  295. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeEditModal.js +5 -4
  296. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/__tests__/SystemPurposeCard.test.js +6 -3
  297. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/__tests__/SystemPurposeEditModal.test.js +19 -12
  298. data/webpack/components/extensions/HostDetails/Cards/__tests__/errataOverviewCard.test.js +1 -1
  299. data/webpack/components/extensions/HostDetails/DetailsTabCards/HwPropertiesCard.js +1 -4
  300. data/webpack/components/extensions/HostDetails/DetailsTabCards/ImageModeCard.js +1 -4
  301. data/webpack/components/extensions/HostDetails/DetailsTabCards/InstalledProductsCard.js +1 -4
  302. data/webpack/components/extensions/HostDetails/DetailsTabCards/__test__/HwPropertiesCard.test.js +63 -0
  303. data/webpack/components/extensions/HostDetails/DetailsTabCards/__test__/ImageModeCard.test.js +73 -0
  304. data/webpack/components/extensions/HostDetails/DetailsTabCards/__test__/InstalledProductsCard.test.js +45 -0
  305. data/webpack/components/extensions/HostDetails/Tabs/DebsTab/DebInstallModal.js +12 -2
  306. data/webpack/components/extensions/HostDetails/Tabs/DebsTab/DebInstallModal.scss +1 -1
  307. data/webpack/components/extensions/HostDetails/Tabs/DebsTab/DebsTab.js +10 -13
  308. data/webpack/components/extensions/HostDetails/Tabs/DebsTab/DebsTab.scss +1 -1
  309. data/webpack/components/extensions/HostDetails/Tabs/ErrataTab/ErrataTab.js +46 -21
  310. data/webpack/components/extensions/HostDetails/Tabs/ErrataTab/ErrataTab.scss +1 -1
  311. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsTab.js +15 -7
  312. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackageInstallModal.js +13 -3
  313. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackageInstallModal.scss +1 -1
  314. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackagesTab.js +34 -20
  315. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackagesTab.scss +1 -1
  316. data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsTab.js +8 -6
  317. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/EnableTracerModal.js +5 -3
  318. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/EnableTracerModal.scss +1 -1
  319. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/TracesEnabler.js +12 -13
  320. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/TracesTab.js +16 -6
  321. data/webpack/components/extensions/HostDetails/Tabs/__tests__/debsInstallModal.test.js +10 -5
  322. data/webpack/components/extensions/HostDetails/Tabs/__tests__/debsTab.test.js +48 -22
  323. data/webpack/components/extensions/HostDetails/Tabs/__tests__/errataTab.test.js +123 -47
  324. data/webpack/components/extensions/HostDetails/Tabs/__tests__/moduleStreamsTab.test.js +14 -7
  325. data/webpack/components/extensions/HostDetails/Tabs/__tests__/packageInstallModal.test.js +10 -5
  326. data/webpack/components/extensions/HostDetails/Tabs/__tests__/packagesTab.test.js +41 -24
  327. data/webpack/components/extensions/HostDetails/Tabs/__tests__/repositorySetsTab.test.js +50 -25
  328. data/webpack/components/extensions/HostDetails/Tabs/__tests__/tracesTab.test.js +50 -25
  329. data/webpack/components/extensions/HostDetails/hostDetailsHelpers.js +3 -0
  330. data/webpack/components/extensions/Hosts/BulkActions/BulkErrataWizard/04_Review.js +16 -2
  331. data/webpack/components/extensions/Hosts/BulkActions/BulkErrataWizard/04_ReviewFooter.js +6 -2
  332. data/webpack/components/extensions/Hosts/BulkActions/BulkErrataWizard/BulkErrataWizard.js +5 -1
  333. data/webpack/components/extensions/Hosts/BulkActions/BulkPackagesWizard/04_Review.js +16 -2
  334. data/webpack/components/extensions/Hosts/BulkActions/BulkPackagesWizard/04_ReviewFooter.js +6 -2
  335. data/webpack/components/extensions/Hosts/BulkActions/BulkPackagesWizard/BulkPackagesWizard.js +15 -2
  336. data/webpack/components/extensions/Hosts/BulkActions/HostReview.js +1 -1
  337. data/webpack/components/extensions/Hosts/BulkActions/__tests__/bulkChangeHostCVModal.test.js +2 -1
  338. data/webpack/components/extensions/Hosts/FontAwesomeImageModeIcon.js +1 -1
  339. data/webpack/components/extensions/Hosts/ImageModeHostAlert.js +14 -0
  340. data/webpack/components/extensions/RegistrationCommands/__tests__/__snapshots__/ActivationKeys.test.js.snap +14 -17
  341. data/webpack/components/extensions/RegistrationCommands/__tests__/__snapshots__/Force.test.js.snap +1 -1
  342. data/webpack/components/extensions/RegistrationCommands/__tests__/__snapshots__/IgnoreSubmanErrors.test.js.snap +1 -1
  343. data/webpack/components/extensions/RegistrationCommands/fields/ActivationKeys.js +38 -49
  344. data/webpack/containers/Application/overrides.scss +7 -7
  345. data/webpack/ouia_id_check.js +15 -11
  346. data/webpack/redux/actions/RedHatRepositories/helpers.js +0 -2
  347. data/webpack/scenes/ActivationKeys/Details/__tests__/activationKeyDetails.test.js +12 -6
  348. data/webpack/scenes/ActivationKeys/Details/components/DeleteMenu.js +12 -2
  349. data/webpack/scenes/ActivationKeys/Details/components/EditModal.js +3 -3
  350. data/webpack/scenes/AlternateContentSources/Create/ACSCreateWizard.js +3 -1
  351. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSCreateFinish.js +3 -1
  352. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSCredentials.js +12 -6
  353. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSSmartProxies.js +1 -1
  354. data/webpack/scenes/AlternateContentSources/Create/Steps/AcsUrlPaths.js +22 -7
  355. data/webpack/scenes/AlternateContentSources/Create/Steps/NameACS.js +2 -2
  356. data/webpack/scenes/AlternateContentSources/Create/Steps/SelectSource.js +1 -1
  357. data/webpack/scenes/AlternateContentSources/Create/__tests__/acsCreate.test.js +6 -3
  358. data/webpack/scenes/AlternateContentSources/Details/ACSExpandableDetails.js +25 -15
  359. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditCredentials.js +9 -6
  360. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditDetails.js +2 -2
  361. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditSmartProxies.js +1 -1
  362. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditURLPaths.js +33 -7
  363. data/webpack/scenes/AlternateContentSources/Details/__tests__/ACSEdits.test.js +10 -5
  364. data/webpack/scenes/AlternateContentSources/Details/__tests__/ACSExpandableDetails.test.js +4 -2
  365. data/webpack/scenes/AlternateContentSources/MainTable/ACSTable.js +10 -8
  366. data/webpack/scenes/AlternateContentSources/MainTable/__tests__/acsTable.test.js +4 -2
  367. data/webpack/scenes/BootedContainerImages/BootedContainerImagesPage.js +5 -5
  368. data/webpack/scenes/Content/Details/__tests__/contentDetail.test.js +8 -4
  369. data/webpack/scenes/Content/__tests__/contentTable.test.js +4 -2
  370. data/webpack/scenes/ContentViews/Copy/CopyContentViewForm.js +1 -1
  371. data/webpack/scenes/ContentViews/Copy/__tests__/contentViewCopyResult.fixtures.json +1 -0
  372. data/webpack/scenes/ContentViews/Copy/__tests__/copyContentView.test.js +2 -1
  373. data/webpack/scenes/ContentViews/Create/CreateContentViewForm.js +86 -31
  374. data/webpack/scenes/ContentViews/Create/CreateContentViewForm.scss +10 -2
  375. data/webpack/scenes/ContentViews/Create/__tests__/contentViewCreateResult.fixtures.json +1 -0
  376. data/webpack/scenes/ContentViews/Create/__tests__/createContentView.test.js +10 -4
  377. data/webpack/scenes/ContentViews/Delete/ContentViewDeleteWizard.js +3 -1
  378. data/webpack/scenes/ContentViews/Delete/Steps/CVDeleteEnvironmentsSelection.js +6 -6
  379. data/webpack/scenes/ContentViews/Delete/Steps/CVDeletionReassignActivationKeysForm.js +7 -2
  380. data/webpack/scenes/ContentViews/Delete/Steps/CVDeletionReassignHostsForm.js +7 -2
  381. data/webpack/scenes/ContentViews/Delete/Steps/CVDeletionReview.js +3 -3
  382. data/webpack/scenes/ContentViews/Delete/Steps/CVEnvironmentSelectionForm.scss +1 -1
  383. data/webpack/scenes/ContentViews/Delete/__tests__/CvData.fixtures.json +2 -1
  384. data/webpack/scenes/ContentViews/Delete/__tests__/affectedHosts.fixtures.json +3 -2
  385. data/webpack/scenes/ContentViews/Delete/__tests__/contentViewDelete.test.js +10 -8
  386. data/webpack/scenes/ContentViews/Delete/__tests__/cvDetails.fixtures.json +2 -1
  387. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewAddModal.js +16 -5
  388. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewBulkAddModal.js +19 -5
  389. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentEnvironments.js +1 -1
  390. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ContentViewComponents.js +11 -2
  391. data/webpack/scenes/ContentViews/Details/ComponentContentViews/__tests__/compositeCVDetails.fixtures.json +2 -1
  392. data/webpack/scenes/ContentViews/Details/ComponentContentViews/__tests__/contentViewComponents.test.js +69 -27
  393. data/webpack/scenes/ContentViews/Details/ComponentContentViews/__tests__/publishedContentViewDetails.fixtures.json +2 -1
  394. data/webpack/scenes/ContentViews/Details/ContentViewDetails.js +22 -29
  395. data/webpack/scenes/ContentViews/Details/ContentViewInfo.js +6 -2
  396. data/webpack/scenes/ContentViews/Details/Filters/Add/CVFilterAddModal.js +20 -7
  397. data/webpack/scenes/ContentViews/Details/Filters/Add/__tests__/cvFilterAdd.test.js +4 -2
  398. data/webpack/scenes/ContentViews/Details/Filters/AffectedRepositories/AffectedRepositorySelection.js +5 -2
  399. data/webpack/scenes/ContentViews/Details/Filters/AffectedRepositories/AffectedRepositoryTable.js +3 -1
  400. data/webpack/scenes/ContentViews/Details/Filters/ArtifactsWithNoErrata.js +1 -1
  401. data/webpack/scenes/ContentViews/Details/Filters/CVContainerImageFilterContent.js +4 -2
  402. data/webpack/scenes/ContentViews/Details/Filters/CVDebFilterContent.js +13 -1
  403. data/webpack/scenes/ContentViews/Details/Filters/CVErrataDateFilterContent.js +23 -7
  404. data/webpack/scenes/ContentViews/Details/Filters/CVErrataIDFilterContent.js +23 -5
  405. data/webpack/scenes/ContentViews/Details/Filters/CVModuleStreamFilterContent.js +15 -3
  406. data/webpack/scenes/ContentViews/Details/Filters/CVPackageGroupFilterContent.js +15 -3
  407. data/webpack/scenes/ContentViews/Details/Filters/CVRpmFilterContent.js +13 -1
  408. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilterDetailsHeader.js +6 -4
  409. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilters.js +11 -1
  410. data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/__tests__/CVRpmMatchContentModal.test.js +4 -2
  411. data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/matchContentModal.scss +1 -1
  412. data/webpack/scenes/ContentViews/Details/Filters/Rules/DebPackage/AddEditDebPackageRuleModal.js +2 -2
  413. data/webpack/scenes/ContentViews/Details/Filters/Rules/Package/AddEditPackageRuleModal.js +4 -4
  414. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVContainerImageFilterContent.test.js +18 -12
  415. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVRpmFilterContent.test.js +7 -11
  416. data/webpack/scenes/ContentViews/Details/Filters/__tests__/ContentViewPackageGroupFilter.test.js +81 -70
  417. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewErrataByDateDetails.fixtures.json +1 -0
  418. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilterDetails.test.js +4 -2
  419. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.test.js +52 -38
  420. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvErrataDateFilterContent.test.js +9 -4
  421. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvErrataIDFilter.test.js +18 -12
  422. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvErratumFilterDetails.fixtures.json +1 -0
  423. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvFilterDetailModuleAffectedRepos.fixtures.json +1 -0
  424. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvFilterDetailWithAffectedRepos.fixtures.json +1 -0
  425. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvFilterFixutre.fixture.json +2 -1
  426. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvModuleStreamFilter.test.js +77 -67
  427. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvModuleStreamFilterDetails.fixtures.json +1 -0
  428. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvPackageFilterDetail.fixtures.json +1 -0
  429. data/webpack/scenes/ContentViews/Details/Histories/ContentViewHistories.js +2 -2
  430. data/webpack/scenes/ContentViews/Details/Histories/__tests__/contentViewHistory.test.js +4 -2
  431. data/webpack/scenes/ContentViews/Details/Promote/ContentViewVersionPromote.js +1 -1
  432. data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +7 -5
  433. data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewAddRemove.test.js +6 -3
  434. data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewRepoAdd.fixture.json +1 -0
  435. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/ActionSummary.js +3 -2
  436. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/BulkDeleteModal.js +3 -1
  437. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/Steps/ConfirmBulkDelete.js +2 -2
  438. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/Steps/ReassignActivationKeys.js +3 -1
  439. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/Steps/ReassignHosts.js +3 -1
  440. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/Steps/ReviewEnvironments.js +4 -4
  441. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompare.scss +11 -11
  442. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompareHeader.js +15 -5
  443. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersionEnvironments.js +1 -1
  444. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersions.js +13 -3
  445. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveCVVersionWizard.js +3 -1
  446. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVEnvironmentSelectionForm.js +17 -13
  447. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVReassignActivationKeysForm.js +12 -7
  448. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVReassignHostsForm.js +64 -7
  449. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVVersionRemoveReview.js +52 -21
  450. data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvVersionRemove.test.js +30 -16
  451. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetails.scss +7 -7
  452. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailsHeader.js +5 -3
  453. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailsTable.js +4 -2
  454. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetails.test.js +6 -3
  455. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetailsEmpty.test.js +2 -1
  456. data/webpack/scenes/ContentViews/Details/Versions/__tests__/contentViewVersions.test.js +6 -6
  457. data/webpack/scenes/ContentViews/Details/__tests__/contentViewDetail.test.js +35 -4
  458. data/webpack/scenes/ContentViews/Details/__tests__/contentViewDetails.fixtures.json +1 -0
  459. data/webpack/scenes/ContentViews/Details/__tests__/contentViewRollingDetail.test.js +197 -0
  460. data/webpack/scenes/ContentViews/Details/__tests__/contentViewRollingDetails.fixtures.json +82 -0
  461. data/webpack/scenes/ContentViews/Publish/CVPublishFinish.js +3 -7
  462. data/webpack/scenes/ContentViews/Publish/CVPublishForm.js +2 -2
  463. data/webpack/scenes/ContentViews/Publish/CVPublishReview.js +6 -5
  464. data/webpack/scenes/ContentViews/Publish/PublishContentViewWizard.js +3 -1
  465. data/webpack/scenes/ContentViews/Publish/__tests__/publishContentView.test.js +15 -7
  466. data/webpack/scenes/ContentViews/Publish/cvPublishForm.scss +4 -4
  467. data/webpack/scenes/ContentViews/Table/ContentViewVersionCell.js +6 -4
  468. data/webpack/scenes/ContentViews/Table/ContentViewsTable.js +14 -3
  469. data/webpack/scenes/ContentViews/Table/tableDataGenerator.js +3 -0
  470. data/webpack/scenes/ContentViews/__tests__/basicContentViews.fixtures.js +1 -0
  471. data/webpack/scenes/ContentViews/__tests__/contentViewList.fixtures.json +89 -2
  472. data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +85 -14
  473. data/webpack/scenes/ContentViews/__tests__/mockDetails.fixtures.json +2 -1
  474. data/webpack/scenes/ContentViews/components/ContentViewIcon.js +20 -6
  475. data/webpack/scenes/ContentViews/components/ContentViewSelect/ContentViewSelect.js +4 -1
  476. data/webpack/scenes/ContentViews/components/ContentViewSelect/ContentViewSelectOption.js +11 -2
  477. data/webpack/scenes/ContentViews/components/ContentViewsCounter.js +27 -7
  478. data/webpack/scenes/ContentViews/components/EnvironmentLabels.js +2 -2
  479. data/webpack/scenes/ContentViews/components/EnvironmentPaths/EnvironmentPaths.js +6 -2
  480. data/webpack/scenes/ContentViews/components/EnvironmentPaths/EnvironmentPaths.scss +4 -1
  481. data/webpack/scenes/ContentViews/components/FiltersAppliedIcon.js +4 -2
  482. data/webpack/scenes/ContentViews/components/NeedsPublishIcon.js +7 -6
  483. data/webpack/scenes/ContentViews/components/NeedsPublishIcon.scss +2 -2
  484. data/webpack/scenes/ContentViews/components/contentViewIcon.scss +16 -3
  485. data/webpack/scenes/ContentViews/expansions/DetailsExpansion.js +6 -1
  486. data/webpack/scenes/ContentViews/expansions/RelatedCompositeContentViewsModal.js +3 -3
  487. data/webpack/scenes/ContentViews/expansions/__tests__/contentViewComponentsModal.test.js +2 -1
  488. data/webpack/scenes/Hosts/ChangeContentSource/components/ContentSourceForm.js +5 -3
  489. data/webpack/scenes/Hosts/ChangeContentSource/components/ContentSourceTemplate.js +3 -2
  490. data/webpack/scenes/Hosts/ChangeContentSource/components/FormField.js +1 -1
  491. data/webpack/scenes/Hosts/ChangeContentSource/components/HostsModal.js +1 -1
  492. data/webpack/scenes/RedHatRepositories/components/EnabledRepository/EnabledRepositoryContent.js +1 -1
  493. data/webpack/scenes/RedHatRepositories/components/EnabledRepository/__tests__/__snapshots__/EnabledRepositoryContent.test.js.snap +1 -1
  494. data/webpack/scenes/RedHatRepositories/index.scss +1 -1
  495. data/webpack/scenes/SmartProxy/ExpandableCvDetails.js +27 -7
  496. data/webpack/scenes/SmartProxy/ExpandedSmartProxyRepositories.js +51 -2
  497. data/webpack/scenes/SmartProxy/SmartProxyExpandableTable.js +2 -2
  498. data/webpack/scenes/SmartProxy/__tests__/SmartProxyContentTest.js +14 -9
  499. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/CdnConfigurationForm.scss +1 -1
  500. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/CustomCdnTypeForm.js +2 -2
  501. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/NetworkSyncForm.js +6 -6
  502. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/__tests__/CdnTypeForm.test.js +2 -1
  503. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/__tests__/CustomCdnTypeForm.test.js +2 -1
  504. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/__tests__/ExportSyncForm.test.js +2 -1
  505. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/__tests__/NetworkSyncForm.test.js +2 -1
  506. metadata +72 -53
  507. data/app/models/katello/yum_metadata_file.rb +0 -22
  508. data/app/services/katello/pulp3/yum_metadata_file.rb +0 -20
  509. data/db/migrate/20250714190050_add_missing_rpms_evr_index.rb +0 -14
@@ -6,14 +6,16 @@ import {
6
6
  CardHeader,
7
7
  CardTitle,
8
8
  CardBody,
9
- Dropdown,
10
9
  ExpandableSection,
11
- KebabToggle,
12
10
  Flex,
13
11
  FlexItem,
14
12
  GridItem,
15
- DropdownItem,
16
13
  } from '@patternfly/react-core';
14
+ import {
15
+ Dropdown,
16
+ KebabToggle,
17
+ DropdownItem,
18
+ } from '@patternfly/react-core/deprecated';
17
19
  import { PlusCircleIcon } from '@patternfly/react-icons';
18
20
  import { translate as __ } from 'foremanReact/common/I18n';
19
21
  import { propsToCamelCase } from 'foremanReact/common/helpers';
@@ -1,15 +1,15 @@
1
1
  .host-collection-card-body {
2
- .pf-l-bullseye {
2
+ .pf-v5-l-bullseye {
3
3
  position: relative;
4
4
  top: -20px;
5
5
  }
6
- .pf-c-empty-state__icon {
6
+ .pf-v5-c-empty-state__icon {
7
7
  font-size: 2em;
8
8
  }
9
9
  .pf-m-lg {
10
10
  margin: -20px;
11
11
  }
12
- .pf-c-empty-state__body {
12
+ .pf-v5-c-empty-state__body {
13
13
  font-size: smaller;
14
14
  margin-top: 1.4em;
15
15
  margin-bottom: 1em;
@@ -192,7 +192,7 @@ export const HostCollectionsModal = ({
192
192
  <Tr key={id} ouiaId={`row-${id}`}>
193
193
  <Td
194
194
  select={{
195
- disable: isDisabled,
195
+ isDisabled,
196
196
  isSelected: isSelected(id),
197
197
  onSelect: (_event, selected) => selectOne(selected, id, hostCollection),
198
198
  rowIndex,
@@ -1,9 +1,9 @@
1
1
  import React from 'react';
2
- import { renderWithRedux, patientlyWaitFor, fireEvent } from 'react-testing-lib-wrapper';
2
+ import { renderWithRedux, patientlyWaitFor, fireEvent, act, waitFor } from 'react-testing-lib-wrapper';
3
3
  import mockAvailableHostCollections from './availableHostCollections.fixtures.json';
4
4
  import mockRemovableHostCollections from './removableHostCollections.fixtures.json';
5
5
  import { REMOVABLE_HOST_COLLECTIONS_KEY } from '../HostCollectionsConstants';
6
- import { assertNockRequest, mockAutocomplete, nockInstance } from '../../../../../../test-utils/nockWrapper';
6
+ import nock, { assertNockRequest, mockAutocomplete, nockInstance } from '../../../../../../test-utils/nockWrapper';
7
7
  import katelloApi, { foremanApi } from '../../../../../../services/api';
8
8
  import { HostCollectionsAddModal, HostCollectionsRemoveModal } from '../HostCollectionsModal';
9
9
 
@@ -44,6 +44,10 @@ describe('HostCollectionsAddModal', () => {
44
44
  const { results } = mockAvailableHostCollections;
45
45
  [firstHostCollection] = results;
46
46
  });
47
+ afterEach(() => {
48
+ nock.cleanAll(); // Removes all interceptors
49
+ nock.restore(); // Restores HTTP to normal behavior
50
+ });
47
51
 
48
52
  test('Calls API with available_for=host on page load', async (done) => {
49
53
  const autocompleteScope = mockAutocomplete(nockInstance, autocompleteUrl);
@@ -65,7 +69,8 @@ describe('HostCollectionsAddModal', () => {
65
69
  await patientlyWaitFor(() =>
66
70
  expect(getAllByText(firstHostCollection.name)[0]).toBeInTheDocument());
67
71
  assertNockRequest(autocompleteScope);
68
- assertNockRequest(scope, done); // Pass jest callback to confirm test is done
72
+ assertNockRequest(scope);
73
+ act(done);
69
74
  });
70
75
 
71
76
  test('Calls alterHostCollections with combined list of existing and new host collections', async (done) => {
@@ -107,6 +112,7 @@ describe('HostCollectionsAddModal', () => {
107
112
  assertNockRequest(autocompleteScope);
108
113
  assertNockRequest(scope);
109
114
  assertNockRequest(alterScope);
115
+ await waitFor(() => expect(hostDetailsScope.isDone()).toBe(true));
110
116
  assertNockRequest(hostDetailsScope, done);
111
117
  });
112
118
  test('Host collections whose host limit is exceeded are disabled', async (done) => {
@@ -136,7 +142,8 @@ describe('HostCollectionsAddModal', () => {
136
142
  expect(disabledCheckboxes).toHaveLength(maxedOutHostCollections.length);
137
143
 
138
144
  assertNockRequest(autocompleteScope);
139
- assertNockRequest(scope, done); // Pass jest callback to confirm test is done
145
+ assertNockRequest(scope);
146
+ act(done); // Pass jest callback to confirm test is done
140
147
  });
141
148
  });
142
149
 
@@ -146,6 +153,10 @@ describe('HostCollectionsRemoveModal', () => {
146
153
  [firstHostCollection] = results;
147
154
  });
148
155
 
156
+ afterEach(() => {
157
+ nock.cleanAll(); // Removes all interceptors
158
+ nock.restore(); // Restores HTTP to normal behavior
159
+ });
149
160
  test('Calls API without available_for=host on page load', async (done) => {
150
161
  const autocompleteScope = mockAutocomplete(nockInstance, autocompleteUrl);
151
162
 
@@ -168,7 +179,8 @@ describe('HostCollectionsRemoveModal', () => {
168
179
  expect(getAllByText(firstHostCollection.name)[0]).toBeInTheDocument());
169
180
  // Assert request was made and completed, see helper function
170
181
  assertNockRequest(autocompleteScope);
171
- assertNockRequest(scope, done); // Pass jest callback to confirm test is done
182
+ assertNockRequest(scope);
183
+ act(done); // Pass jest callback to confirm test is done
172
184
  });
173
185
 
174
186
  test('Calls alterHostCollections with host collections being removed filtered out from the list', async (done) => {
@@ -204,16 +216,19 @@ describe('HostCollectionsRemoveModal', () => {
204
216
  await patientlyWaitFor(() =>
205
217
  expect(getAllByText(firstRemovableHostCollection.name)[0]).toBeInTheDocument());
206
218
  const checkbox = getByRole('checkbox', { name: 'Select row 0' });
207
- fireEvent.click(checkbox);
219
+ await act(async () => {
220
+ fireEvent.click(checkbox);
221
+ });
208
222
  expect(getAllByText('1 selected')).toHaveLength(1);
209
223
  const removeButton = getByRole('button', { name: 'Remove' });
210
224
  expect(removeButton).toHaveAttribute('aria-disabled', 'false');
211
- fireEvent.click(removeButton);
212
-
225
+ await act(async () => {
226
+ fireEvent.click(removeButton);
227
+ });
213
228
  assertNockRequest(autocompleteScope);
214
229
  assertNockRequest(scope);
215
230
  assertNockRequest(alterScope);
216
- assertNockRequest(hostDetailsScope, done);
231
+ assertNockRequest(hostDetailsScope);
232
+ act(done);
217
233
  });
218
234
  });
219
-
@@ -20,6 +20,7 @@ import {
20
20
  Tooltip,
21
21
  Skeleton,
22
22
  CardExpandableContent,
23
+ Icon,
23
24
  } from '@patternfly/react-core';
24
25
  import { OutlinedQuestionCircleIcon } from '@patternfly/react-icons';
25
26
  import { translate as __ } from 'foremanReact/common/I18n';
@@ -101,14 +102,16 @@ const SystemPurposeCard = ({ hostDetails, akDetails }) => {
101
102
  enableFlip
102
103
  isContentLeftAligned
103
104
  >
104
- <OutlinedQuestionCircleIcon style={{ marginTop: '7px' }} color="gray" />
105
+ <Icon color="gray">
106
+ <OutlinedQuestionCircleIcon style={{ marginTop: '7px' }} />
107
+ </Icon>
105
108
  </Tooltip>
106
109
  </FlexItem>
107
110
  </Flex>
108
111
  </FlexItem>
109
112
  {showEditButton && (
110
113
  <FlexItem>
111
- <Button variant="link" isSmall ouiaId="syspurpose-edit-button" onClick={() => setEditing(val => !val)}>{__('Edit')}</Button>
114
+ <Button variant="link" size="sm" ouiaId="syspurpose-edit-button" onClick={() => setEditing(val => !val)}>{__('Edit')}</Button>
112
115
  </FlexItem>)
113
116
  }
114
117
  </Flex>
@@ -1,12 +1,12 @@
1
1
  .system-purpose-card-body {
2
2
  font-size: small;
3
- .pf-c-label {
3
+ .pf-v5-c-label {
4
4
  font-size: smaller;
5
5
  }
6
6
  }
7
7
 
8
8
  #system-purpose-card {
9
- .pf-c-card__header-toggle {
9
+ .pf-v5-c-card__header-toggle {
10
10
  margin-top: -2px;
11
11
  }
12
12
  }
@@ -11,6 +11,7 @@ import {
11
11
  FormSelect,
12
12
  FormSelectOption,
13
13
  } from '@patternfly/react-core';
14
+
14
15
  import { FormattedMessage } from 'react-intl';
15
16
  import { translate as __ } from 'foremanReact/common/I18n';
16
17
  import {
@@ -183,7 +184,7 @@ const SystemPurposeEditModal = ({
183
184
  name="role"
184
185
  ouiaId="role-select"
185
186
  value={selectedRole}
186
- onChange={setSelectedRole}
187
+ onChange={(_event, val) => setSelectedRole(val)}
187
188
  >
188
189
  {roleOptions.map(option => (
189
190
  <FormSelectOption
@@ -200,7 +201,7 @@ const SystemPurposeEditModal = ({
200
201
  name="serviceLevel"
201
202
  ouiaId="service-level-select"
202
203
  value={selectedServiceLevel}
203
- onChange={setSelectedServiceLevel}
204
+ onChange={(_event, val) => setSelectedServiceLevel(val)}
204
205
  >
205
206
  {serviceLevelOptions.map(option => (
206
207
  <FormSelectOption
@@ -217,7 +218,7 @@ const SystemPurposeEditModal = ({
217
218
  name="usage"
218
219
  ouiaId="usage-select"
219
220
  value={selectedUsage}
220
- onChange={setSelectedUsage}
221
+ onChange={(_event, val) => setSelectedUsage(val)}
221
222
  >
222
223
  {usageOptions.map(option => (
223
224
  <FormSelectOption
@@ -234,7 +235,7 @@ const SystemPurposeEditModal = ({
234
235
  name="release_version"
235
236
  ouiaId="release-version-select"
236
237
  value={selectedReleaseVersion}
237
- onChange={setSelectedReleaseVersion}
238
+ onChange={(_event, val) => setSelectedReleaseVersion(val)}
238
239
  >
239
240
  {releaseVersionOptions.map(option => (
240
241
  <FormSelectOption
@@ -63,7 +63,8 @@ test('shows system purpose details for a host', async (done) => {
63
63
  expect(getByText('8')).toBeInTheDocument();
64
64
 
65
65
  assertNockRequest(orgScope);
66
- assertNockRequest(availableReleaseVersionsScope, done);
66
+ assertNockRequest(availableReleaseVersionsScope);
67
+ done();
67
68
  });
68
69
 
69
70
  test('shows system purpose details for an activation key', () => {
@@ -93,7 +94,8 @@ test('shows edit button for a user with edit_hosts permission', async (done) =>
93
94
  expect(queryByText('Edit')).toBeInTheDocument();
94
95
 
95
96
  assertNockRequest(orgScope);
96
- assertNockRequest(availableReleaseVersionsScope, done);
97
+ assertNockRequest(availableReleaseVersionsScope);
98
+ done();
97
99
  });
98
100
 
99
101
  test('does not show edit button for a user without edit_hosts permission', (done) => {
@@ -118,6 +120,7 @@ test('does not show edit button for a user without edit_hosts permission', (done
118
120
  expect(queryByText('Edit')).not.toBeInTheDocument();
119
121
 
120
122
  assertNockRequest(orgScope);
121
- assertNockRequest(availableReleaseVersionsScope, done);
123
+ assertNockRequest(availableReleaseVersionsScope);
124
+ done();
122
125
  act(done);
123
126
  });
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { propsToCamelCase } from 'foremanReact/common/helpers';
3
- import { renderWithRedux, patientlyWaitFor, fireEvent } from 'react-testing-lib-wrapper';
3
+ import { renderWithRedux, patientlyWaitFor, fireEvent, act } from 'react-testing-lib-wrapper';
4
4
  import HOST_DETAILS from '../../../HostDetailsConstants';
5
5
  import SystemPurposeEditModal from '../SystemPurposeEditModal';
6
6
  import { assertNockRequest, nockInstance } from '../../../../../../test-utils/nockWrapper';
@@ -87,7 +87,8 @@ describe('SystemPurposeEditModal', () => {
87
87
  expect(getByText('8')).toBeInTheDocument();
88
88
 
89
89
  assertNockRequest(orgScope);
90
- assertNockRequest(availableReleaseVersionsScope, done);
90
+ assertNockRequest(availableReleaseVersionsScope);
91
+ done();
91
92
  });
92
93
 
93
94
  test('Shows blank options as (unset)', () => {
@@ -159,8 +160,9 @@ describe('SystemPurposeEditModal', () => {
159
160
 
160
161
  // Save button should now be enabled
161
162
  expect(saveButton).toHaveAttribute('aria-disabled', 'false');
162
- fireEvent.click(saveButton);
163
-
163
+ await act(async () => {
164
+ fireEvent.click(saveButton);
165
+ });
164
166
  await patientlyWaitFor(() => {
165
167
  expect(baseAttributes.closeModal).toHaveBeenCalled();
166
168
  });
@@ -168,7 +170,8 @@ describe('SystemPurposeEditModal', () => {
168
170
  [orgScope, availableReleaseVersionsScope, hostEditScope].forEach((scope) => {
169
171
  assertNockRequest(scope);
170
172
  });
171
- assertNockRequest(hostDetailsScope, done);
173
+ assertNockRequest(hostDetailsScope);
174
+ done();
172
175
  });
173
176
  test('Calls API and changes syspurpose values for activation key', async (done) => {
174
177
  const orgScope = nockInstance
@@ -212,8 +215,9 @@ describe('SystemPurposeEditModal', () => {
212
215
 
213
216
  // Save button should now be enabled
214
217
  expect(saveButton).toHaveAttribute('aria-disabled', 'false');
215
- fireEvent.click(saveButton);
216
-
218
+ await act(async () => {
219
+ fireEvent.click(saveButton);
220
+ });
217
221
  await patientlyWaitFor(() => {
218
222
  expect(baseAttributes.closeModal).toHaveBeenCalled();
219
223
  });
@@ -221,7 +225,8 @@ describe('SystemPurposeEditModal', () => {
221
225
  [orgScope, availableReleaseVersionsScope, akEditScope].forEach((scope) => {
222
226
  assertNockRequest(scope);
223
227
  });
224
- assertNockRequest(akDetailsScope, done);
228
+ assertNockRequest(akDetailsScope);
229
+ done();
225
230
  });
226
231
  test('Retrieves available release versions for host', async (done) => {
227
232
  const orgScope = nockInstance
@@ -241,8 +246,9 @@ describe('SystemPurposeEditModal', () => {
241
246
  />, renderOptions());
242
247
 
243
248
  const releaseVersionDropdown = getByLabelText('Release version');
244
- fireEvent.click(releaseVersionDropdown);
245
-
249
+ await act(async () => {
250
+ fireEvent.click(releaseVersionDropdown);
251
+ });
246
252
  await patientlyWaitFor(() => {
247
253
  expect(getByText('8')).toBeInTheDocument();
248
254
  expect(getByText('9')).toBeInTheDocument();
@@ -271,8 +277,9 @@ describe('SystemPurposeEditModal', () => {
271
277
  />, renderOptions(ACTIVATION_KEY));
272
278
 
273
279
  const releaseVersionDropdown = getByLabelText('Release version');
274
- fireEvent.click(releaseVersionDropdown);
275
-
280
+ await act(async () => {
281
+ fireEvent.click(releaseVersionDropdown);
282
+ });
276
283
  await patientlyWaitFor(() => {
277
284
  expect(getByText('8')).toBeInTheDocument();
278
285
  expect(getByText('9')).toBeInTheDocument();
@@ -144,7 +144,7 @@ describe('With errata', () => {
144
144
  const { getByText }
145
145
  = renderWithRedux(<ErrataOverviewCard hostDetails={hostDetails} />, renderOptions);
146
146
  // find the Applicable toggle button, then find the svg next to it
147
- const applicableToggle = getByText('Applicable').parentElement.parentElement;
147
+ const applicableToggle = getByText('Applicable').parentElement;
148
148
  fireEvent.mouseEnter(applicableToggle);
149
149
  // expect the tooltip to be visible
150
150
  await patientlyWaitFor(() => expect(getByText('Applicable errata apply to at least one package installed on the host.')).toBeInTheDocument());
@@ -39,7 +39,7 @@ HostDisks.defaultProps = {
39
39
  blockDevices: '',
40
40
  };
41
41
 
42
- const HwPropertiesCard = ({ isExpandedGlobal, hostDetails }) => {
42
+ const HwPropertiesCard = ({ hostDetails }) => {
43
43
  if (hostIsNotRegistered({ hostDetails })) return null;
44
44
  const { facts } = hostDetails || {};
45
45
  const model = facts?.['virt::host_type'];
@@ -53,7 +53,6 @@ const HwPropertiesCard = ({ isExpandedGlobal, hostDetails }) => {
53
53
  <CardTemplate
54
54
  header={__('HW properties')}
55
55
  expandable
56
- isExpandedGlobal={isExpandedGlobal}
57
56
  masonryLayout
58
57
  >
59
58
  <DescriptionList isHorizontal>
@@ -90,7 +89,6 @@ const HwPropertiesCard = ({ isExpandedGlobal, hostDetails }) => {
90
89
  };
91
90
 
92
91
  HwPropertiesCard.propTypes = {
93
- isExpandedGlobal: PropTypes.bool,
94
92
  hostDetails: PropTypes.shape({
95
93
  facts: PropTypes.shape({
96
94
  model: PropTypes.string,
@@ -104,7 +102,6 @@ HwPropertiesCard.propTypes = {
104
102
  };
105
103
 
106
104
  HwPropertiesCard.defaultProps = {
107
- isExpandedGlobal: false,
108
105
  hostDetails: {},
109
106
  };
110
107
 
@@ -23,7 +23,7 @@ const actionUrl = hostname => createJob({
23
23
  inputs: {},
24
24
  });
25
25
 
26
- const ImageModeCard = ({ isExpandedGlobal, hostDetails }) => {
26
+ const ImageModeCard = ({ hostDetails }) => {
27
27
  const imageMode = hostDetails?.content_facet_attributes?.bootc_booted_image;
28
28
  if (!imageMode) return null;
29
29
  const getValueOrDash = value => (value || '—');
@@ -32,7 +32,6 @@ const ImageModeCard = ({ isExpandedGlobal, hostDetails }) => {
32
32
  header={cardHeader}
33
33
  expandable
34
34
  masonryLayout
35
- isExpandedGlobal={isExpandedGlobal}
36
35
  ouiaId="image-mode"
37
36
  >
38
37
  <a href={actionUrl(hostDetails.name)}>{__('Modify via remote execution')}</a>
@@ -64,7 +63,6 @@ const ImageModeCard = ({ isExpandedGlobal, hostDetails }) => {
64
63
  };
65
64
 
66
65
  ImageModeCard.propTypes = {
67
- isExpandedGlobal: PropTypes.bool,
68
66
  hostDetails: PropTypes.shape({
69
67
  name: PropTypes.string,
70
68
  content_facet_attributes: PropTypes.shape({
@@ -81,7 +79,6 @@ ImageModeCard.propTypes = {
81
79
  };
82
80
 
83
81
  ImageModeCard.defaultProps = {
84
- isExpandedGlobal: false,
85
82
  hostDetails: {},
86
83
  };
87
84
 
@@ -4,7 +4,7 @@ import { translate as __ } from 'foremanReact/common/I18n';
4
4
  import { List, ListItem } from '@patternfly/react-core';
5
5
  import CardTemplate from 'foremanReact/components/HostDetails/Templates/CardItem/CardTemplate';
6
6
 
7
- const InstalledProductsCard = ({ isExpandedGlobal, hostDetails }) => {
7
+ const InstalledProductsCard = ({ hostDetails }) => {
8
8
  const installedProducts = hostDetails?.subscription_facet_attributes?.installed_products;
9
9
  if (!installedProducts?.length) return null;
10
10
  return (
@@ -12,7 +12,6 @@ const InstalledProductsCard = ({ isExpandedGlobal, hostDetails }) => {
12
12
  header={__('Installed products')}
13
13
  expandable
14
14
  masonryLayout
15
- isExpandedGlobal={isExpandedGlobal}
16
15
  >
17
16
  <List isPlain>
18
17
  {installedProducts.map(product => (
@@ -26,7 +25,6 @@ const InstalledProductsCard = ({ isExpandedGlobal, hostDetails }) => {
26
25
  };
27
26
 
28
27
  InstalledProductsCard.propTypes = {
29
- isExpandedGlobal: PropTypes.bool,
30
28
  hostDetails: PropTypes.shape({
31
29
  subscription_facet_attributes: PropTypes.shape({
32
30
  installed_products: PropTypes.arrayOf(PropTypes.shape({
@@ -38,7 +36,6 @@ InstalledProductsCard.propTypes = {
38
36
  };
39
37
 
40
38
  InstalledProductsCard.defaultProps = {
41
- isExpandedGlobal: false,
42
39
  hostDetails: {},
43
40
  };
44
41
 
@@ -0,0 +1,63 @@
1
+ import React from 'react';
2
+ import { renderWithRedux } from 'react-testing-lib-wrapper';
3
+ import { CardExpansionContext } from 'foremanReact/components/HostDetails/CardExpansionContext';
4
+ import HwPropertiesCard from '../HwPropertiesCard';
5
+
6
+ const hostDetails = {
7
+ subscription_facet_attributes: {
8
+ uuid: '1234567',
9
+ facts: {
10
+ 'memory::memtotal': '24346164',
11
+ 'cpu::core(s)_per_socket': '1',
12
+ 'cpu::cpu(s)': '6',
13
+ 'cpu::cpu_socket(s)': '6',
14
+ 'virt::host_type': 'redhat, kvm',
15
+ },
16
+ },
17
+ };
18
+ const customRender = (ui, { providerProps, ...renderOptions }) => renderWithRedux(
19
+ <CardExpansionContext.Provider value={providerProps}>{ui}</CardExpansionContext.Provider>,
20
+ renderOptions,
21
+ );
22
+
23
+ describe('HwPropertiesCard', () => {
24
+ test('shows details when expanded', () => {
25
+ const providerProps = {
26
+ cardExpandStates: { 'HW properties': true },
27
+ dispatch: () => {},
28
+ registerCard: () => {},
29
+ };
30
+ const { getByText }
31
+ = customRender(<HwPropertiesCard hostDetails={hostDetails} />, { providerProps });
32
+
33
+ expect(getByText('HW properties')).toBeInTheDocument();
34
+ expect(getByText('Model')).toBeInTheDocument();
35
+ });
36
+
37
+ test('does not show card when host is not registered', () => {
38
+ const providerProps = {
39
+ cardExpandStates: { 'HW properties': true },
40
+ dispatch: () => {},
41
+ registerCard: () => {},
42
+ };
43
+ const { queryByText }
44
+ = customRender(<HwPropertiesCard hostDetails={{ name: 'not-registered' }} />, { providerProps });
45
+
46
+ const element = queryByText((_, e) => e.textContent === 'HW properties');
47
+ expect(element).not.toBeInTheDocument();
48
+ });
49
+
50
+ test('does not show details when not expanded', () => {
51
+ const providerProps = {
52
+ cardExpandStates: { 'HW properties': false },
53
+ dispatch: () => {},
54
+ registerCard: () => {},
55
+ };
56
+ const { queryByText, getByText }
57
+ = customRender(<HwPropertiesCard hostDetails={hostDetails} />, { providerProps });
58
+
59
+ expect(getByText('HW properties')).toBeInTheDocument();
60
+ const element = queryByText((_, e) => e.textContent === 'Model');
61
+ expect(element).not.toBeInTheDocument();
62
+ });
63
+ });
@@ -0,0 +1,73 @@
1
+ import React from 'react';
2
+ import { renderWithRedux } from 'react-testing-lib-wrapper';
3
+ import { CardExpansionContext } from 'foremanReact/components/HostDetails/CardExpansionContext';
4
+ import ImageModeCard from '../ImageModeCard';
5
+
6
+ const hostDetails = {
7
+ name: 'test-host',
8
+ content_facet_attributes: {
9
+ bootc_booted_image: 'quay.io/centos-bootc/centos-bootc:42',
10
+ bootc_booted_digest: 'sha256:18ec8a272258b22bf9707b1963d72b8987110c8965c3d08b496fac0b1fb22159',
11
+ bootc_available_image: '',
12
+ bootc_available_digest: '',
13
+ bootc_staged_image: 'quay.io/fedora/fedora-bootc:40',
14
+ bootc_staged_digest: 'sha256:b2b888aa0a05f3278e4957cb658fd088e3579e214140dc88ca138f47144d6a05',
15
+ bootc_rollback_image: 'quay.io/centos-bootc/centos-bootc:stream9',
16
+ bootc_rollback_digest: 'sha256:893b636bbc5725378ce602f222f26c29f51334f93243ae8657d31391634eb024',
17
+ },
18
+ };
19
+ const customRender = (ui, { providerProps, ...renderOptions }) => renderWithRedux(
20
+ <CardExpansionContext.Provider value={providerProps}>{ui}</CardExpansionContext.Provider>,
21
+ renderOptions,
22
+ );
23
+
24
+ describe('image mode card', () => {
25
+ test('shows image mode details when expanded', () => {
26
+ const providerProps = {
27
+ cardExpandStates: { 'image-mode': true },
28
+ dispatch: () => {},
29
+ registerCard: () => {},
30
+ };
31
+ const { getByText }
32
+ = customRender(<ImageModeCard hostDetails={hostDetails} />, { providerProps });
33
+
34
+ expect(getByText('Image mode details')).toBeInTheDocument();
35
+
36
+ const rexLink = getByText('Modify via remote execution');
37
+ expect(rexLink).toBeInTheDocument();
38
+ expect(rexLink).toHaveAttribute(
39
+ 'href',
40
+ '/job_invocations/new?feature=katello_bootc_action&search=name%20%5E%20(test-host)',
41
+ );
42
+
43
+ expect(getByText('Running image')).toBeInTheDocument();
44
+ expect(getByText('Running image digest')).toBeInTheDocument();
45
+ expect(getByText('Staged image')).toBeInTheDocument();
46
+ expect(getByText('Staged image digest')).toBeInTheDocument();
47
+ expect(getByText('Available image')).toBeInTheDocument();
48
+ expect(getByText('Available image digest')).toBeInTheDocument();
49
+ expect(getByText('Rollback image')).toBeInTheDocument();
50
+ expect(getByText('Rollback image digest')).toBeInTheDocument();
51
+
52
+ expect(getByText('quay.io/centos-bootc/centos-bootc:42')).toBeInTheDocument();
53
+ expect(getByText('sha256:18ec8a272258b22bf9707b1963d72b8987110c8965c3d08b496fac0b1fb22159')).toBeInTheDocument();
54
+ expect(getByText('quay.io/fedora/fedora-bootc:40')).toBeInTheDocument();
55
+ expect(getByText('sha256:b2b888aa0a05f3278e4957cb658fd088e3579e214140dc88ca138f47144d6a05')).toBeInTheDocument();
56
+ expect(getByText('quay.io/centos-bootc/centos-bootc:stream9')).toBeInTheDocument();
57
+ expect(getByText('sha256:893b636bbc5725378ce602f222f26c29f51334f93243ae8657d31391634eb024')).toBeInTheDocument();
58
+ });
59
+
60
+ test('does not show details when not expanded', () => {
61
+ const providerProps = {
62
+ cardExpandStates: { 'image-mode': false },
63
+ dispatch: () => {},
64
+ registerCard: () => {},
65
+ };
66
+ const { queryByText, getByText }
67
+ = customRender(<ImageModeCard hostDetails={hostDetails} />, { providerProps });
68
+
69
+ expect(getByText('Image mode details')).toBeInTheDocument();
70
+ const element = queryByText((_, e) => e.textContent === 'Running image');
71
+ expect(element).not.toBeInTheDocument();
72
+ });
73
+ });
@@ -0,0 +1,45 @@
1
+ import React from 'react';
2
+ import { renderWithRedux } from 'react-testing-lib-wrapper';
3
+ import { CardExpansionContext } from 'foremanReact/components/HostDetails/CardExpansionContext';
4
+ import InstalledProductsCard from '../InstalledProductsCard';
5
+
6
+ const hostDetails = {
7
+ subscription_facet_attributes: {
8
+ installed_products: [
9
+ { productId: '479', productName: 'Red Hat Enterprise Linux for x86_64' },
10
+ ],
11
+ },
12
+ };
13
+ const customRender = (ui, { providerProps, ...renderOptions }) => renderWithRedux(
14
+ <CardExpansionContext.Provider value={providerProps}>{ui}</CardExpansionContext.Provider>,
15
+ renderOptions,
16
+ );
17
+
18
+ describe('Installed Products Card', () => {
19
+ test('shows details when expanded', () => {
20
+ const providerProps = {
21
+ cardExpandStates: { 'Installed products': true },
22
+ dispatch: () => {},
23
+ registerCard: () => {},
24
+ };
25
+ const { getByText }
26
+ = customRender(<InstalledProductsCard hostDetails={hostDetails} />, { providerProps });
27
+
28
+ expect(getByText('Installed products')).toBeInTheDocument();
29
+ expect(getByText('Red Hat Enterprise Linux for x86_64')).toBeInTheDocument();
30
+ });
31
+
32
+ test('does not show details when not expanded', () => {
33
+ const providerProps = {
34
+ cardExpandStates: { 'Installed products': false },
35
+ dispatch: () => {},
36
+ registerCard: () => {},
37
+ };
38
+ const { queryByText, getByText }
39
+ = customRender(<InstalledProductsCard hostDetails={hostDetails} />, { providerProps });
40
+
41
+ expect(getByText('Installed products')).toBeInTheDocument();
42
+ const element = queryByText((_, e) => e.textContent === 'Red Hat Enterprise Linux for x86_64');
43
+ expect(element).not.toBeInTheDocument();
44
+ });
45
+ });
@@ -1,5 +1,15 @@
1
1
  import React, { useState } from 'react';
2
- import { Modal, Button, Dropdown, DropdownItem, DropdownToggle, DropdownDirection, DropdownToggleAction } from '@patternfly/react-core';
2
+ import {
3
+ Modal,
4
+ Button,
5
+ } from '@patternfly/react-core';
6
+ import {
7
+ Dropdown,
8
+ DropdownItem,
9
+ DropdownToggle,
10
+ DropdownDirection,
11
+ DropdownToggleAction,
12
+ } from '@patternfly/react-core/deprecated';
3
13
  import { CaretDownIcon, CaretUpIcon } from '@patternfly/react-icons';
4
14
  import { useSelector } from 'react-redux';
5
15
  import { FormattedMessage } from 'react-intl';
@@ -213,7 +223,7 @@ const DebInstallModal = ({
213
223
  <Tr key={id} ouiaId={`row-${id}`}>
214
224
  <Td
215
225
  select={{
216
- disable: false,
226
+ isDisabled: false,
217
227
  isSelected: isSelected(id),
218
228
  onSelect: (_event, selected) => selectOne(selected, id, pkg),
219
229
  rowIndex,