@rancher/shell 3.0.12-rc.1 → 3.0.12-rc.3

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 (376) hide show
  1. package/apis/impl/apis.ts +6 -0
  2. package/apis/index.ts +26 -0
  3. package/apis/intf/resources-api/cluster-api.ts +18 -0
  4. package/apis/intf/resources-api/mgmt-api.ts +15 -0
  5. package/apis/intf/resources-api/resource-base.ts +107 -0
  6. package/apis/intf/resources-api/resource-constants.ts +147 -0
  7. package/apis/intf/resources-api/resources-api.ts +143 -0
  8. package/apis/intf/resources.ts +49 -0
  9. package/apis/intf/{modal.ts → shell-api/modal.ts} +21 -26
  10. package/apis/intf/shell-api/proxy.ts +216 -0
  11. package/apis/intf/{slide-in.ts → shell-api/slide-in.ts} +4 -3
  12. package/apis/intf/{system.ts → shell-api/system.ts} +4 -1
  13. package/apis/intf/shell.ts +12 -6
  14. package/apis/resources/__tests__/resources-api-class.test.ts +550 -0
  15. package/apis/resources/index.ts +22 -0
  16. package/apis/resources/resources-api-class.ts +187 -0
  17. package/apis/shell/__tests__/proxy.test.ts +369 -0
  18. package/apis/shell/index.ts +8 -1
  19. package/apis/shell/modal.ts +4 -1
  20. package/apis/shell/notifications.ts +9 -6
  21. package/apis/shell/proxy.ts +256 -0
  22. package/apis/shell/slide-in.ts +4 -1
  23. package/apis/vue-shim.d.ts +2 -1
  24. package/assets/data/aws-regions.json +4 -0
  25. package/assets/fonts/lato/LatoLatin-Black.woff +0 -0
  26. package/assets/fonts/lato/LatoLatin-Black.woff2 +0 -0
  27. package/assets/fonts/lato/LatoLatin-BlackItalic.woff +0 -0
  28. package/assets/fonts/lato/LatoLatin-BlackItalic.woff2 +0 -0
  29. package/assets/fonts/lato/LatoLatin-Bold.woff +0 -0
  30. package/assets/fonts/lato/LatoLatin-Bold.woff2 +0 -0
  31. package/assets/fonts/lato/LatoLatin-BoldItalic.woff +0 -0
  32. package/assets/fonts/lato/LatoLatin-BoldItalic.woff2 +0 -0
  33. package/assets/fonts/lato/LatoLatin-Heavy.woff +0 -0
  34. package/assets/fonts/lato/LatoLatin-Heavy.woff2 +0 -0
  35. package/assets/fonts/lato/LatoLatin-HeavyItalic.woff +0 -0
  36. package/assets/fonts/lato/LatoLatin-HeavyItalic.woff2 +0 -0
  37. package/assets/fonts/lato/LatoLatin-Italic.woff +0 -0
  38. package/assets/fonts/lato/LatoLatin-Italic.woff2 +0 -0
  39. package/assets/fonts/lato/LatoLatin-Light.woff +0 -0
  40. package/assets/fonts/lato/LatoLatin-Light.woff2 +0 -0
  41. package/assets/fonts/lato/LatoLatin-LightItalic.woff +0 -0
  42. package/assets/fonts/lato/LatoLatin-LightItalic.woff2 +0 -0
  43. package/assets/fonts/lato/LatoLatin-Medium.woff +0 -0
  44. package/assets/fonts/lato/LatoLatin-Medium.woff2 +0 -0
  45. package/assets/fonts/lato/LatoLatin-MediumItalic.woff +0 -0
  46. package/assets/fonts/lato/LatoLatin-MediumItalic.woff2 +0 -0
  47. package/assets/fonts/lato/LatoLatin-Regular.woff +0 -0
  48. package/assets/fonts/lato/LatoLatin-Regular.woff2 +0 -0
  49. package/assets/fonts/lato/LatoLatin-Semibold.woff +0 -0
  50. package/assets/fonts/lato/LatoLatin-Semibold.woff2 +0 -0
  51. package/assets/fonts/lato/LatoLatin-SemiboldItalic.woff +0 -0
  52. package/assets/fonts/lato/LatoLatin-SemiboldItalic.woff2 +0 -0
  53. package/assets/images/providers/entraid-black.svg +4 -0
  54. package/assets/images/providers/entraid.svg +9 -0
  55. package/assets/images/vendor/entraid.svg +9 -0
  56. package/assets/styles/app.scss +0 -1
  57. package/assets/styles/base/_variables.scss +2 -0
  58. package/assets/styles/fonts/_fontstack.scss +132 -8
  59. package/assets/translations/en-us.yaml +41 -22
  60. package/assets/translations/zh-hans.yaml +4 -8
  61. package/chart/__tests__/S3.test.ts +10 -3
  62. package/chart/monitoring/index.vue +10 -1
  63. package/components/ActionDropdownShell.vue +2 -1
  64. package/components/CountBox.vue +20 -0
  65. package/components/CreateDriver.vue +0 -12
  66. package/components/CruResourceFooter.vue +9 -5
  67. package/components/DetailText.vue +12 -3
  68. package/components/ExplorerProjectsNamespaces.vue +1 -1
  69. package/components/InstallHelmCharts.vue +2 -2
  70. package/components/LandingPagePreference.vue +14 -5
  71. package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +15 -1
  72. package/components/Resource/Detail/Metadata/index.vue +6 -0
  73. package/components/Resource/Detail/ResourcePopover/index.vue +12 -1
  74. package/components/Resource/Detail/SpacedRow.vue +3 -1
  75. package/components/Resource/Detail/TitleBar/index.vue +10 -11
  76. package/components/ResourceList/Masthead.vue +12 -8
  77. package/components/SelectIconGrid.vue +5 -10
  78. package/components/SingleClusterInfo.vue +1 -0
  79. package/components/SortableTable/__tests__/sorting.test.ts +126 -0
  80. package/components/SortableTable/index.vue +6 -9
  81. package/components/SortableTable/selection.js +23 -5
  82. package/components/SortableTable/sorting.js +6 -3
  83. package/components/Wizard.vue +14 -13
  84. package/components/__tests__/CountBox.test.ts +72 -0
  85. package/components/__tests__/DetailText.test.ts +113 -0
  86. package/components/fleet/FleetBundles.vue +100 -12
  87. package/components/fleet/FleetClusterTargets/index.vue +54 -15
  88. package/components/fleet/__tests__/FleetClusterTargets.test.ts +149 -115
  89. package/components/fleet/__tests__/FleetClusters.test.ts +12 -12
  90. package/components/form/InputWithSelect.vue +18 -10
  91. package/components/form/KeyValue.vue +17 -1
  92. package/components/form/LabeledSelect.vue +101 -26
  93. package/components/form/NameNsDescription.vue +11 -0
  94. package/components/form/Security.vue +6 -2
  95. package/components/form/Select.vue +73 -56
  96. package/components/form/ServiceNameSelect.vue +13 -11
  97. package/components/form/WorkloadPorts.vue +2 -7
  98. package/components/form/__tests__/KeyValue.test.ts +66 -0
  99. package/components/form/__tests__/NodeScheduling.test.ts +9 -0
  100. package/components/form/__tests__/Security.test.ts +76 -0
  101. package/components/form/labeled-select-utils/useLabeledSelectPagination.ts +138 -0
  102. package/components/formatter/Autoscaler.vue +4 -4
  103. package/components/formatter/ClusterKubeVersion.vue +27 -0
  104. package/components/formatter/ClusterLink.vue +1 -7
  105. package/components/formatter/ClusterProvider.vue +6 -10
  106. package/components/formatter/FleetSummaryGraph.vue +0 -3
  107. package/components/formatter/MachineSummaryGraph.vue +1 -1
  108. package/components/formatter/PodsUsage.vue +2 -2
  109. package/components/formatter/__tests__/Autoscaler.test.ts +19 -22
  110. package/components/formatter/__tests__/FleetSummaryGraph.test.ts +216 -0
  111. package/components/formatter/__tests__/PodsUsage.test.ts +6 -10
  112. package/components/nav/Group.vue +7 -6
  113. package/components/nav/Header.vue +24 -3
  114. package/components/nav/NamespaceFilter.vue +2 -2
  115. package/components/nav/NotificationCenter/Notification.vue +4 -1
  116. package/components/nav/NotificationCenter/NotificationHeader.vue +20 -8
  117. package/components/nav/NotificationCenter/__tests__/NotificationHeader.test.ts +80 -0
  118. package/components/nav/TopLevelMenu.helper.ts +15 -3
  119. package/components/nav/TopLevelMenu.vue +16 -5
  120. package/components/nav/Type.vue +8 -7
  121. package/components/nav/WindowManager/index.vue +2 -1
  122. package/components/nav/WorkspaceSwitcher.vue +13 -0
  123. package/components/nav/__tests__/Group.test.ts +67 -0
  124. package/components/nav/__tests__/Header.test.ts +235 -0
  125. package/components/nav/__tests__/TopLevelMenu.test.ts +145 -21
  126. package/components/nav/__tests__/Type.test.ts +20 -3
  127. package/components/templates/default.vue +34 -4
  128. package/components/templates/home.vue +30 -25
  129. package/components/templates/plain.vue +31 -26
  130. package/components/templates/standalone.vue +17 -0
  131. package/composables/useFormValidation.ts +93 -0
  132. package/composables/useLabeledFormElement.ts +10 -2
  133. package/composables/useLabeledSelect.ts +60 -0
  134. package/composables/useUserRetentionValidation.ts +1 -49
  135. package/composables/useVeeValidateField.test.ts +159 -0
  136. package/composables/useVeeValidateField.ts +67 -0
  137. package/config/cookies.js +0 -1
  138. package/config/labels-annotations.js +1 -0
  139. package/config/pagination-table-headers.js +18 -1
  140. package/config/product/manager.js +82 -21
  141. package/config/query-params.js +1 -0
  142. package/config/router/routes.js +6 -8
  143. package/config/table-headers.js +20 -1
  144. package/config/types.js +2 -1
  145. package/core/__tests__/plugin-products.test.ts +1505 -30
  146. package/core/plugin-products-base.ts +137 -20
  147. package/core/plugin-products-helpers.ts +5 -4
  148. package/core/plugin-products.ts +4 -0
  149. package/core/plugin-types.ts +129 -4
  150. package/core/plugin.ts +15 -7
  151. package/core/productDebugger.js +9 -4
  152. package/core/types-provisioning.ts +43 -30
  153. package/core/types.ts +58 -19
  154. package/detail/__tests__/management.cattle.io.fleetworkspace.test.ts +128 -0
  155. package/detail/__tests__/pod.test.ts +41 -0
  156. package/detail/harvesterhci.io.management.cluster.vue +6 -2
  157. package/detail/management.cattle.io.fleetworkspace.vue +49 -0
  158. package/detail/pod.vue +1 -1
  159. package/detail/provisioning.cattle.io.cluster.vue +4 -10
  160. package/edit/__tests__/fleet.cattle.io.helmop.test.ts +9 -0
  161. package/edit/__tests__/kontainerDriver.test.ts +0 -13
  162. package/edit/__tests__/nodeDriver.test.ts +5 -11
  163. package/edit/__tests__/resources.cattle.io.restore.test.ts +9 -0
  164. package/edit/auditlog.cattle.io.auditpolicy/__tests__/__snapshots__/General.test.ts.snap +6 -0
  165. package/edit/auth/__tests__/azuread.test.ts +217 -34
  166. package/edit/auth/__tests__/oidc.test.ts +54 -0
  167. package/edit/auth/azuread.vue +123 -15
  168. package/edit/auth/oidc.vue +10 -2
  169. package/edit/kontainerDriver.vue +1 -2
  170. package/edit/networking.k8s.io.ingress/DefaultBackend.vue +13 -4
  171. package/edit/networking.k8s.io.ingress/RulePath.vue +8 -4
  172. package/edit/networking.k8s.io.ingress/index.vue +75 -20
  173. package/edit/nodeDriver.vue +0 -2
  174. package/edit/provisioning.cattle.io.cluster/AgentEnv.vue +1 -0
  175. package/edit/provisioning.cattle.io.cluster/__tests__/AgentEnv.test.ts +25 -0
  176. package/edit/provisioning.cattle.io.cluster/__tests__/MachinePool.test.ts +104 -0
  177. package/edit/provisioning.cattle.io.cluster/index.vue +81 -106
  178. package/edit/provisioning.cattle.io.cluster/rke2.vue +8 -4
  179. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +11 -0
  180. package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryConfigs.vue +37 -4
  181. package/edit/provisioning.cattle.io.cluster/tabs/registries/__tests__/RegistryConfigs.test.ts +132 -7
  182. package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +2 -1
  183. package/edit/secret/__tests__/ssh.test.ts +5 -6
  184. package/edit/secret/basic.vue +31 -0
  185. package/edit/secret/index.vue +68 -17
  186. package/edit/secret/registry.vue +38 -0
  187. package/edit/secret/ssh.vue +29 -0
  188. package/edit/secret/tls.vue +30 -0
  189. package/edit/service.vue +4 -4
  190. package/edit/workload/Upgrading.vue +3 -3
  191. package/edit/workload/__tests__/Upgrading.test.ts +6 -9
  192. package/edit/workload/mixins/workload.js +2 -1
  193. package/initialize/App.vue +29 -2
  194. package/initialize/install-plugins.js +0 -2
  195. package/list/__tests__/management.cattle.io.feature.test.ts +105 -0
  196. package/list/catalog.cattle.io.app.vue +25 -5
  197. package/list/fleet.cattle.io.bundle.vue +7 -104
  198. package/list/fleet.cattle.io.clusterregistrationtoken.vue +20 -0
  199. package/list/management.cattle.io.feature.vue +1 -1
  200. package/list/management.cattle.io.fleetworkspace.vue +8 -0
  201. package/list/provisioning.cattle.io.cluster.vue +262 -180
  202. package/list/utils/management.cattle.io.cluster.utils.ts +128 -0
  203. package/machine-config/amazonec2.vue +1 -0
  204. package/mixins/__tests__/chart.test.ts +112 -0
  205. package/mixins/brand.js +2 -1
  206. package/mixins/chart.js +50 -15
  207. package/mixins/resource-fetch-api-pagination.js +41 -5
  208. package/models/__tests__/catalog.cattle.io.app.test.ts +15 -1
  209. package/models/__tests__/catalog.cattle.io.clusterrepo.test.ts +84 -0
  210. package/models/__tests__/chart.test.ts +99 -6
  211. package/models/__tests__/ext.cattle.io.kubeconfig.test.ts +67 -67
  212. package/models/__tests__/management.cattle.io.cluster.test.ts +1 -1
  213. package/models/__tests__/management.cattle.io.feature.test.ts +131 -0
  214. package/models/__tests__/management.cattle.io.node.ts +6 -5
  215. package/models/__tests__/management.cattle.io.nodepool.ts +5 -4
  216. package/models/__tests__/monitoring.coreos.com.alertmanagerconfig.test.ts +98 -0
  217. package/models/__tests__/provisioning.cattle.io.cluster.test.ts +32 -11
  218. package/models/base-cluster.x-k8s.io.js +26 -0
  219. package/models/catalog.cattle.io.app.js +21 -17
  220. package/models/catalog.cattle.io.clusterrepo.js +39 -11
  221. package/models/chart.js +33 -19
  222. package/models/cluster.js +1 -1
  223. package/models/cluster.x-k8s.io.machine.js +4 -22
  224. package/models/cluster.x-k8s.io.machinedeployment.js +2 -20
  225. package/models/cluster.x-k8s.io.machineset.js +2 -20
  226. package/models/compliance.cattle.io.clusterscan.js +130 -2
  227. package/models/ext.cattle.io.kubeconfig.ts +4 -7
  228. package/models/fleet-application.js +4 -2
  229. package/models/fleet.cattle.io.bundle.js +1 -1
  230. package/models/kontainerdriver.js +11 -0
  231. package/models/management.cattle.io.authconfig.js +5 -1
  232. package/models/management.cattle.io.cluster.js +402 -78
  233. package/models/management.cattle.io.feature.js +3 -3
  234. package/models/management.cattle.io.kontainerdriver.js +1 -26
  235. package/models/management.cattle.io.node.js +6 -4
  236. package/models/management.cattle.io.nodepool.js +1 -1
  237. package/models/monitoring.coreos.com.alertmanagerconfig.js +31 -17
  238. package/models/networking.k8s.io.ingress.js +12 -4
  239. package/models/nodedriver.js +7 -0
  240. package/models/provisioning.cattle.io.cluster.js +47 -330
  241. package/models/rke.cattle.io.etcdsnapshot.js +1 -2
  242. package/package.json +20 -37
  243. package/pages/__tests__/readme.test.ts +49 -0
  244. package/pages/auth/setup.vue +2 -3
  245. package/pages/c/_cluster/apps/charts/__tests__/chart.test.ts +265 -0
  246. package/pages/c/_cluster/apps/charts/__tests__/index.test.ts +55 -0
  247. package/pages/c/_cluster/apps/charts/__tests__/install.test.ts +53 -0
  248. package/pages/c/_cluster/apps/charts/chart.vue +275 -39
  249. package/pages/c/_cluster/apps/charts/index.vue +2 -2
  250. package/pages/c/_cluster/apps/charts/install.vue +18 -10
  251. package/pages/c/_cluster/auth/user.retention/index.vue +55 -22
  252. package/pages/c/_cluster/explorer/__tests__/index.test.ts +23 -25
  253. package/pages/c/_cluster/explorer/index.vue +5 -49
  254. package/pages/c/_cluster/istio/__tests__/istio.index.test.ts +194 -0
  255. package/pages/c/_cluster/istio/index.vue +21 -6
  256. package/pages/c/_cluster/manager/drivers/kontainerDriver/index.vue +5 -7
  257. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +40 -2
  258. package/pages/c/_cluster/uiplugins/__tests__/PluginInfoPanel.test.ts +61 -0
  259. package/pages/c/_cluster/uiplugins/__tests__/index.test.ts +735 -13
  260. package/pages/c/_cluster/uiplugins/index.vue +226 -222
  261. package/pages/diagnostic.vue +13 -17
  262. package/pages/fail-whale.vue +18 -0
  263. package/pages/home.vue +77 -260
  264. package/pages/readme.vue +88 -0
  265. package/plugins/dashboard-store/__tests__/resource-class.test.ts +88 -0
  266. package/plugins/dashboard-store/actions.js +40 -18
  267. package/plugins/dashboard-store/resource-class.js +5 -2
  268. package/plugins/steve/__tests__/subscribe.spec.ts +6 -3
  269. package/plugins/steve/steve-pagination-utils.ts +11 -3
  270. package/plugins/steve/subscribe.js +35 -5
  271. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +211 -1
  272. package/rancher-components/Form/LabeledInput/LabeledInput.vue +37 -4
  273. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +1 -1
  274. package/rancher-components/RcButton/RcButton.test.ts +37 -1
  275. package/rancher-components/RcButton/RcButton.vue +38 -8
  276. package/rancher-components/RcDropdown/RcDropdownTrigger.vue +10 -8
  277. package/scripts/test-plugins-build.sh +5 -2
  278. package/server/server-middleware.js +2 -2
  279. package/static/humans.txt +1 -0
  280. package/static/robots.txt +34 -0
  281. package/static/welcome-cow.svg +18 -0
  282. package/store/__tests__/catalog.test.ts +276 -12
  283. package/store/__tests__/type-map.test.ts +556 -1
  284. package/store/action-menu.js +8 -3
  285. package/store/auth.js +1 -4
  286. package/store/aws.js +27 -16
  287. package/store/catalog.js +87 -11
  288. package/store/digitalocean.js +20 -38
  289. package/store/index.js +2 -0
  290. package/store/linode.js +25 -40
  291. package/store/pnap.js +1 -0
  292. package/store/type-map.js +111 -29
  293. package/tsconfig.paths.json +8 -8
  294. package/types/kube/kube-api.ts +14 -1
  295. package/types/rancher/steve.api.ts +12 -12
  296. package/types/resources/settings.d.ts +2 -1
  297. package/types/shell/index.d.ts +128 -24
  298. package/types/store/dashboard-store.types.ts +108 -11
  299. package/types/store/pagination.types.ts +6 -3
  300. package/utils/__tests__/alertmanagerconfig.test.ts +117 -0
  301. package/utils/__tests__/async.test.ts +87 -0
  302. package/utils/__tests__/aws.test.ts +140 -0
  303. package/utils/__tests__/banners.test.ts +176 -0
  304. package/utils/__tests__/chart.test.ts +64 -1
  305. package/utils/__tests__/color.test.ts +226 -0
  306. package/utils/__tests__/duration.test.ts +140 -0
  307. package/utils/__tests__/fleet.test.ts +340 -0
  308. package/utils/__tests__/git.test.ts +270 -0
  309. package/utils/__tests__/inactivity.test.ts +316 -0
  310. package/utils/__tests__/ingress.test.ts +553 -0
  311. package/utils/__tests__/kube.test.ts +68 -0
  312. package/utils/__tests__/namespace-filter.test.ts +109 -0
  313. package/utils/__tests__/object.test.ts +77 -0
  314. package/utils/__tests__/pagination-utils.test.ts +361 -0
  315. package/utils/__tests__/parse-externalid.test.ts +137 -0
  316. package/utils/__tests__/perf-setting.utils.test.ts +98 -0
  317. package/utils/__tests__/poller-sequential.test.ts +177 -0
  318. package/utils/__tests__/poller.test.ts +170 -0
  319. package/utils/__tests__/promise.test.ts +346 -0
  320. package/utils/__tests__/settings.test.ts +140 -0
  321. package/utils/__tests__/sort-utils.test.ts +301 -0
  322. package/utils/__tests__/string-utils.test.ts +798 -0
  323. package/utils/__tests__/string.test.ts +23 -1
  324. package/utils/__tests__/style.test.ts +154 -0
  325. package/utils/__tests__/svg-filter.test.ts +184 -0
  326. package/utils/__tests__/time.test.ts +14 -1
  327. package/utils/__tests__/units.test.ts +417 -0
  328. package/utils/__tests__/url.test.ts +246 -0
  329. package/utils/__tests__/versions.test.ts +128 -0
  330. package/utils/__tests__/xccdf.test.ts +391 -0
  331. package/utils/chart.js +36 -0
  332. package/utils/fleet.ts +13 -3
  333. package/utils/gatekeeper/__tests__/util.test.ts +174 -0
  334. package/utils/gc/__tests__/gc-interval.test.ts +119 -0
  335. package/utils/gc/__tests__/gc-root-store.test.ts +225 -0
  336. package/utils/gc/__tests__/gc-route-changed.test.ts +96 -0
  337. package/utils/gc/__tests__/gc.test.ts +487 -0
  338. package/utils/ingress.ts +9 -1
  339. package/utils/object.js +33 -2
  340. package/utils/pagination-utils.ts +2 -1
  341. package/utils/string.js +25 -2
  342. package/utils/time.ts +5 -0
  343. package/utils/uiplugins.ts +5 -5
  344. package/utils/validators/__tests__/cluster-name.test.ts +110 -0
  345. package/utils/validators/__tests__/cron-schedule.test.ts +79 -0
  346. package/utils/validators/__tests__/index.test.ts +481 -0
  347. package/utils/validators/__tests__/kubernetes-name.test.ts +163 -0
  348. package/utils/validators/__tests__/misc-validators.test.ts +246 -0
  349. package/utils/validators/__tests__/pod-affinity.test.ts +382 -0
  350. package/utils/validators/__tests__/prometheusrule.test.ts +211 -0
  351. package/utils/validators/__tests__/role-template.test.ts +149 -0
  352. package/utils/validators/__tests__/service.test.ts +283 -0
  353. package/utils/validators/__tests__/setting.test.js +32 -0
  354. package/utils/validators/formRules/__tests__/index.test.ts +50 -0
  355. package/utils/validators/formRules/index.ts +5 -5
  356. package/utils/validators/machine-pool.ts +1 -1
  357. package/utils/validators/setting.js +18 -3
  358. package/utils/xccdf.ts +418 -0
  359. package/vue.config.js +0 -9
  360. package/assets/fonts/lato/lato-v17-latin-700.woff +0 -0
  361. package/assets/fonts/lato/lato-v17-latin-700.woff2 +0 -0
  362. package/assets/fonts/lato/lato-v17-latin-regular.woff +0 -0
  363. package/assets/fonts/lato/lato-v17-latin-regular.woff2 +0 -0
  364. package/assets/images/providers/azuread-black.svg +0 -22
  365. package/assets/images/providers/azuread.svg +0 -25
  366. package/assets/images/vendor/azuread.svg +0 -18
  367. package/assets/styles/fonts/_dots.scss +0 -18
  368. package/components/EmberPage.vue +0 -622
  369. package/components/EmberPageView.vue +0 -39
  370. package/components/form/labeled-select-utils/labeled-select-pagination.ts +0 -116
  371. package/mixins/labeled-form-element.ts +0 -225
  372. package/pages/c/_cluster/explorer/tools/pages/_page.vue +0 -28
  373. package/pages/c/_cluster/manager/pages/_page.vue +0 -22
  374. package/pages/c/_cluster/mcapps/pages/_page.vue +0 -22
  375. package/plugins/ember-cookie.js +0 -17
  376. package/utils/ember-page.js +0 -30
package/core/types.ts CHANGED
@@ -4,7 +4,8 @@ import type { ExtensionManager } from '@shell/types/extension-manager';
4
4
  import { PaginationSettingsStores } from '@shell/types/resources/settings';
5
5
  import type {
6
6
  ProductMetadata, ProductSinglePage,
7
- StandardProductName, RouteRecordRawWithParams, ProductChildGroup,
7
+ StandardProductName, RouteRecordRawWithParams, ProductChild,
8
+ ProductChildGroup,
8
9
  ProductChildPage
9
10
  } from './plugin-types';
10
11
 
@@ -552,7 +553,7 @@ export interface DSLReturnType {
552
553
  * @param headers {@link HeaderOptions[]}
553
554
  * @returns {@link void}
554
555
  */
555
- headers: (type: string, headers: HeaderOptions[]) => void;
556
+ headers: (type: string, headers?: HeaderOptions[], paginationHeaders?: PaginationHeaderOptions[]) => void;
556
557
 
557
558
  /**
558
559
  * Create and register a new product
@@ -562,12 +563,30 @@ export interface DSLReturnType {
562
563
  product: (options: ProductOptions) => void;
563
564
 
564
565
  /**
565
- * Create and label a group. The group will show up in navigation
566
- * @param groupNane Name of the group
567
- * @param label Label in navigation
566
+ /**
567
+ * Remap group display names in the side-menu navigation.
568
+ *
569
+ * Each entry matches a group's internal ID (via string or regex) and replaces its display label
570
+ * with a new name. This only changes how the group is labelled in the UI — it does not move
571
+ * resources between groups.
572
+ *
573
+ * @param match String, string for a regex or a regex object to match against group names
574
+ * @param replace Replacement string or function for the display name
575
+ * @param weight Priority for applying this mapping (higher numbers applied first, default 5)
576
+ * @param continueOnMatch If true, continue matching other rules after this one matches
577
+ * @returns {@link void}
578
+ */
579
+ mapGroup: (match: string | RegExp, replace: string | Function, weight?: number, continueOnMatch?: boolean) => void;
580
+
581
+ /**
582
+ * Remap a type ID to a display name
583
+ * @param match String, string for a regex or a regex object to match against type IDs
584
+ * @param replace Replacement string or function for the display name
585
+ * @param weight Priority for applying this mapping (higher numbers applied first, default 5)
586
+ * @param continueOnMatch If true, continue matching other rules after this one matches
568
587
  * @returns {@link void}
569
588
  */
570
- mapGroup: (groupName: string, label: string) => void;
589
+ mapType: (match: string | RegExp, replace: string | Function, weight?: number, continueOnMatch?: boolean) => void;
571
590
 
572
591
  /**
573
592
  * Create and configure a myriad of options for a type
@@ -595,18 +614,36 @@ export interface DSLReturnType {
595
614
  weightType: (input: string, weight: number, forBasic: boolean) => void;
596
615
 
597
616
  /**
598
- * Leaving these here for completeness but I don't think these should be advertised as useable to plugin creators.
617
+ * Never show the specified type in the navigation
618
+ * @param regexOrString String, string for a regex or a regex object to match against type names
619
+ * @returns {@link void}
620
+ */
621
+ ignoreType: (regexOrString: string | RegExp) => void;
622
+
623
+ /**
624
+ * Never show the specified group or any types in it
625
+ * @param regexOrString String, string for a regex or a regex object to match against group names
626
+ * @param fn Conditional function that accepts getters and returns true if the group should be ignored
627
+ * @returns {@link void}
599
628
  */
600
- // componentForType: (type: string, replacementType: string)
601
- // groupBy: (type: string, field: string)
602
- // hideBulkActions: (type: string, field)
603
- // ignoreGroup: (regexOrString)
604
- // ignoreType: (regexOrString)
605
- //
606
- // mapType: (match, replace)
607
- // moveType: (match, group)
608
- // setGroupDefaultType: (input, defaultType)
609
- // spoofedType: (obj)
629
+ ignoreGroup: (regexOrString: string | RegExp, fn?: (getters: any) => boolean) => void;
630
+
631
+ /**
632
+ * Move a resource type into a different navigation group
633
+ * @param match String or regex to match against resource type names
634
+ * @param group Target group name to move the matched types into
635
+ * @param weight Ordering weight for the mapping (default: 5)
636
+ * @returns {@link void}
637
+ */
638
+ moveType: (match: string | RegExp, group: string, weight?: number) => void;
639
+
640
+ /**
641
+ * Control visibility of bulk actions (e.g. delete) in the list view toolbar for a specific resource type
642
+ * @param type The resource type to configure
643
+ * @param hide Whether to hide bulk actions. Set to `true` to hide them
644
+ * @returns {@link void}
645
+ */
646
+ hideBulkActions: (type: string, hide: boolean) => void;
610
647
 
611
648
  labelGroup: (group: string, label: string | undefined, labelKey?: string) => void;
612
649
 
@@ -663,8 +700,9 @@ export interface IExtension {
663
700
  * @param name
664
701
  * @param config
665
702
  */
666
- addProduct(product: ProductMetadata, config: ProductChildGroup[]): void;
667
703
  addProduct(product: ProductMetadata, config: ProductChildPage[]): void;
704
+ addProduct(product: ProductMetadata, config: ProductChildGroup[]): void;
705
+ addProduct(product: ProductMetadata, config: ProductChild[]): void;
668
706
 
669
707
  /**
670
708
  * Add a product to the sidebar, without children (no side menu, single page only)
@@ -693,8 +731,9 @@ export interface IExtension {
693
731
  * @param product Product to be extended
694
732
  * @param config Product extension configuration
695
733
  */
696
- extendProduct(product: StandardProductName | string, config: ProductChildGroup[]): void;
697
734
  extendProduct(product: StandardProductName | string, config: ProductChildPage[]): void;
735
+ extendProduct(product: StandardProductName | string, config: ProductChildGroup[]): void;
736
+ extendProduct(product: StandardProductName | string, config: ProductChild[]): void;
698
737
 
699
738
  /**
700
739
  * Add a locale to the i18n store
@@ -0,0 +1,128 @@
1
+ import { shallowMount } from '@vue/test-utils';
2
+ import DetailWorkspace from '@shell/detail/management.cattle.io.fleetworkspace.vue';
3
+ import { FLEET } from '@shell/config/types';
4
+ import { NAME as FLEET_NAME } from '@shell/config/product/fleet';
5
+ import { BLANK_CLUSTER } from '@shell/store/store-types.js';
6
+
7
+ describe('component: DetailWorkspace', () => {
8
+ const mockValue = {
9
+ id: 'fleet-default',
10
+ counts: {
11
+ gitRepos: 3,
12
+ helmOps: 2,
13
+ clusters: 5,
14
+ cluster: 5,
15
+ clusterGroup: 1,
16
+ clusterGroups: 1,
17
+ },
18
+ };
19
+
20
+ const mockRouter = { push: jest.fn() };
21
+
22
+ const defaultStore = {
23
+ commit: jest.fn(),
24
+ dispatch: jest.fn(),
25
+ getters: {
26
+ 'i18n/t': (key: string) => key,
27
+ 'i18n/exists': () => true,
28
+ currentProduct: { name: FLEET_NAME },
29
+ },
30
+ };
31
+
32
+ const createWrapper = (props = {}) => {
33
+ return shallowMount(DetailWorkspace, {
34
+ props: { value: mockValue, ...props },
35
+ global: {
36
+ mocks: {
37
+ $store: defaultStore,
38
+ $route: { params: {} },
39
+ $router: mockRouter,
40
+ },
41
+ stubs: {
42
+ CountBox: { template: '<div />', props: ['clickable', 'count', 'name', 'primaryColorVar'] },
43
+ ResourceTabs: { template: '<div />' },
44
+ },
45
+ },
46
+ });
47
+ };
48
+
49
+ beforeEach(() => {
50
+ jest.clearAllMocks();
51
+ });
52
+
53
+ describe('applicationRoute', () => {
54
+ it('should return the fleet application route', () => {
55
+ const wrapper = createWrapper();
56
+
57
+ expect(wrapper.vm.applicationRoute).toStrictEqual({
58
+ name: 'c-cluster-fleet-application',
59
+ params: { cluster: BLANK_CLUSTER },
60
+ });
61
+ });
62
+ });
63
+
64
+ describe('clustersRoute', () => {
65
+ it('should return the fleet clusters list route', () => {
66
+ const wrapper = createWrapper();
67
+
68
+ expect(wrapper.vm.clustersRoute).toStrictEqual({
69
+ name: 'c-cluster-product-resource',
70
+ params: {
71
+ cluster: BLANK_CLUSTER,
72
+ product: FLEET_NAME,
73
+ resource: FLEET.CLUSTER,
74
+ },
75
+ });
76
+ });
77
+ });
78
+
79
+ describe('clusterGroupsRoute', () => {
80
+ it('should return the fleet cluster groups list route', () => {
81
+ const wrapper = createWrapper();
82
+
83
+ expect(wrapper.vm.clusterGroupsRoute).toStrictEqual({
84
+ name: 'c-cluster-product-resource',
85
+ params: {
86
+ cluster: BLANK_CLUSTER,
87
+ product: FLEET_NAME,
88
+ resource: FLEET.CLUSTER_GROUP,
89
+ },
90
+ });
91
+ });
92
+ });
93
+
94
+ describe('setWorkspaceAndNavigate', () => {
95
+ it('should commit updateWorkspace with the workspace id', () => {
96
+ const wrapper = createWrapper();
97
+ const route = wrapper.vm.applicationRoute;
98
+
99
+ wrapper.vm.setWorkspaceAndNavigate(route);
100
+
101
+ expect(defaultStore.commit).toHaveBeenCalledWith('updateWorkspace', {
102
+ value: 'fleet-default',
103
+ getters: defaultStore.getters,
104
+ });
105
+ });
106
+
107
+ it('should dispatch prefs/set with the workspace id', () => {
108
+ const wrapper = createWrapper();
109
+ const route = wrapper.vm.applicationRoute;
110
+
111
+ wrapper.vm.setWorkspaceAndNavigate(route);
112
+
113
+ expect(defaultStore.dispatch).toHaveBeenCalledWith('prefs/set', {
114
+ key: expect.any(String),
115
+ value: 'fleet-default',
116
+ });
117
+ });
118
+
119
+ it('should navigate to the given route', () => {
120
+ const wrapper = createWrapper();
121
+ const route = wrapper.vm.clustersRoute;
122
+
123
+ wrapper.vm.setWorkspaceAndNavigate(route);
124
+
125
+ expect(mockRouter.push).toHaveBeenCalledWith(route);
126
+ });
127
+ });
128
+ });
@@ -0,0 +1,41 @@
1
+ import podDetail from '@shell/detail/pod.vue';
2
+
3
+ const { containers } = podDetail.computed;
4
+
5
+ describe('view: pod', () => {
6
+ it('should not use 2x icon sizing in init container column', () => {
7
+ const initContainer = { name: 'init', image: 'init:latest' };
8
+ const appContainer = { name: 'app', image: 'app:latest' };
9
+
10
+ const rows = containers.call({
11
+ allContainers: [appContainer, initContainer],
12
+ allStatuses: [{
13
+ name: 'app',
14
+ ready: true,
15
+ state: {},
16
+ lastState: {}
17
+ }, {
18
+ name: 'init',
19
+ ready: false,
20
+ state: {},
21
+ lastState: {}
22
+ }],
23
+ dateTimeFormat: () => '',
24
+ t: () => '',
25
+ value: {
26
+ containerActions: [],
27
+ containerIsInit: (container: { name: string }) => container.name === 'init',
28
+ containerStateColor: () => 'text-success',
29
+ containerStateDisplay: () => 'running',
30
+ openLogs: jest.fn(),
31
+ openShell: jest.fn(),
32
+ },
33
+ });
34
+
35
+ const initRow = rows.find((row: { name: string }) => row.name === 'init');
36
+ const appRow = rows.find((row: { name: string }) => row.name === 'app');
37
+
38
+ expect(initRow.initIcon).toBe('icon-checkmark text-success ml-5');
39
+ expect(appRow.initIcon).toBe('icon-minus text-muted ml-5');
40
+ });
41
+ });
@@ -5,6 +5,12 @@ import CopyCode from '@shell/components/CopyCode';
5
5
  import Tab from '@shell/components/Tabbed/Tab';
6
6
  import { allHash } from '@shell/utils/promise';
7
7
 
8
+ // Couple of things wrong here
9
+ // 1. It should be in pkg/harvester-manager extension
10
+ // 2. It's not used when the harvester-ui extension is loaded
11
+ // - extension has it's own detail/harvesterhci.io.management.cluster.vue which supersedes this
12
+ // - unless harvester standalone uses it, it should not exist in the harvester-ui extension
13
+
8
14
  export default {
9
15
  emits: ['input'],
10
16
 
@@ -31,8 +37,6 @@ export default {
31
37
 
32
38
  const res = await allHash(hash);
33
39
 
34
- this.allNodes = res.allNodes || [];
35
- this.allNodePools = res.allNodePools || [];
36
40
  this.clusterToken = res.clusterToken;
37
41
  },
38
42
 
@@ -4,6 +4,8 @@ import ResourceTabs from '@shell/components/form/ResourceTabs';
4
4
  import { SCOPE_NAMESPACE, SCOPE_CLUSTER } from '@shell/components/RoleBindings.vue';
5
5
  import { NAME as FLEET_NAME } from '@shell/config/product/fleet';
6
6
  import { FLEET } from '@shell/config/types';
7
+ import { BLANK_CLUSTER } from '@shell/store/store-types.js';
8
+ import { WORKSPACE } from '@shell/store/prefs';
7
9
 
8
10
  export default {
9
11
  name: 'DetailWorkspace',
@@ -34,6 +36,35 @@ export default {
34
36
  return this.t(`typeLabel."${ FLEET.HELM_OP }"`, { count: this.value.counts.helmOps });
35
37
  },
36
38
 
39
+ applicationRoute() {
40
+ return {
41
+ name: 'c-cluster-fleet-application',
42
+ params: { cluster: BLANK_CLUSTER }
43
+ };
44
+ },
45
+
46
+ clustersRoute() {
47
+ return {
48
+ name: 'c-cluster-product-resource',
49
+ params: {
50
+ cluster: BLANK_CLUSTER,
51
+ product: FLEET_NAME,
52
+ resource: FLEET.CLUSTER,
53
+ }
54
+ };
55
+ },
56
+
57
+ clusterGroupsRoute() {
58
+ return {
59
+ name: 'c-cluster-product-resource',
60
+ params: {
61
+ cluster: BLANK_CLUSTER,
62
+ product: FLEET_NAME,
63
+ resource: FLEET.CLUSTER_GROUP,
64
+ }
65
+ };
66
+ },
67
+
37
68
  SCOPE_NAMESPACE() {
38
69
  return SCOPE_NAMESPACE;
39
70
  },
@@ -46,6 +77,16 @@ export default {
46
77
  return FLEET_NAME;
47
78
  }
48
79
  },
80
+
81
+ methods: {
82
+ setWorkspaceAndNavigate(route) {
83
+ const workspaceId = this.value.id;
84
+
85
+ this.$store.commit('updateWorkspace', { value: workspaceId, getters: this.$store.getters });
86
+ this.$store.dispatch('prefs/set', { key: WORKSPACE, value: workspaceId });
87
+ this.$router.push(route);
88
+ }
89
+ }
49
90
  };
50
91
  </script>
51
92
 
@@ -58,6 +99,8 @@ export default {
58
99
  :count="value.counts.gitRepos"
59
100
  :name="gitRepoLabel"
60
101
  :primary-color-var="'--sizzle-3'"
102
+ :clickable="true"
103
+ @click="setWorkspaceAndNavigate(applicationRoute)"
61
104
  />
62
105
  </div>
63
106
  <div class="col span-3">
@@ -65,6 +108,8 @@ export default {
65
108
  :count="value.counts.helmOps"
66
109
  :name="helmOpsLabel"
67
110
  :primary-color-var="'--sizzle-3'"
111
+ :clickable="true"
112
+ @click="setWorkspaceAndNavigate(applicationRoute)"
68
113
  />
69
114
  </div>
70
115
  <div class="col span-3">
@@ -72,6 +117,8 @@ export default {
72
117
  :count="value.counts.clusters"
73
118
  :name="clustersLabel"
74
119
  :primary-color-var="'--sizzle-1'"
120
+ :clickable="true"
121
+ @click="setWorkspaceAndNavigate(clustersRoute)"
75
122
  />
76
123
  </div>
77
124
  <div class="col span-3">
@@ -79,6 +126,8 @@ export default {
79
126
  :count="value.counts.clusterGroups"
80
127
  :name="clusterGroupsLabel"
81
128
  :primary-color-var="'--sizzle-2'"
129
+ :clickable="true"
130
+ @click="setWorkspaceAndNavigate(clusterGroupsRoute)"
82
131
  />
83
132
  </div>
84
133
  </div>
package/detail/pod.vue CHANGED
@@ -106,7 +106,7 @@ export default {
106
106
  availableActions: this.value.containerActions,
107
107
  stateObj: status, // Required if there's a description
108
108
  stateDescription: descriptions.join(' | '), // Required to display the description
109
- initIcon: this.value.containerIsInit(container) ? 'icon-checkmark icon-2x text-success ml-5' : 'icon-minus icon-2x text-muted ml-5',
109
+ initIcon: this.value.containerIsInit(container) ? 'icon-checkmark text-success ml-5' : 'icon-minus text-muted ml-5',
110
110
 
111
111
  // Call openShell here so that opening the shell
112
112
  // at the container level still has 'this' in scope.
@@ -147,10 +147,6 @@ export default {
147
147
  fetchOne.normanClusters = this.$store.dispatch('rancher/findAll', { type: NORMAN.CLUSTER });
148
148
  }
149
149
 
150
- if ( this.value.isRke1 && this.$store.getters['isRancher'] ) {
151
- fetchOne.normanNodePools = this.$store.dispatch('rancher/findAll', { type: NORMAN.NODE_POOL });
152
- }
153
-
154
150
  const fetchOneRes = await allHash(fetchOne);
155
151
 
156
152
  this.allMachines = fetchOneRes.machines || [];
@@ -203,10 +199,6 @@ export default {
203
199
  if ( this.$store.getters['management/canList'](MANAGEMENT.RKE_TEMPLATE) ) {
204
200
  this.$store.dispatch('management/findAll', { type: MANAGEMENT.RKE_TEMPLATE });
205
201
  }
206
-
207
- if ( this.$store.getters['management/canList'](MANAGEMENT.RKE_TEMPLATE_REVISION) ) {
208
- this.$store.dispatch('management/findAll', { type: MANAGEMENT.RKE_TEMPLATE_REVISION });
209
- }
210
202
  },
211
203
 
212
204
  created() {
@@ -284,9 +276,11 @@ export default {
284
276
  extCustomParams: null,
285
277
  extDetailTabs: {
286
278
  machines: true, // in this component
279
+ nodes: true, // in this component
287
280
  logs: true, // in this component
288
281
  registration: true, // in this component
289
282
  snapshots: true, // in this component
283
+ autoscaler: true, // in this component
290
284
  related: true, // in ResourceTabs
291
285
  events: true, // in ResourceTabs
292
286
  conditions: true, // in ResourceTabs
@@ -451,7 +445,7 @@ export default {
451
445
  },
452
446
 
453
447
  showNodes() {
454
- return !this.showMachines && this.haveNodes && !!this.nodes.length && this.extDetailTabs.machines;
448
+ return !this.showMachines && this.haveNodes && !!this.nodes.length && this.extDetailTabs.nodes;
455
449
  },
456
450
 
457
451
  showSnapshots() {
@@ -628,7 +622,7 @@ export default {
628
622
  },
629
623
 
630
624
  showAutoScalerTab() {
631
- return isAutoscalerFeatureFlagEnabled(this.$store) && this.value.hasAccessToAutoscalerConfigMap;
625
+ return isAutoscalerFeatureFlagEnabled(this.$store) && this.value.hasAccessToAutoscalerConfigMap && this.extDetailTabs.autoscaler;
632
626
  }
633
627
  },
634
628
 
@@ -4,6 +4,7 @@ import HelmOp from '@shell/models/fleet.cattle.io.helmop';
4
4
  import HelmOpComponent from '@shell/edit/fleet.cattle.io.helmop.vue';
5
5
  import FleetSecretSelector from '@shell/components/fleet/FleetSecretSelector.vue';
6
6
  import FleetConfigMapSelector from '@shell/components/fleet/FleetConfigMapSelector.vue';
7
+ import { createStore } from 'vuex';
7
8
 
8
9
  const mockStore = {
9
10
  dispatch: jest.fn(),
@@ -85,6 +86,14 @@ const initHelmOp = (props: any, options = {}) => {
85
86
  value,
86
87
  ...props
87
88
  },
89
+ provide: {
90
+ store: createStore({
91
+ getters: {
92
+ currentStore: () => 'current_store',
93
+ 'management/paginationEnabled': () => () => false
94
+ }
95
+ })
96
+ },
88
97
  computed: mockComputed,
89
98
  global: { mocks },
90
99
  };
@@ -30,7 +30,6 @@ describe('view: kontainerdriver should', () => {
30
30
  active: true,
31
31
  checksum: '',
32
32
  url: '',
33
- uiUrl: '',
34
33
  whitelistDomains: []
35
34
  }
36
35
  },
@@ -65,32 +64,22 @@ describe('view: kontainerdriver should', () => {
65
64
 
66
65
  it('have "Create" button enabled and disabled depending on validation results', async() => {
67
66
  const urlField = wrapper.find('[data-testid="driver-create-url-field"]');
68
- const uiurlField = wrapper.find('[data-testid="driver-create-uiurl-field"]');
69
67
  const checksumField = wrapper.find('[data-testid="driver-create-checksum-field"]');
70
68
  const saveButton = wrapper.find('[data-testid="kontainer-driver-edit-save"]').element as HTMLInputElement;
71
69
 
72
70
  const testCases = [
73
71
  {
74
72
  url: '1111',
75
- uiurl: 'http://test.com',
76
73
  checksum: 'aaaaaBBBBdddd',
77
74
  result: true
78
75
  },
79
76
  {
80
77
  url: 'http://test.com',
81
- uiurl: '1111',
82
- checksum: 'aaaaaBBBBdddd',
83
- result: true
84
- },
85
- {
86
- url: 'http://test.com',
87
- uiurl: 'http://test.com',
88
78
  checksum: '!!!',
89
79
  result: true
90
80
  },
91
81
  {
92
82
  url: 'http://test.com',
93
- uiurl: 'http://test.com',
94
83
  checksum: 'aaaaaBBBBdddd',
95
84
  result: false
96
85
  }
@@ -99,8 +88,6 @@ describe('view: kontainerdriver should', () => {
99
88
  for (const testCase of testCases) {
100
89
  urlField.setValue(testCase.url);
101
90
  await nextTick();
102
- uiurlField.setValue(testCase.uiurl);
103
- await nextTick();
104
91
  checksumField.setValue(testCase.checksum);
105
92
  await nextTick();
106
93
 
@@ -31,7 +31,6 @@ describe('view: nodedriver should', () => {
31
31
  active: true,
32
32
  checksum: '',
33
33
  url: '',
34
- uiUrl: '',
35
34
  whitelistDomains: []
36
35
  }
37
36
  },
@@ -65,21 +64,16 @@ describe('view: nodedriver should', () => {
65
64
  });
66
65
 
67
66
  it.each`
68
- url | uiurl | checksum | expected
69
- ${ '1111' } | ${ 'http://test.com' } | ${ 'aaaaaBBBBdddd' } | ${ true }
70
- ${ 'http://test.com' } | ${ '1111' } | ${ 'aaaaaBBBBdddd' } | ${ true }
71
- ${ 'http://test.com' } | ${ 'http://test.com' } | ${ '!!!' } | ${ true }
72
- ${ 'http://test.com' } | ${ 'http://test.com' } | ${ 'aaaaaBBBBdddd' } | ${ false }
73
- `('have "Create" button enabled and disabled depending on validation results', async({
74
- url, uiurl, checksum, expected
75
- }) => {
67
+ url | checksum | expected
68
+ ${ '1111' } | ${ 'aaaaaBBBBdddd' } | ${ true }
69
+ ${ 'http://test.com' } | ${ '!!!' } | ${ true }
70
+ ${ 'http://test.com' } | ${ 'aaaaaBBBBdddd' } | ${ false }
71
+ `('have "Create" button enabled and disabled depending on validation results', async({ url, checksum, expected }) => {
76
72
  const urlField = wrapper.find('[data-testid="driver-create-url-field"]');
77
- const uiurlField = wrapper.find('[data-testid="driver-create-uiurl-field"]');
78
73
  const checksumField = wrapper.find('[data-testid="driver-create-checksum-field"]');
79
74
  const saveButton = wrapper.find('[data-testid="node-driver-edit-save"]').element as HTMLInputElement;
80
75
 
81
76
  urlField.setValue(url);
82
- uiurlField.setValue(uiurl);
83
77
  checksumField.setValue(checksum);
84
78
 
85
79
  await nextTick();
@@ -2,6 +2,7 @@ import { nextTick } from 'vue';
2
2
  import { mount } from '@vue/test-utils';
3
3
  import RestoreComponent from '@shell/edit/resources.cattle.io.restore.vue';
4
4
  import { _CREATE } from '@shell/config/query-params';
5
+ import { createStore } from 'vuex';
5
6
 
6
7
  describe('view: restore storage source switching', () => {
7
8
  let wrapper: any;
@@ -30,6 +31,14 @@ describe('view: restore storage source switching', () => {
30
31
  };
31
32
 
32
33
  return mount(RestoreComponent, {
34
+ provide: {
35
+ store: createStore({
36
+ getters: {
37
+ currentStore: () => 'current_store',
38
+ 'cluster/paginationEnabled': () => () => false
39
+ }
40
+ })
41
+ },
33
42
  global: {
34
43
  mocks: {
35
44
  $store: mockStore,
@@ -65,7 +65,9 @@ exports[`component: General rendering & initial state should render with default
65
65
  clearable="false"
66
66
  closeonselect="true"
67
67
  disabled="false"
68
+ filterable="true"
68
69
  hovertooltip="true"
70
+ instore="cluster"
69
71
  label="auditPolicy.general.verbosity.level.label"
70
72
  loading="false"
71
73
  localizedlabel="false"
@@ -73,8 +75,12 @@ exports[`component: General rendering & initial state should render with default
73
75
  nooptionslabelkey="labelSelect.noOptions.empty"
74
76
  optionlabel="label"
75
77
  options="[object Object],[object Object],[object Object],[object Object]"
78
+ placeholder=""
76
79
  reduce="[Function]"
77
80
  required="false"
81
+ requiredirty="true"
82
+ rules=""
83
+ searchable="false"
78
84
  selectable="[Function]"
79
85
  value="0"
80
86
  />