katello 5.0.0.rc2 → 5.0.1

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.
Files changed (297) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/katello/locale/bn/katello.js +63 -15
  3. data/app/assets/javascripts/katello/locale/bn_IN/katello.js +62 -14
  4. data/app/assets/javascripts/katello/locale/ca/katello.js +62 -14
  5. data/app/assets/javascripts/katello/locale/cs/katello.js +63 -15
  6. data/app/assets/javascripts/katello/locale/cs_CZ/katello.js +64 -16
  7. data/app/assets/javascripts/katello/locale/de/katello.js +66 -18
  8. data/app/assets/javascripts/katello/locale/de_AT/katello.js +62 -14
  9. data/app/assets/javascripts/katello/locale/de_DE/katello.js +63 -15
  10. data/app/assets/javascripts/katello/locale/el/katello.js +62 -14
  11. data/app/assets/javascripts/katello/locale/en/katello.js +63 -15
  12. data/app/assets/javascripts/katello/locale/en_GB/katello.js +62 -14
  13. data/app/assets/javascripts/katello/locale/en_US/katello.js +62 -14
  14. data/app/assets/javascripts/katello/locale/es/katello.js +66 -18
  15. data/app/assets/javascripts/katello/locale/et_EE/katello.js +62 -14
  16. data/app/assets/javascripts/katello/locale/fr/katello.js +300 -252
  17. data/app/assets/javascripts/katello/locale/gl/katello.js +62 -14
  18. data/app/assets/javascripts/katello/locale/gu/katello.js +62 -14
  19. data/app/assets/javascripts/katello/locale/he_IL/katello.js +62 -14
  20. data/app/assets/javascripts/katello/locale/hi/katello.js +62 -14
  21. data/app/assets/javascripts/katello/locale/id/katello.js +62 -14
  22. data/app/assets/javascripts/katello/locale/it/katello.js +64 -16
  23. data/app/assets/javascripts/katello/locale/ja/katello.js +378 -330
  24. data/app/assets/javascripts/katello/locale/ka/katello.js +67 -19
  25. data/app/assets/javascripts/katello/locale/kn/katello.js +62 -14
  26. data/app/assets/javascripts/katello/locale/ko/katello.js +297 -249
  27. data/app/assets/javascripts/katello/locale/ml_IN/katello.js +62 -14
  28. data/app/assets/javascripts/katello/locale/mr/katello.js +62 -14
  29. data/app/assets/javascripts/katello/locale/nl_NL/katello.js +62 -14
  30. data/app/assets/javascripts/katello/locale/or/katello.js +62 -14
  31. data/app/assets/javascripts/katello/locale/pa/katello.js +62 -14
  32. data/app/assets/javascripts/katello/locale/pl/katello.js +62 -14
  33. data/app/assets/javascripts/katello/locale/pl_PL/katello.js +62 -14
  34. data/app/assets/javascripts/katello/locale/pt/katello.js +62 -14
  35. data/app/assets/javascripts/katello/locale/pt_BR/katello.js +66 -18
  36. data/app/assets/javascripts/katello/locale/ro/katello.js +62 -14
  37. data/app/assets/javascripts/katello/locale/ro_RO/katello.js +62 -14
  38. data/app/assets/javascripts/katello/locale/ru/katello.js +64 -16
  39. data/app/assets/javascripts/katello/locale/sl/katello.js +62 -14
  40. data/app/assets/javascripts/katello/locale/sv_SE/katello.js +62 -14
  41. data/app/assets/javascripts/katello/locale/ta/katello.js +63 -15
  42. data/app/assets/javascripts/katello/locale/ta_IN/katello.js +62 -14
  43. data/app/assets/javascripts/katello/locale/te/katello.js +62 -14
  44. data/app/assets/javascripts/katello/locale/tr/katello.js +62 -14
  45. data/app/assets/javascripts/katello/locale/vi/katello.js +62 -14
  46. data/app/assets/javascripts/katello/locale/vi_VN/katello.js +62 -14
  47. data/app/assets/javascripts/katello/locale/zh/katello.js +62 -14
  48. data/app/assets/javascripts/katello/locale/zh_CN/katello.js +285 -237
  49. data/app/assets/javascripts/katello/locale/zh_TW/katello.js +64 -16
  50. data/app/controllers/katello/api/registry/registry_proxies_controller.rb +29 -26
  51. data/app/controllers/katello/api/v2/content_view_histories_controller.rb +1 -1
  52. data/app/controllers/katello/concerns/api/v2/hosts_controller_extensions.rb +10 -10
  53. data/app/controllers/katello/concerns/registration_commands_controller_extensions.rb +1 -1
  54. data/app/lib/katello/concerns/base_template_scope_extensions.rb +61 -2
  55. data/app/models/katello/concerns/smart_proxy_extensions.rb +1 -1
  56. data/app/views/katello/api/v2/activation_keys/base.json.rabl +18 -18
  57. data/app/views/katello/api/v2/content_facet/base.json.rabl +19 -19
  58. data/app/views/katello/api/v2/content_view_environments/show.json.rabl +10 -10
  59. data/app/views/katello/api/v2/content_view_versions/base.json.rabl +2 -2
  60. data/db/migrate/20220929204746_add_content_view_environment_content_facet.rb +5 -5
  61. data/db/migrate/20240730163043_add_content_view_environment_activation_key.rb +5 -5
  62. data/db/migrate/20260402151630_add_content_view_environment_to_hostgroup_content_facet.rb +4 -4
  63. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/views/activation-key-info.html +1 -1
  64. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/new/views/activation-key-new.html +1 -1
  65. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/bn.po +0 -12
  66. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/bn_IN.po +0 -12
  67. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ca.po +0 -12
  68. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/cs_CZ.po +0 -12
  69. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de.po +0 -12
  70. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de_AT.po +0 -12
  71. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de_DE.po +0 -12
  72. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/el.po +0 -12
  73. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/en_GB.po +0 -12
  74. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/en_US.po +0 -12
  75. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/es.po +0 -12
  76. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/et_EE.po +0 -12
  77. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/fr.po +23 -24
  78. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/gl.po +0 -12
  79. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/gu.po +0 -12
  80. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/he_IL.po +0 -12
  81. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/hi.po +0 -12
  82. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/id.po +0 -12
  83. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/it.po +0 -12
  84. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ja.po +20 -30
  85. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ka.po +0 -12
  86. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/kn.po +0 -12
  87. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ko.po +31 -39
  88. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ml_IN.po +0 -12
  89. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/mr.po +0 -12
  90. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/nl_NL.po +0 -12
  91. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/or.po +0 -12
  92. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pa.po +0 -12
  93. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pl.po +0 -12
  94. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pl_PL.po +0 -12
  95. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pt.po +0 -12
  96. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pt_BR.po +0 -12
  97. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ro.po +0 -12
  98. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ro_RO.po +0 -12
  99. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ru.po +0 -12
  100. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/sl.po +0 -12
  101. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/sv_SE.po +0 -12
  102. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ta.po +0 -12
  103. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ta_IN.po +0 -12
  104. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/te.po +0 -12
  105. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/tr.po +0 -12
  106. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/vi.po +0 -12
  107. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/vi_VN.po +0 -12
  108. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh.po +0 -12
  109. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_CN.po +8 -17
  110. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_TW.po +0 -12
  111. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/translations.js +8 -8
  112. data/lib/katello/tasks/upgrades/4.20/clean_cve_with_no_cvv.rake +4 -4
  113. data/lib/katello/version.rb +1 -1
  114. data/lib/rubocop/cop/katello/cve_abbreviation.rb +82 -0
  115. data/locale/bn/LC_MESSAGES/katello.mo +0 -0
  116. data/locale/bn/katello.po +63 -15
  117. data/locale/bn_IN/LC_MESSAGES/katello.mo +0 -0
  118. data/locale/bn_IN/katello.po +62 -14
  119. data/locale/ca/LC_MESSAGES/katello.mo +0 -0
  120. data/locale/ca/katello.po +62 -14
  121. data/locale/cs/LC_MESSAGES/katello.mo +0 -0
  122. data/locale/cs/katello.po +64 -15
  123. data/locale/cs_CZ/LC_MESSAGES/katello.mo +0 -0
  124. data/locale/cs_CZ/katello.po +65 -17
  125. data/locale/de/LC_MESSAGES/katello.mo +0 -0
  126. data/locale/de/katello.po +67 -19
  127. data/locale/de_AT/LC_MESSAGES/katello.mo +0 -0
  128. data/locale/de_AT/katello.po +62 -14
  129. data/locale/de_DE/LC_MESSAGES/katello.mo +0 -0
  130. data/locale/de_DE/katello.po +64 -16
  131. data/locale/el/LC_MESSAGES/katello.mo +0 -0
  132. data/locale/el/katello.po +62 -14
  133. data/locale/en/LC_MESSAGES/katello.mo +0 -0
  134. data/locale/en/katello.po +64 -15
  135. data/locale/en_GB/LC_MESSAGES/katello.mo +0 -0
  136. data/locale/en_GB/katello.po +62 -14
  137. data/locale/en_US/LC_MESSAGES/katello.mo +0 -0
  138. data/locale/en_US/katello.po +62 -14
  139. data/locale/es/LC_MESSAGES/katello.mo +0 -0
  140. data/locale/es/katello.po +68 -21
  141. data/locale/et_EE/LC_MESSAGES/katello.mo +0 -0
  142. data/locale/et_EE/katello.po +62 -14
  143. data/locale/fr/LC_MESSAGES/katello.mo +0 -0
  144. data/locale/fr/katello.po +304 -256
  145. data/locale/gl/LC_MESSAGES/katello.mo +0 -0
  146. data/locale/gl/katello.po +62 -14
  147. data/locale/gu/LC_MESSAGES/katello.mo +0 -0
  148. data/locale/gu/katello.po +62 -14
  149. data/locale/he_IL/LC_MESSAGES/katello.mo +0 -0
  150. data/locale/he_IL/katello.po +62 -14
  151. data/locale/hi/LC_MESSAGES/katello.mo +0 -0
  152. data/locale/hi/katello.po +62 -14
  153. data/locale/id/LC_MESSAGES/katello.mo +0 -0
  154. data/locale/id/katello.po +62 -14
  155. data/locale/it/LC_MESSAGES/katello.mo +0 -0
  156. data/locale/it/katello.po +64 -16
  157. data/locale/ja/LC_MESSAGES/katello.mo +0 -0
  158. data/locale/ja/katello.po +379 -331
  159. data/locale/ka/LC_MESSAGES/katello.mo +0 -0
  160. data/locale/ka/katello.po +67 -19
  161. data/locale/katello.pot +457 -393
  162. data/locale/kn/LC_MESSAGES/katello.mo +0 -0
  163. data/locale/kn/katello.po +62 -14
  164. data/locale/ko/LC_MESSAGES/katello.mo +0 -0
  165. data/locale/ko/katello.po +300 -251
  166. data/locale/ml_IN/LC_MESSAGES/katello.mo +0 -0
  167. data/locale/ml_IN/katello.po +62 -14
  168. data/locale/mr/LC_MESSAGES/katello.mo +0 -0
  169. data/locale/mr/katello.po +62 -14
  170. data/locale/nl_NL/LC_MESSAGES/katello.mo +0 -0
  171. data/locale/nl_NL/katello.po +62 -14
  172. data/locale/or/LC_MESSAGES/katello.mo +0 -0
  173. data/locale/or/katello.po +62 -14
  174. data/locale/pa/LC_MESSAGES/katello.mo +0 -0
  175. data/locale/pa/katello.po +62 -14
  176. data/locale/pl/LC_MESSAGES/katello.mo +0 -0
  177. data/locale/pl/katello.po +62 -14
  178. data/locale/pl_PL/LC_MESSAGES/katello.mo +0 -0
  179. data/locale/pl_PL/katello.po +62 -14
  180. data/locale/pt/LC_MESSAGES/katello.mo +0 -0
  181. data/locale/pt/katello.po +62 -14
  182. data/locale/pt_BR/LC_MESSAGES/katello.mo +0 -0
  183. data/locale/pt_BR/katello.po +68 -20
  184. data/locale/ro/LC_MESSAGES/katello.mo +0 -0
  185. data/locale/ro/katello.po +62 -14
  186. data/locale/ro_RO/LC_MESSAGES/katello.mo +0 -0
  187. data/locale/ro_RO/katello.po +62 -14
  188. data/locale/ru/LC_MESSAGES/katello.mo +0 -0
  189. data/locale/ru/katello.po +64 -16
  190. data/locale/sl/LC_MESSAGES/katello.mo +0 -0
  191. data/locale/sl/katello.po +62 -14
  192. data/locale/sv_SE/LC_MESSAGES/katello.mo +0 -0
  193. data/locale/sv_SE/katello.po +62 -14
  194. data/locale/ta/LC_MESSAGES/katello.mo +0 -0
  195. data/locale/ta/katello.po +63 -15
  196. data/locale/ta_IN/LC_MESSAGES/katello.mo +0 -0
  197. data/locale/ta_IN/katello.po +62 -14
  198. data/locale/te/LC_MESSAGES/katello.mo +0 -0
  199. data/locale/te/katello.po +62 -14
  200. data/locale/tr/LC_MESSAGES/katello.mo +0 -0
  201. data/locale/tr/katello.po +62 -14
  202. data/locale/vi/LC_MESSAGES/katello.mo +0 -0
  203. data/locale/vi/katello.po +62 -14
  204. data/locale/vi_VN/LC_MESSAGES/katello.mo +0 -0
  205. data/locale/vi_VN/katello.po +62 -14
  206. data/locale/zh/LC_MESSAGES/katello.mo +0 -0
  207. data/locale/zh/katello.po +62 -14
  208. data/locale/zh_CN/LC_MESSAGES/katello.mo +0 -0
  209. data/locale/zh_CN/katello.po +286 -238
  210. data/locale/zh_TW/LC_MESSAGES/katello.mo +0 -0
  211. data/locale/zh_TW/katello.po +64 -16
  212. data/package.json +2 -2
  213. data/webpack/ForemanColumnExtensions/index.js +1 -1
  214. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/AssignHostCVModal.js +3 -3
  215. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/ContentViewDetailsCard.js +5 -5
  216. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/OrderableAssignments.js +5 -5
  217. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/__tests__/AssignHostCVModal.test.js +17 -17
  218. data/webpack/components/extensions/Hosts/BulkActions/BulkAssignCVEnvsModal/BulkAssignCVEnvsModal.js +4 -8
  219. data/webpack/components/extensions/Hosts/BulkActions/BulkAssignCVEnvsModal/__tests__/BulkAssignCVEnvsModal.test.js +1 -1
  220. data/webpack/components/extensions/Hosts/BulkActions/BulkAssignCVEnvsModal/index.js +2 -1
  221. data/webpack/components/extensions/Hosts/BulkActions/BulkChangeHostCollectionsModal/BulkChangeHostCollectionsModal.js +5 -10
  222. data/webpack/components/extensions/Hosts/BulkActions/BulkChangeHostCollectionsModal/__tests__/BulkChangeHostCollectionsModal.test.js +6 -24
  223. data/webpack/components/extensions/Hosts/BulkActions/BulkChangeHostCollectionsModal/index.js +2 -1
  224. data/webpack/components/extensions/Hosts/BulkActions/BulkErrataWizard/04_ReviewFooter.js +2 -0
  225. data/webpack/components/extensions/Hosts/BulkActions/BulkErrataWizard/BulkErrataWizard.js +2 -1
  226. data/webpack/components/extensions/Hosts/BulkActions/BulkManageTracesModal/BulkManageTracesModal.js +4 -0
  227. data/webpack/components/extensions/Hosts/BulkActions/BulkManageTracesModal/index.js +2 -1
  228. data/webpack/components/extensions/Hosts/BulkActions/BulkPackagesWizard/04_ReviewFooter.js +2 -0
  229. data/webpack/components/extensions/Hosts/BulkActions/BulkPackagesWizard/BulkPackagesWizard.js +2 -1
  230. data/webpack/components/extensions/Hosts/BulkActions/BulkRepositorySetsWizard/03_ReviewFooter.js +2 -0
  231. data/webpack/components/extensions/Hosts/BulkActions/BulkRepositorySetsWizard/BulkRepositorySetsWizard.js +2 -1
  232. data/webpack/components/extensions/Hosts/BulkActions/BulkSystemPurposeModal/BulkSystemPurposeModal.js +5 -0
  233. data/webpack/components/extensions/Hosts/BulkActions/BulkSystemPurposeModal/index.js +2 -1
  234. data/webpack/components/extensions/Hosts/BulkActions/__tests__/bulkSystemPurposeModal.test.js +6 -1
  235. data/webpack/components/extensions/RegistrationCommands/__tests__/ActivationKeys.test.js +6 -6
  236. data/webpack/components/extensions/RegistrationCommands/fields/ActivationKeys.js +1 -1
  237. data/webpack/containers/Application/config.js +1 -1
  238. data/webpack/eslint-rules/no-cve-abbreviation.js +121 -0
  239. data/webpack/global_index.js +6 -6
  240. data/webpack/redux/reducers/index.js +0 -2
  241. data/webpack/scenes/ActivationKeys/Details/ActivationKeyDetails.js +2 -2
  242. data/webpack/scenes/ActivationKeys/Details/components/AssignAKCVModal.js +3 -3
  243. data/webpack/scenes/ActivationKeys/Details/components/CreateAKCVModal.js +1 -1
  244. data/webpack/scenes/ActivationKeys/Details/components/{CVEDetailsCard.js → CvEnvDetailsCard.js} +9 -9
  245. data/webpack/scenes/ActivationKeys/Details/components/{CVEDetailsCreateCard.js → CvEnvDetailsCreateCard.js} +10 -10
  246. data/webpack/scenes/ActivationKeys/Details/components/__tests__/{CVEDetailsCreateCard.test.js → CvEnvDetailsCreateCard.test.js} +8 -8
  247. data/webpack/scenes/ContainerImages/Booted/BootedContainerImagesPage.js +2 -2
  248. data/webpack/scenes/ContainerImages/ContainerImagesPage.js +59 -52
  249. data/webpack/scenes/ContainerImages/ContainerImagesPage.scss +27 -4
  250. data/webpack/scenes/ContainerImages/Synced/SyncedContainerImagesPage.js +1 -1
  251. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersionContent.js +1 -11
  252. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVVersionRemoveReview.js +9 -9
  253. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailConfig.js +0 -28
  254. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetails.test.js +46 -1
  255. data/webpack/scenes/ContentViews/Details/Versions/__tests__/contentViewVersionContent.test.js +41 -0
  256. data/webpack/scenes/Hosts/ChangeContentSource/actions.js +2 -2
  257. data/webpack/scenes/Subscriptions/Manifest/CdnTabContent.js +44 -0
  258. data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.js +179 -307
  259. data/webpack/scenes/Subscriptions/Manifest/ManageManifestModalConstants.js +5 -0
  260. data/webpack/scenes/Subscriptions/Manifest/ManifestActions.js +64 -70
  261. data/webpack/scenes/Subscriptions/Manifest/ManifestConstants.js +5 -0
  262. data/webpack/scenes/Subscriptions/Manifest/ManifestHistoryContent.js +61 -0
  263. data/webpack/scenes/Subscriptions/Manifest/ManifestHistoryReducer.js +1 -1
  264. data/webpack/scenes/Subscriptions/Manifest/ManifestTabContent.js +357 -0
  265. data/webpack/scenes/Subscriptions/Manifest/__tests__/ManageManifestModal.test.js +129 -0
  266. data/webpack/scenes/Subscriptions/Manifest/__tests__/ManifestActions.test.js +69 -110
  267. data/webpack/scenes/Subscriptions/Manifest/__tests__/ManifestHistoryReducer.test.js +6 -2
  268. data/webpack/scenes/Subscriptions/Manifest/index.js +16 -1
  269. data/webpack/scenes/Subscriptions/SubscriptionActions.js +79 -145
  270. data/webpack/scenes/Subscriptions/SubscriptionConstants.js +4 -35
  271. data/webpack/scenes/Subscriptions/SubscriptionsColumns.js +90 -0
  272. data/webpack/scenes/Subscriptions/SubscriptionsPage.js +297 -217
  273. data/webpack/scenes/Subscriptions/SubscriptionsPage.scss +40 -30
  274. data/webpack/scenes/Subscriptions/UpstreamSubscriptions/UpstreamSubscriptionsActions.js +11 -8
  275. data/webpack/scenes/Subscriptions/UpstreamSubscriptions/UpstreamSubscriptionsConstants.js +0 -1
  276. data/webpack/scenes/Subscriptions/__tests__/SubscriptionsPage.test.js +104 -205
  277. data/webpack/scenes/Subscriptions/__tests__/subscriptions.fixtures.js +12 -8
  278. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/SubscriptionsTable.js +245 -241
  279. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/__tests__/SubscriptionsTable.test.js +61 -27
  280. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/components/Table.js +487 -73
  281. data/webpack/scenes/Subscriptions/components/SubscriptionsToolbar/SubscriptionsToolbar.js +22 -4
  282. data/webpack/utils/contentViewEnvironmentLabel.js +3 -3
  283. data/webpack/utils/helpers.js +2 -2
  284. metadata +22 -20
  285. data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.scss +0 -39
  286. data/webpack/scenes/Subscriptions/Manifest/ManifestHistoryTableSchema.js +0 -47
  287. data/webpack/scenes/Subscriptions/SubscriptionReducer.js +0 -223
  288. data/webpack/scenes/Subscriptions/SubscriptionsSelectors.js +0 -31
  289. data/webpack/scenes/Subscriptions/__tests__/SubscriptionsActions.test.js +0 -297
  290. data/webpack/scenes/Subscriptions/__tests__/SubscriptionsReducer.test.js +0 -244
  291. data/webpack/scenes/Subscriptions/__tests__/SubscriptionsSelectors.test.js +0 -47
  292. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/SubscriptionNameFormatter.js +0 -23
  293. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/SubscriptionTypeFormatter.js +0 -32
  294. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/SubscriptionsTableSchema.js +0 -169
  295. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/__tests__/SubscriptionTypeFormatter.test.js +0 -41
  296. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/index.js +0 -2
  297. data/webpack/scenes/Subscriptions/index.js +0 -57
@@ -1,15 +1,12 @@
1
1
  import React from 'react';
2
- import { render } from '@testing-library/react';
2
+ import { render, act } from '@testing-library/react';
3
3
  import SubscriptionsTable from '../SubscriptionsTable';
4
+ import { createSubscriptionsColumns } from '../../../SubscriptionsColumns';
4
5
  import { successState, loadingState, emptyState, groupedSubscriptions } from '../../../__tests__/subscriptions.fixtures';
5
6
 
6
- const mockLoadingState = jest.fn(({ children }) => <div>{children}</div>);
7
7
  const mockTable = jest.fn(() => <div data-testid="subscriptions-table" />);
8
8
  const mockDialogs = jest.fn(() => <div data-testid="subscriptions-dialogs" />);
9
9
 
10
- jest.mock('../../../../../components/LoadingState', () => ({
11
- LoadingState: props => mockLoadingState(props),
12
- }));
13
10
  jest.mock('../components/Table', () => props => mockTable(props));
14
11
  jest.mock('../components/Dialogs', () => props => mockDialogs(props));
15
12
 
@@ -21,11 +18,25 @@ const tableColumns = [
21
18
  'end_date',
22
19
  ];
23
20
 
21
+ const notifyApiResponse = (subscriptions) => {
22
+ const tableProps = mockTable.mock.calls[mockTable.mock.calls.length - 1][0];
23
+ act(() => {
24
+ tableProps.onApiResponse({
25
+ results: subscriptions.results || [],
26
+ loading: !!subscriptions.loading,
27
+ availableQuantities: subscriptions.availableQuantities,
28
+ itemCount: subscriptions.itemCount || 0,
29
+ page: subscriptions.pagination?.page || 1,
30
+ perPage: subscriptions.pagination?.perPage || 20,
31
+ searchIsActive: !!subscriptions.searchIsActive,
32
+ });
33
+ });
34
+ };
35
+
24
36
  describe('subscriptions table', () => {
25
37
  const buildProps = (overrides = {}) => ({
26
- subscriptions: successState,
27
- loadSubscriptions: jest.fn(),
28
38
  tableColumns,
39
+ columns: createSubscriptionsColumns(),
29
40
  updateQuantity: jest.fn(),
30
41
  subscriptionDeleteModalOpen: false,
31
42
  onDeleteSubscriptions: jest.fn(),
@@ -38,28 +49,24 @@ describe('subscriptions table', () => {
38
49
  });
39
50
 
40
51
  beforeEach(() => {
41
- mockLoadingState.mockClear();
42
52
  mockTable.mockClear();
43
53
  mockDialogs.mockClear();
44
54
  });
45
55
 
46
56
  it('renders table and dialogs with computed rows', () => {
47
57
  render(<SubscriptionsTable {...buildProps()} />);
58
+ notifyApiResponse(successState);
48
59
 
49
- expect(mockLoadingState.mock.calls[0][0]).toMatchObject({
50
- loading: false,
51
- loadingText: 'Loading',
52
- });
53
- expect(mockTable.mock.calls[0][0].rows).toHaveLength(successState.results.length);
60
+ expect(mockTable.mock.calls[mockTable.mock.calls.length - 1][0].rows)
61
+ .toHaveLength(successState.results.length);
54
62
  expect(mockDialogs.mock.calls[0][0].deleteDialog.show).toBe(false);
55
63
  });
56
64
 
57
65
  it('builds grouped subscription rows for shared products', () => {
58
- render(<SubscriptionsTable
59
- {...buildProps({ subscriptions: groupedSubscriptions, selectionEnabled: true })}
60
- />);
66
+ render(<SubscriptionsTable {...buildProps({ selectionEnabled: true })} />);
67
+ notifyApiResponse(groupedSubscriptions);
61
68
 
62
- const tableProps = mockTable.mock.calls[0][0];
69
+ const tableProps = mockTable.mock.calls[mockTable.mock.calls.length - 1][0];
63
70
  expect(tableProps.rows).toHaveLength(1);
64
71
  expect(tableProps.rows[0].collapsible).toBe(true);
65
72
  expect(tableProps.selectionEnabled).toBe(true);
@@ -68,9 +75,12 @@ describe('subscriptions table', () => {
68
75
  it('selects all rows when no rows are selected', () => {
69
76
  const props = buildProps({ selectionEnabled: true });
70
77
  render(<SubscriptionsTable {...props} />);
78
+ notifyApiResponse(successState);
71
79
 
72
- const tableProps = mockTable.mock.calls[0][0];
73
- const selectedRowIds = successState.results.map(row => row.id);
80
+ const tableProps = mockTable.mock.calls[mockTable.mock.calls.length - 1][0];
81
+ const selectedRowIds = successState.results
82
+ .filter(row => row.upstream_pool_id)
83
+ .map(row => row.id);
74
84
  tableProps.selectionController.selectAllRows();
75
85
 
76
86
  expect(props.onSelectedRowsChange).toHaveBeenCalledWith(selectedRowIds);
@@ -78,33 +88,56 @@ describe('subscriptions table', () => {
78
88
  });
79
89
 
80
90
  it('clears all selections when all rows are already selected', () => {
91
+ const eligibleRowIds = successState.results
92
+ .filter(row => row.upstream_pool_id)
93
+ .map(row => row.id);
81
94
  const props = buildProps({
82
95
  selectionEnabled: true,
83
- selectedRows: successState.results.map(row => row.id),
96
+ selectedRows: eligibleRowIds,
84
97
  });
85
98
  render(<SubscriptionsTable {...props} />);
99
+ notifyApiResponse(successState);
86
100
 
87
- const tableProps = mockTable.mock.calls[0][0];
101
+ const tableProps = mockTable.mock.calls[mockTable.mock.calls.length - 1][0];
88
102
  tableProps.selectionController.selectAllRows();
89
103
 
90
104
  expect(props.onSelectedRowsChange).toHaveBeenCalledWith([]);
91
105
  expect(props.toggleDeleteButton).toHaveBeenCalledWith(false);
92
106
  });
93
107
 
108
+ it('does not treat an empty eligible collection as fully selected', () => {
109
+ const props = buildProps({ selectionEnabled: true });
110
+ render(<SubscriptionsTable {...props} />);
111
+ notifyApiResponse({
112
+ ...successState,
113
+ results: successState.results.map(({ upstream_pool_id: _id, ...row }) => row),
114
+ });
115
+
116
+ const tableProps = mockTable.mock.calls[mockTable.mock.calls.length - 1][0];
117
+ expect(tableProps.selectionController.allRowsSelected()).toBe(false);
118
+
119
+ tableProps.selectionController.selectAllRows();
120
+ expect(props.onSelectedRowsChange).toHaveBeenCalledWith([]);
121
+ expect(props.toggleDeleteButton).toHaveBeenCalledWith(false);
122
+ });
123
+
94
124
  it('toggles individual row selection', () => {
95
125
  const props = buildProps({ selectionEnabled: true, selectedRows: [3] });
96
126
  render(<SubscriptionsTable {...props} />);
127
+ notifyApiResponse(successState);
97
128
 
98
- const tableProps = mockTable.mock.calls[0][0];
129
+ const tableProps = mockTable.mock.calls[mockTable.mock.calls.length - 1][0];
99
130
  tableProps.selectionController.selectRow({ rowData: { id: 3 } });
100
131
 
101
132
  expect(props.onSelectedRowsChange).toHaveBeenCalledWith([]);
102
133
  expect(props.toggleDeleteButton).toHaveBeenCalledWith(false);
103
134
  });
104
135
 
105
- it('renders loading state', () => {
106
- render(<SubscriptionsTable {...buildProps({ subscriptions: loadingState })} />);
107
- expect(mockLoadingState.mock.calls[0][0].loading).toBe(true);
136
+ it('keeps the table mounted while loading so TableIndexPage can fetch', () => {
137
+ render(<SubscriptionsTable {...buildProps()} />);
138
+ expect(mockTable).toHaveBeenCalled();
139
+ notifyApiResponse(loadingState);
140
+ expect(mockTable.mock.calls[mockTable.mock.calls.length - 1][0]).toBeTruthy();
108
141
  });
109
142
 
110
143
  it('passes empty state through to the table', () => {
@@ -115,12 +148,13 @@ describe('subscriptions table', () => {
115
148
 
116
149
  render(<SubscriptionsTable
117
150
  {...buildProps({
118
- subscriptions: emptyState,
119
151
  emptyState: emptyStateData,
120
152
  tableColumns: [],
121
153
  })}
122
154
  />);
155
+ notifyApiResponse(emptyState);
123
156
 
124
- expect(mockTable.mock.calls[0][0].emptyState).toEqual(emptyStateData);
157
+ expect(mockTable.mock.calls[mockTable.mock.calls.length - 1][0].emptyState)
158
+ .toEqual(emptyStateData);
125
159
  });
126
160
  });