@podman-desktop/tests-playwright 1.25.0-next.202512121024-9b149ef → 1.25.0-next.202512121222-dd9b4f2
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.
- package/dist/index.d.ts +2 -96
- package/dist/index.js +679 -614
- package/dist/index.js.map +1 -1
- package/dist/{model/pages/resource-cli-card-page.d.ts → playwright.config.d.ts} +2 -3
- package/dist/tests/playwright/src/index.d.ts +96 -0
- package/dist/{model → tests/playwright/src/model}/components/dropdown-component.d.ts +1 -18
- package/dist/tests/playwright/src/model/pages/authentication-page.d.ts +11 -0
- package/dist/tests/playwright/src/model/pages/base-page.d.ts +6 -0
- package/dist/{model → tests/playwright/src/model}/pages/build-image-page.d.ts +1 -18
- package/dist/{model → tests/playwright/src/model}/pages/cli-tools-page.d.ts +1 -18
- package/dist/tests/playwright/src/model/pages/cluster-creation-base-page.d.ts +13 -0
- package/dist/tests/playwright/src/model/pages/command-palette.d.ts +7 -0
- package/dist/tests/playwright/src/model/pages/compose-onboarding/compose-failed-page.d.ts +6 -0
- package/dist/tests/playwright/src/model/pages/compose-onboarding/compose-local-install-page.d.ts +6 -0
- package/dist/tests/playwright/src/model/pages/compose-onboarding/compose-onboarding-page.d.ts +6 -0
- package/dist/tests/playwright/src/model/pages/compose-onboarding/compose-version-page.d.ts +7 -0
- package/dist/tests/playwright/src/model/pages/compose-onboarding/compose-wide-install-page.d.ts +6 -0
- package/dist/{model → tests/playwright/src/model}/pages/container-details-page.d.ts +1 -18
- package/dist/{model → tests/playwright/src/model}/pages/containers-page.d.ts +1 -18
- package/dist/tests/playwright/src/model/pages/create-kind-cluster-page.d.ts +16 -0
- package/dist/tests/playwright/src/model/pages/create-machine-page.d.ts +19 -0
- package/dist/tests/playwright/src/model/pages/create-network-page.d.ts +14 -0
- package/dist/tests/playwright/src/model/pages/create-pod-page.d.ts +12 -0
- package/dist/tests/playwright/src/model/pages/create-volume-page.d.ts +13 -0
- package/dist/{model → tests/playwright/src/model}/pages/dashboard-page.d.ts +1 -18
- package/dist/{model → tests/playwright/src/model}/pages/deploy-to-kubernetes-page.d.ts +2 -19
- package/dist/tests/playwright/src/model/pages/details-page.d.ts +16 -0
- package/dist/tests/playwright/src/model/pages/docker-compatibility-page.d.ts +12 -0
- package/dist/tests/playwright/src/model/pages/experimental-page.d.ts +12 -0
- package/dist/{model → tests/playwright/src/model}/pages/extension-card-page.d.ts +1 -18
- package/dist/tests/playwright/src/model/pages/extension-catalog-card-page.d.ts +14 -0
- package/dist/tests/playwright/src/model/pages/extension-details-page.d.ts +20 -0
- package/dist/{model → tests/playwright/src/model}/pages/extensions-page.d.ts +2 -19
- package/dist/{model → tests/playwright/src/model}/pages/forms/machine-creation-form.d.ts +4 -21
- package/dist/{model → tests/playwright/src/model}/pages/image-details-page.d.ts +1 -18
- package/dist/tests/playwright/src/model/pages/image-edit-page.d.ts +14 -0
- package/dist/{model → tests/playwright/src/model}/pages/images-page.d.ts +3 -20
- package/dist/tests/playwright/src/model/pages/kubernetes-bar.d.ts +13 -0
- package/dist/{model → tests/playwright/src/model}/pages/kubernetes-context-page.d.ts +1 -18
- package/dist/{model → tests/playwright/src/model}/pages/kubernetes-dashboard-page.d.ts +2 -19
- package/dist/tests/playwright/src/model/pages/kubernetes-resource-details-page.d.ts +18 -0
- package/dist/tests/playwright/src/model/pages/kubernetes-resource-page.d.ts +12 -0
- package/dist/{model → tests/playwright/src/model}/pages/main-page.d.ts +1 -18
- package/dist/tests/playwright/src/model/pages/network-details-page.d.ts +16 -0
- package/dist/{model → tests/playwright/src/model}/pages/networks-page.d.ts +1 -18
- package/dist/tests/playwright/src/model/pages/onboarding-page.d.ts +13 -0
- package/dist/tests/playwright/src/model/pages/podman-kube-play-page.d.ts +20 -0
- package/dist/tests/playwright/src/model/pages/podman-machine-details-page.d.ts +19 -0
- package/dist/tests/playwright/src/model/pages/podman-onboarding-page.d.ts +11 -0
- package/dist/tests/playwright/src/model/pages/pods-details-page.d.ts +23 -0
- package/dist/tests/playwright/src/model/pages/pods-page.d.ts +18 -0
- package/dist/tests/playwright/src/model/pages/preferences-page.d.ts +15 -0
- package/dist/tests/playwright/src/model/pages/proxy-page.d.ts +21 -0
- package/dist/{model → tests/playwright/src/model}/pages/pull-image-page.d.ts +1 -18
- package/dist/tests/playwright/src/model/pages/registries-page.d.ts +19 -0
- package/dist/tests/playwright/src/model/pages/resource-card-page.d.ts +11 -0
- package/dist/tests/playwright/src/model/pages/resource-cli-card-page.d.ts +3 -0
- package/dist/tests/playwright/src/model/pages/resource-connection-card-page.d.ts +16 -0
- package/dist/tests/playwright/src/model/pages/resource-details-page.d.ts +8 -0
- package/dist/tests/playwright/src/model/pages/resources-page.d.ts +10 -0
- package/dist/{model → tests/playwright/src/model}/pages/run-image-page.d.ts +2 -19
- package/dist/tests/playwright/src/model/pages/select-image-page.d.ts +18 -0
- package/dist/tests/playwright/src/model/pages/settings-bar.d.ts +19 -0
- package/dist/tests/playwright/src/model/pages/settings-page.d.ts +10 -0
- package/dist/{model → tests/playwright/src/model}/pages/tasks-page.d.ts +1 -18
- package/dist/{model → tests/playwright/src/model}/pages/troubleshooting-page.d.ts +1 -18
- package/dist/tests/playwright/src/model/pages/volume-details-page.d.ts +10 -0
- package/dist/{model → tests/playwright/src/model}/pages/volumes-page.d.ts +1 -18
- package/dist/{model → tests/playwright/src/model}/pages/welcome-page.d.ts +1 -18
- package/dist/tests/playwright/src/model/workbench/navigation.d.ts +33 -0
- package/dist/tests/playwright/src/model/workbench/status-bar.d.ts +24 -0
- package/dist/{runner → tests/playwright/src/runner}/podman-desktop-runner.d.ts +2 -19
- package/dist/tests/playwright/src/special-specs/podman-remote/podman-remote.spec.d.ts +2 -0
- package/dist/tests/playwright/src/specs/builtin-extension-smoke.spec.d.ts +18 -0
- package/dist/tests/playwright/src/specs/cancelable-task-smoke.spec.d.ts +18 -0
- package/dist/tests/playwright/src/specs/cli-tools-smoke.spec.d.ts +18 -0
- package/dist/tests/playwright/src/specs/compose-onboarding-smoke.spec.d.ts +18 -0
- package/dist/tests/playwright/src/specs/container-smoke.spec.d.ts +18 -0
- package/dist/tests/playwright/src/specs/docker-compatibility-smoke.spec.d.ts +18 -0
- package/dist/tests/playwright/src/specs/extension-installation-smoke.spec.d.ts +18 -0
- package/dist/tests/playwright/src/specs/extension-onboarding-smoke.spec.d.ts +18 -0
- package/dist/tests/playwright/src/specs/image-manifest-smoke.spec.d.ts +18 -0
- package/dist/tests/playwright/src/specs/image-push-to-registry-smoke.spec.d.ts +18 -0
- package/dist/tests/playwright/src/specs/image-search.spec.d.ts +18 -0
- package/dist/tests/playwright/src/specs/image-smoke.spec.d.ts +18 -0
- package/dist/tests/playwright/src/specs/kind.spec.d.ts +18 -0
- package/dist/tests/playwright/src/specs/kubernetes-context-smoke.spec.d.ts +18 -0
- package/dist/tests/playwright/src/specs/kubernetes-image-push.spec.d.ts +18 -0
- package/dist/tests/playwright/src/specs/kubernetes-networking.spec.d.ts +18 -0
- package/dist/tests/playwright/src/specs/kubernetes-status-bar-providers.spec.d.ts +18 -0
- package/dist/tests/playwright/src/specs/kubernetes.spec.d.ts +18 -0
- package/dist/tests/playwright/src/specs/network-smoke.spec.d.ts +18 -0
- package/dist/tests/playwright/src/specs/pod-smoke.spec.d.ts +18 -0
- package/dist/tests/playwright/src/specs/podman-compose-smoke.spec.d.ts +18 -0
- package/dist/tests/playwright/src/specs/podman-extension-smoke.spec.d.ts +18 -0
- package/dist/tests/playwright/src/specs/podman-kube-play-smoke.spec.d.ts +18 -0
- package/dist/tests/playwright/src/specs/preferences.spec.d.ts +18 -0
- package/dist/tests/playwright/src/specs/proxy-smoke.spec.d.ts +18 -0
- package/dist/tests/playwright/src/specs/registry-image.spec.d.ts +18 -0
- package/dist/tests/playwright/src/specs/registry.spec.d.ts +18 -0
- package/dist/tests/playwright/src/specs/troubleshooting-smoke.spec.d.ts +18 -0
- package/dist/tests/playwright/src/specs/volume-smoke.spec.d.ts +18 -0
- package/dist/tests/playwright/src/specs/welcome-page-smoke.spec.d.ts +18 -0
- package/dist/tests/playwright/src/specs/yaml-smoke.spec.d.ts +18 -0
- package/dist/tests/playwright/src/specs/z-podman-machine-dashboard-onboarding.spec.d.ts +18 -0
- package/dist/tests/playwright/src/specs/z-podman-machine-onboarding.spec.d.ts +18 -0
- package/dist/tests/playwright/src/specs/z-podman-machine-resources.spec.d.ts +18 -0
- package/dist/tests/playwright/src/specs/z-podman-machine-tests.spec.d.ts +18 -0
- package/dist/{utility → tests/playwright/src/utility}/auth-utils.d.ts +1 -18
- package/dist/{utility → tests/playwright/src/utility}/cluster-operations.d.ts +5 -22
- package/dist/tests/playwright/src/utility/fixtures.d.ts +18 -0
- package/dist/{utility → tests/playwright/src/utility}/kubernetes.d.ts +3 -20
- package/dist/{utility → tests/playwright/src/utility}/operations.d.ts +4 -22
- package/dist/tests/playwright/src/utility/provider.d.ts +4 -0
- package/dist/{utility → tests/playwright/src/utility}/wait.d.ts +1 -18
- package/package.json +2 -1
- package/dist/model/pages/authentication-page.d.ts +0 -28
- package/dist/model/pages/base-page.d.ts +0 -23
- package/dist/model/pages/cluster-creation-base-page.d.ts +0 -30
- package/dist/model/pages/command-palette.d.ts +0 -24
- package/dist/model/pages/compose-onboarding/compose-failed-page.d.ts +0 -23
- package/dist/model/pages/compose-onboarding/compose-local-install-page.d.ts +0 -23
- package/dist/model/pages/compose-onboarding/compose-onboarding-page.d.ts +0 -23
- package/dist/model/pages/compose-onboarding/compose-version-page.d.ts +0 -24
- package/dist/model/pages/compose-onboarding/compose-wide-install-page.d.ts +0 -23
- package/dist/model/pages/create-kind-cluster-page.d.ts +0 -33
- package/dist/model/pages/create-machine-page.d.ts +0 -36
- package/dist/model/pages/create-network-page.d.ts +0 -31
- package/dist/model/pages/create-pod-page.d.ts +0 -29
- package/dist/model/pages/create-volume-page.d.ts +0 -30
- package/dist/model/pages/details-page.d.ts +0 -33
- package/dist/model/pages/docker-compatibility-page.d.ts +0 -29
- package/dist/model/pages/experimental-page.d.ts +0 -29
- package/dist/model/pages/extension-catalog-card-page.d.ts +0 -31
- package/dist/model/pages/extension-details-page.d.ts +0 -37
- package/dist/model/pages/image-edit-page.d.ts +0 -31
- package/dist/model/pages/kubernetes-bar.d.ts +0 -30
- package/dist/model/pages/kubernetes-resource-details-page.d.ts +0 -35
- package/dist/model/pages/kubernetes-resource-page.d.ts +0 -29
- package/dist/model/pages/network-details-page.d.ts +0 -33
- package/dist/model/pages/onboarding-page.d.ts +0 -30
- package/dist/model/pages/podman-kube-play-page.d.ts +0 -37
- package/dist/model/pages/podman-machine-details-page.d.ts +0 -36
- package/dist/model/pages/podman-onboarding-page.d.ts +0 -28
- package/dist/model/pages/pods-details-page.d.ts +0 -40
- package/dist/model/pages/pods-page.d.ts +0 -35
- package/dist/model/pages/preferences-page.d.ts +0 -32
- package/dist/model/pages/proxy-page.d.ts +0 -38
- package/dist/model/pages/registries-page.d.ts +0 -36
- package/dist/model/pages/resource-card-page.d.ts +0 -28
- package/dist/model/pages/resource-connection-card-page.d.ts +0 -33
- package/dist/model/pages/resource-details-page.d.ts +0 -25
- package/dist/model/pages/resources-page.d.ts +0 -27
- package/dist/model/pages/select-image-page.d.ts +0 -35
- package/dist/model/pages/settings-bar.d.ts +0 -36
- package/dist/model/pages/settings-page.d.ts +0 -27
- package/dist/model/pages/volume-details-page.d.ts +0 -27
- package/dist/model/workbench/navigation.d.ts +0 -50
- package/dist/model/workbench/status-bar.d.ts +0 -41
- package/dist/special-specs/podman-remote/podman-remote.spec.d.ts +0 -19
- package/dist/utility/fixtures.d.ts +0 -35
- package/dist/utility/provider.d.ts +0 -21
- /package/dist/{globalSetup → tests/playwright/src/globalSetup}/global-setup.d.ts +0 -0
- /package/dist/{model → tests/playwright/src/model}/core/extensions.d.ts +0 -0
- /package/dist/{model → tests/playwright/src/model}/core/operations.d.ts +0 -0
- /package/dist/{model → tests/playwright/src/model}/core/platforms.d.ts +0 -0
- /package/dist/{model → tests/playwright/src/model}/core/states.d.ts +0 -0
- /package/dist/{model → tests/playwright/src/model}/core/types.d.ts +0 -0
- /package/dist/{runner → tests/playwright/src/runner}/runner-options.d.ts +0 -0
- /package/dist/{setupFiles → tests/playwright/src/setupFiles}/setup-kind.d.ts +0 -0
- /package/dist/{setupFiles → tests/playwright/src/setupFiles}/setup-registry.d.ts +0 -0
- /package/dist/{special-specs → tests/playwright/src/special-specs}/installation/podman-installer.spec.d.ts +0 -0
- /package/dist/{special-specs → tests/playwright/src/special-specs}/installation/update-install.spec.d.ts +0 -0
- /package/dist/{special-specs → tests/playwright/src/special-specs}/managed-configuration/managed-configuration-no-predefined-settings.spec.d.ts +0 -0
- /package/dist/{special-specs → tests/playwright/src/special-specs}/managed-configuration/managed-configuration-user-settings.spec.d.ts +0 -0
- /package/dist/{special-specs → tests/playwright/src/special-specs}/ui-stress/ui-stress.spec.d.ts +0 -0
- /package/dist/{utility → tests/playwright/src/utility}/cleanup.d.ts +0 -0
- /package/dist/{utility → tests/playwright/src/utility}/platform.d.ts +0 -0
package/dist/index.js
CHANGED
|
@@ -1,73 +1,32 @@
|
|
|
1
|
-
import { existsSync as
|
|
2
|
-
import { join as
|
|
3
|
-
import s, { expect as a, test as
|
|
1
|
+
import { existsSync as D, rmSync as K, mkdirSync as Nt, writeFileSync as $t } from "node:fs";
|
|
2
|
+
import { join as p, resolve as Mt, dirname as Ft } from "node:path";
|
|
3
|
+
import s, { expect as a, test as B, _electron as Ot, chromium as _t } from "@playwright/test";
|
|
4
4
|
import { expect as rn } from "@playwright/test";
|
|
5
5
|
import * as M from "node:os";
|
|
6
|
-
import { execSync as
|
|
7
|
-
async function
|
|
8
|
-
console.log(`Cleaning up folder: ${i}`),
|
|
6
|
+
import { execSync as x } from "node:child_process";
|
|
7
|
+
async function Ut(i) {
|
|
8
|
+
console.log(`Cleaning up folder: ${i}`), D(i) && (console.log("Folder found, removing..."), K(i, { recursive: !0, force: !0, maxRetries: 5 }));
|
|
9
9
|
}
|
|
10
|
-
let
|
|
10
|
+
let lt = !1;
|
|
11
11
|
async function Je() {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
(
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
(function(i) {
|
|
31
|
-
i.Running = "RUNNING", i.Off = "OFF", i.Starting = "STARTING";
|
|
32
|
-
})(C || (C = {}));
|
|
33
|
-
var tt;
|
|
34
|
-
(function(i) {
|
|
35
|
-
i.Starting = "STARTING", i.Running = "RUNNING", i.Stopped = "STOPPED", i.Unknown = "UNKNOWN", i.Succeeded = "SUCCEEDED", i.None = "";
|
|
36
|
-
})(tt || (tt = {}));
|
|
37
|
-
var ht;
|
|
38
|
-
(function(i) {
|
|
39
|
-
i.Disabled = "DISABLED", i.Active = "ACTIVE", i.Running = "RUNNING", i.NotInstalled = "NOT-INSTALLED", i.Downloadable = "DOWNLOADABLE";
|
|
40
|
-
})(ht || (ht = {}));
|
|
41
|
-
var gt;
|
|
42
|
-
(function(i) {
|
|
43
|
-
i.Used = "USED", i.Unused = "UNUSED";
|
|
44
|
-
})(gt || (gt = {}));
|
|
45
|
-
var dt;
|
|
46
|
-
(function(i) {
|
|
47
|
-
i.Canceled = "canceled", i.Success = "success";
|
|
48
|
-
})(dt || (dt = {}));
|
|
49
|
-
var k;
|
|
50
|
-
(function(i) {
|
|
51
|
-
i.Start = "Start", i.Restart = "Restart", i.Stop = "Stop", i.Delete = "Delete";
|
|
52
|
-
})(k || (k = {}));
|
|
53
|
-
var Y;
|
|
54
|
-
(function(i) {
|
|
55
|
-
i[i.SelectYamlFile = 0] = "SelectYamlFile", i[i.CreateYamlFileFromScratch = 1] = "CreateYamlFileFromScratch";
|
|
56
|
-
})(Y || (Y = {}));
|
|
57
|
-
var w;
|
|
58
|
-
(function(i) {
|
|
59
|
-
i.Nodes = "Nodes", i.Deployments = "Deployments", i.Services = "Services", i.IngeressesRoutes = "Ingresses & Routes", i.PVCs = "Persistent Volume Claims", i.ConfigMapsSecrets = "ConfigMaps & Secrets", i.PortForwarding = "Port Forwarding", i.Pods = "Pods", i.Cronjobs = "CronJobs", i.Jobs = "Jobs";
|
|
60
|
-
})(w || (w = {}));
|
|
61
|
-
const qt = {
|
|
62
|
-
[w.Nodes]: ["Status", "Name", "Roles", "Version", "OS", "Kernel", "Age"],
|
|
63
|
-
[w.Deployments]: ["Selected", "Status", "Name", "Conditions", "Pods", "Age", "Actions"],
|
|
64
|
-
[w.Services]: ["Selected", "Status", "Name", "Type", "Cluster IP", "Ports", "Age", "Actions"],
|
|
65
|
-
[w.IngeressesRoutes]: ["Selected", "Status", "Name", "Host/Path", "Backend", "Age", "Actions"],
|
|
66
|
-
[w.PVCs]: ["Selected", "Status", "Name", "Environment", "Age", "Size", "Actions"],
|
|
67
|
-
[w.ConfigMapsSecrets]: ["Selected", "Status", "Name", "Type", "Keys", "Age", "Actions"],
|
|
68
|
-
[w.PortForwarding]: ["Status", "Name", "Type", "Local Port", "Remote Port", "Actions"],
|
|
69
|
-
[w.Pods]: ["Selected", "Status", "Name", "Containers", "Age", "Actions"],
|
|
70
|
-
[w.Cronjobs]: [
|
|
12
|
+
lt || (!process.env.CI && !process.env.SKIP_REMOVE_FOLDER ? await Ut("tests/output") : console.log(
|
|
13
|
+
"On CI, skipping before All tests/output cleanup, see https://github.com/containers/podman-desktop/issues/5460"
|
|
14
|
+
), lt = !0);
|
|
15
|
+
}
|
|
16
|
+
async function Qe() {
|
|
17
|
+
}
|
|
18
|
+
const W = M.platform() === "linux", F = M.platform() === "darwin", O = M.platform() === "win32", Ht = M.arch(), ze = String(process.env.CI).toLowerCase() === "true";
|
|
19
|
+
var $ = /* @__PURE__ */ ((i) => (i.Starting = "STARTING", i.Stopping = "STOPPING", i.Running = "RUNNING", i.Error = "ERROR", i.Exited = "EXITED", i.Deleting = "DELETING", i.Created = "CREATED", i.Paused = "PAUSED", i.Stopped = "STOPPED", i.Unknown = "UNKNOWN", i))($ || {}), z = /* @__PURE__ */ ((i) => (i.Created = "CREATED", i.Running = "RUNNING", i.Stopped = "STOPPED", i.Exited = "EXITED", i.Dead = "DEAD", i.Starting = "STARTING", i.Stopping = "STOPPING", i.Deleting = "DELETING", i.Restarting = "RESTARTING", i.Degraded = "DEGRADED", i.Paused = "PAUSED", i.Unknown = "UNKNOWN", i))(z || {}), tt = /* @__PURE__ */ ((i) => (i.Used = "USED", i.Unused = "UNUSED", i))(tt || {}), v = /* @__PURE__ */ ((i) => (i.Running = "RUNNING", i.Off = "OFF", i.Starting = "STARTING", i))(v || {}), wt = /* @__PURE__ */ ((i) => (i.Starting = "STARTING", i.Running = "RUNNING", i.Stopped = "STOPPED", i.Unknown = "UNKNOWN", i.Succeeded = "SUCCEEDED", i.None = "", i))(wt || {}), Kt = /* @__PURE__ */ ((i) => (i.Disabled = "DISABLED", i.Active = "ACTIVE", i.Running = "RUNNING", i.NotInstalled = "NOT-INSTALLED", i.Downloadable = "DOWNLOADABLE", i))(Kt || {}), Gt = /* @__PURE__ */ ((i) => (i.Used = "USED", i.Unused = "UNUSED", i))(Gt || {}), Wt = /* @__PURE__ */ ((i) => (i.Canceled = "canceled", i.Success = "success", i))(Wt || {}), f = /* @__PURE__ */ ((i) => (i.Start = "Start", i.Restart = "Restart", i.Stop = "Stop", i.Delete = "Delete", i))(f || {}), X = /* @__PURE__ */ ((i) => (i[i.SelectYamlFile = 0] = "SelectYamlFile", i[i.CreateYamlFileFromScratch = 1] = "CreateYamlFileFromScratch", i))(X || {}), m = /* @__PURE__ */ ((i) => (i.Nodes = "Nodes", i.Deployments = "Deployments", i.Services = "Services", i.IngeressesRoutes = "Ingresses & Routes", i.PVCs = "Persistent Volume Claims", i.ConfigMapsSecrets = "ConfigMaps & Secrets", i.PortForwarding = "Port Forwarding", i.Pods = "Pods", i.Cronjobs = "CronJobs", i.Jobs = "Jobs", i))(m || {});
|
|
20
|
+
const Yt = {
|
|
21
|
+
Nodes: ["Status", "Name", "Roles", "Version", "OS", "Kernel", "Age"],
|
|
22
|
+
Deployments: ["Selected", "Status", "Name", "Conditions", "Pods", "Age", "Actions"],
|
|
23
|
+
Services: ["Selected", "Status", "Name", "Type", "Cluster IP", "Ports", "Age", "Actions"],
|
|
24
|
+
"Ingresses & Routes": ["Selected", "Status", "Name", "Host/Path", "Backend", "Age", "Actions"],
|
|
25
|
+
"Persistent Volume Claims": ["Selected", "Status", "Name", "Environment", "Age", "Size", "Actions"],
|
|
26
|
+
"ConfigMaps & Secrets": ["Selected", "Status", "Name", "Type", "Keys", "Age", "Actions"],
|
|
27
|
+
"Port Forwarding": ["Status", "Name", "Type", "Local Port", "Remote Port", "Actions"],
|
|
28
|
+
Pods: ["Selected", "Status", "Name", "Containers", "Age", "Actions"],
|
|
29
|
+
CronJobs: [
|
|
71
30
|
"Selected",
|
|
72
31
|
"Status",
|
|
73
32
|
"Name",
|
|
@@ -78,39 +37,29 @@ const qt = {
|
|
|
78
37
|
"Age",
|
|
79
38
|
"Actions"
|
|
80
39
|
],
|
|
81
|
-
|
|
40
|
+
Jobs: ["Selected", "Status", "Name", "Conditions", "Completions", "Age", "Actions"]
|
|
82
41
|
};
|
|
83
|
-
var
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
[p.LibKrun]: ["default GPU enabled (LibKrun)", "LibKrun", "libkrun"],
|
|
92
|
-
[p.Qemu]: ["Qemu", "QEMU", "qemu"],
|
|
93
|
-
[p.Native]: [""]
|
|
42
|
+
var C = /* @__PURE__ */ ((i) => (i.WSL = "Wsl", i.HyperV = "Hyperv", i.AppleHV = "Apple HyperVisor", i.LibKrun = "default GPU enabled (LibKrun)", i.Qemu = "Qemu", i.Native = "", i))(C || {});
|
|
43
|
+
const et = {
|
|
44
|
+
Wsl: ["Wsl", "WSL"],
|
|
45
|
+
Hyperv: ["Hyperv", "Hyper-V", "HyperV"],
|
|
46
|
+
"Apple HyperVisor": ["Apple HyperVisor", "Apple Hypervisor", "AppleHV"],
|
|
47
|
+
"default GPU enabled (LibKrun)": ["default GPU enabled (LibKrun)", "LibKrun", "libkrun"],
|
|
48
|
+
Qemu: ["Qemu", "QEMU", "qemu"],
|
|
49
|
+
"": [""]
|
|
94
50
|
};
|
|
95
|
-
function
|
|
96
|
-
const e =
|
|
51
|
+
function mt(i, t) {
|
|
52
|
+
const e = et[i], n = t.toLowerCase().trim();
|
|
97
53
|
return e.some((o) => o.toLowerCase().trim() === n);
|
|
98
54
|
}
|
|
99
55
|
function Xe(i) {
|
|
100
56
|
const t = i.toLowerCase().trim();
|
|
101
|
-
for (const [e, n] of Object.entries(
|
|
57
|
+
for (const [e, n] of Object.entries(et))
|
|
102
58
|
if (n.some((o) => o.toLowerCase().trim() === t))
|
|
103
59
|
return e;
|
|
104
60
|
}
|
|
105
|
-
var
|
|
106
|
-
|
|
107
|
-
i.Rootful = "rootful", i.Rootless = "rootless";
|
|
108
|
-
})(et || (et = {}));
|
|
109
|
-
var wt;
|
|
110
|
-
(function(i) {
|
|
111
|
-
i.Disabled = "Disabled", i.Manual = "Manual", i.System = "System";
|
|
112
|
-
})(wt || (wt = {}));
|
|
113
|
-
class m {
|
|
61
|
+
var pt = /* @__PURE__ */ ((i) => (i.Rootful = "rootful", i.Rootless = "rootless", i))(pt || {}), qt = /* @__PURE__ */ ((i) => (i.Disabled = "Disabled", i.Manual = "Manual", i.System = "System", i))(qt || {});
|
|
62
|
+
class w {
|
|
114
63
|
page;
|
|
115
64
|
// TODO: extract header and content locators into base class, add that roles into all pages
|
|
116
65
|
constructor(t) {
|
|
@@ -120,7 +69,7 @@ class m {
|
|
|
120
69
|
return this.page;
|
|
121
70
|
}
|
|
122
71
|
}
|
|
123
|
-
class I extends
|
|
72
|
+
class I extends w {
|
|
124
73
|
tabName;
|
|
125
74
|
parent;
|
|
126
75
|
header;
|
|
@@ -213,7 +162,7 @@ class jt extends I {
|
|
|
213
162
|
});
|
|
214
163
|
}
|
|
215
164
|
async ensureAPIRateLimitNotReached() {
|
|
216
|
-
await
|
|
165
|
+
await y(async () => this.wasRateLimitReached(), { timeout: 2e3, sendError: !1 }), this.rateLimitReachedFlag && (console.log("Skipping test due to API rate limit being reached"), s.skip(!0, "Skipping test due to API rate limit being reached"));
|
|
217
166
|
}
|
|
218
167
|
async getFirstDifferentVersionFromList(t = "") {
|
|
219
168
|
if (!t)
|
|
@@ -249,13 +198,15 @@ class Jt extends I {
|
|
|
249
198
|
}
|
|
250
199
|
}
|
|
251
200
|
}
|
|
252
|
-
class
|
|
201
|
+
class Qt extends I {
|
|
253
202
|
heading;
|
|
254
203
|
searchbar;
|
|
255
204
|
kubePathInput;
|
|
256
205
|
APPEARANCE_PREFERENCE_LABEL = "Appearance";
|
|
257
206
|
constructor(t) {
|
|
258
|
-
super(t, "Preferences"), this.heading = this.header.getByLabel("Title", { exact: !0 }), this.searchbar = this.header.getByLabel("search preferences"), this.kubePathInput = this.content.getByLabel(
|
|
207
|
+
super(t, "Preferences"), this.heading = this.header.getByLabel("Title", { exact: !0 }), this.searchbar = this.header.getByLabel("search preferences"), this.kubePathInput = this.content.getByLabel(
|
|
208
|
+
"Path to the Kubeconfig file for accessing clusters. (Default is usually ~/.kube/config)"
|
|
209
|
+
);
|
|
259
210
|
}
|
|
260
211
|
getPreferenceRowByName(t) {
|
|
261
212
|
return this.content.locator("div.flex.flex-row.justify-between").filter({ has: this.page.getByText(t, { exact: !0 }) });
|
|
@@ -276,7 +227,9 @@ class zt extends I {
|
|
|
276
227
|
async setAppearancePreference(t) {
|
|
277
228
|
const e = this.getPreferenceRowByName(this.APPEARANCE_PREFERENCE_LABEL);
|
|
278
229
|
await a(e).toBeAttached(), await e.scrollIntoViewIfNeeded(), await a(e).toBeVisible();
|
|
279
|
-
const n = e.getByLabel(
|
|
230
|
+
const n = e.getByLabel(
|
|
231
|
+
"Select between light or dark mode, or use your system setting."
|
|
232
|
+
);
|
|
280
233
|
await a(n).toBeVisible(), await n.click();
|
|
281
234
|
const o = e.getByRole("button", { name: t, exact: !0 });
|
|
282
235
|
await a(o).toBeVisible(), await o.click();
|
|
@@ -289,7 +242,7 @@ class zt extends I {
|
|
|
289
242
|
});
|
|
290
243
|
}
|
|
291
244
|
}
|
|
292
|
-
class
|
|
245
|
+
class zt extends I {
|
|
293
246
|
heading;
|
|
294
247
|
addRegistryButton;
|
|
295
248
|
registriesTable;
|
|
@@ -317,10 +270,10 @@ class Qt extends I {
|
|
|
317
270
|
await o.getByRole("button", {
|
|
318
271
|
name: "kebab menu"
|
|
319
272
|
}).click(), await o.getByTitle("Edit password").click();
|
|
320
|
-
const
|
|
273
|
+
const c = o.getByLabel("Username"), u = o.getByRole("textbox", {
|
|
321
274
|
name: "Password"
|
|
322
275
|
});
|
|
323
|
-
await
|
|
276
|
+
await c.pressSequentially(e, { delay: 100 }), await u.pressSequentially(n, { delay: 100 });
|
|
324
277
|
const h = o.getByRole("button", { name: "Login" });
|
|
325
278
|
await this.loginButtonHandling(h);
|
|
326
279
|
});
|
|
@@ -348,16 +301,19 @@ class Qt extends I {
|
|
|
348
301
|
async loginButtonHandling(t) {
|
|
349
302
|
return s.step("Handle login button", async () => {
|
|
350
303
|
try {
|
|
351
|
-
await
|
|
352
|
-
|
|
353
|
-
|
|
304
|
+
await y(
|
|
305
|
+
async function() {
|
|
306
|
+
return await t.isEnabled();
|
|
307
|
+
},
|
|
308
|
+
{ message: "Login Button not enabled in time" }
|
|
309
|
+
), await t.click({ timeout: 3e3 });
|
|
354
310
|
} catch (e) {
|
|
355
311
|
throw Error(`An error occured when trying to log into registry: ${e.message}`);
|
|
356
312
|
}
|
|
357
313
|
});
|
|
358
314
|
}
|
|
359
315
|
}
|
|
360
|
-
class
|
|
316
|
+
class Bt extends w {
|
|
361
317
|
parent;
|
|
362
318
|
card;
|
|
363
319
|
providerSetup;
|
|
@@ -368,7 +324,7 @@ class ft extends m {
|
|
|
368
324
|
super(t), this.parent = this.page.getByRole("region", { name: "content" }), this.card = this.parent.getByRole("region", { name: e, exact: !0 }), this.providerSetup = this.card.getByRole("region", { name: "Provider Setup", exact: !0 }), this.providerConnections = this.card.getByRole("region", { name: "Provider Connections", exact: !0 }), this.markdownContent = this.providerConnections.getByLabel("markdown-content"), this.setupButton = this.providerSetup.getByRole("button", { name: "Setup" });
|
|
369
325
|
}
|
|
370
326
|
}
|
|
371
|
-
class
|
|
327
|
+
class Y extends Bt {
|
|
372
328
|
resourceElement;
|
|
373
329
|
resourceElementDetailsButton;
|
|
374
330
|
resourceElementConnectionStatus;
|
|
@@ -400,7 +356,7 @@ class J extends ft {
|
|
|
400
356
|
return await this.card.getByLabel(t, { exact: !0 }).textContent() ?? "";
|
|
401
357
|
}
|
|
402
358
|
}
|
|
403
|
-
class
|
|
359
|
+
class E extends I {
|
|
404
360
|
heading;
|
|
405
361
|
featuredProviderResources;
|
|
406
362
|
constructor(t) {
|
|
@@ -419,7 +375,7 @@ class L extends I {
|
|
|
419
375
|
return this.content.getByRole("region", { name: t, exact: !0 });
|
|
420
376
|
}
|
|
421
377
|
}
|
|
422
|
-
class
|
|
378
|
+
class at {
|
|
423
379
|
page;
|
|
424
380
|
settingsNavBar;
|
|
425
381
|
resourcesTab;
|
|
@@ -433,7 +389,7 @@ class it {
|
|
|
433
389
|
this.page = t, this.settingsNavBar = t.getByRole("navigation", { name: "PreferencesNavigation" }), this.resourcesTab = this.settingsNavBar.getByRole("link", { name: "Resources" }), this.proxyTab = this.settingsNavBar.getByRole("link", { name: "Proxy" }), this.registriesTab = this.settingsNavBar.getByRole("link", { name: "Registries" }), this.authenticationTab = this.settingsNavBar.getByRole("link", { name: "Authentication" }), this.cliToolsTab = this.settingsNavBar.getByRole("link", { name: "CLI Tools" }), this.kubernetesTab = this.settingsNavBar.getByRole("link", { name: "Kubernetes" }), this.preferencesTab = this.settingsNavBar.getByLabel("preferences");
|
|
434
390
|
}
|
|
435
391
|
async openTabPage(t) {
|
|
436
|
-
return
|
|
392
|
+
return B.step(`Open ${t.name} tab from Settings`, async () => {
|
|
437
393
|
const e = new t(this.page), n = await e.getTab();
|
|
438
394
|
return await a(n).toBeVisible(), await n.click({ force: !0 }), e;
|
|
439
395
|
});
|
|
@@ -451,7 +407,7 @@ class it {
|
|
|
451
407
|
await a(this.preferencesTab).toBeVisible({ timeout: 1e4 }), await this.preferencesTab.click();
|
|
452
408
|
}
|
|
453
409
|
}
|
|
454
|
-
class S extends
|
|
410
|
+
class S extends w {
|
|
455
411
|
header;
|
|
456
412
|
tabs;
|
|
457
413
|
tabContent;
|
|
@@ -468,13 +424,13 @@ class S extends m {
|
|
|
468
424
|
async activateTab(t) {
|
|
469
425
|
return s.step(`Activate tab: ${t}`, async () => {
|
|
470
426
|
const e = this.tabs.getByRole("link", { name: t, exact: !0 });
|
|
471
|
-
return await
|
|
427
|
+
return await y(async () => await e.isVisible(), {
|
|
472
428
|
message: `Tab ${t} does not exist currently, maybe entry was deleted!`
|
|
473
429
|
}), await e.click(), this;
|
|
474
430
|
});
|
|
475
431
|
}
|
|
476
432
|
}
|
|
477
|
-
class Xt extends
|
|
433
|
+
class Xt extends w {
|
|
478
434
|
heading;
|
|
479
435
|
closeLink;
|
|
480
436
|
volumeNameBox;
|
|
@@ -487,10 +443,10 @@ class Xt extends m {
|
|
|
487
443
|
}), this.doneButton = this.page.getByRole("button", { name: "Done" }), this.closeButton = this.page.getByRole("button", { name: "Close" }), this.createVolumeButton = this.page.getByRole("button", { name: "Create" });
|
|
488
444
|
}
|
|
489
445
|
async createVolume(t) {
|
|
490
|
-
return s.step(`Create volume ${t}`, async () => (await this.volumeNameBox.fill(t), await a(this.createVolumeButton).toBeEnabled(), await this.createVolumeButton.click(), await a(this.doneButton).toBeEnabled({ timeout: 3e4 }), await this.doneButton.click(), new
|
|
446
|
+
return s.step(`Create volume ${t}`, async () => (await this.volumeNameBox.fill(t), await a(this.createVolumeButton).toBeEnabled(), await this.createVolumeButton.click(), await a(this.doneButton).toBeEnabled({ timeout: 3e4 }), await this.doneButton.click(), new q(this.page)));
|
|
491
447
|
}
|
|
492
448
|
}
|
|
493
|
-
class A extends
|
|
449
|
+
class A extends w {
|
|
494
450
|
title;
|
|
495
451
|
mainPage;
|
|
496
452
|
header;
|
|
@@ -520,10 +476,10 @@ class A extends m {
|
|
|
520
476
|
* @returns true, if there are any items present in the content's table, false otherwise
|
|
521
477
|
*/
|
|
522
478
|
async pageIsEmpty() {
|
|
523
|
-
return
|
|
479
|
+
return B.step("Check if the page is empty", async () => await this.noContainerEngine() ? !0 : await this.noImagesHeading.count() > 0);
|
|
524
480
|
}
|
|
525
481
|
async noContainerEngine() {
|
|
526
|
-
return
|
|
482
|
+
return B.step("Check if there is no container engine", async () => await this.noContainerEngineHeading.count() > 0);
|
|
527
483
|
}
|
|
528
484
|
async rowsAreVisible() {
|
|
529
485
|
return await this.page.getByRole("row").first().isVisible();
|
|
@@ -532,8 +488,8 @@ class A extends m {
|
|
|
532
488
|
return await this.rowTable.getByRole("row").all();
|
|
533
489
|
}
|
|
534
490
|
async getRowsFromTableByStatus(t) {
|
|
535
|
-
return
|
|
536
|
-
await
|
|
491
|
+
return B.step(`Get rows from ${this.title} page table by status: ${t}`, async () => {
|
|
492
|
+
await y(async () => await this.rowsAreVisible(), {
|
|
537
493
|
sendError: !1
|
|
538
494
|
});
|
|
539
495
|
const e = await this.getAllTableRows(), n = [];
|
|
@@ -543,8 +499,8 @@ class A extends m {
|
|
|
543
499
|
});
|
|
544
500
|
}
|
|
545
501
|
async countRowsFromTable() {
|
|
546
|
-
return
|
|
547
|
-
await
|
|
502
|
+
return B.step(`Count rows from ${this.title} page table`, async () => {
|
|
503
|
+
await y(async () => await this.rowsAreVisible(), {
|
|
548
504
|
sendError: !1
|
|
549
505
|
});
|
|
550
506
|
const e = await this.content.getByRole("table").getByRole("row").all();
|
|
@@ -552,19 +508,19 @@ class A extends m {
|
|
|
552
508
|
});
|
|
553
509
|
}
|
|
554
510
|
async getRowByName(t, e = !0) {
|
|
555
|
-
return
|
|
511
|
+
return B.step(`Get row from ${this.title} page table by name: ${t}`, async () => {
|
|
556
512
|
const n = this.page.getByRole("row").and(this.page.getByLabel(t, { exact: e })).first();
|
|
557
513
|
return await n.count() > 0 ? n : void 0;
|
|
558
514
|
});
|
|
559
515
|
}
|
|
560
516
|
async waitForRowToExists(t, e = 5e3) {
|
|
561
|
-
return
|
|
517
|
+
return B.step(`Wait for row with name: ${t} to exist`, async () => (await y(async () => await this.getRowByName(t) !== void 0, { timeout: e }), !0));
|
|
562
518
|
}
|
|
563
519
|
async waitForRowToBeDelete(t, e = 5e3) {
|
|
564
|
-
return
|
|
520
|
+
return B.step(`Wait for row with name: ${t} to be deleted`, async () => (await y(async () => await this.getRowByName(t) === void 0, { timeout: e }), !0));
|
|
565
521
|
}
|
|
566
522
|
async uncheckAllRows() {
|
|
567
|
-
return
|
|
523
|
+
return B.step(`Uncheck all rows on ${this.title} page`, async () => {
|
|
568
524
|
try {
|
|
569
525
|
const t = await this.getToggleLocator();
|
|
570
526
|
(await t.innerHTML()).includes("pd-input-checkbox-indeterminate") && await t.click(), (await t.innerHTML()).includes("pd-input-checkbox-checked") && await t.click(), await a.poll(async () => await t.innerHTML(), { timeout: 15e3 }).toContain("pd-input-checkbox-unchecked");
|
|
@@ -574,7 +530,7 @@ class A extends m {
|
|
|
574
530
|
});
|
|
575
531
|
}
|
|
576
532
|
async checkAllRows() {
|
|
577
|
-
return
|
|
533
|
+
return B.step(`Checks all rows on ${this.title} page`, async () => {
|
|
578
534
|
try {
|
|
579
535
|
const t = await this.getToggleLocator();
|
|
580
536
|
(await t.innerHTML()).includes("pd-input-checkbox-unchecked") && await t.click(), await a.poll(async () => t.innerHTML(), { timeout: 15e3 }).toContain("pd-input-checkbox-checked");
|
|
@@ -593,7 +549,7 @@ class A extends m {
|
|
|
593
549
|
return await a(n).toBeAttached(), n;
|
|
594
550
|
}
|
|
595
551
|
}
|
|
596
|
-
class
|
|
552
|
+
class q extends A {
|
|
597
553
|
createVolumeButton;
|
|
598
554
|
pruneVolumesButton;
|
|
599
555
|
collectUsageDataButton;
|
|
@@ -612,7 +568,7 @@ class z extends A {
|
|
|
612
568
|
const e = await this.getVolumeRowByName(t);
|
|
613
569
|
if (e === void 0)
|
|
614
570
|
throw Error(`Volume: ${t} does not exist`);
|
|
615
|
-
return await e.getByRole("cell").nth(3).click(), new
|
|
571
|
+
return await e.getByRole("cell").nth(3).click(), new yt(this.page, t);
|
|
616
572
|
});
|
|
617
573
|
}
|
|
618
574
|
async deleteVolume(t) {
|
|
@@ -634,13 +590,13 @@ class z extends A {
|
|
|
634
590
|
return this.countRowsFromTable();
|
|
635
591
|
}
|
|
636
592
|
async countUsedVolumesFromTable() {
|
|
637
|
-
return (await this.getRowsFromTableByStatus(
|
|
593
|
+
return (await this.getRowsFromTableByStatus(tt.Used)).length;
|
|
638
594
|
}
|
|
639
595
|
async waitForVolumeExists(t, e = 3e4) {
|
|
640
596
|
return s.step(`Wait for volume ${t} to exist`, async () => {
|
|
641
597
|
if (!t)
|
|
642
598
|
throw Error("Volume name is not provided");
|
|
643
|
-
return await
|
|
599
|
+
return await y(async () => await this.volumeExists(t), { timeout: e }), !0;
|
|
644
600
|
});
|
|
645
601
|
}
|
|
646
602
|
async waitForVolumeDelete(t, e = 3e4) {
|
|
@@ -654,7 +610,7 @@ class z extends A {
|
|
|
654
610
|
return s.step("Prune Volumes", async () => (await a(this.pruneVolumesButton).toBeEnabled(), await this.pruneVolumesButton.click(), await g(this.page, "Prune"), this));
|
|
655
611
|
}
|
|
656
612
|
}
|
|
657
|
-
class
|
|
613
|
+
class yt extends S {
|
|
658
614
|
deleteButton;
|
|
659
615
|
static SUMMARY_TAB = "Summary";
|
|
660
616
|
constructor(t, e) {
|
|
@@ -663,10 +619,10 @@ class kt extends S {
|
|
|
663
619
|
});
|
|
664
620
|
}
|
|
665
621
|
async isUsed() {
|
|
666
|
-
return await this.header.getByTitle(
|
|
622
|
+
return await this.header.getByTitle(tt.Used).count() > 0;
|
|
667
623
|
}
|
|
668
624
|
async deleteVolume() {
|
|
669
|
-
return s.step("Delete Volume", async () => (await a(this.deleteButton).toBeEnabled(), await this.deleteButton.click(), await g(this.page), new
|
|
625
|
+
return s.step("Delete Volume", async () => (await a(this.deleteButton).toBeEnabled(), await this.deleteButton.click(), await g(this.page), new q(this.page)));
|
|
670
626
|
}
|
|
671
627
|
}
|
|
672
628
|
async function Ze(i, t) {
|
|
@@ -681,9 +637,9 @@ async function Ze(i, t) {
|
|
|
681
637
|
await r.count() > 0 && await r.click(), await o.getByRole("button").and(o.getByLabel("Delete Container")).click(), await g(i);
|
|
682
638
|
try {
|
|
683
639
|
console.log("Waiting for container to get deleted ..."), await a.poll(async () => await n.getContainerRowByName(t), { timeout: 3e4 }).toBeFalsy();
|
|
684
|
-
} catch (
|
|
685
|
-
if (!
|
|
686
|
-
throw Error(`Error waiting for container '${t}' to get removed, ${
|
|
640
|
+
} catch (c) {
|
|
641
|
+
if (!c.message.includes("Page is empty"))
|
|
642
|
+
throw Error(`Error waiting for container '${t}' to get removed, ${c}`);
|
|
687
643
|
}
|
|
688
644
|
}
|
|
689
645
|
});
|
|
@@ -702,18 +658,21 @@ async function ta(i, t) {
|
|
|
702
658
|
else
|
|
703
659
|
throw Error(`Cannot delete image ${t}, because it is in use`);
|
|
704
660
|
try {
|
|
705
|
-
console.log("image deleting, waiting..."), await T(
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
661
|
+
console.log("image deleting, waiting..."), await T(
|
|
662
|
+
async () => !!await (await new d(i).openImages()).getImageRowByName(t),
|
|
663
|
+
{ timeout: 1e4, sendError: !1 }
|
|
664
|
+
);
|
|
665
|
+
} catch (l) {
|
|
666
|
+
if (!l.message.includes("Page is empty"))
|
|
667
|
+
throw Error(`Error waiting for image '${t}' to get removed, ${l}`);
|
|
709
668
|
}
|
|
710
669
|
}
|
|
711
670
|
});
|
|
712
671
|
}
|
|
713
672
|
async function ea(i, t, e = !1) {
|
|
714
673
|
return s.step(`Delete registry ${t}`, async () => {
|
|
715
|
-
const r = await (await new d(i).openSettings()).openTabPage(
|
|
716
|
-
await
|
|
674
|
+
const r = await (await new d(i).openSettings()).openTabPage(zt), l = await r.getRegistryRowByName(t);
|
|
675
|
+
await y(() => l.isVisible(), { sendError: e }), await l.isVisible() && await l.getByRole("button", { name: "kebab menu" }).isVisible() && await r.removeRegistry(t);
|
|
717
676
|
});
|
|
718
677
|
}
|
|
719
678
|
async function aa(i, t, e = 5e4) {
|
|
@@ -726,10 +685,13 @@ async function aa(i, t, e = 5e4) {
|
|
|
726
685
|
else {
|
|
727
686
|
await r.getByRole("button").and(r.getByLabel("Delete Pod")).click(), await g(i);
|
|
728
687
|
try {
|
|
729
|
-
console.log("Waiting for pod to get deleted ..."), await T(
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
688
|
+
console.log("Waiting for pod to get deleted ..."), await T(
|
|
689
|
+
async () => !!await o.getPodRowByName(t),
|
|
690
|
+
{ timeout: e }
|
|
691
|
+
);
|
|
692
|
+
} catch (c) {
|
|
693
|
+
if (!c.message.includes("Page is empty"))
|
|
694
|
+
throw Error(`Error waiting for pod '${t}' to get removed, ${c}`);
|
|
733
695
|
}
|
|
734
696
|
}
|
|
735
697
|
});
|
|
@@ -750,78 +712,81 @@ async function na(i, t) {
|
|
|
750
712
|
}
|
|
751
713
|
});
|
|
752
714
|
}
|
|
753
|
-
async function g(i, t = "Confirmation", e = !0, n = "Yes", o = "Cancel", r = 1e4,
|
|
715
|
+
async function g(i, t = "Confirmation", e = !0, n = "Yes", o = "Cancel", r = 1e4, l = !1) {
|
|
754
716
|
return s.step("Handle confirmation dialog", async () => {
|
|
755
|
-
const
|
|
756
|
-
await
|
|
757
|
-
const u = e ?
|
|
758
|
-
if (await a(u).toBeEnabled({ timeout: r }), await u.click(),
|
|
759
|
-
const h =
|
|
717
|
+
const c = i.getByRole("dialog", { name: t, exact: !0 });
|
|
718
|
+
await y(async () => await c.isVisible(), { timeout: r });
|
|
719
|
+
const u = e ? c.getByRole("button", { name: n }) : c.getByRole("button", { name: o });
|
|
720
|
+
if (await a(u).toBeEnabled({ timeout: r }), await u.click(), l) {
|
|
721
|
+
const h = c.getByRole("button", { name: "Done" });
|
|
760
722
|
await a(h).toBeEnabled({ timeout: r }), await h.click();
|
|
761
723
|
}
|
|
762
|
-
await
|
|
724
|
+
await y(async () => !await c.isVisible(), { timeout: r });
|
|
763
725
|
});
|
|
764
726
|
}
|
|
765
|
-
async function
|
|
727
|
+
async function bt(i, t, e) {
|
|
766
728
|
return s.step(`Handle Edit Network dialog for: ${t}`, async () => {
|
|
767
729
|
const n = `Edit Network ${t}`, o = i.getByRole("dialog", { name: n });
|
|
768
730
|
await a(o).toBeVisible();
|
|
769
|
-
const r = o.getByPlaceholder("8.8.8.8 1.1.1.1"),
|
|
770
|
-
e?.dnsServersToAdd !== void 0 && (await
|
|
731
|
+
const r = o.getByPlaceholder("8.8.8.8 1.1.1.1"), l = r.nth(0), c = r.nth(1), u = o.getByRole("button", { name: "Cancel", exact: !0 }), h = o.getByRole("button", { name: "Update", exact: !0 });
|
|
732
|
+
e?.dnsServersToAdd !== void 0 && (await l.clear(), await a(l).toHaveValue(""), await l.fill(e.dnsServersToAdd), await a(l).toHaveValue(e.dnsServersToAdd)), e?.dnsServersToRemove !== void 0 && (await c.clear(), await a(c).toHaveValue(""), await c.fill(e.dnsServersToRemove), await a(c).toHaveValue(e.dnsServersToRemove)), (e?.action ?? "Update") === "Cancel" ? (await a(u).toBeEnabled(), await u.click()) : (await a(h).toBeEnabled(), await h.click()), await a(o).not.toBeVisible();
|
|
771
733
|
});
|
|
772
734
|
}
|
|
773
735
|
async function ia(i, t) {
|
|
774
736
|
return s.step("Delete Podman machine", async () => {
|
|
775
737
|
const e = "podman", n = new d(i), o = await n.openDashboard();
|
|
776
738
|
await a(o.heading).toBeVisible();
|
|
777
|
-
const
|
|
778
|
-
await a(
|
|
779
|
-
const
|
|
780
|
-
if (await a(
|
|
739
|
+
const l = await (await n.openSettings()).openTabPage(E);
|
|
740
|
+
await a(l.heading).toBeVisible({ timeout: 1e4 }), await a.poll(async () => await l.resourceCardIsVisible(e), { timeout: 15e3 }).toBeTruthy();
|
|
741
|
+
const c = new Y(i, e, t);
|
|
742
|
+
if (await a(c.providerConnections).toBeVisible({ timeout: 1e4 }), !await y(async () => await c.resourceElement.isVisible(), {
|
|
781
743
|
timeout: 3e4
|
|
782
744
|
}).then(() => !0).catch(() => !1)) {
|
|
783
745
|
console.log(`Podman machine [${t}] not present, skipping deletion.`);
|
|
784
746
|
return;
|
|
785
747
|
}
|
|
786
|
-
await a(
|
|
748
|
+
await a(c.resourceElementConnectionActions).toBeVisible(), await a(c.resourceElementConnectionStatus).toBeVisible(), await Zt(c, t), await c.performConnectionAction(f.Delete), await a(c.resourceElement).toBeHidden({ timeout: 6e4 });
|
|
787
749
|
});
|
|
788
750
|
}
|
|
789
751
|
async function Zt(i, t) {
|
|
790
752
|
const e = await i.resourceElementConnectionStatus.innerText();
|
|
791
|
-
if (e ===
|
|
753
|
+
if (e === v.Off) {
|
|
792
754
|
console.log("Podman machine already stopped");
|
|
793
755
|
return;
|
|
794
756
|
}
|
|
795
|
-
if (e ===
|
|
796
|
-
console.log("Podman machine is starting, will stop via CLI"), await
|
|
757
|
+
if (e === v.Starting) {
|
|
758
|
+
console.log("Podman machine is starting, will stop via CLI"), await ct(t), await Q(i);
|
|
797
759
|
return;
|
|
798
760
|
}
|
|
799
|
-
if (e ===
|
|
761
|
+
if (e === v.Running)
|
|
800
762
|
try {
|
|
801
|
-
await i.performConnectionAction(
|
|
763
|
+
await i.performConnectionAction(f.Stop), await Q(i);
|
|
802
764
|
} catch (n) {
|
|
803
|
-
console.log(
|
|
765
|
+
console.log(
|
|
766
|
+
"Podman machine stop via UI failed, trying CLI:",
|
|
767
|
+
n instanceof Error ? n.message : String(n)
|
|
768
|
+
), await ct(t), await Q(i);
|
|
804
769
|
}
|
|
805
770
|
}
|
|
806
|
-
async function
|
|
807
|
-
|
|
771
|
+
async function ct(i) {
|
|
772
|
+
x(`podman machine stop ${i}`), console.log(`Podman machine stopped via CLI: ${i}`);
|
|
808
773
|
}
|
|
809
|
-
async function
|
|
810
|
-
await a(i.resourceElementConnectionStatus).toHaveText(
|
|
774
|
+
async function Q(i) {
|
|
775
|
+
await a(i.resourceElementConnectionStatus).toHaveText(v.Off, {
|
|
811
776
|
timeout: 3e4
|
|
812
777
|
});
|
|
813
778
|
}
|
|
814
|
-
async function
|
|
779
|
+
async function nt(i, t) {
|
|
815
780
|
return s.step("Get volume name for container", async () => {
|
|
816
781
|
let e, n;
|
|
817
782
|
try {
|
|
818
783
|
const r = await new d(i).openVolumes();
|
|
819
784
|
await a(r.heading).toBeVisible({ timeout: 1e4 });
|
|
820
|
-
const
|
|
821
|
-
for (let
|
|
822
|
-
if (e = await c
|
|
785
|
+
const l = await r.getAllTableRows();
|
|
786
|
+
for (let c = l.length - 1; c > 0; c--)
|
|
787
|
+
if (e = await l[c].getByRole("cell").nth(3).getByRole("button").textContent(), e) {
|
|
823
788
|
const u = await r.openVolumeDetails(e);
|
|
824
|
-
await u.activateTab(
|
|
789
|
+
await u.activateTab(yt.SUMMARY_TAB), n = await u.tabContent.allTextContents();
|
|
825
790
|
for (const h of n)
|
|
826
791
|
if (h.includes(t))
|
|
827
792
|
return await u.backLink.click(), e;
|
|
@@ -841,18 +806,17 @@ async function oa(i, t, e = 6e4) {
|
|
|
841
806
|
await a(n.toolsTable).toBeVisible({ timeout: 1e4 }), await a.poll(async () => await n.toolsTable.count()).toBeGreaterThan(0), await a(n.getToolRow(t)).toBeVisible({ timeout: 1e4 }), await n.getCurrentToolVersion(t) || await n.installTool(t, e), await a.poll(async () => await n.getCurrentToolVersion(t), { timeout: e }).toBeTruthy();
|
|
842
807
|
});
|
|
843
808
|
}
|
|
844
|
-
async function
|
|
809
|
+
async function ut() {
|
|
845
810
|
return s.step("Create Podman machine from CLI", async () => {
|
|
846
|
-
if (
|
|
847
|
-
return;
|
|
811
|
+
if (W) return;
|
|
848
812
|
const i = process.env.PODMAN_ROOTFUL === "0" ? "" : "--rootful", t = process.env.PODMAN_NETWORKING === "1" ? "--user-networking" : "";
|
|
849
813
|
try {
|
|
850
|
-
|
|
814
|
+
x(`podman machine init ${i} ${t}`);
|
|
851
815
|
} catch (e) {
|
|
852
816
|
e instanceof Error && e.message.includes("VM already exists") && console.log("Podman machine already exists, skipping creation.");
|
|
853
817
|
}
|
|
854
818
|
try {
|
|
855
|
-
|
|
819
|
+
x("podman machine start"), console.log("Default podman machine started");
|
|
856
820
|
} catch (e) {
|
|
857
821
|
e instanceof Error && e.message.includes("already running") && console.log("Default podman machine already started, skipping start.");
|
|
858
822
|
}
|
|
@@ -861,7 +825,7 @@ async function pt() {
|
|
|
861
825
|
async function sa(i) {
|
|
862
826
|
return s.step("Delete Podman machine from CLI", () => {
|
|
863
827
|
try {
|
|
864
|
-
|
|
828
|
+
x(`podman machine rm ${i} -f`);
|
|
865
829
|
} catch (t) {
|
|
866
830
|
t instanceof Error && t.message.includes("VM does not exist") && console.log(`Podman machine [${i}] does not exist, skipping deletion.`);
|
|
867
831
|
}
|
|
@@ -869,7 +833,7 @@ async function sa(i) {
|
|
|
869
833
|
}
|
|
870
834
|
async function te() {
|
|
871
835
|
return s.step("Reset Podman machine from CLI", () => {
|
|
872
|
-
|
|
836
|
+
x("podman machine reset -f");
|
|
873
837
|
});
|
|
874
838
|
}
|
|
875
839
|
async function U(i, t) {
|
|
@@ -880,36 +844,36 @@ async function U(i, t) {
|
|
|
880
844
|
async function ra(i) {
|
|
881
845
|
return s.step("Run Compose up from CLI", async () => {
|
|
882
846
|
try {
|
|
883
|
-
|
|
847
|
+
x(`podman compose -f ${i} up -d`);
|
|
884
848
|
} catch (t) {
|
|
885
849
|
throw new Error(`Error running podman compose up from CLI: ${t}`);
|
|
886
850
|
}
|
|
887
851
|
});
|
|
888
852
|
}
|
|
889
|
-
async function
|
|
853
|
+
async function la(i, t = "") {
|
|
890
854
|
return s.step("Untag images from Podman", async () => {
|
|
891
855
|
try {
|
|
892
|
-
t ?
|
|
856
|
+
t ? x(`podman untag ${i}:${t}`) : x(`podman untag ${i}`);
|
|
893
857
|
} catch (e) {
|
|
894
858
|
throw new Error(`Error untagging images from Podman: ${e}`);
|
|
895
859
|
}
|
|
896
860
|
});
|
|
897
861
|
}
|
|
898
|
-
async function
|
|
899
|
-
const e = new
|
|
862
|
+
async function ca(i, t) {
|
|
863
|
+
const e = new at(i);
|
|
900
864
|
await e.preferencesTab.isHidden() && await new d(i).openSettings(), await e.expandPreferencesTab();
|
|
901
865
|
const n = e.getLinkLocatorByHref("/preferences/default/preferences.dockerCompatibility");
|
|
902
866
|
await a(n).toBeVisible(), await n.click();
|
|
903
|
-
const o = new
|
|
867
|
+
const o = new Qt(i);
|
|
904
868
|
await a(o.heading).toBeVisible();
|
|
905
869
|
const r = o.content.getByText("Docker Compatibility", { exact: !0 });
|
|
906
870
|
await a(r).toBeVisible();
|
|
907
|
-
const
|
|
871
|
+
const l = o.content.getByRole("checkbox", {
|
|
908
872
|
name: "Enable the section for Docker compatibility."
|
|
909
873
|
});
|
|
910
|
-
if (await a(
|
|
911
|
-
await
|
|
912
|
-
const h = await
|
|
874
|
+
if (await a(l).toBeVisible(), await l.isChecked() !== t) {
|
|
875
|
+
await l.locator("..").setChecked(t);
|
|
876
|
+
const h = await l.isChecked();
|
|
913
877
|
a(h).toEqual(t);
|
|
914
878
|
}
|
|
915
879
|
const u = e.getLinkLocatorByHref("/preferences/docker-compatibility");
|
|
@@ -917,16 +881,16 @@ async function la(i, t) {
|
|
|
917
881
|
}
|
|
918
882
|
async function ua(i, t, e) {
|
|
919
883
|
await t.openSettings();
|
|
920
|
-
const o = await new
|
|
884
|
+
const o = await new at(i).openTabPage(Jt);
|
|
921
885
|
await o.setExperimentalCheckbox(o.statusBarProvidersCheckbox, e);
|
|
922
886
|
}
|
|
923
887
|
function ee() {
|
|
924
888
|
try {
|
|
925
889
|
let i;
|
|
926
890
|
if (F || O)
|
|
927
|
-
i =
|
|
928
|
-
else if (
|
|
929
|
-
i =
|
|
891
|
+
i = x("podman machine ssh podman info --format json").toString();
|
|
892
|
+
else if (W)
|
|
893
|
+
i = x("podman info --format json").toString();
|
|
930
894
|
else
|
|
931
895
|
throw new Error("Unsupported platform");
|
|
932
896
|
return JSON.parse(i)?.host?.security?.rootless === !0;
|
|
@@ -938,7 +902,7 @@ function ae(i, t) {
|
|
|
938
902
|
const e = `${i}/_data/${t}`, n = ee();
|
|
939
903
|
if (F || O)
|
|
940
904
|
return `${n ? ".local/share/containers/storage/volumes" : "/var/lib/containers/storage/volumes"}/${e}`;
|
|
941
|
-
if (
|
|
905
|
+
if (W)
|
|
942
906
|
return `${n ? `${M.homedir()}/.local/share/containers/storage/volumes` : "/var/lib/containers/storage/volumes"}/${e}`;
|
|
943
907
|
throw new Error("Unsupported platform");
|
|
944
908
|
}
|
|
@@ -946,7 +910,7 @@ async function ha(i, t) {
|
|
|
946
910
|
return s.step("Read file in volume from CLI", async () => {
|
|
947
911
|
try {
|
|
948
912
|
const e = ae(i, t), n = F || O ? `podman machine ssh sudo cat ${e}` : `cat ${e}`;
|
|
949
|
-
return
|
|
913
|
+
return x(n).toString();
|
|
950
914
|
} catch (e) {
|
|
951
915
|
throw new Error(`Error reading file: ${t} in volume: ${i} from CLI: ${e}`);
|
|
952
916
|
}
|
|
@@ -958,18 +922,18 @@ async function ga(i, t) {
|
|
|
958
922
|
const e = await i.connectionType.textContent();
|
|
959
923
|
if (!e)
|
|
960
924
|
throw new Error("Connection type text is empty");
|
|
961
|
-
const n =
|
|
925
|
+
const n = mt(t, e);
|
|
962
926
|
a(n).toBeTruthy();
|
|
963
927
|
});
|
|
964
928
|
}
|
|
965
929
|
async function da(i, t) {
|
|
966
|
-
return s.step(`Verify Podman Machine Privileges are ${t ===
|
|
930
|
+
return s.step(`Verify Podman Machine Privileges are ${t === pt.Rootful ? "rootful" : "rootless"}`, async () => {
|
|
967
931
|
await a.poll(async () => await i.doesResourceElementExist(), { timeout: 15e3 }).toBeTruthy(), await a(i.machinePrivileges).toContainText(t, {
|
|
968
932
|
ignoreCase: !0
|
|
969
933
|
});
|
|
970
934
|
});
|
|
971
935
|
}
|
|
972
|
-
function
|
|
936
|
+
function ht(i) {
|
|
973
937
|
return i.split(".").map((t) => Number.parseInt(t, 10));
|
|
974
938
|
}
|
|
975
939
|
function ne(i, t) {
|
|
@@ -986,7 +950,7 @@ function ne(i, t) {
|
|
|
986
950
|
}
|
|
987
951
|
function ie() {
|
|
988
952
|
try {
|
|
989
|
-
const i =
|
|
953
|
+
const i = x("podman -v").toString().trim(), e = /podman version (\d+(?:\.\d+)*)/i.exec(i);
|
|
990
954
|
if (!e?.[1])
|
|
991
955
|
throw new Error(`Unable to parse Podman version from output: ${i}`);
|
|
992
956
|
return e[1];
|
|
@@ -996,17 +960,14 @@ function ie() {
|
|
|
996
960
|
}
|
|
997
961
|
function wa(i) {
|
|
998
962
|
try {
|
|
999
|
-
const t = ie(), e =
|
|
963
|
+
const t = ie(), e = ht(t), n = ht(i);
|
|
1000
964
|
return ne(e, n);
|
|
1001
965
|
} catch {
|
|
1002
966
|
return !1;
|
|
1003
967
|
}
|
|
1004
968
|
}
|
|
1005
|
-
var
|
|
1006
|
-
|
|
1007
|
-
i.Default = "default", i.AMD64 = "amd64", i.ARM64 = "arm64";
|
|
1008
|
-
})(V || (V = {}));
|
|
1009
|
-
class oe extends m {
|
|
969
|
+
var N = /* @__PURE__ */ ((i) => (i.Default = "default", i.AMD64 = "amd64", i.ARM64 = "arm64", i))(N || {});
|
|
970
|
+
class oe extends w {
|
|
1010
971
|
name;
|
|
1011
972
|
cancelButton;
|
|
1012
973
|
saveButton;
|
|
@@ -1027,11 +988,11 @@ class oe extends m {
|
|
|
1027
988
|
return s.step("Rename image", async () => {
|
|
1028
989
|
if (!t)
|
|
1029
990
|
throw Error("Provide name is invalid!");
|
|
1030
|
-
return await a(this.saveButton).toBeVisible(), await this.imageName.clear(), await this.imageName.fill(t), e && (await this.imageTag.clear(), await this.imageTag.fill(e)), await a.poll(async () => this.alertDialog.count()).toBe(0), await a(this.saveButton).toBeEnabled(), await this.saveButton.click(), new
|
|
991
|
+
return await a(this.saveButton).toBeVisible(), await this.imageName.clear(), await this.imageName.fill(t), e && (await this.imageTag.clear(), await this.imageTag.fill(e)), await a.poll(async () => this.alertDialog.count()).toBe(0), await a(this.saveButton).toBeEnabled(), await this.saveButton.click(), new L(this.page);
|
|
1031
992
|
});
|
|
1032
993
|
}
|
|
1033
994
|
}
|
|
1034
|
-
class se extends
|
|
995
|
+
class se extends w {
|
|
1035
996
|
content;
|
|
1036
997
|
podName;
|
|
1037
998
|
kubernetesContext;
|
|
@@ -1063,14 +1024,21 @@ class se extends m {
|
|
|
1063
1024
|
name: "Pod Deployment Status Info"
|
|
1064
1025
|
});
|
|
1065
1026
|
}
|
|
1066
|
-
async deployPod(t, {
|
|
1027
|
+
async deployPod(t, {
|
|
1028
|
+
useKubernetesServices: e,
|
|
1029
|
+
useRestrictedSecurityContext: n,
|
|
1030
|
+
useKubernetesIngress: o,
|
|
1031
|
+
containerExposedPort: r,
|
|
1032
|
+
isOpenShiftCluster: l,
|
|
1033
|
+
useOpenShiftRoutes: c
|
|
1034
|
+
}, u, h = "default", b = 1e5) {
|
|
1067
1035
|
return s.step(`Deploy pod ${t}`, async () => {
|
|
1068
|
-
if (await a(this.podName).toBeVisible(), await this.podName.clear(), await this.podName.fill(t), await a(this.servicesCheckbox).toBeEnabled(), e ? (await this.servicesCheckbox.check(), await a(this.servicesCheckbox).toBeChecked()) : (await this.servicesCheckbox.uncheck(), await a(this.servicesCheckbox).not.toBeChecked()), await a(this.restrictedContextCheckbox).toBeEnabled(), n ? (await this.restrictedContextCheckbox.check(), await a(this.restrictedContextCheckbox).toBeChecked()) : (await this.restrictedContextCheckbox.uncheck(), await a(this.restrictedContextCheckbox).not.toBeChecked()),
|
|
1036
|
+
if (await a(this.podName).toBeVisible(), await this.podName.clear(), await this.podName.fill(t), await a(this.servicesCheckbox).toBeEnabled(), e ? (await this.servicesCheckbox.check(), await a(this.servicesCheckbox).toBeChecked()) : (await this.servicesCheckbox.uncheck(), await a(this.servicesCheckbox).not.toBeChecked()), await a(this.restrictedContextCheckbox).toBeEnabled(), n ? (await this.restrictedContextCheckbox.check(), await a(this.restrictedContextCheckbox).toBeChecked()) : (await this.restrictedContextCheckbox.uncheck(), await a(this.restrictedContextCheckbox).not.toBeChecked()), l ? (await a(this.createOpenShiftRoutesCheckbox).toBeEnabled(), c ? (await this.createOpenShiftRoutesCheckbox.check(), await a(this.createOpenShiftRoutesCheckbox).toBeChecked()) : (await this.createOpenShiftRoutesCheckbox.uncheck(), await a(this.createOpenShiftRoutesCheckbox).not.toBeChecked())) : (await a(this.createIngressCheckbox).toBeEnabled(), o ? (await this.createIngressCheckbox.check(), await a(this.createIngressCheckbox).toBeChecked(), r && await this.selectExposedPort(r)) : (await this.createIngressCheckbox.uncheck(), await a(this.createIngressCheckbox).not.toBeChecked())), await this.kubernetesContext.scrollIntoViewIfNeeded(), await a(this.kubernetesContext).toHaveValue(u), await a(this.namespaceCombobox).toBeVisible(), await this.namespaceCombobox.inputValue() !== h) {
|
|
1069
1037
|
if (!(await this.namespaceCombobox.locator("option").allInnerTexts()).includes(h))
|
|
1070
1038
|
throw new Error(`${h} doesn't exist`);
|
|
1071
1039
|
await this.namespaceCombobox.selectOption({ value: h }), await a(this.namespaceCombobox).toHaveValue(h);
|
|
1072
1040
|
}
|
|
1073
|
-
await a(this.deployButton).toBeEnabled(), await this.deployButton.click(), await a(this.deploymentStatus).toBeVisible({ timeout: 3e4 }), await this.deploymentStatus.scrollIntoViewIfNeeded(), await a(this.doneButton).toBeVisible({ timeout:
|
|
1041
|
+
await a(this.deployButton).toBeEnabled(), await this.deployButton.click(), await a(this.deploymentStatus).toBeVisible({ timeout: 3e4 }), await this.deploymentStatus.scrollIntoViewIfNeeded(), await a(this.doneButton).toBeVisible({ timeout: b });
|
|
1074
1042
|
});
|
|
1075
1043
|
}
|
|
1076
1044
|
async selectExposedPort(t) {
|
|
@@ -1083,7 +1051,7 @@ class se extends m {
|
|
|
1083
1051
|
});
|
|
1084
1052
|
}
|
|
1085
1053
|
}
|
|
1086
|
-
class
|
|
1054
|
+
class k extends S {
|
|
1087
1055
|
stopButton;
|
|
1088
1056
|
deleteButton;
|
|
1089
1057
|
imageLink;
|
|
@@ -1110,10 +1078,9 @@ class R extends S {
|
|
|
1110
1078
|
async getState() {
|
|
1111
1079
|
return s.step("Get container state", async () => {
|
|
1112
1080
|
const t = await this.header.getByRole("status").getAttribute("title");
|
|
1113
|
-
for (const e of Object.values(
|
|
1114
|
-
if (t === e)
|
|
1115
|
-
|
|
1116
|
-
return D.Unknown;
|
|
1081
|
+
for (const e of Object.values($))
|
|
1082
|
+
if (t === e) return e;
|
|
1083
|
+
return $.Unknown;
|
|
1117
1084
|
});
|
|
1118
1085
|
}
|
|
1119
1086
|
async stopContainer() {
|
|
@@ -1122,11 +1089,11 @@ class R extends S {
|
|
|
1122
1089
|
});
|
|
1123
1090
|
}
|
|
1124
1091
|
async deleteContainer() {
|
|
1125
|
-
return s.step("Delete container", async () => (await a(this.deleteButton).toBeEnabled(), await this.deleteButton.click(), await g(this.page), new
|
|
1092
|
+
return s.step("Delete container", async () => (await a(this.deleteButton).toBeEnabled(), await this.deleteButton.click(), await g(this.page), new V(this.page)));
|
|
1126
1093
|
}
|
|
1127
1094
|
async getContainerPort() {
|
|
1128
1095
|
return s.step("Get container port", async () => {
|
|
1129
|
-
await this.activateTab(
|
|
1096
|
+
await this.activateTab(k.SUMMARY_TAB);
|
|
1130
1097
|
const n = this.tabContent.getByRole("table").locator('tr:has-text("Ports")').getByRole("cell").nth(1);
|
|
1131
1098
|
return await a(n).toBeVisible(), await n.innerText();
|
|
1132
1099
|
});
|
|
@@ -1135,23 +1102,23 @@ class R extends S {
|
|
|
1135
1102
|
return s.step("Open Deploy to Kubernetes page", async () => (await a(this.deployButton).toBeVisible(), await this.deployButton.click(), new se(this.page)));
|
|
1136
1103
|
}
|
|
1137
1104
|
async executeCommandInTerminal(t) {
|
|
1138
|
-
await this.activateTab(
|
|
1105
|
+
await this.activateTab(k.TERMINAL_TAB), await a(this.terminalInput).toBeVisible(), await this.page.waitForTimeout(500), await this.terminalInput.pressSequentially(t, { delay: 10 }), await this.terminalInput.press("Enter");
|
|
1139
1106
|
}
|
|
1140
1107
|
async executeCommandInTty(t) {
|
|
1141
1108
|
return s.step("Execute command in TTY terminal", async () => {
|
|
1142
|
-
await this.activateTab(
|
|
1109
|
+
await this.activateTab(k.Tty_TAB), await this.terminalInput.pressSequentially(t, { delay: 10 }), await this.terminalInput.press("Enter");
|
|
1143
1110
|
});
|
|
1144
1111
|
}
|
|
1145
1112
|
async findInLogs(t) {
|
|
1146
1113
|
return s.step("Find text in logs", async () => {
|
|
1147
|
-
await this.activateTab(
|
|
1114
|
+
await this.activateTab(k.LOGS_TAB), await a(this.findInLogsInput).toBeVisible(), await this.findInLogsInput.clear(), await a(this.findInLogsInput).toHaveValue(""), await this.findInLogsInput.fill(t), await a(this.findInLogsInput).toHaveValue(t);
|
|
1148
1115
|
});
|
|
1149
1116
|
}
|
|
1150
1117
|
async getCountOfSearchResults() {
|
|
1151
|
-
return s.step("Get count of search results", async () => (await this.activateTab(
|
|
1118
|
+
return s.step("Get count of search results", async () => (await this.activateTab(k.LOGS_TAB), await a(this.findInLogsInput).toBeVisible(), await this.searchResults.count()));
|
|
1152
1119
|
}
|
|
1153
1120
|
}
|
|
1154
|
-
class
|
|
1121
|
+
class xt extends w {
|
|
1155
1122
|
name;
|
|
1156
1123
|
heading;
|
|
1157
1124
|
closeLink;
|
|
@@ -1197,7 +1164,7 @@ class Ct extends m {
|
|
|
1197
1164
|
const e = this.page.getByLabel("name").and(this.page.getByText("Container Details"));
|
|
1198
1165
|
await a(e).toBeVisible();
|
|
1199
1166
|
const n = this.page.getByRole("heading"), o = t || await n.innerText();
|
|
1200
|
-
return console.log(`Heading and container name: ${await n.innerText()}`), new
|
|
1167
|
+
return console.log(`Heading and container name: ${await n.innerText()}`), new k(this.page, o);
|
|
1201
1168
|
});
|
|
1202
1169
|
}
|
|
1203
1170
|
async startContainer(t = "", e) {
|
|
@@ -1220,11 +1187,14 @@ class Ct extends m {
|
|
|
1220
1187
|
checked: e.interactive
|
|
1221
1188
|
});
|
|
1222
1189
|
}
|
|
1223
|
-
if (await this.activateTab("Basic"), await a(this.startContainerButton).toBeEnabled(), await this.startContainerButton.click(), await T(
|
|
1190
|
+
if (await this.activateTab("Basic"), await a(this.startContainerButton).toBeEnabled(), await this.startContainerButton.click(), await T(
|
|
1191
|
+
async () => await this.name.isVisible(),
|
|
1192
|
+
{ sendError: !1 }
|
|
1193
|
+
), await this.errorAlert.count() > 0) {
|
|
1224
1194
|
const r = await this.name.isVisible() ? "threw an " : "redirected to another page with an ";
|
|
1225
1195
|
throw Error(`Starting the container ${r} error: ${await this.errorAlert.innerText()}`);
|
|
1226
1196
|
}
|
|
1227
|
-
return new
|
|
1197
|
+
return new V(this.page);
|
|
1228
1198
|
});
|
|
1229
1199
|
}
|
|
1230
1200
|
async setCustomPortMapping(t) {
|
|
@@ -1265,13 +1235,13 @@ class re extends S {
|
|
|
1265
1235
|
}), this.saveImageInput = t.locator("#input-output-directory"), this.confirmSaveImages = t.getByLabel("Save images", { exact: !0 }), this.browseButton = t.getByLabel("Select output folder");
|
|
1266
1236
|
}
|
|
1267
1237
|
async openRunImage() {
|
|
1268
|
-
return s.step("Open run image page", async () => (await a(this.runImageButton).toBeEnabled({ timeout: 3e4 }), await this.runImageButton.click(), new
|
|
1238
|
+
return s.step("Open run image page", async () => (await a(this.runImageButton).toBeEnabled({ timeout: 3e4 }), await this.runImageButton.click(), new xt(this.page, this.resourceName)));
|
|
1269
1239
|
}
|
|
1270
1240
|
async openEditImage() {
|
|
1271
1241
|
return s.step("Open edit image page", async () => (await a(this.editButton).toBeEnabled({ timeout: 3e4 }), await this.editButton.click(), new oe(this.page, this.resourceName)));
|
|
1272
1242
|
}
|
|
1273
1243
|
async deleteImage() {
|
|
1274
|
-
return s.step("Delete image", async () => (await a(this.deleteButton).toBeEnabled({ timeout: 3e4 }), await this.deleteButton.click(), await g(this.page), new
|
|
1244
|
+
return s.step("Delete image", async () => (await a(this.deleteButton).toBeEnabled({ timeout: 3e4 }), await this.deleteButton.click(), await g(this.page), new L(this.page)));
|
|
1275
1245
|
}
|
|
1276
1246
|
async pushImage() {
|
|
1277
1247
|
return s.step("Push image", async () => {
|
|
@@ -1281,7 +1251,7 @@ class re extends S {
|
|
|
1281
1251
|
async saveImage(t) {
|
|
1282
1252
|
if (!t)
|
|
1283
1253
|
throw Error("Path is incorrect or not provided!");
|
|
1284
|
-
return await a(this.saveImagebutton).toBeEnabled(), await this.saveImagebutton.click(), await a(this.saveImageInput).toBeVisible(), await a(this.confirmSaveImages).toBeVisible(), await this.saveImageInput.evaluate((e) => e.removeAttribute("readonly")), await this.confirmSaveImages.evaluate((e) => e.removeAttribute("disabled")), await this.saveImageInput.pressSequentially(t, { delay: 10 }), await this.confirmSaveImages.click(), new
|
|
1254
|
+
return await a(this.saveImagebutton).toBeEnabled(), await this.saveImagebutton.click(), await a(this.saveImageInput).toBeVisible(), await a(this.confirmSaveImages).toBeVisible(), await this.saveImageInput.evaluate((e) => e.removeAttribute("readonly")), await this.confirmSaveImages.evaluate((e) => e.removeAttribute("disabled")), await this.saveImageInput.pressSequentially(t, { delay: 10 }), await this.confirmSaveImages.click(), new L(this.page);
|
|
1285
1255
|
}
|
|
1286
1256
|
async pushImageToKindCluster() {
|
|
1287
1257
|
const t = this.controlActions.getByRole("button", { name: "kebab menu", exact: !0 });
|
|
@@ -1290,7 +1260,7 @@ class re extends S {
|
|
|
1290
1260
|
await t.count() > 0 ? (await t.click(), e = this.controlActions.getByTitle("Drop Down Menu Items").getByTitle(n)) : e = this.controlActions.getByRole("button", { name: n }), await a(e).toBeVisible(), await e.click(), await g(this.page, "Kind", !0, "OK", "", 8e4);
|
|
1291
1261
|
}
|
|
1292
1262
|
}
|
|
1293
|
-
class
|
|
1263
|
+
class le extends w {
|
|
1294
1264
|
heading;
|
|
1295
1265
|
pullImageButton;
|
|
1296
1266
|
closeLink;
|
|
@@ -1315,12 +1285,17 @@ class ce extends m {
|
|
|
1315
1285
|
async pullImage(t, e = "", n = 6e4) {
|
|
1316
1286
|
return s.step(`Pulling image ${t}:${e}`, async () => {
|
|
1317
1287
|
const o = `${t}${e.length === 0 ? "" : ":" + e}`;
|
|
1318
|
-
return await this.imageNameInput.fill(o), await a(this.pullImageButton).toBeEnabled(), await this.pullImageButton.click(), await a(this.doneButton).toBeEnabled({ timeout: n }), await this.doneButton.click(), new
|
|
1288
|
+
return await this.imageNameInput.fill(o), await a(this.pullImageButton).toBeEnabled(), await this.pullImageButton.click(), await a(this.doneButton).toBeEnabled({ timeout: n }), await this.doneButton.click(), new L(this.page);
|
|
1319
1289
|
});
|
|
1320
1290
|
}
|
|
1321
1291
|
async getAllSearchResultsFor(t, e, n = "", o = !0) {
|
|
1322
1292
|
return s.step(`Get all search results for ${t}:${n}`, async () => {
|
|
1323
|
-
const r = await this.handleFormAndResultSearchString(
|
|
1293
|
+
const r = await this.handleFormAndResultSearchString(
|
|
1294
|
+
t,
|
|
1295
|
+
e,
|
|
1296
|
+
n,
|
|
1297
|
+
o
|
|
1298
|
+
);
|
|
1324
1299
|
return await this.getAllSearchResultsInstantly(r);
|
|
1325
1300
|
});
|
|
1326
1301
|
}
|
|
@@ -1356,7 +1331,7 @@ class ce extends m {
|
|
|
1356
1331
|
return s.step("Get first search result from the results table", async () => await this.getFirstResultButtonLocator().innerText());
|
|
1357
1332
|
}
|
|
1358
1333
|
async pullImageFromSearchResults(t, e = 6e4) {
|
|
1359
|
-
return s.step(`Pull image from search results: ${t}`, async () => (await this.selectValueFromSearchResults(t), await a(this.pullImageButton).toBeEnabled(), await this.pullImageButton.click(), await a(this.doneButton).toBeEnabled({ timeout: e }), await this.doneButton.click(), new
|
|
1334
|
+
return s.step(`Pull image from search results: ${t}`, async () => (await this.selectValueFromSearchResults(t), await a(this.pullImageButton).toBeEnabled(), await this.pullImageButton.click(), await a(this.doneButton).toBeEnabled({ timeout: e }), await this.doneButton.click(), new L(this.page)));
|
|
1360
1335
|
}
|
|
1361
1336
|
async selectValueFromSearchResults(t) {
|
|
1362
1337
|
return s.step(`Select value from search results: ${t}`, async () => {
|
|
@@ -1388,7 +1363,7 @@ class ce extends m {
|
|
|
1388
1363
|
});
|
|
1389
1364
|
}
|
|
1390
1365
|
}
|
|
1391
|
-
class
|
|
1366
|
+
class L extends A {
|
|
1392
1367
|
pullImageButton;
|
|
1393
1368
|
pruneImagesButton;
|
|
1394
1369
|
buildImageButton;
|
|
@@ -1405,7 +1380,7 @@ class E extends A {
|
|
|
1405
1380
|
return s.step("Open pull image page", async () => (await T(() => this.noContainerEngine(), {
|
|
1406
1381
|
timeout: 5e4,
|
|
1407
1382
|
message: "No Container Engine is available, cannot pull an image"
|
|
1408
|
-
}), await this.pullImageButton.click(), new
|
|
1383
|
+
}), await this.pullImageButton.click(), new le(this.page)));
|
|
1409
1384
|
}
|
|
1410
1385
|
async pullImage(t) {
|
|
1411
1386
|
return s.step(`Pull image: ${t}`, async () => {
|
|
@@ -1437,7 +1412,7 @@ class E extends A {
|
|
|
1437
1412
|
return s.step("Prune untagged images", async () => (await this.pruneImagesButton.click(), await g(this.page, "Prune", !0, "All untagged images"), this));
|
|
1438
1413
|
}
|
|
1439
1414
|
async openBuildImage() {
|
|
1440
|
-
return s.step("Open build image page", async () => (await this.buildImageButton.click(), new
|
|
1415
|
+
return s.step("Open build image page", async () => (await this.buildImageButton.click(), new ft(this.page)));
|
|
1441
1416
|
}
|
|
1442
1417
|
async getImageRowByName(t) {
|
|
1443
1418
|
return this.getRowByName(t);
|
|
@@ -1446,7 +1421,7 @@ class E extends A {
|
|
|
1446
1421
|
return s.step(`Check if image: ${t} exists`, async () => await this.getImageRowByName(t) !== void 0);
|
|
1447
1422
|
}
|
|
1448
1423
|
async waitForImageExists(t, e = 5e3) {
|
|
1449
|
-
return s.step(`Wait for image: ${t} to exist`, async () => (await
|
|
1424
|
+
return s.step(`Wait for image: ${t} to exist`, async () => (await y(async () => await this.imageExists(t), { timeout: e }), !0));
|
|
1450
1425
|
}
|
|
1451
1426
|
async waitForImageDelete(t, e = 5e3) {
|
|
1452
1427
|
return s.step(`Wait for image: ${t} to be deleted`, async () => (await T(async () => await this.imageExists(t), { timeout: e }), !0));
|
|
@@ -1455,8 +1430,7 @@ class E extends A {
|
|
|
1455
1430
|
return s.step(`Get current status of image: ${t}`, async () => {
|
|
1456
1431
|
let e = "";
|
|
1457
1432
|
const n = await this.getImageRowByName(t);
|
|
1458
|
-
if (n === void 0)
|
|
1459
|
-
throw new Error(`Image: '${t}' does not exist`);
|
|
1433
|
+
if (n === void 0) throw new Error(`Image: '${t}' does not exist`);
|
|
1460
1434
|
return e = e + await n.getByRole("status").getAttribute("title"), e;
|
|
1461
1435
|
});
|
|
1462
1436
|
}
|
|
@@ -1479,8 +1453,7 @@ class E extends A {
|
|
|
1479
1453
|
return s.step(`Get count from ${this.title} for images with status: ${t}`, async () => {
|
|
1480
1454
|
const e = await this.getAllTableRows();
|
|
1481
1455
|
let n = 0;
|
|
1482
|
-
if (e.length < 2)
|
|
1483
|
-
return 0;
|
|
1456
|
+
if (e.length < 2) return 0;
|
|
1484
1457
|
for (let o = 1; o < e.length; o++)
|
|
1485
1458
|
await e[o].getByRole("status").getByTitle(t, { exact: !0 }).count() > 0 && ++n;
|
|
1486
1459
|
return n;
|
|
@@ -1529,7 +1502,7 @@ class E extends A {
|
|
|
1529
1502
|
});
|
|
1530
1503
|
}
|
|
1531
1504
|
}
|
|
1532
|
-
class
|
|
1505
|
+
class ft extends w {
|
|
1533
1506
|
heading;
|
|
1534
1507
|
containerFilePathInput;
|
|
1535
1508
|
buildContextDirectoryInput;
|
|
@@ -1553,10 +1526,10 @@ class vt extends m {
|
|
|
1553
1526
|
name: "Build Platform Options"
|
|
1554
1527
|
}), this.arm64Button = this.platformRegion.getByLabel("linux/arm64"), this.amd64Button = this.platformRegion.getByLabel("linux/amd64"), this.arm64checkbox = this.platformRegion.getByLabel("ARM® aarch64 systems"), this.amd64checkbox = this.platformRegion.getByLabel("Intel and AMD x86_64 systems"), this.archMoreOptionsButton = this.platformRegion.getByRole("button", { name: "Show more options" }), this.archLessOptionsButton = this.platformRegion.getByRole("button", { name: "Show less options" }), this.terminalContent = t.locator(".xterm-rows");
|
|
1555
1528
|
}
|
|
1556
|
-
async buildImage(t, e, n, o = [
|
|
1557
|
-
return s.step(`Building image ${t} from ${e} in ${n} with ${o} architecture`, async () => (await this.fillBuildImageForm(t, e, n, o), await a(this.doneButton).toBeEnabled({ timeout: r }), await this.validateBuildLogs(), await this.doneButton.scrollIntoViewIfNeeded(), await this.doneButton.click(), console.log(`Image ${t} has been built successfully!`), new
|
|
1529
|
+
async buildImage(t, e, n, o = [N.Default], r = 12e4) {
|
|
1530
|
+
return s.step(`Building image ${t} from ${e} in ${n} with ${o} architecture`, async () => (await this.fillBuildImageForm(t, e, n, o), await a(this.doneButton).toBeEnabled({ timeout: r }), await this.validateBuildLogs(), await this.doneButton.scrollIntoViewIfNeeded(), await this.doneButton.click(), console.log(`Image ${t} has been built successfully!`), new L(this.page)));
|
|
1558
1531
|
}
|
|
1559
|
-
async cancelBuild(t, e, n, o = [
|
|
1532
|
+
async cancelBuild(t, e, n, o = [N.Default], r = 200) {
|
|
1560
1533
|
return s.step(`Starting and canceling build for image ${t}`, async () => {
|
|
1561
1534
|
await this.fillBuildImageForm(t, e, n, o), await a(this.cancelBuildButton).toBeEnabled(), await this.cancelBuildButton.scrollIntoViewIfNeeded(), await this.page.waitForTimeout(r), await a(this.cancelBuildButton).toBeVisible(), await this.cancelBuildButton.click(), await a(this.doneButton).toBeEnabled({ timeout: 3e4 });
|
|
1562
1535
|
});
|
|
@@ -1587,7 +1560,7 @@ class vt extends m {
|
|
|
1587
1560
|
}
|
|
1588
1561
|
async uncheckDefaultCheckbox() {
|
|
1589
1562
|
return s.step("Uncheck default checkbox", async () => {
|
|
1590
|
-
|
|
1563
|
+
Ht === "arm64" ? (await a(this.arm64checkbox).toBeChecked(), await this.arm64Button.click(), await a(this.arm64checkbox).not.toBeChecked()) : (await a(this.amd64checkbox).toBeChecked(), await this.amd64Button.click(), await a(this.amd64checkbox).not.toBeChecked());
|
|
1591
1564
|
});
|
|
1592
1565
|
}
|
|
1593
1566
|
async showAllArchOptions() {
|
|
@@ -1597,14 +1570,16 @@ class vt extends m {
|
|
|
1597
1570
|
const t = this.page.locator(".xterm-rows");
|
|
1598
1571
|
await a(t).toBeVisible();
|
|
1599
1572
|
const e = await t.locator("div:has(span)").all();
|
|
1600
|
-
await Promise.all(
|
|
1601
|
-
|
|
1602
|
-
|
|
1573
|
+
await Promise.all(
|
|
1574
|
+
e.map(async (n) => {
|
|
1575
|
+
await a.poll(async () => n.textContent()).not.toContain("Error");
|
|
1576
|
+
})
|
|
1577
|
+
);
|
|
1603
1578
|
}
|
|
1604
|
-
async fillBuildImageForm(t, e, n, o = [
|
|
1579
|
+
async fillBuildImageForm(t, e, n, o = [N.Default]) {
|
|
1605
1580
|
if (!e)
|
|
1606
1581
|
throw Error("Path to containerfile is incorrect or not provided!");
|
|
1607
|
-
if (await this.containerFilePathInput.fill(e), n && await this.buildContextDirectoryInput.fill(n), t && (await this.imageNameInput.clear(), await this.imageNameInput.pressSequentially(t, { delay: 50 })), !o.includes(
|
|
1582
|
+
if (await this.containerFilePathInput.fill(e), n && await this.buildContextDirectoryInput.fill(n), t && (await this.imageNameInput.clear(), await this.imageNameInput.pressSequentially(t, { delay: 50 })), !o.includes(N.Default)) {
|
|
1608
1583
|
await this.uncheckDefaultCheckbox(), await this.showAllArchOptions();
|
|
1609
1584
|
for (const r of o)
|
|
1610
1585
|
await this.checkArchCheckbox(r);
|
|
@@ -1612,7 +1587,7 @@ class vt extends m {
|
|
|
1612
1587
|
await a(this.buildButton).toBeEnabled(), await this.buildButton.scrollIntoViewIfNeeded(), await this.buildButton.click();
|
|
1613
1588
|
}
|
|
1614
1589
|
}
|
|
1615
|
-
class
|
|
1590
|
+
class ce extends w {
|
|
1616
1591
|
heading;
|
|
1617
1592
|
yamlPathInput;
|
|
1618
1593
|
playButton;
|
|
@@ -1645,10 +1620,10 @@ class le extends m {
|
|
|
1645
1620
|
async playYaml(t, e = !1, n = 12e4) {
|
|
1646
1621
|
return s.step("Podman Kube Play", async () => {
|
|
1647
1622
|
switch (t.podmanKubePlayOption) {
|
|
1648
|
-
case
|
|
1623
|
+
case X.SelectYamlFile:
|
|
1649
1624
|
await this.selectYamlFile(t.pathToYaml);
|
|
1650
1625
|
break;
|
|
1651
|
-
case
|
|
1626
|
+
case X.CreateYamlFileFromScratch:
|
|
1652
1627
|
await this.createFromScratch(t.jsonResourceDefinition);
|
|
1653
1628
|
break;
|
|
1654
1629
|
}
|
|
@@ -1656,11 +1631,11 @@ class le extends m {
|
|
|
1656
1631
|
const r = await this.alertMessage.textContent();
|
|
1657
1632
|
throw Error(`Error while playing Kubernetes YAML: ${r}`);
|
|
1658
1633
|
}
|
|
1659
|
-
return await a(this.doneButton).toBeEnabled(), await this.doneButton.click(), new
|
|
1634
|
+
return await a(this.doneButton).toBeEnabled(), await this.doneButton.click(), new j(this.page);
|
|
1660
1635
|
});
|
|
1661
1636
|
}
|
|
1662
1637
|
}
|
|
1663
|
-
class
|
|
1638
|
+
class G extends S {
|
|
1664
1639
|
startButton;
|
|
1665
1640
|
stopButton;
|
|
1666
1641
|
restartButton;
|
|
@@ -1677,10 +1652,9 @@ class q extends S {
|
|
|
1677
1652
|
async getState() {
|
|
1678
1653
|
return s.step("Get Pod State", async () => {
|
|
1679
1654
|
const t = await this.header.getByRole("status").getAttribute("title");
|
|
1680
|
-
for (const e of Object.values(
|
|
1681
|
-
if (t === e)
|
|
1682
|
-
|
|
1683
|
-
return G.Unknown;
|
|
1655
|
+
for (const e of Object.values(z))
|
|
1656
|
+
if (t === e) return e;
|
|
1657
|
+
return z.Unknown;
|
|
1684
1658
|
});
|
|
1685
1659
|
}
|
|
1686
1660
|
async startPod() {
|
|
@@ -1699,18 +1673,18 @@ class q extends S {
|
|
|
1699
1673
|
});
|
|
1700
1674
|
}
|
|
1701
1675
|
async deletePod() {
|
|
1702
|
-
return s.step("Delete Pod", async () => (await a(this.deleteButton).toBeEnabled({ timeout: 1e4 }), await this.deleteButton.click(), await g(this.page), new
|
|
1676
|
+
return s.step("Delete Pod", async () => (await a(this.deleteButton).toBeEnabled({ timeout: 1e4 }), await this.deleteButton.click(), await g(this.page), new j(this.page)));
|
|
1703
1677
|
}
|
|
1704
1678
|
async findInLogs(t) {
|
|
1705
1679
|
return s.step("Find text in logs", async () => {
|
|
1706
|
-
await this.activateTab(
|
|
1680
|
+
await this.activateTab(G.LOGS_TAB), await a(this.findInLogsInput).toBeVisible(), await this.findInLogsInput.clear(), await a(this.findInLogsInput).toHaveValue(""), await this.findInLogsInput.fill(t), await a(this.findInLogsInput).toHaveValue(t);
|
|
1707
1681
|
});
|
|
1708
1682
|
}
|
|
1709
1683
|
async getCountOfSearchResults() {
|
|
1710
|
-
return s.step("Get count of search results", async () => (await this.activateTab(
|
|
1684
|
+
return s.step("Get count of search results", async () => (await this.activateTab(G.LOGS_TAB), await a(this.findInLogsInput).toBeVisible(), await this.searchResults.count()));
|
|
1711
1685
|
}
|
|
1712
1686
|
}
|
|
1713
|
-
class
|
|
1687
|
+
class j extends A {
|
|
1714
1688
|
podmanKubePlayButton;
|
|
1715
1689
|
prunePodsButton;
|
|
1716
1690
|
pruneConfirmationButton;
|
|
@@ -1727,7 +1701,7 @@ class Q extends A {
|
|
|
1727
1701
|
if (e === void 0)
|
|
1728
1702
|
throw Error(`Pod: ${t} does not exist`);
|
|
1729
1703
|
const n = e.getByRole("button").getByText(t, { exact: !0 });
|
|
1730
|
-
return await a(n).toBeEnabled(), await n.click(), new
|
|
1704
|
+
return await a(n).toBeEnabled(), await n.click(), new G(this.page, t);
|
|
1731
1705
|
});
|
|
1732
1706
|
}
|
|
1733
1707
|
async getPodRowByName(t) {
|
|
@@ -1737,7 +1711,7 @@ class Q extends A {
|
|
|
1737
1711
|
return await this.getPodRowByName(t) !== void 0;
|
|
1738
1712
|
}
|
|
1739
1713
|
async openPodmanKubePlay() {
|
|
1740
|
-
return s.step("Open Podman Kube Play", async () => (await a(this.podmanKubePlayButton).toBeEnabled(), await this.podmanKubePlayButton.click(), new
|
|
1714
|
+
return s.step("Open Podman Kube Play", async () => (await a(this.podmanKubePlayButton).toBeEnabled(), await this.podmanKubePlayButton.click(), new ce(this.page)));
|
|
1741
1715
|
}
|
|
1742
1716
|
async prunePods() {
|
|
1743
1717
|
return s.step("Prune Pods", async () => (await this.prunePodsButton.click(), await g(this.page, "Prune"), this));
|
|
@@ -1765,7 +1739,7 @@ class Q extends A {
|
|
|
1765
1739
|
});
|
|
1766
1740
|
}
|
|
1767
1741
|
}
|
|
1768
|
-
class ue extends
|
|
1742
|
+
class ue extends w {
|
|
1769
1743
|
heading;
|
|
1770
1744
|
closeLink;
|
|
1771
1745
|
podNameBox;
|
|
@@ -1779,10 +1753,10 @@ class ue extends m {
|
|
|
1779
1753
|
});
|
|
1780
1754
|
}
|
|
1781
1755
|
async createPod(t) {
|
|
1782
|
-
return
|
|
1756
|
+
return B.step(`Create pod ${t}`, async () => (await this.podNameBox.fill(t), await this.createPodButton.click(), new j(this.page)));
|
|
1783
1757
|
}
|
|
1784
1758
|
}
|
|
1785
|
-
class he extends
|
|
1759
|
+
class he extends w {
|
|
1786
1760
|
heading;
|
|
1787
1761
|
imageNameInput;
|
|
1788
1762
|
cancelButton;
|
|
@@ -1800,13 +1774,13 @@ class he extends m {
|
|
|
1800
1774
|
return s.step(`Select image: ${t}`, async () => (await a(this.imageNameInput).toBeVisible(), await this.imageNameInput.fill(t), await a(this.imageNameInput).toHaveValue(t), this));
|
|
1801
1775
|
}
|
|
1802
1776
|
async cancel() {
|
|
1803
|
-
return s.step("Cancel and return to Containers page", async () => (await a(this.cancelButton).toBeEnabled(), await this.cancelButton.click(), new
|
|
1777
|
+
return s.step("Cancel and return to Containers page", async () => (await a(this.cancelButton).toBeEnabled(), await this.cancelButton.click(), new V(this.page)));
|
|
1804
1778
|
}
|
|
1805
1779
|
async runImage(t) {
|
|
1806
1780
|
return s.step("Run image", async () => {
|
|
1807
1781
|
await this.selectImage(t);
|
|
1808
1782
|
const e = this.pullImageAndRunButton.or(this.runImageButton);
|
|
1809
|
-
return await a(e).toBeEnabled({ timeout: 1e4 }), await e.click(), new
|
|
1783
|
+
return await a(e).toBeEnabled({ timeout: 1e4 }), await e.click(), new xt(this.page, t);
|
|
1810
1784
|
});
|
|
1811
1785
|
}
|
|
1812
1786
|
async openManageRegistries() {
|
|
@@ -1815,7 +1789,7 @@ class he extends m {
|
|
|
1815
1789
|
});
|
|
1816
1790
|
}
|
|
1817
1791
|
}
|
|
1818
|
-
class
|
|
1792
|
+
class V extends A {
|
|
1819
1793
|
pruneContainersButton;
|
|
1820
1794
|
createContainerButton;
|
|
1821
1795
|
pruneConfirmationButton;
|
|
@@ -1845,7 +1819,7 @@ class N extends A {
|
|
|
1845
1819
|
const e = await this.getContainerRowByName(t);
|
|
1846
1820
|
if (e === void 0)
|
|
1847
1821
|
throw Error(`Container: '${t}' does not exist`);
|
|
1848
|
-
return await e.getByRole("cell").nth(3).click(), new
|
|
1822
|
+
return await e.getByRole("cell").nth(3).click(), new k(this.page, t);
|
|
1849
1823
|
});
|
|
1850
1824
|
}
|
|
1851
1825
|
async startContainer(t) {
|
|
@@ -1878,13 +1852,13 @@ class N extends A {
|
|
|
1878
1852
|
const n = e.getByRole("button", {
|
|
1879
1853
|
name: "Delete Container"
|
|
1880
1854
|
});
|
|
1881
|
-
return await a(n).toBeVisible(), await a(n).toBeEnabled(), await n.click(), await g(this.page), new
|
|
1855
|
+
return await a(n).toBeVisible(), await a(n).toBeEnabled(), await n.click(), await g(this.page), new V(this.page);
|
|
1882
1856
|
});
|
|
1883
1857
|
}
|
|
1884
1858
|
async stopContainerFromDetails(t) {
|
|
1885
1859
|
return s.step(`Stop Container ${t} from details page`, async () => {
|
|
1886
1860
|
const e = await this.openContainersDetails(t);
|
|
1887
|
-
return await a(e.heading).toBeVisible(), await a(e.heading).toContainText(t), a(await e.getState()).toContain(
|
|
1861
|
+
return await a(e.heading).toBeVisible(), await a(e.heading).toContainText(t), a(await e.getState()).toContain($.Running), await e.stopContainer(), e;
|
|
1888
1862
|
});
|
|
1889
1863
|
}
|
|
1890
1864
|
async getContainerRowByName(t) {
|
|
@@ -1921,13 +1895,13 @@ class N extends A {
|
|
|
1921
1895
|
return s.step("Close Create dialog", async () => (await a(this.createDialogCloseButton).toBeVisible(), await this.createDialogCloseButton.click(), await a(this.createDialog).not.toBeVisible(), this));
|
|
1922
1896
|
}
|
|
1923
1897
|
async openBuildImageFromDialog() {
|
|
1924
|
-
return s.step("Open Build Image page from Create dialog", async () => (await this.openCreateDialog(), await a(this.createDialogContainerOrDockerfileButton).toBeEnabled({ timeout: 1e4 }), await this.createDialogContainerOrDockerfileButton.click(), await a(this.createDialog).not.toBeVisible({ timeout: 1e4 }), new
|
|
1898
|
+
return s.step("Open Build Image page from Create dialog", async () => (await this.openCreateDialog(), await a(this.createDialogContainerOrDockerfileButton).toBeEnabled({ timeout: 1e4 }), await this.createDialogContainerOrDockerfileButton.click(), await a(this.createDialog).not.toBeVisible({ timeout: 1e4 }), new ft(this.page)));
|
|
1925
1899
|
}
|
|
1926
1900
|
async openSelectImageFromDialog() {
|
|
1927
1901
|
return s.step("Open Select Image page from Create dialog", async () => (await this.openCreateDialog(), await a(this.createDialogExistingImageButton).toBeEnabled({ timeout: 1e4 }), await this.createDialogExistingImageButton.click(), await a(this.createDialog).not.toBeVisible({ timeout: 1e4 }), new he(this.page)));
|
|
1928
1902
|
}
|
|
1929
1903
|
}
|
|
1930
|
-
class
|
|
1904
|
+
class kt extends w {
|
|
1931
1905
|
mainPage;
|
|
1932
1906
|
header;
|
|
1933
1907
|
content;
|
|
@@ -1957,8 +1931,15 @@ class Pt extends m {
|
|
|
1957
1931
|
return this.content.getByRole("region", { name: "Podman Provider" });
|
|
1958
1932
|
}
|
|
1959
1933
|
}
|
|
1960
|
-
class
|
|
1961
|
-
|
|
1934
|
+
class Rt extends w {
|
|
1935
|
+
constructor(t, e) {
|
|
1936
|
+
super(t), this.extensionName = e, this.header = t.getByRole("region", { name: "Header" }), this.tabs = t.getByRole("region", { name: "Tabs" }), this.tabContent = t.getByRole("region", { name: "Tab Content" }), this.heading = this.header.getByRole("heading", { name: e }), this.enableButton = this.header.getByRole("button", { name: "Start" }), this.disableButton = this.header.getByRole("button", { name: "Stop" }), this.removeExtensionButton = this.header.getByRole("button", {
|
|
1937
|
+
name: "Delete"
|
|
1938
|
+
}), this.status = this.header.getByLabel("Extension Status Label"), this.errorStackTrace = this.tabContent.getByRole("group", {
|
|
1939
|
+
name: "Stack Trace",
|
|
1940
|
+
exact: !0
|
|
1941
|
+
});
|
|
1942
|
+
}
|
|
1962
1943
|
header;
|
|
1963
1944
|
tabs;
|
|
1964
1945
|
tabContent;
|
|
@@ -1968,14 +1949,6 @@ class Tt extends m {
|
|
|
1968
1949
|
status;
|
|
1969
1950
|
heading;
|
|
1970
1951
|
errorStackTrace;
|
|
1971
|
-
constructor(t, e) {
|
|
1972
|
-
super(t), this.extensionName = e, this.header = t.getByRole("region", { name: "Header" }), this.tabs = t.getByRole("region", { name: "Tabs" }), this.tabContent = t.getByRole("region", { name: "Tab Content" }), this.heading = this.header.getByRole("heading", { name: e }), this.enableButton = this.header.getByRole("button", { name: "Start" }), this.disableButton = this.header.getByRole("button", { name: "Stop" }), this.removeExtensionButton = this.header.getByRole("button", {
|
|
1973
|
-
name: "Delete"
|
|
1974
|
-
}), this.status = this.header.getByLabel("Extension Status Label"), this.errorStackTrace = this.tabContent.getByRole("group", {
|
|
1975
|
-
name: "Stack Trace",
|
|
1976
|
-
exact: !0
|
|
1977
|
-
});
|
|
1978
|
-
}
|
|
1979
1952
|
async disableExtension() {
|
|
1980
1953
|
return s.step(`Disable extension: ${this.extensionName}`, async () => await this.status.innerText() === "DISABLED" ? this : (await this.disableButton.click(), await a(this.status).toHaveText("DISABLED", { timeout: 3e4 }), this));
|
|
1981
1954
|
}
|
|
@@ -1983,7 +1956,7 @@ class Tt extends m {
|
|
|
1983
1956
|
return s.step(`Enable extension: ${this.extensionName}`, async () => await this.status.innerText() === "ACTIVE" ? this : (await this.enableButton.click(), await a(this.status).toHaveText("ACTIVE", { timeout: 3e4 }), this));
|
|
1984
1957
|
}
|
|
1985
1958
|
async removeExtension(t = !0) {
|
|
1986
|
-
return s.step(`Remove extension: ${this.extensionName}`, async () => (t && await this.disableExtension(), await a(this.removeExtensionButton).toBeVisible(), await this.removeExtensionButton.click(), await a(this.removeExtensionButton).not.toBeVisible({ timeout: 3e4 }), new
|
|
1959
|
+
return s.step(`Remove extension: ${this.extensionName}`, async () => (t && await this.disableExtension(), await a(this.removeExtensionButton).toBeVisible(), await this.removeExtensionButton.click(), await a(this.removeExtensionButton).not.toBeVisible({ timeout: 3e4 }), new it(this.page)));
|
|
1987
1960
|
}
|
|
1988
1961
|
async activateTab(t) {
|
|
1989
1962
|
return s.step(`Activate tab: ${t}`, async () => {
|
|
@@ -1995,7 +1968,7 @@ class Tt extends m {
|
|
|
1995
1968
|
});
|
|
1996
1969
|
}
|
|
1997
1970
|
}
|
|
1998
|
-
class ge extends
|
|
1971
|
+
class ge extends w {
|
|
1999
1972
|
parent;
|
|
2000
1973
|
card;
|
|
2001
1974
|
leftActions;
|
|
@@ -2034,7 +2007,7 @@ class ge extends m {
|
|
|
2034
2007
|
});
|
|
2035
2008
|
}
|
|
2036
2009
|
async openExtensionDetails(t) {
|
|
2037
|
-
return await a(this.card).toBeVisible(), await this.card.scrollIntoViewIfNeeded(), await a(this.detailsLink).toBeVisible(), await this.detailsLink.click(), new
|
|
2010
|
+
return await a(this.card).toBeVisible(), await this.card.scrollIntoViewIfNeeded(), await a(this.detailsLink).toBeVisible(), await this.detailsLink.click(), new Rt(this.page, t);
|
|
2038
2011
|
}
|
|
2039
2012
|
async disableExtension() {
|
|
2040
2013
|
return s.step(`Disable extension: ${this.extensionName}`, async () => await this.status.innerText() === "DISABLED" ? this : (await this.disableButton.click(), await a(this.status).toHaveText("DISABLED"), this));
|
|
@@ -2043,10 +2016,10 @@ class ge extends m {
|
|
|
2043
2016
|
return s.step(`Enable extension: ${this.extensionName}`, async () => await this.status.innerText() === "ACTIVE" ? this : (await this.enableButton.click(), await a(this.status).toHaveText("ACTIVE"), this));
|
|
2044
2017
|
}
|
|
2045
2018
|
async removeExtension() {
|
|
2046
|
-
return s.step(`Remove extension: ${this.extensionName}`, async () => (await this.disableExtension(), await this.removeButton.click(), new
|
|
2019
|
+
return s.step(`Remove extension: ${this.extensionName}`, async () => (await this.disableExtension(), await this.removeButton.click(), new it(this.page)));
|
|
2047
2020
|
}
|
|
2048
2021
|
}
|
|
2049
|
-
class
|
|
2022
|
+
class it {
|
|
2050
2023
|
page;
|
|
2051
2024
|
heading;
|
|
2052
2025
|
header;
|
|
@@ -2077,11 +2050,11 @@ class st {
|
|
|
2077
2050
|
exact: !0
|
|
2078
2051
|
});
|
|
2079
2052
|
await a(r).toBeEnabled(), await r.click();
|
|
2080
|
-
const
|
|
2053
|
+
const l = n.getByRole("button", {
|
|
2081
2054
|
name: "Done",
|
|
2082
2055
|
exact: !0
|
|
2083
2056
|
});
|
|
2084
|
-
return await a(
|
|
2057
|
+
return await a(l).toBeEnabled({ timeout: e }), await l.click(), this;
|
|
2085
2058
|
});
|
|
2086
2059
|
}
|
|
2087
2060
|
async openInstalledTab() {
|
|
@@ -2126,7 +2099,7 @@ class de extends A {
|
|
|
2126
2099
|
jobsMetricsButton;
|
|
2127
2100
|
cronJobsMetricsButton;
|
|
2128
2101
|
constructor(t) {
|
|
2129
|
-
super(t, "Dashboard"), this.namespaceLocator = this.page.getByLabel("Kubernetes Namespace", { exact: !0 }), this.namespaceDropdownButton = this.namespaceLocator.getByRole("button", { name: "Namespace" }), this.currentNamespace = this.namespaceLocator.getByLabel("hidden input", { exact: !0 }), this.nodesMetricsButton = this.metricsLocatorByName(
|
|
2102
|
+
super(t, "Dashboard"), this.namespaceLocator = this.page.getByLabel("Kubernetes Namespace", { exact: !0 }), this.namespaceDropdownButton = this.namespaceLocator.getByRole("button", { name: "Namespace" }), this.currentNamespace = this.namespaceLocator.getByLabel("hidden input", { exact: !0 }), this.nodesMetricsButton = this.metricsLocatorByName(m.Nodes), this.podsMetricsButton = this.metricsLocatorByName(m.Pods), this.deploymentsMetricsButton = this.metricsLocatorByName(m.Deployments), this.servicesMetricsButton = this.metricsLocatorByName(m.Services), this.ingressesMetricsButton = this.metricsLocatorByName(m.IngeressesRoutes), this.pvcsMetricsButton = this.metricsLocatorByName(m.PVCs), this.configMapsMetricsButton = this.metricsLocatorByName(m.ConfigMapsSecrets), this.jobsMetricsButton = this.metricsLocatorByName(m.Jobs), this.cronJobsMetricsButton = this.metricsLocatorByName(m.Cronjobs);
|
|
2130
2103
|
}
|
|
2131
2104
|
async changeNamespace(t) {
|
|
2132
2105
|
await a(this.currentNamespace).not.toHaveValue(t, { timeout: 1e4 }), await this.selectNamespaceByName(t), await a(this.currentNamespace).toHaveValue(t, { timeout: 1e4 });
|
|
@@ -2152,11 +2125,11 @@ class de extends A {
|
|
|
2152
2125
|
const n = this.metricsLocatorByName(t), o = e ? `${t} ${e} count` : `${t} count`, r = n.getByLabel(o, { exact: !0 });
|
|
2153
2126
|
if (await r.count() === 0)
|
|
2154
2127
|
throw new Error(`No ${o} locator found for resource: ${t}`);
|
|
2155
|
-
const
|
|
2156
|
-
return
|
|
2128
|
+
const l = await r.textContent();
|
|
2129
|
+
return l ? Number.parseInt(l, 10) : 0;
|
|
2157
2130
|
}
|
|
2158
2131
|
}
|
|
2159
|
-
class
|
|
2132
|
+
class ot extends S {
|
|
2160
2133
|
applyChangesButton;
|
|
2161
2134
|
revertChagesButton;
|
|
2162
2135
|
deleteButton;
|
|
@@ -2172,11 +2145,11 @@ class rt extends S {
|
|
|
2172
2145
|
super(t, e), this.applyChangesButton = this.tabContent.getByRole("button", { name: "Apply changes to cluster" }), this.revertChagesButton = this.tabContent.getByRole("button", { name: "Revert Changes" }), this.deleteButton = this.controlActions.getByRole("button", { name: "Delete", exact: !1 }), this.editorWidget = this.page.getByRole("dialog", { name: "Find / Replace" }), this.toggleButton = this.editorWidget.getByRole("button", { name: "Toggle Replace" }), this.findTextArea = this.editorWidget.getByPlaceholder("Find"), this.replaceTextArea = this.editorWidget.getByPlaceholder("Replace"), this.replaceButton = this.editorWidget.getByRole("button", { name: "Replace All" });
|
|
2173
2146
|
}
|
|
2174
2147
|
async getState() {
|
|
2175
|
-
return s.step("Get resource state", async () => await this.header.getByRole("status").getAttribute("title") ??
|
|
2148
|
+
return s.step("Get resource state", async () => await this.header.getByRole("status").getAttribute("title") ?? wt.Unknown);
|
|
2176
2149
|
}
|
|
2177
2150
|
async editKubernetsYamlFile(t, e) {
|
|
2178
2151
|
return s.step("Edit Kubernetes YAML file", async () => {
|
|
2179
|
-
await this.activateTab(
|
|
2152
|
+
await this.activateTab(ot.KUBE_TAB);
|
|
2180
2153
|
const n = this.tabContent.getByRole("presentation");
|
|
2181
2154
|
await a(n).toBeVisible(), await n.click(), F ? await this.page.keyboard.press("Meta+F") : await this.page.keyboard.press("Control+F"), await a(this.editorWidget).toBeVisible(), await a(this.findTextArea).toBeVisible(), await this.findTextArea.fill(t), await a(this.toggleButton).toBeVisible(), await this.toggleButton.click(), await a(this.replaceTextArea).toBeVisible(), await this.replaceTextArea.fill(e), await a(this.replaceButton).toBeVisible(), await this.replaceButton.click(), await a(this.revertChagesButton).toBeEnabled(), await a(this.applyChangesButton).toBeEnabled(), await this.applyChangesButton.click(), await g(this.page, "Kubernetes", !0, "OK");
|
|
2182
2155
|
});
|
|
@@ -2198,14 +2171,14 @@ class H extends A {
|
|
|
2198
2171
|
return await this.getRowByName(t, !1);
|
|
2199
2172
|
}
|
|
2200
2173
|
async geAttributeByRow(t, e, n) {
|
|
2201
|
-
const r =
|
|
2174
|
+
const r = Yt[n].indexOf(e) + 1;
|
|
2202
2175
|
return t.getByRole("cell").nth(r);
|
|
2203
2176
|
}
|
|
2204
2177
|
async openResourceDetails(t, e, n) {
|
|
2205
2178
|
return s.step(`Open ${e}: ${t} details`, async () => {
|
|
2206
2179
|
const o = await this.fetchKubernetesResource(t, n);
|
|
2207
2180
|
let r;
|
|
2208
|
-
return e ===
|
|
2181
|
+
return e === m.Nodes ? r = o.getByRole("cell").nth(2) : r = o.getByRole("cell").nth(3), await a(r).toBeEnabled(), await r.click(), new ot(this.page, t);
|
|
2209
2182
|
});
|
|
2210
2183
|
}
|
|
2211
2184
|
async deleteKubernetesResource(t) {
|
|
@@ -2244,7 +2217,7 @@ class we {
|
|
|
2244
2217
|
return this.kubernetesNavBar.getByLabel(t);
|
|
2245
2218
|
}
|
|
2246
2219
|
}
|
|
2247
|
-
class
|
|
2220
|
+
class Ct extends S {
|
|
2248
2221
|
updateButton;
|
|
2249
2222
|
deleteButton;
|
|
2250
2223
|
static SUMMARY_TAB = "Summary";
|
|
@@ -2257,13 +2230,13 @@ class It extends S {
|
|
|
2257
2230
|
});
|
|
2258
2231
|
}
|
|
2259
2232
|
async updateNetwork(t) {
|
|
2260
|
-
return s.step("Update network from details page", async () => (await a(this.updateButton).toBeEnabled(), await this.updateButton.click(), await
|
|
2233
|
+
return s.step("Update network from details page", async () => (await a(this.updateButton).toBeEnabled(), await this.updateButton.click(), await bt(this.page, this.resourceName, t), this));
|
|
2261
2234
|
}
|
|
2262
2235
|
async deleteNetwork() {
|
|
2263
|
-
return s.step("Delete network from details page", async () => (await a(this.deleteButton).toBeEnabled(), await this.deleteButton.click(), await g(this.page), new
|
|
2236
|
+
return s.step("Delete network from details page", async () => (await a(this.deleteButton).toBeEnabled(), await this.deleteButton.click(), await g(this.page), new st(this.page)));
|
|
2264
2237
|
}
|
|
2265
2238
|
}
|
|
2266
|
-
class me extends
|
|
2239
|
+
class me extends w {
|
|
2267
2240
|
heading;
|
|
2268
2241
|
networkNameBox;
|
|
2269
2242
|
subnetBox;
|
|
@@ -2273,13 +2246,13 @@ class me extends m {
|
|
|
2273
2246
|
super(t), this.heading = this.page.getByRole("heading", { name: "Create a network" }), this.networkNameBox = this.page.getByRole("textbox", { name: "Name" }), this.subnetBox = this.page.getByRole("textbox", { name: "Subnet" }), this.createButton = this.page.getByRole("button", { name: "Create" }), this.cancelButton = this.page.getByRole("button", { name: "Cancel" });
|
|
2274
2247
|
}
|
|
2275
2248
|
async createNetwork(t, e) {
|
|
2276
|
-
return s.step(`Create network ${t} with subnet ${e}`, async () => (await a(this.networkNameBox).toBeVisible(), await this.networkNameBox.clear(), await a(this.networkNameBox).toHaveValue(""), await this.networkNameBox.fill(t), await a(this.networkNameBox).toHaveValue(t), await a(this.subnetBox).toBeVisible(), await this.subnetBox.clear(), await a(this.subnetBox).toHaveValue(""), await this.subnetBox.fill(e), await a(this.subnetBox).toHaveValue(e), await a(this.createButton).toBeEnabled(), await this.createButton.click(), new
|
|
2249
|
+
return s.step(`Create network ${t} with subnet ${e}`, async () => (await a(this.networkNameBox).toBeVisible(), await this.networkNameBox.clear(), await a(this.networkNameBox).toHaveValue(""), await this.networkNameBox.fill(t), await a(this.networkNameBox).toHaveValue(t), await a(this.subnetBox).toBeVisible(), await this.subnetBox.clear(), await a(this.subnetBox).toHaveValue(""), await this.subnetBox.fill(e), await a(this.subnetBox).toHaveValue(e), await a(this.createButton).toBeEnabled(), await this.createButton.click(), new Ct(this.page, t)));
|
|
2277
2250
|
}
|
|
2278
2251
|
async cancel() {
|
|
2279
|
-
return s.step("Cancel network creation", async () => (await a(this.cancelButton).toBeEnabled(), await this.cancelButton.click(), new
|
|
2252
|
+
return s.step("Cancel network creation", async () => (await a(this.cancelButton).toBeEnabled(), await this.cancelButton.click(), new st(this.page)));
|
|
2280
2253
|
}
|
|
2281
2254
|
}
|
|
2282
|
-
class
|
|
2255
|
+
class st extends A {
|
|
2283
2256
|
createNetworkButton;
|
|
2284
2257
|
deleteSelectedButton;
|
|
2285
2258
|
constructor(t) {
|
|
@@ -2303,7 +2276,7 @@ class ct extends A {
|
|
|
2303
2276
|
async updateNetwork(t, e) {
|
|
2304
2277
|
return s.step(`Update network: ${t}`, async () => {
|
|
2305
2278
|
const n = await this.getUpdateNetworkRowButton(t);
|
|
2306
|
-
return await a(n).toBeEnabled(), await n.click(), await
|
|
2279
|
+
return await a(n).toBeEnabled(), await n.click(), await bt(this.page, t, e), this;
|
|
2307
2280
|
});
|
|
2308
2281
|
}
|
|
2309
2282
|
async deleteSelectedNetworks() {
|
|
@@ -2322,7 +2295,7 @@ class ct extends A {
|
|
|
2322
2295
|
if (e === void 0)
|
|
2323
2296
|
throw Error(`Network: ${t} does not exist`);
|
|
2324
2297
|
const n = e.getByRole("cell").nth(3);
|
|
2325
|
-
return await a(n).toBeEnabled(), await n.click(), new
|
|
2298
|
+
return await a(n).toBeEnabled(), await n.click(), new Ct(this.page, t);
|
|
2326
2299
|
});
|
|
2327
2300
|
}
|
|
2328
2301
|
async getNetworkRowButton(t, e) {
|
|
@@ -2363,25 +2336,25 @@ class d {
|
|
|
2363
2336
|
});
|
|
2364
2337
|
}
|
|
2365
2338
|
async openDashboard() {
|
|
2366
|
-
return s.step("Open Dashboard page", async () => (await a(this.dashboardLink).toBeVisible({ timeout: 1e4 }), await this.dashboardLink.click({ force: !0 }), new
|
|
2339
|
+
return s.step("Open Dashboard page", async () => (await a(this.dashboardLink).toBeVisible({ timeout: 1e4 }), await this.dashboardLink.click({ force: !0 }), new kt(this.page)));
|
|
2367
2340
|
}
|
|
2368
2341
|
async openImages() {
|
|
2369
|
-
return s.step("Open Images page", async () => (await a(this.imagesLink).toBeVisible({ timeout: 1e4 }), await this.imagesLink.click({ force: !0 }), new
|
|
2342
|
+
return s.step("Open Images page", async () => (await a(this.imagesLink).toBeVisible({ timeout: 1e4 }), await this.imagesLink.click({ force: !0 }), new L(this.page)));
|
|
2370
2343
|
}
|
|
2371
2344
|
async openContainers() {
|
|
2372
|
-
return s.step("Open Containers page", async () => (await a(this.containersLink).toBeVisible({ timeout: 1e4 }), await this.containersLink.click({ force: !0 }), new
|
|
2345
|
+
return s.step("Open Containers page", async () => (await a(this.containersLink).toBeVisible({ timeout: 1e4 }), await this.containersLink.click({ force: !0 }), new V(this.page)));
|
|
2373
2346
|
}
|
|
2374
2347
|
async openPods() {
|
|
2375
|
-
return s.step("Open Pods page", async () => (await a(this.podsLink).toBeVisible({ timeout: 1e4 }), await this.podsLink.click({ force: !0 }), new
|
|
2348
|
+
return s.step("Open Pods page", async () => (await a(this.podsLink).toBeVisible({ timeout: 1e4 }), await this.podsLink.click({ force: !0 }), new j(this.page)));
|
|
2376
2349
|
}
|
|
2377
2350
|
async openSettings() {
|
|
2378
2351
|
return s.step("Open Settings Page ", async () => {
|
|
2379
|
-
const t = new
|
|
2352
|
+
const t = new at(this.page);
|
|
2380
2353
|
return await t.settingsNavBar.isVisible() || (await a(this.settingsLink).toBeVisible({ timeout: 1e4 }), await this.settingsLink.click({ force: !0 })), t;
|
|
2381
2354
|
});
|
|
2382
2355
|
}
|
|
2383
2356
|
async openVolumes() {
|
|
2384
|
-
return s.step("Open Volumes page", async () => (await a(this.volumesLink).toBeVisible({ timeout: 1e4 }), await this.volumesLink.click({ force: !0 }), new
|
|
2357
|
+
return s.step("Open Volumes page", async () => (await a(this.volumesLink).toBeVisible({ timeout: 1e4 }), await this.volumesLink.click({ force: !0 }), new q(this.page)));
|
|
2385
2358
|
}
|
|
2386
2359
|
async openKubernetes() {
|
|
2387
2360
|
return s.step("Open Kubernetes Page ", async () => {
|
|
@@ -2390,28 +2363,40 @@ class d {
|
|
|
2390
2363
|
});
|
|
2391
2364
|
}
|
|
2392
2365
|
async openExtensions() {
|
|
2393
|
-
return s.step("Open Extensions page", async () => (await a(this.extensionsLink).toBeVisible({ timeout: 1e4 }), await this.extensionsLink.click({ force: !0 }), new
|
|
2366
|
+
return s.step("Open Extensions page", async () => (await a(this.extensionsLink).toBeVisible({ timeout: 1e4 }), await this.extensionsLink.click({ force: !0 }), new it(this.page)));
|
|
2394
2367
|
}
|
|
2395
2368
|
async openNetworks() {
|
|
2396
|
-
return s.step("Open Networks page", async () => (await a(this.networksLink).toBeVisible({ timeout: 1e4 }), await this.networksLink.click({ force: !0 }), new
|
|
2369
|
+
return s.step("Open Networks page", async () => (await a(this.networksLink).toBeVisible({ timeout: 1e4 }), await this.networksLink.click({ force: !0 }), new st(this.page)));
|
|
2397
2370
|
}
|
|
2398
2371
|
}
|
|
2399
|
-
async function
|
|
2400
|
-
let
|
|
2401
|
-
for (;
|
|
2372
|
+
async function vt(i, t, e, n, o, r) {
|
|
2373
|
+
let l = e;
|
|
2374
|
+
for (; l > 0; ) {
|
|
2402
2375
|
if (await i() === t)
|
|
2403
2376
|
return;
|
|
2404
|
-
|
|
2377
|
+
l = l - n, await pe(n);
|
|
2405
2378
|
}
|
|
2406
|
-
const
|
|
2379
|
+
const c = r.length === 0 ? `Timeout (${e} ms) was reach while waiting for condition (${i.name}) to become '${String(
|
|
2380
|
+
t
|
|
2381
|
+
)}'` : r;
|
|
2407
2382
|
if (o)
|
|
2408
|
-
throw Error(
|
|
2409
|
-
}
|
|
2410
|
-
async function
|
|
2411
|
-
|
|
2412
|
-
|
|
2413
|
-
|
|
2414
|
-
|
|
2383
|
+
throw Error(c);
|
|
2384
|
+
}
|
|
2385
|
+
async function y(i, {
|
|
2386
|
+
timeout: t = 5e3,
|
|
2387
|
+
diff: e = 500,
|
|
2388
|
+
sendError: n = !0,
|
|
2389
|
+
message: o = ""
|
|
2390
|
+
} = {}) {
|
|
2391
|
+
await vt(i, !0, t, e, n, o);
|
|
2392
|
+
}
|
|
2393
|
+
async function T(i, {
|
|
2394
|
+
timeout: t = 5e3,
|
|
2395
|
+
diff: e = 500,
|
|
2396
|
+
sendError: n = !0,
|
|
2397
|
+
message: o = ""
|
|
2398
|
+
} = {}) {
|
|
2399
|
+
await vt(i, !1, t, e, n, o);
|
|
2415
2400
|
}
|
|
2416
2401
|
async function pe(i) {
|
|
2417
2402
|
return new Promise((t) => {
|
|
@@ -2420,18 +2405,18 @@ async function pe(i) {
|
|
|
2420
2405
|
}
|
|
2421
2406
|
async function ma(i, t = 3e4) {
|
|
2422
2407
|
return s.step("Wait for Podman machine to be running", async () => {
|
|
2423
|
-
await
|
|
2408
|
+
await ut();
|
|
2424
2409
|
const e = await new d(i).openDashboard();
|
|
2425
2410
|
await a(e.heading).toBeVisible(), await a(e.podmanStatusLabel).toBeVisible({ timeout: t });
|
|
2426
2411
|
try {
|
|
2427
2412
|
await a(e.podmanStatusLabel).not.toHaveText("STARTING", { timeout: t });
|
|
2428
2413
|
} catch (n) {
|
|
2429
|
-
console.error("Podman machine stuck in STARTING state, trying to restart it", n), await te(), await
|
|
2414
|
+
console.error("Podman machine stuck in STARTING state, trying to restart it", n), await te(), await ut();
|
|
2430
2415
|
}
|
|
2431
2416
|
await a(e.podmanStatusLabel).toHaveText("RUNNING", { timeout: t });
|
|
2432
2417
|
});
|
|
2433
2418
|
}
|
|
2434
|
-
class
|
|
2419
|
+
class Z {
|
|
2435
2420
|
_profile;
|
|
2436
2421
|
_customFolder;
|
|
2437
2422
|
_customOutputFolder;
|
|
@@ -2444,8 +2429,21 @@ class at {
|
|
|
2444
2429
|
_saveTracesOnPass;
|
|
2445
2430
|
_saveVideosOnPass;
|
|
2446
2431
|
_customSettings = {};
|
|
2447
|
-
constructor({
|
|
2448
|
-
|
|
2432
|
+
constructor({
|
|
2433
|
+
profile: t = "",
|
|
2434
|
+
customFolder: e = "podman-desktop",
|
|
2435
|
+
customOutputFolder: n = "tests/playwright/output/",
|
|
2436
|
+
openDevTools: o = "none",
|
|
2437
|
+
autoUpdate: r = !0,
|
|
2438
|
+
autoCheckUpdates: l = !0,
|
|
2439
|
+
extensionsDisabled: c = [],
|
|
2440
|
+
aiLabModelUploadDisabled: u = !1,
|
|
2441
|
+
binaryPath: h = void 0,
|
|
2442
|
+
saveTracesOnPass: b = !1,
|
|
2443
|
+
saveVideosOnPass: R = !1,
|
|
2444
|
+
customSettings: _ = {}
|
|
2445
|
+
} = {}) {
|
|
2446
|
+
this._profile = t, this._customFolder = e, this._customOutputFolder = n, this._openDevTools = o, this._autoUpdate = r, this._autoCheckUpdates = l, this._extensionsDisabled = c, this._aiLabModelUploadDisabled = u, this._binaryPath = h, this._saveTracesOnPass = b, this._saveVideosOnPass = R, this._customSettings = _;
|
|
2449
2447
|
}
|
|
2450
2448
|
createSettingsJson() {
|
|
2451
2449
|
return console.log(`Binary path: ${this._binaryPath}`), this._binaryPath ? JSON.stringify({
|
|
@@ -2479,11 +2477,15 @@ class P {
|
|
|
2479
2477
|
_saveTracesOnPass;
|
|
2480
2478
|
_saveVideosOnPass;
|
|
2481
2479
|
static _instance;
|
|
2482
|
-
static async getInstance({
|
|
2480
|
+
static async getInstance({
|
|
2481
|
+
runnerOptions: t = new Z()
|
|
2482
|
+
} = {}) {
|
|
2483
2483
|
return P._instance || (P._instance = new P({ runnerOptions: t }), await P._instance.start()), P._instance;
|
|
2484
2484
|
}
|
|
2485
|
-
constructor({
|
|
2486
|
-
|
|
2485
|
+
constructor({
|
|
2486
|
+
runnerOptions: t = new Z()
|
|
2487
|
+
} = {}) {
|
|
2488
|
+
this._running = !1, this._runnerOptions = t, this._profile = this._runnerOptions._profile, this._saveTracesOnPass = this._runnerOptions._saveTracesOnPass, this._saveVideosOnPass = this._runnerOptions._saveVideosOnPass, this._testOutput = p(this._runnerOptions._customOutputFolder, this._profile), this._customFolder = p(this._testOutput, this._runnerOptions._customFolder), this._videoAndTraceName = void 0, this._options = this.defaultOptions();
|
|
2487
2489
|
}
|
|
2488
2490
|
async start() {
|
|
2489
2491
|
if (this.isRunning())
|
|
@@ -2491,7 +2493,7 @@ class P {
|
|
|
2491
2493
|
try {
|
|
2492
2494
|
this._running = !0, console.log("Starting Podman Desktop"), console.log("Electron app launch options: "), Object.keys(this._options).forEach((n) => {
|
|
2493
2495
|
console.log(`${n}: ${this._options[n]}`);
|
|
2494
|
-
}), this._app = await
|
|
2496
|
+
}), this._app = await Ot.launch({
|
|
2495
2497
|
...this._options
|
|
2496
2498
|
}), this._page = await this.getElectronApp().firstWindow();
|
|
2497
2499
|
const e = await this.getElectronApp().evaluate(async ({ app: n }) => n.getPath("exe"));
|
|
@@ -2517,14 +2519,14 @@ class P {
|
|
|
2517
2519
|
return await this.getElectronApp().browserWindow(this.getPage());
|
|
2518
2520
|
}
|
|
2519
2521
|
async screenshot(t) {
|
|
2520
|
-
await this.getPage().screenshot({ path:
|
|
2522
|
+
await this.getPage().screenshot({ path: p(this._testOutput, "screenshots", t) });
|
|
2521
2523
|
}
|
|
2522
2524
|
async startTracing() {
|
|
2523
2525
|
await this.getPage().context().tracing.start({ screenshots: !0, snapshots: !0, sources: !0 });
|
|
2524
2526
|
}
|
|
2525
2527
|
async stopTracing() {
|
|
2526
2528
|
let t = "";
|
|
2527
|
-
this._videoAndTraceName && (t = this._videoAndTraceName), t = t + "_trace.zip", await this.getPage().context().tracing.stop({ path:
|
|
2529
|
+
this._videoAndTraceName && (t = this._videoAndTraceName), t = t + "_trace.zip", await this.getPage().context().tracing.stop({ path: p(this._testOutput, "traces", t) });
|
|
2528
2530
|
}
|
|
2529
2531
|
async getBrowserWindowState() {
|
|
2530
2532
|
return await (await this.getBrowserWindow()).evaluate((t) => {
|
|
@@ -2567,29 +2569,28 @@ class P {
|
|
|
2567
2569
|
}
|
|
2568
2570
|
}
|
|
2569
2571
|
if (this._running = !1, P._instance = void 0, this._videoAndTraceName) {
|
|
2570
|
-
const e =
|
|
2572
|
+
const e = p(this._testOutput, "videos", `${this._videoAndTraceName}.webm`), n = await this.trackTime(async () => await this.saveVideoAs(e));
|
|
2571
2573
|
console.log(`Saving a video file took: ${n} ms`), console.log(`Video file saved as: ${e}`);
|
|
2572
2574
|
}
|
|
2573
2575
|
await this.removeTracesOnFinished();
|
|
2574
2576
|
}
|
|
2575
2577
|
async removeTracesOnFinished() {
|
|
2576
|
-
const t =
|
|
2577
|
-
|
|
2578
|
+
const t = p(this._testOutput, "traces", "raw");
|
|
2579
|
+
D(t) && (console.log(`Removing raw traces folder: ${t}`), K(t, { recursive: !0, force: !0, maxRetries: 5 }));
|
|
2578
2580
|
try {
|
|
2579
|
-
const e =
|
|
2580
|
-
if (console.log(`Test finished with status:${e}`), e !== "passed" && e !== "skipped")
|
|
2581
|
-
return;
|
|
2581
|
+
const e = B.info().status;
|
|
2582
|
+
if (console.log(`Test finished with status:${e}`), e !== "passed" && e !== "skipped") return;
|
|
2582
2583
|
} catch (e) {
|
|
2583
2584
|
console.log(`Caught exception in removing traces: ${e}`);
|
|
2584
2585
|
return;
|
|
2585
2586
|
}
|
|
2586
2587
|
if (!process.env.KEEP_TRACES_ON_PASS && !this._saveTracesOnPass) {
|
|
2587
|
-
const e =
|
|
2588
|
-
|
|
2588
|
+
const e = p(this._testOutput, "traces", `${this._videoAndTraceName}_trace.zip`);
|
|
2589
|
+
D(e) && (console.log(`Removing traces folder: ${e}`), K(e, { recursive: !0, force: !0, maxRetries: 5 }));
|
|
2589
2590
|
}
|
|
2590
2591
|
if (!process.env.KEEP_VIDEOS_ON_PASS && !this._saveVideosOnPass) {
|
|
2591
|
-
const e =
|
|
2592
|
-
|
|
2592
|
+
const e = p(this._testOutput, "videos", `${this._videoAndTraceName}.webm`);
|
|
2593
|
+
D(e) && (console.log(`Removing video folder: ${e}`), K(e, { recursive: !0, force: !0, maxRetries: 5 }));
|
|
2593
2594
|
}
|
|
2594
2595
|
}
|
|
2595
2596
|
async trackTime(t) {
|
|
@@ -2600,32 +2601,34 @@ class P {
|
|
|
2600
2601
|
defaultOptions() {
|
|
2601
2602
|
const t = process.env.PODMAN_DESKTOP_ARGS, e = process.env.PODMAN_DESKTOP_BINARY;
|
|
2602
2603
|
if (t && e)
|
|
2603
|
-
throw new Error(
|
|
2604
|
-
|
|
2604
|
+
throw new Error(
|
|
2605
|
+
"PODMAN_DESKTOP_ARGS and PODMAN_DESKTOP_BINARY are both set, cannot run tests in development and production mode at the same time..."
|
|
2606
|
+
);
|
|
2607
|
+
const n = p(this._testOutput, "videos"), o = p(this._testOutput, "traces", "raw");
|
|
2605
2608
|
console.log(`video will be written to: ${n}`);
|
|
2606
|
-
const r = this.setupPodmanDesktopCustomFolder(),
|
|
2609
|
+
const r = this.setupPodmanDesktopCustomFolder(), l = {
|
|
2607
2610
|
dir: n,
|
|
2608
2611
|
size: {
|
|
2609
2612
|
width: 1050,
|
|
2610
2613
|
height: 700
|
|
2611
2614
|
}
|
|
2612
|
-
},
|
|
2615
|
+
}, c = t ? [t] : ["."], u = t ? p(t, "node_modules", ".bin", "electron") : e ?? void 0;
|
|
2613
2616
|
return {
|
|
2614
|
-
args:
|
|
2617
|
+
args: c,
|
|
2615
2618
|
executablePath: u,
|
|
2616
2619
|
env: r,
|
|
2617
|
-
recordVideo:
|
|
2620
|
+
recordVideo: l,
|
|
2618
2621
|
timeout: 45e3,
|
|
2619
2622
|
tracesDir: o
|
|
2620
2623
|
};
|
|
2621
2624
|
}
|
|
2622
2625
|
setupPodmanDesktopCustomFolder() {
|
|
2623
|
-
const t = process.env, e =
|
|
2624
|
-
console.log(`podman desktop custom config will be written to: ${e}`), t.PODMAN_DESKTOP_HOME_DIR = e,
|
|
2625
|
-
const n =
|
|
2626
|
-
|
|
2626
|
+
const t = process.env, e = p(this._customFolder);
|
|
2627
|
+
console.log(`podman desktop custom config will be written to: ${e}`), t.PODMAN_DESKTOP_HOME_DIR = e, W && (t.XDG_SESSION_TYPE = "x11");
|
|
2628
|
+
const n = Mt(e, "configuration", "settings.json"), o = Ft(n);
|
|
2629
|
+
D(o) || Nt(o, { recursive: !0 });
|
|
2627
2630
|
const r = this._runnerOptions.createSettingsJson();
|
|
2628
|
-
return console.log(`disabling OpenDevTools in configuration file ${n}`),
|
|
2631
|
+
return console.log(`disabling OpenDevTools in configuration file ${n}`), $t(n, r), t;
|
|
2629
2632
|
}
|
|
2630
2633
|
isRunning() {
|
|
2631
2634
|
return this._running;
|
|
@@ -2634,7 +2637,7 @@ class P {
|
|
|
2634
2637
|
this._options = t;
|
|
2635
2638
|
}
|
|
2636
2639
|
setVideoAndTraceName(t) {
|
|
2637
|
-
this._videoAndTraceName = t,
|
|
2640
|
+
this._videoAndTraceName = t, B.info().retry > 0 && (this._videoAndTraceName += `_retry-${B.info().retry}`);
|
|
2638
2641
|
}
|
|
2639
2642
|
getTestOutput() {
|
|
2640
2643
|
return this._testOutput;
|
|
@@ -2644,15 +2647,15 @@ class P {
|
|
|
2644
2647
|
}
|
|
2645
2648
|
}
|
|
2646
2649
|
function Be() {
|
|
2647
|
-
const t = process.env.REGISTRY_URL ?? "ghcr.io", e = process.env.CI ? "podmandesktop-ci" : "", n = process.env.REGISTRY_USERNAME ?? e, o = process.env.PODMANDESKTOP_CI_BOT_TOKEN ?? "", r = process.env.CI ? o : "",
|
|
2648
|
-
return [t, n,
|
|
2650
|
+
const t = process.env.REGISTRY_URL ?? "ghcr.io", e = process.env.CI ? "podmandesktop-ci" : "", n = process.env.REGISTRY_USERNAME ?? e, o = process.env.PODMANDESKTOP_CI_BOT_TOKEN ?? "", r = process.env.CI ? o : "", l = process.env.REGISTRY_PASSWD ?? r;
|
|
2651
|
+
return [t, n, l];
|
|
2649
2652
|
}
|
|
2650
2653
|
function pa() {
|
|
2651
2654
|
const [i, t, e] = Be();
|
|
2652
2655
|
return !!i && !!t && !!e;
|
|
2653
2656
|
}
|
|
2654
2657
|
async function Ba(i, t) {
|
|
2655
|
-
await
|
|
2658
|
+
await y(async () => i.contexts().length > 0, {
|
|
2656
2659
|
timeout: 1e4,
|
|
2657
2660
|
message: "Waiting for browser contexts to be available",
|
|
2658
2661
|
sendError: !1
|
|
@@ -2662,18 +2665,18 @@ async function Ba(i, t) {
|
|
|
2662
2665
|
}
|
|
2663
2666
|
async function ya(i, t, e, n, o, r = { screenshotsPath: "" }) {
|
|
2664
2667
|
console.log("Performing browser login...");
|
|
2665
|
-
const
|
|
2666
|
-
|
|
2668
|
+
const l = r.screenshotsPath;
|
|
2669
|
+
l && await i.screenshot({ path: p(l, "screenshots", "initial_page.png"), type: "png", fullPage: !0 }), await a(i).toHaveTitle(t), await a(e.inputLocator).toBeVisible(), await e.inputLocator.fill(e.inputValue), await a(e.confirmLocator).toBeEnabled(), await e.confirmLocator.click(), l && await i.screenshot({ path: p(l, "screenshots", "after_username_page.png"), type: "png", fullPage: !0 }), await a(n.inputLocator).toBeVisible(), await n.inputLocator.fill(n.inputValue), await a(n.confirmLocator).toBeEnabled(), await n.confirmLocator.click(), l && await i.screenshot({ path: p(l, "screenshots", "after_password_page.png"), type: "png", fullPage: !0 }), await o(i);
|
|
2667
2670
|
}
|
|
2668
2671
|
async function ba(i, t, e = []) {
|
|
2669
2672
|
console.log("Starting a web server on port 9222");
|
|
2670
|
-
const n = await
|
|
2673
|
+
const n = await _t.launch({
|
|
2671
2674
|
headless: !1,
|
|
2672
2675
|
args: [`--remote-debugging-port=${i}`, ...e],
|
|
2673
2676
|
tracesDir: t,
|
|
2674
2677
|
slowMo: 200
|
|
2675
2678
|
});
|
|
2676
|
-
if (await
|
|
2679
|
+
if (await y(async () => n?.isConnected(), {
|
|
2677
2680
|
timeout: 1e4,
|
|
2678
2681
|
message: "Waiting for browser to be connected",
|
|
2679
2682
|
sendError: !1
|
|
@@ -2685,12 +2688,12 @@ async function xa(i, t, e, n = "") {
|
|
|
2685
2688
|
return await ye(i, t, e, n, 1e4);
|
|
2686
2689
|
}
|
|
2687
2690
|
async function ye(i, t, e, n, o = 1e4) {
|
|
2688
|
-
const
|
|
2689
|
-
predicate: (
|
|
2691
|
+
const c = (await i.waitForEvent("console", {
|
|
2692
|
+
predicate: (b) => b.type() === "log" && t.test(b.text()),
|
|
2690
2693
|
timeout: o
|
|
2691
2694
|
})).text();
|
|
2692
|
-
n && a(
|
|
2693
|
-
const u = e.exec(
|
|
2695
|
+
n && a(c).toContain(n);
|
|
2696
|
+
const u = e.exec(c), h = u ? u[1] : void 0;
|
|
2694
2697
|
return console.log(`Matched string: ${h}`), h;
|
|
2695
2698
|
}
|
|
2696
2699
|
async function fa(i, t, e, n) {
|
|
@@ -2705,7 +2708,7 @@ async function be(i, t = 5e3) {
|
|
|
2705
2708
|
}
|
|
2706
2709
|
return !0;
|
|
2707
2710
|
}
|
|
2708
|
-
class xe extends
|
|
2711
|
+
class xe extends w {
|
|
2709
2712
|
header;
|
|
2710
2713
|
content;
|
|
2711
2714
|
clusterPropertiesInformation;
|
|
@@ -2755,11 +2758,13 @@ class fe extends xe {
|
|
|
2755
2758
|
await a(this.configFileInput).toBeEmpty(), await a(this.clusterNameField).toHaveValue("kind-cluster"), await a(this.providerType).toHaveText("podman"), await a(this.httpPort).toHaveValue("9090"), await a(this.httpsPort).toHaveValue("9443"), await a(this.controllerCheckbox).toBeChecked(), await a(this.containerImage).toBeEmpty();
|
|
2756
2759
|
});
|
|
2757
2760
|
}
|
|
2758
|
-
async createKindCluster(t = "kind-cluster", { configFilePath: e, providerType: n, httpPort: o, httpsPort: r, useIngressController:
|
|
2761
|
+
async createKindCluster(t = "kind-cluster", { configFilePath: e, providerType: n, httpPort: o, httpsPort: r, useIngressController: l, containerImage: c } = {
|
|
2759
2762
|
useIngressController: !0
|
|
2760
2763
|
}, u) {
|
|
2761
2764
|
return s.step("Create kind cluster", async () => {
|
|
2762
|
-
if (await this.validateKindClusterDefaultSettings(), e ? (await this.configFileInput.evaluate((h) => h.removeAttribute("readonly")), await this.configFileInput.fill(e), await a(this.warning).toBeVisible(), await a(this.warning).toContainText(
|
|
2765
|
+
if (await this.validateKindClusterDefaultSettings(), e ? (await this.configFileInput.evaluate((h) => h.removeAttribute("readonly")), await this.configFileInput.fill(e), await a(this.warning).toBeVisible(), await a(this.warning).toContainText(
|
|
2766
|
+
"By specifying a config file, all other options will be ignored except for ingress controller deployment."
|
|
2767
|
+
)) : await U(this.clusterNameField, t), n && n !== "podman") {
|
|
2763
2768
|
await this.providerType.click();
|
|
2764
2769
|
const h = this.clusterPropertiesInformation.getByRole("button", {
|
|
2765
2770
|
name: n,
|
|
@@ -2767,11 +2772,11 @@ class fe extends xe {
|
|
|
2767
2772
|
});
|
|
2768
2773
|
await a(h).toBeEnabled(), await h.click(), await a(this.providerType).toHaveText(n);
|
|
2769
2774
|
}
|
|
2770
|
-
o && (await U(this.httpPort, o), await a(this.httpPort).toHaveText(o)), r && (await U(this.httpsPort, r), await a(this.httpsPort).toHaveText(r)), await a(this.controllerCheckbox).toBeEnabled(),
|
|
2775
|
+
o && (await U(this.httpPort, o), await a(this.httpPort).toHaveText(o)), r && (await U(this.httpsPort, r), await a(this.httpsPort).toHaveText(r)), await a(this.controllerCheckbox).toBeEnabled(), l ? (await this.controllerCheckbox.check(), await a(this.controllerCheckbox).toBeChecked()) : (await this.controllerCheckbox.uncheck(), await a(this.controllerCheckbox).not.toBeChecked()), c && (await U(this.containerImage, c), await a(this.containerImage).toHaveText(c)), await this.createCluster(u);
|
|
2771
2776
|
});
|
|
2772
2777
|
}
|
|
2773
2778
|
}
|
|
2774
|
-
class
|
|
2779
|
+
class Pt extends S {
|
|
2775
2780
|
resourceStatus;
|
|
2776
2781
|
constructor(t, e) {
|
|
2777
2782
|
super(t, e), this.resourceStatus = this.header.getByLabel("Connection Status Label");
|
|
@@ -2786,7 +2791,7 @@ class Lt extends S {
|
|
|
2786
2791
|
});
|
|
2787
2792
|
}
|
|
2788
2793
|
}
|
|
2789
|
-
class ke extends
|
|
2794
|
+
class ke extends w {
|
|
2790
2795
|
tasksManagerWindow;
|
|
2791
2796
|
header;
|
|
2792
2797
|
heading;
|
|
@@ -2840,7 +2845,7 @@ class ke extends m {
|
|
|
2840
2845
|
return this.taskList.getByRole("row", { name: t });
|
|
2841
2846
|
}
|
|
2842
2847
|
}
|
|
2843
|
-
class
|
|
2848
|
+
class Tt extends w {
|
|
2844
2849
|
content;
|
|
2845
2850
|
kindInstallationButton;
|
|
2846
2851
|
kubernetesContext;
|
|
@@ -2853,7 +2858,9 @@ class St extends m {
|
|
|
2853
2858
|
pinProvidersButton;
|
|
2854
2859
|
pinMenu;
|
|
2855
2860
|
constructor(t) {
|
|
2856
|
-
super(t), this.content = t.getByRole("contentinfo", { name: "Status Bar" }), this.kindInstallationButton = this.content.getByTitle(
|
|
2861
|
+
super(t), this.content = t.getByRole("contentinfo", { name: "Status Bar" }), this.kindInstallationButton = this.content.getByTitle(
|
|
2862
|
+
"Kind not found on your system, click to download and install it"
|
|
2863
|
+
), this.kubernetesContext = this.content.getByTitle("Current Kubernetes Context"), this.versionButton = this.content.getByRole("button", { name: /^v\d+\.\d+\.\d+(-\w+)?$/ }), this.updateButtonTitle = this.content.getByRole("button").and(this.content.getByTitle("Update available")), this.shareYourFeedbackButton = this.content.getByRole("button").and(this.content.getByTitle("Share your feedback")), this.troubleshootingButton = this.content.getByRole("button").and(this.content.getByTitle("Troubleshooting")), this.tasksButton = this.content.getByRole("button").and(this.content.getByTitle("Tasks")), this.helpButton = this.content.getByRole("button").and(this.content.getByTitle("Help")), this.pinProvidersButton = this.content.getByRole("button", { name: "Pin" }), this.pinMenu = this.page.getByTitle("Pin Menu");
|
|
2857
2864
|
}
|
|
2858
2865
|
async installKindCLI() {
|
|
2859
2866
|
await a(this.kindInstallationButton).toBeVisible(), await this.kindInstallationButton.click(), await g(this.page, "Kind"), await g(this.page, "Kind"), await g(this.page, "Kind", !0, "OK");
|
|
@@ -2885,44 +2892,48 @@ class St extends m {
|
|
|
2885
2892
|
: ` + e);
|
|
2886
2893
|
}
|
|
2887
2894
|
}
|
|
2888
|
-
async function ka(i, t, e = 3e5, { configFilePath: n, providerType: o, httpPort: r, httpsPort:
|
|
2895
|
+
async function ka(i, t, e = 3e5, { configFilePath: n, providerType: o, httpPort: r, httpsPort: l, useIngressController: c, containerImage: u } = {}) {
|
|
2889
2896
|
return s.step(`Create Kind cluster with settings: configFilePath=${n},
|
|
2890
2897
|
providerType=${o}, httpPort=${r},
|
|
2891
|
-
httpsPort=${
|
|
2892
|
-
const h = new d(i),
|
|
2893
|
-
if (await a(
|
|
2894
|
-
if (await
|
|
2898
|
+
httpsPort=${l}, ingressController=${c}`, async () => {
|
|
2899
|
+
const h = new d(i), b = new Tt(i), R = new Y(i, "kind", t), _ = new fe(i), rt = await (await h.openSettings()).openTabPage(E);
|
|
2900
|
+
if (await a(rt.heading).toBeVisible({ timeout: 1e4 }), await a.poll(async () => rt.resourceCardIsVisible("kind")).toBeTruthy(), await a(R.createButton).toBeVisible(), await R.doesResourceElementExist())
|
|
2901
|
+
if (await R.resourceElementConnectionStatus.textContent() !== v.Running)
|
|
2895
2902
|
console.log(`Kind cluster [${t}] already present, but not running. Delete the cluster...`), await Re(i);
|
|
2896
2903
|
else {
|
|
2897
2904
|
console.log(`Kind cluster [${t}] already present, skipping creation.`);
|
|
2898
2905
|
return;
|
|
2899
2906
|
}
|
|
2900
|
-
await
|
|
2901
|
-
|
|
2902
|
-
|
|
2903
|
-
|
|
2904
|
-
|
|
2905
|
-
|
|
2906
|
-
|
|
2907
|
-
|
|
2907
|
+
await R.createButton.click(), await _.createKindCluster(
|
|
2908
|
+
t,
|
|
2909
|
+
{
|
|
2910
|
+
configFilePath: n,
|
|
2911
|
+
providerType: o,
|
|
2912
|
+
httpPort: r,
|
|
2913
|
+
httpsPort: l,
|
|
2914
|
+
useIngressController: c,
|
|
2915
|
+
containerImage: u
|
|
2916
|
+
},
|
|
2917
|
+
e
|
|
2918
|
+
), await a(R.resourceElement).toBeVisible(), await a(R.resourceElementConnectionStatus).toHaveText(v.Running, {
|
|
2908
2919
|
timeout: 15e3
|
|
2909
|
-
}), await
|
|
2920
|
+
}), await b.validateKubernetesContext(`kind-${t}`);
|
|
2910
2921
|
});
|
|
2911
2922
|
}
|
|
2912
2923
|
async function Re(i, t = "kind", e = "kind-cluster-control-plane", n = "kind-cluster", o = 5e4) {
|
|
2913
2924
|
return s.step(`Delete ${t} cluster`, async () => {
|
|
2914
|
-
const r = await
|
|
2915
|
-
await
|
|
2916
|
-
const u = new
|
|
2917
|
-
if (await a(u.heading).toBeVisible({ timeout: 1e4 }), !await
|
|
2925
|
+
const r = await nt(i, e), l = new d(i), c = new Y(i, t, n);
|
|
2926
|
+
await l.openSettings();
|
|
2927
|
+
const u = new E(i);
|
|
2928
|
+
if (await a(u.heading).toBeVisible({ timeout: 1e4 }), !await c.doesResourceElementExist()) {
|
|
2918
2929
|
console.log(`Kind cluster [${n}] not present, skipping deletion.`);
|
|
2919
2930
|
return;
|
|
2920
2931
|
}
|
|
2921
|
-
await
|
|
2932
|
+
await c.performConnectionAction(f.Stop), await a(c.resourceElementConnectionStatus).toHaveText(v.Off, {
|
|
2922
2933
|
timeout: o
|
|
2923
|
-
}), await
|
|
2934
|
+
}), await c.performConnectionAction(f.Delete), await a(c.markdownContent).toBeVisible({
|
|
2924
2935
|
timeout: o
|
|
2925
|
-
}), await
|
|
2936
|
+
}), await It(i, n, e, r);
|
|
2926
2937
|
});
|
|
2927
2938
|
}
|
|
2928
2939
|
async function Ra(i, t) {
|
|
@@ -2930,22 +2941,22 @@ async function Ra(i, t) {
|
|
|
2930
2941
|
const n = await new d(i).openContainers();
|
|
2931
2942
|
await a.poll(async () => n.containerExists(t)).toBeTruthy();
|
|
2932
2943
|
const o = await n.openContainersDetails(t);
|
|
2933
|
-
await a.poll(async () => await o.getState()).toEqual(
|
|
2934
|
-
const r = new
|
|
2935
|
-
if (!
|
|
2944
|
+
await a.poll(async () => await o.getState()).toEqual($.Running);
|
|
2945
|
+
const r = new q(i), l = await nt(i, t);
|
|
2946
|
+
if (!l)
|
|
2936
2947
|
throw new Error(`Volume name for container "${t}" is not defined.`);
|
|
2937
|
-
const
|
|
2938
|
-
await a.poll(async () => await
|
|
2948
|
+
const c = await r.openVolumeDetails(l);
|
|
2949
|
+
await a.poll(async () => await c.isUsed()).toBeTruthy();
|
|
2939
2950
|
});
|
|
2940
2951
|
}
|
|
2941
2952
|
async function Ca(i, t, e, n, o = 3e4) {
|
|
2942
2953
|
return s.step(`Performs "${e}" action, expects "${n}" state.`, async () => {
|
|
2943
|
-
if (await new d(i).openSettings(), await t.performConnectionAction(e), e ===
|
|
2944
|
-
const
|
|
2945
|
-
name:
|
|
2954
|
+
if (await new d(i).openSettings(), await t.performConnectionAction(e), e === f.Restart) {
|
|
2955
|
+
const l = t.resourceElementConnectionActions.getByRole("button", {
|
|
2956
|
+
name: f.Stop,
|
|
2946
2957
|
exact: !0
|
|
2947
2958
|
});
|
|
2948
|
-
await a(
|
|
2959
|
+
await a(l).toBeEnabled({ timeout: o });
|
|
2949
2960
|
}
|
|
2950
2961
|
await a(t.resourceElementConnectionStatus).toHaveText(n, {
|
|
2951
2962
|
timeout: o
|
|
@@ -2954,52 +2965,52 @@ async function Ca(i, t, e, n, o = 3e4) {
|
|
|
2954
2965
|
}
|
|
2955
2966
|
async function va(i, t, e, n, o, r = 3e4) {
|
|
2956
2967
|
return s.step(`Performs a connection action '${n}' on the resource from the details page, verifies the expected resource state '${o}'`, async () => {
|
|
2957
|
-
const
|
|
2968
|
+
const l = new d(i), c = new Pt(i, e);
|
|
2958
2969
|
try {
|
|
2959
|
-
await a(
|
|
2970
|
+
await a(c.heading).toBeVisible();
|
|
2960
2971
|
} catch {
|
|
2961
|
-
const h = await (await
|
|
2972
|
+
const h = await (await l.openSettings()).openTabPage(E);
|
|
2962
2973
|
await a(h.heading).toBeVisible({ timeout: 1e4 }), await a(t.resourceElementDetailsButton).toBeEnabled(), await t.resourceElementDetailsButton.click();
|
|
2963
2974
|
}
|
|
2964
|
-
if (await
|
|
2965
|
-
const u =
|
|
2966
|
-
name:
|
|
2975
|
+
if (await c.performConnectionActionDetails(n), n === f.Restart) {
|
|
2976
|
+
const u = c.controlActions.getByRole("button", {
|
|
2977
|
+
name: f.Stop,
|
|
2967
2978
|
exact: !0
|
|
2968
2979
|
});
|
|
2969
2980
|
await a(u).toBeEnabled({ timeout: r });
|
|
2970
2981
|
}
|
|
2971
|
-
await a(
|
|
2982
|
+
await a(c.resourceStatus).toHaveText(o, {
|
|
2972
2983
|
timeout: r
|
|
2973
2984
|
});
|
|
2974
2985
|
});
|
|
2975
2986
|
}
|
|
2976
2987
|
async function Pa(i, t = "kind", e = "kind-cluster-control-plane", n = "kind-cluster", o = 3e4) {
|
|
2977
2988
|
return s.step(`Deletes the '${n}' cluster from the details page`, async () => {
|
|
2978
|
-
const r = new d(i),
|
|
2989
|
+
const r = new d(i), l = await nt(i, e), u = await (await r.openSettings()).openTabPage(E), h = new Y(i, t, n);
|
|
2979
2990
|
if (await a(u.heading).toBeVisible({ timeout: 1e4 }), !await h.doesResourceElementExist()) {
|
|
2980
2991
|
console.log(`Cluster [${n}] not present, skipping deletion.`);
|
|
2981
2992
|
return;
|
|
2982
2993
|
}
|
|
2983
2994
|
await a(h.resourceElementDetailsButton).toBeEnabled(), await h.resourceElementDetailsButton.click();
|
|
2984
|
-
const
|
|
2985
|
-
await a(
|
|
2995
|
+
const b = new Pt(i, n);
|
|
2996
|
+
await a(b.heading).toBeVisible(), await b.performConnectionActionDetails(f.Stop), await a(b.resourceStatus).toHaveText(v.Off, {
|
|
2986
2997
|
timeout: o
|
|
2987
|
-
}), await
|
|
2998
|
+
}), await b.performConnectionActionDetails(f.Delete), await It(i, n, e, l);
|
|
2988
2999
|
});
|
|
2989
3000
|
}
|
|
2990
|
-
async function
|
|
3001
|
+
async function It(i, t, e, n, o = 2e4) {
|
|
2991
3002
|
return s.step(`Validates that resources associated with the deleted '${t}' cluster are removed`, async () => {
|
|
2992
|
-
const r = new d(i),
|
|
2993
|
-
await a(
|
|
3003
|
+
const r = new d(i), l = await r.openContainers();
|
|
3004
|
+
await a(l.heading).toBeVisible(), await a.poll(async () => l.containerExists(e), {
|
|
2994
3005
|
timeout: o
|
|
2995
3006
|
}).toBeFalsy();
|
|
2996
|
-
const
|
|
2997
|
-
await a(
|
|
3007
|
+
const c = await r.openVolumes();
|
|
3008
|
+
await a(c.heading).toBeVisible(), await a.poll(async () => await c.waitForVolumeDelete(n), {
|
|
2998
3009
|
timeout: o
|
|
2999
3010
|
}).toBeTruthy();
|
|
3000
3011
|
});
|
|
3001
3012
|
}
|
|
3002
|
-
class Ce extends
|
|
3013
|
+
class Ce extends w {
|
|
3003
3014
|
welcomeMessage;
|
|
3004
3015
|
telemetryConsent;
|
|
3005
3016
|
skipOnBoarding;
|
|
@@ -3038,7 +3049,7 @@ class Ce extends m {
|
|
|
3038
3049
|
} catch {
|
|
3039
3050
|
console.log("Skip Onboarding button is still visible, retrying to press the button"), await this.skipOnBoarding.click({ force: !0 });
|
|
3040
3051
|
}
|
|
3041
|
-
return new
|
|
3052
|
+
return new kt(this.page);
|
|
3042
3053
|
});
|
|
3043
3054
|
}
|
|
3044
3055
|
/**
|
|
@@ -3058,8 +3069,8 @@ class Ce extends m {
|
|
|
3058
3069
|
});
|
|
3059
3070
|
}
|
|
3060
3071
|
}
|
|
3061
|
-
const Ta =
|
|
3062
|
-
runnerOptions: [new
|
|
3072
|
+
const Ta = B.extend({
|
|
3073
|
+
runnerOptions: [new Z(), { option: !0 }],
|
|
3063
3074
|
runner: async ({ runnerOptions: i }, t) => {
|
|
3064
3075
|
const e = await P.getInstance({ runnerOptions: i });
|
|
3065
3076
|
await t(e);
|
|
@@ -3076,167 +3087,192 @@ const Ta = y.extend({
|
|
|
3076
3087
|
await t(e);
|
|
3077
3088
|
},
|
|
3078
3089
|
statusBar: async ({ page: i }, t) => {
|
|
3079
|
-
const e = new
|
|
3090
|
+
const e = new Tt(i);
|
|
3080
3091
|
await t(e);
|
|
3081
3092
|
}
|
|
3082
3093
|
});
|
|
3083
3094
|
async function Ia(i, t, e, n) {
|
|
3084
3095
|
return s.step(`Deploy '${t}' and verify pod '${n}' appears in the Kubernetes environment`, async () => {
|
|
3085
|
-
const o = new
|
|
3096
|
+
const o = new k(i, t), r = new d(i);
|
|
3086
3097
|
await a(o.heading).toBeVisible(), await (await o.openDeployToKubernetesPage()).deployPod(t, { useKubernetesServices: !0 }, e);
|
|
3087
|
-
const u = await (await r.openKubernetes()).openTabPage(
|
|
3098
|
+
const u = await (await r.openKubernetes()).openTabPage(m.Pods);
|
|
3088
3099
|
await a.poll(async () => u.getRowByName(n), { timeout: 15e3 }).toBeTruthy();
|
|
3089
3100
|
});
|
|
3090
3101
|
}
|
|
3091
|
-
async function
|
|
3102
|
+
async function La(i, t, e, n) {
|
|
3092
3103
|
return s.step(`Create ${t} kubernetes resource: ${e}`, async () => {
|
|
3093
3104
|
const o = new d(i);
|
|
3094
3105
|
try {
|
|
3095
|
-
const
|
|
3096
|
-
console.log(`Kubectl version stdout: ${
|
|
3097
|
-
} catch (
|
|
3098
|
-
throw new Error(`Kubectl is not installed: ${
|
|
3106
|
+
const c = x("kubectl version").toString();
|
|
3107
|
+
console.log(`Kubectl version stdout: ${c}`);
|
|
3108
|
+
} catch (c) {
|
|
3109
|
+
throw new Error(`Kubectl is not installed: ${c}`);
|
|
3099
3110
|
}
|
|
3100
3111
|
try {
|
|
3101
|
-
const
|
|
3102
|
-
console.log(`Kube yaml ${n} applied successfully via cli: ${
|
|
3103
|
-
} catch (
|
|
3104
|
-
throw new Error(`Error encountered when trying to apply kube yaml: ${
|
|
3112
|
+
const c = x(`kubectl apply -f ${n}`).toString();
|
|
3113
|
+
console.log(`Kube yaml ${n} applied successfully via cli: ${c}`);
|
|
3114
|
+
} catch (c) {
|
|
3115
|
+
throw new Error(`Error encountered when trying to apply kube yaml: ${c}`);
|
|
3105
3116
|
}
|
|
3106
|
-
const
|
|
3107
|
-
await a(
|
|
3117
|
+
const l = await (await o.openKubernetes()).openTabPage(t);
|
|
3118
|
+
await a(l.heading).toBeVisible(), await a.poll(async () => l.getRowByName(e)).toBeTruthy();
|
|
3108
3119
|
});
|
|
3109
3120
|
}
|
|
3110
|
-
async function
|
|
3121
|
+
async function Ea(i, t, e, n = 3e4) {
|
|
3111
3122
|
return s.step(`Delete ${t} kubernetes resource: ${e}`, async () => {
|
|
3112
|
-
const
|
|
3113
|
-
await
|
|
3123
|
+
const l = await (await new d(i).openKubernetes()).openTabPage(t);
|
|
3124
|
+
await l.deleteKubernetesResource(e), await g(i), await a.poll(async () => await l.getRowByName(e), { timeout: n }).not.toBeTruthy();
|
|
3114
3125
|
});
|
|
3115
3126
|
}
|
|
3116
3127
|
async function Sa(i, t, e, n) {
|
|
3117
|
-
const
|
|
3118
|
-
await a(
|
|
3119
|
-
const u = await
|
|
3120
|
-
await a(u.tabContent).toContainText(
|
|
3128
|
+
const c = await (await (await new d(i).openKubernetes()).openTabPage(t)).openResourceDetails(e, t);
|
|
3129
|
+
await a(c.heading).toBeVisible();
|
|
3130
|
+
const u = await c.activateTab("Summary");
|
|
3131
|
+
await a(u.tabContent).toContainText(
|
|
3132
|
+
`Desired: ${n}, Updated: ${n}, Total: ${n}, Available: ${n}, Unavailable: N/A`
|
|
3133
|
+
);
|
|
3121
3134
|
}
|
|
3122
3135
|
async function Aa(i, t, e, n, o = 9e4) {
|
|
3123
3136
|
return s.step(`Check ${t} kubernetes resource state, should be ${n}`, async () => {
|
|
3124
|
-
const u = await (await (await new d(i).openKubernetes()).openTabPage(t)).openResourceDetails(
|
|
3137
|
+
const u = await (await (await new d(i).openKubernetes()).openTabPage(t)).openResourceDetails(
|
|
3138
|
+
e,
|
|
3139
|
+
t,
|
|
3140
|
+
o
|
|
3141
|
+
);
|
|
3125
3142
|
await a(u.heading).toBeVisible(), await a.poll(async () => u.getState(), { timeout: o }).toBe(n);
|
|
3126
3143
|
});
|
|
3127
3144
|
}
|
|
3128
3145
|
async function Va(i, t, e, n = 3, o = 5) {
|
|
3129
3146
|
return s.step("Change deployment kubernetes cluster resource", async () => {
|
|
3130
|
-
const
|
|
3131
|
-
await a.poll(async () => await
|
|
3147
|
+
const l = await new d(i).openKubernetes();
|
|
3148
|
+
await a.poll(async () => await gt(i, e), {
|
|
3132
3149
|
timeout: 6e4
|
|
3133
3150
|
}).toBe(n);
|
|
3134
|
-
const
|
|
3135
|
-
await a(
|
|
3136
|
-
const u = await
|
|
3137
|
-
await a(u.heading).toBeVisible(), await u.editKubernetsYamlFile(
|
|
3151
|
+
const c = await l.openTabPage(t);
|
|
3152
|
+
await a(c.heading).toBeVisible();
|
|
3153
|
+
const u = await c.openResourceDetails(e, t);
|
|
3154
|
+
await a(u.heading).toBeVisible(), await u.editKubernetsYamlFile(
|
|
3155
|
+
`replicas: ${n}`,
|
|
3156
|
+
`replicas: ${o}`
|
|
3157
|
+
), await a.poll(async () => await gt(i, e), {
|
|
3138
3158
|
timeout: 6e4
|
|
3139
3159
|
}).toBe(o);
|
|
3140
3160
|
});
|
|
3141
3161
|
}
|
|
3142
|
-
async function
|
|
3162
|
+
async function gt(i, t) {
|
|
3143
3163
|
return s.step(`Count pod replicas: ${t}`, async () => {
|
|
3144
|
-
const o = await (await new d(i).openKubernetes()).openTabPage(
|
|
3164
|
+
const o = await (await new d(i).openKubernetes()).openTabPage(m.Pods);
|
|
3145
3165
|
let r = 0;
|
|
3146
|
-
const
|
|
3147
|
-
for (let
|
|
3148
|
-
(await c
|
|
3166
|
+
const l = await o.getAllTableRows();
|
|
3167
|
+
for (let c = l.length - 1; c > 0; c--)
|
|
3168
|
+
(await l[c].getByRole("cell").nth(3).getByRole("button").textContent())?.includes(t) && (r += 1);
|
|
3149
3169
|
return r;
|
|
3150
3170
|
});
|
|
3151
3171
|
}
|
|
3152
3172
|
async function Da(i, t, e) {
|
|
3153
3173
|
return s.step(`Configure port forwarding for ${e} ${t} k8s resource`, async () => {
|
|
3154
3174
|
await (await (await (await new d(i).openKubernetes()).openTabPage(t)).openResourceDetails(e, t)).activateTab("Summary");
|
|
3155
|
-
const
|
|
3156
|
-
await a(
|
|
3175
|
+
const c = i.getByRole("button", { name: "Forward..." });
|
|
3176
|
+
await a(c).toBeVisible(), await c.click();
|
|
3157
3177
|
const u = i.getByRole("button", { name: "Open", exact: !0 }), h = i.getByRole("button", { name: "Remove" });
|
|
3158
3178
|
await a(u).toBeVisible({ timeout: 1e4 }), await a(h).toBeVisible();
|
|
3159
3179
|
});
|
|
3160
3180
|
}
|
|
3161
3181
|
async function Na(i, t, e, n) {
|
|
3162
3182
|
return s.step(`Verify port forwarding for ${t} configuration: local port ${e}, remote port ${n}`, async () => {
|
|
3163
|
-
const
|
|
3164
|
-
await a(
|
|
3165
|
-
const
|
|
3183
|
+
const l = await (await new d(i).openKubernetes()).openTabPage(m.PortForwarding);
|
|
3184
|
+
await a(l.heading).toBeVisible();
|
|
3185
|
+
const c = await l.fetchKubernetesResource(t), u = await l.geAttributeByRow(
|
|
3186
|
+
c,
|
|
3187
|
+
"Local Port",
|
|
3188
|
+
m.PortForwarding
|
|
3189
|
+
), h = await l.geAttributeByRow(
|
|
3190
|
+
c,
|
|
3191
|
+
"Remote Port",
|
|
3192
|
+
m.PortForwarding
|
|
3193
|
+
);
|
|
3166
3194
|
a(Number(await u.textContent())).toBe(e), a(Number(await h.textContent())).toBe(n);
|
|
3167
3195
|
});
|
|
3168
3196
|
}
|
|
3169
3197
|
async function $a(i, t) {
|
|
3170
3198
|
return s.step("Verify local port response", async () => {
|
|
3171
|
-
a.poll(
|
|
3172
|
-
|
|
3173
|
-
|
|
3174
|
-
|
|
3199
|
+
a.poll(
|
|
3200
|
+
async () => {
|
|
3201
|
+
const o = await (await (await fetch(i, { cache: "no-store" })).blob()).text();
|
|
3202
|
+
a(o).toContain(t);
|
|
3203
|
+
},
|
|
3204
|
+
{ timeout: 2e4, intervals: [1e3, 3e3, 5e3, 15e3] }
|
|
3205
|
+
);
|
|
3175
3206
|
});
|
|
3176
3207
|
}
|
|
3177
3208
|
async function Ma(i, t, e, n = 16e4) {
|
|
3178
3209
|
const r = await new d(i).openContainers();
|
|
3179
3210
|
await a(r.heading).toBeVisible(), await a.poll(async () => r.getContainerRowByName(t)).toBeTruthy();
|
|
3180
|
-
const
|
|
3181
|
-
await a.poll(
|
|
3182
|
-
|
|
3183
|
-
|
|
3184
|
-
|
|
3185
|
-
|
|
3211
|
+
const l = await r.openContainersDetails(t);
|
|
3212
|
+
await a.poll(
|
|
3213
|
+
async () => {
|
|
3214
|
+
await l.executeCommandInTerminal(e);
|
|
3215
|
+
const c = await ve(i, t);
|
|
3216
|
+
return await l.executeCommandInTerminal("clear"), c;
|
|
3217
|
+
},
|
|
3218
|
+
{ timeout: n }
|
|
3219
|
+
).toBeTruthy();
|
|
3186
3220
|
}
|
|
3187
3221
|
async function ve(i, t) {
|
|
3188
|
-
const e = new
|
|
3222
|
+
const e = new k(i, t);
|
|
3189
3223
|
await e.activateTab("Terminal"), await a(e.terminalContent).toBeVisible(), await i.waitForTimeout(2e3);
|
|
3190
3224
|
try {
|
|
3191
|
-
return await a(e.terminalContent).toContainText(/contour-\S+\s+1\/1\s+Running\s+\d+\s+\S+/), await a(e.terminalContent).toContainText(
|
|
3225
|
+
return await a(e.terminalContent).toContainText(/contour-\S+\s+1\/1\s+Running\s+\d+\s+\S+/), await a(e.terminalContent).toContainText(
|
|
3226
|
+
/contour-certgen-\S+\s+0\/1\s+Completed\s+\d+\s+\S+/
|
|
3227
|
+
), await a(e.terminalContent).toContainText(/envoy-\S+\s+2\/2\s+Running\s+\d+\s+\S+/), !0;
|
|
3192
3228
|
} catch {
|
|
3193
3229
|
return !1;
|
|
3194
3230
|
}
|
|
3195
3231
|
}
|
|
3196
|
-
const
|
|
3197
|
-
wsl:
|
|
3198
|
-
hyperv:
|
|
3199
|
-
applehv:
|
|
3200
|
-
libkrun:
|
|
3201
|
-
qemu:
|
|
3232
|
+
const dt = process.env.CONTAINERS_MACHINE_PROVIDER, Pe = {
|
|
3233
|
+
wsl: C.WSL,
|
|
3234
|
+
hyperv: C.HyperV,
|
|
3235
|
+
applehv: C.AppleHV,
|
|
3236
|
+
libkrun: C.LibKrun,
|
|
3237
|
+
qemu: C.Qemu
|
|
3202
3238
|
};
|
|
3203
3239
|
function Fa() {
|
|
3204
|
-
return
|
|
3240
|
+
return dt ? Pe[dt?.toLowerCase()] : void 0;
|
|
3205
3241
|
}
|
|
3206
3242
|
function Te() {
|
|
3207
|
-
return O ?
|
|
3243
|
+
return O ? C.WSL : F ? C.LibKrun : C.Native;
|
|
3208
3244
|
}
|
|
3209
3245
|
const Ie = {
|
|
3210
3246
|
extensionName: "minikube",
|
|
3211
3247
|
extensionFullName: "minikube extension",
|
|
3212
3248
|
extensionLabel: "minikube",
|
|
3213
3249
|
extensionFullLabel: "podman-desktop.minikube"
|
|
3214
|
-
},
|
|
3250
|
+
}, Lt = {
|
|
3215
3251
|
extensionName: "Podman AI Lab",
|
|
3216
3252
|
extensionFullName: "Podman AI Lab extension",
|
|
3217
3253
|
extensionLabel: "ai-lab",
|
|
3218
3254
|
extensionFullLabel: "redhat.ai-lab"
|
|
3219
|
-
},
|
|
3255
|
+
}, Le = {
|
|
3220
3256
|
extensionName: "Red Hat Extension Pack",
|
|
3221
3257
|
extensionFullName: "Red Hat Extension Pack extension",
|
|
3222
3258
|
extensionLabel: "redhat-pack",
|
|
3223
3259
|
extensionFullLabel: "redhat.redhat-pack"
|
|
3224
|
-
},
|
|
3260
|
+
}, Et = {
|
|
3225
3261
|
extensionName: "Bootable Container",
|
|
3226
3262
|
extensionFullName: "Bootable Container extension",
|
|
3227
3263
|
extensionLabel: "bootc",
|
|
3228
3264
|
extensionFullLabel: "redhat.bootc"
|
|
3229
|
-
},
|
|
3265
|
+
}, Ee = {
|
|
3230
3266
|
extensionName: "Developer Sandbox",
|
|
3231
3267
|
extensionFullName: "Developer Sandbox extension",
|
|
3232
3268
|
extensionLabel: "redhat-sandbox",
|
|
3233
3269
|
extensionFullLabel: "redhat.redhat-sandbox"
|
|
3234
|
-
},
|
|
3270
|
+
}, St = {
|
|
3235
3271
|
extensionName: "Image Layers Explorer",
|
|
3236
3272
|
extensionFullName: "Image Layers Explorer extension",
|
|
3237
3273
|
extensionLabel: "layers-explorer",
|
|
3238
3274
|
extensionFullLabel: "podman-desktop.layers-explorer"
|
|
3239
|
-
},
|
|
3275
|
+
}, At = {
|
|
3240
3276
|
extensionName: "Podman Quadlet",
|
|
3241
3277
|
extensionFullName: "Podman Quadlet extension",
|
|
3242
3278
|
extensionLabel: "quadlet",
|
|
@@ -3312,24 +3348,24 @@ const Ie = {
|
|
|
3312
3348
|
Me,
|
|
3313
3349
|
Fe,
|
|
3314
3350
|
Oe,
|
|
3315
|
-
|
|
3351
|
+
Lt,
|
|
3316
3352
|
_e
|
|
3317
3353
|
], He = [
|
|
3318
3354
|
Ie,
|
|
3319
|
-
|
|
3320
|
-
Ee,
|
|
3321
|
-
Dt,
|
|
3355
|
+
Lt,
|
|
3322
3356
|
Le,
|
|
3323
|
-
|
|
3324
|
-
|
|
3357
|
+
Et,
|
|
3358
|
+
Ee,
|
|
3359
|
+
St,
|
|
3360
|
+
At,
|
|
3325
3361
|
Se,
|
|
3326
3362
|
Ae,
|
|
3327
3363
|
Ve
|
|
3328
3364
|
], Ha = [
|
|
3329
|
-
|
|
3330
|
-
|
|
3365
|
+
Et,
|
|
3366
|
+
At,
|
|
3331
3367
|
Ue,
|
|
3332
|
-
|
|
3368
|
+
St
|
|
3333
3369
|
], Ka = [...He, De];
|
|
3334
3370
|
class Ga extends I {
|
|
3335
3371
|
main;
|
|
@@ -3344,7 +3380,7 @@ class Ga extends I {
|
|
|
3344
3380
|
return this.providersList.getByRole("listitem", { name: t });
|
|
3345
3381
|
}
|
|
3346
3382
|
}
|
|
3347
|
-
class Wa extends
|
|
3383
|
+
class Wa extends w {
|
|
3348
3384
|
commandPaletteInputField;
|
|
3349
3385
|
constructor(t) {
|
|
3350
3386
|
super(t), this.commandPaletteInputField = this.page.getByLabel("Command palette command input", { exact: !0 });
|
|
@@ -3355,7 +3391,7 @@ class Wa extends m {
|
|
|
3355
3391
|
await this.commandPaletteInputField.isVisible() || await this.page.keyboard.press("F1"), await a(this.commandPaletteInputField).toBeVisible(), await this.commandPaletteInputField.pressSequentially(t, { delay: 25 }), await this.commandPaletteInputField.press("Enter");
|
|
3356
3392
|
}
|
|
3357
3393
|
}
|
|
3358
|
-
class
|
|
3394
|
+
class Vt extends w {
|
|
3359
3395
|
mainPage;
|
|
3360
3396
|
header;
|
|
3361
3397
|
skipSetupButton;
|
|
@@ -3368,28 +3404,33 @@ class Mt extends m {
|
|
|
3368
3404
|
super(t), this.mainPage = t.getByRole("region", { name: "Onboarding Body" }), this.header = this.mainPage.getByRole("heading", { name: "Header" }), this.skipSetupButton = this.header.getByRole("button", { name: "Skip this entire setup" }), this.onboardingComponent = this.mainPage.getByLabel("Onboarding Component"), this.onboardingStatusMessage = this.mainPage.getByLabel("Onboarding Status Message"), this.nextInfoMessage = this.mainPage.getByLabel("Next Info Message"), this.nextStepButton = this.mainPage.getByRole("button", { name: "Next Step" }), this.cancelSetupButtion = this.mainPage.getByRole("button", { name: "Cancel Setup" });
|
|
3369
3405
|
}
|
|
3370
3406
|
}
|
|
3371
|
-
class
|
|
3407
|
+
class J extends Vt {
|
|
3372
3408
|
heading;
|
|
3373
3409
|
constructor(t) {
|
|
3374
3410
|
super(t), this.heading = this.page.getByRole("heading", { name: "Compose Setup Header" });
|
|
3375
3411
|
}
|
|
3376
3412
|
}
|
|
3377
|
-
class Ya extends
|
|
3413
|
+
class Ya extends J {
|
|
3378
3414
|
tryAgainButton;
|
|
3379
3415
|
constructor(t) {
|
|
3380
3416
|
super(t), this.tryAgainButton = this.mainPage.getByRole("button", { name: "Try again" });
|
|
3381
3417
|
}
|
|
3382
3418
|
}
|
|
3383
|
-
class qa extends
|
|
3419
|
+
class qa extends J {
|
|
3384
3420
|
wideDownloadAvailableMessage;
|
|
3385
3421
|
constructor(t) {
|
|
3386
|
-
super(t), this.wideDownloadAvailableMessage = this.mainPage.getByText(
|
|
3422
|
+
super(t), this.wideDownloadAvailableMessage = this.mainPage.getByText(
|
|
3423
|
+
"The next step will install Compose system-wide. You will be prompted for system"
|
|
3424
|
+
);
|
|
3387
3425
|
}
|
|
3388
3426
|
}
|
|
3389
|
-
class ja extends
|
|
3427
|
+
class ja extends J {
|
|
3390
3428
|
versionStatusMessage;
|
|
3391
3429
|
constructor(t) {
|
|
3392
|
-
super(t), this.versionStatusMessage = this.mainPage.getByText(
|
|
3430
|
+
super(t), this.versionStatusMessage = this.mainPage.getByText(
|
|
3431
|
+
/Compose will be downloaded in the next step \(Version v[0-9.]+\). Want to download/,
|
|
3432
|
+
{ exact: !0 }
|
|
3433
|
+
);
|
|
3393
3434
|
}
|
|
3394
3435
|
async getVersion() {
|
|
3395
3436
|
const t = await this.versionStatusMessage.textContent();
|
|
@@ -3398,7 +3439,7 @@ class ja extends X {
|
|
|
3398
3439
|
return n && (e = n[0]), e;
|
|
3399
3440
|
}
|
|
3400
3441
|
}
|
|
3401
|
-
class Ja extends
|
|
3442
|
+
class Ja extends J {
|
|
3402
3443
|
composeCommandMessage;
|
|
3403
3444
|
constructor(t) {
|
|
3404
3445
|
super(t), this.composeCommandMessage = this.mainPage.getByText("$ podman compose up", { exact: !0 });
|
|
@@ -3443,11 +3484,14 @@ class Ke {
|
|
|
3443
3484
|
return s.step(`Select dropdown option: ${o}`, async () => {
|
|
3444
3485
|
if (await a(this.containerLocator).toBeVisible({ timeout: 1e4 }), await a(this.triggerButton).toBeVisible({ timeout: 1e4 }), await this.getCurrentValue() !== t) {
|
|
3445
3486
|
await this.triggerButton.scrollIntoViewIfNeeded(), await this.triggerButton.click(), await a(this.containerLocator.getByRole("button").nth(1)).toBeVisible();
|
|
3446
|
-
const
|
|
3487
|
+
const l = this.containerLocator.getByRole("button", {
|
|
3447
3488
|
name: o,
|
|
3448
3489
|
exact: n
|
|
3449
3490
|
});
|
|
3450
|
-
await a(
|
|
3491
|
+
await a(l).toBeVisible({ timeout: 1e4 }), await l.click(), await a.poll(
|
|
3492
|
+
async () => (await this.hiddenInput.inputValue()).toLowerCase(),
|
|
3493
|
+
{ timeout: 5e3 }
|
|
3494
|
+
).toBe(t.toLowerCase());
|
|
3451
3495
|
}
|
|
3452
3496
|
});
|
|
3453
3497
|
}
|
|
@@ -3479,7 +3523,10 @@ class Ke {
|
|
|
3479
3523
|
*/
|
|
3480
3524
|
async verifyState(t, e) {
|
|
3481
3525
|
return s.step(`Verify dropdown state: ${t}`, async () => {
|
|
3482
|
-
await a.poll(
|
|
3526
|
+
await a.poll(
|
|
3527
|
+
async () => (await this.hiddenInput.inputValue()).toLowerCase(),
|
|
3528
|
+
{ timeout: 5e3 }
|
|
3529
|
+
).toBe(t.toLowerCase()), e && await a(this.triggerButton).toContainText(e, {
|
|
3483
3530
|
ignoreCase: !0,
|
|
3484
3531
|
timeout: 5e3
|
|
3485
3532
|
});
|
|
@@ -3516,7 +3563,7 @@ class Ke {
|
|
|
3516
3563
|
return this.hiddenInput;
|
|
3517
3564
|
}
|
|
3518
3565
|
}
|
|
3519
|
-
class
|
|
3566
|
+
class Dt extends w {
|
|
3520
3567
|
podmanMachineConfiguration;
|
|
3521
3568
|
podmanMachineName;
|
|
3522
3569
|
imagePathBox;
|
|
@@ -3542,7 +3589,12 @@ class Ft extends m {
|
|
|
3542
3589
|
name: "User mode networking"
|
|
3543
3590
|
}), this.providerTypeDropdown = new Ke(t, "Provider Type"), this.startNowCheckbox = this.podmanMachineConfiguration.getByRole("checkbox", { name: "Start the machine now" }), this.createMachineButton = this.podmanMachineConfiguration.getByRole("button", { name: "Create" });
|
|
3544
3591
|
}
|
|
3545
|
-
async setupAndCreateMachine(t, {
|
|
3592
|
+
async setupAndCreateMachine(t, {
|
|
3593
|
+
isRootful: e = !0,
|
|
3594
|
+
enableUserNet: n = !1,
|
|
3595
|
+
startNow: o = !0,
|
|
3596
|
+
virtualizationProvider: r
|
|
3597
|
+
} = {}) {
|
|
3546
3598
|
return s.step(`Create Podman Machine '${t}' with settings: ${e ? "rootful" : "rootless"}, ${n ? "usernet enabled" : "usernet disabled"}, ${o ? "startnow enabled" : "startnow disabled"}${r ? ", and " + r : ""}`, async () => {
|
|
3547
3599
|
await a(this.podmanMachineConfiguration).toBeVisible({
|
|
3548
3600
|
timeout: 1e4
|
|
@@ -3556,40 +3608,49 @@ class Ft extends m {
|
|
|
3556
3608
|
}
|
|
3557
3609
|
async specifyVirtualizationProvider(t) {
|
|
3558
3610
|
return s.step(`Set Podman Provider to ${t ?? Te()}`, async () => {
|
|
3559
|
-
if (!t || !await this.providerTypeDropdown.getContainer().isVisible())
|
|
3560
|
-
return;
|
|
3611
|
+
if (!t || !await this.providerTypeDropdown.getContainer().isVisible()) return;
|
|
3561
3612
|
await this.providerTypeDropdown.waitForReady();
|
|
3562
3613
|
const e = await this.providerTypeDropdown.getCurrentValue();
|
|
3563
|
-
if (!
|
|
3564
|
-
const n = await this.providerTypeDropdown.getAvailableOptions(), o =
|
|
3614
|
+
if (!mt(t, e)) {
|
|
3615
|
+
const n = await this.providerTypeDropdown.getAvailableOptions(), o = et[t], r = o.find(
|
|
3616
|
+
(l) => n.some((c) => c.toLowerCase().trim() === l.toLowerCase().trim())
|
|
3617
|
+
);
|
|
3565
3618
|
if (!r)
|
|
3566
|
-
throw new Error(
|
|
3619
|
+
throw new Error(
|
|
3620
|
+
`No matching variant found for provider ${t}. Available options: ${n.join(", ")}. Expected variants: ${o.join(", ")}`
|
|
3621
|
+
);
|
|
3567
3622
|
await this.providerTypeDropdown.selectOption(r, r, !1), await this.providerTypeDropdown.verifyState(r, r);
|
|
3568
3623
|
}
|
|
3569
3624
|
});
|
|
3570
3625
|
}
|
|
3571
3626
|
}
|
|
3572
|
-
class
|
|
3627
|
+
class Qa extends w {
|
|
3573
3628
|
heading;
|
|
3574
3629
|
machineCreationForm;
|
|
3575
3630
|
closeButton;
|
|
3576
3631
|
constructor(t) {
|
|
3577
3632
|
super(t), this.heading = this.page.getByRole("heading", {
|
|
3578
3633
|
name: "Create Podman Machine"
|
|
3579
|
-
}), this.machineCreationForm = new
|
|
3580
|
-
}
|
|
3581
|
-
async createMachine(t, {
|
|
3634
|
+
}), this.machineCreationForm = new Dt(this.page), this.closeButton = this.page.getByRole("button", { name: "Close" });
|
|
3635
|
+
}
|
|
3636
|
+
async createMachine(t, {
|
|
3637
|
+
isRootful: e = !0,
|
|
3638
|
+
enableUserNet: n = !1,
|
|
3639
|
+
startNow: o = !0,
|
|
3640
|
+
setAsDefault: r = !0,
|
|
3641
|
+
virtualizationProvider: l
|
|
3642
|
+
}) {
|
|
3582
3643
|
return s.step(`Create Podman Machine: ${t}`, async () => {
|
|
3583
3644
|
await this.machineCreationForm.setupAndCreateMachine(t, {
|
|
3584
3645
|
isRootful: e,
|
|
3585
3646
|
enableUserNet: n,
|
|
3586
3647
|
startNow: o,
|
|
3587
|
-
virtualizationProvider:
|
|
3648
|
+
virtualizationProvider: l
|
|
3588
3649
|
});
|
|
3589
|
-
const
|
|
3650
|
+
const c = this.page.getByText("Successful operation"), u = this.page.getByRole("button", {
|
|
3590
3651
|
name: "Go back to resources"
|
|
3591
3652
|
});
|
|
3592
|
-
await a(
|
|
3653
|
+
await a(c).toBeVisible({
|
|
3593
3654
|
timeout: 12e4
|
|
3594
3655
|
}), await a(u).toBeVisible();
|
|
3595
3656
|
try {
|
|
@@ -3597,7 +3658,7 @@ class za extends m {
|
|
|
3597
3658
|
} catch (h) {
|
|
3598
3659
|
console.log("No handling dialog displayed", h);
|
|
3599
3660
|
}
|
|
3600
|
-
return await a(u).toBeEnabled(), await u.click(), new
|
|
3661
|
+
return await a(u).toBeEnabled(), await u.click(), new E(this.page);
|
|
3601
3662
|
});
|
|
3602
3663
|
}
|
|
3603
3664
|
async handleConnectionDialog(t, e) {
|
|
@@ -3607,7 +3668,11 @@ class za extends m {
|
|
|
3607
3668
|
});
|
|
3608
3669
|
await a(n).toBeVisible({ timeout: 1e4 });
|
|
3609
3670
|
const o = n.getByLabel("Dialog Message");
|
|
3610
|
-
await a(o).toHaveText(
|
|
3671
|
+
await a(o).toHaveText(
|
|
3672
|
+
new RegExp(
|
|
3673
|
+
`Podman Machine '${t}' is running but not the default machine .+ Do you want to set it as default?`
|
|
3674
|
+
)
|
|
3675
|
+
);
|
|
3611
3676
|
const r = e ? "Yes" : "Ignore";
|
|
3612
3677
|
await n.getByRole("button", {
|
|
3613
3678
|
name: r
|
|
@@ -3615,7 +3680,7 @@ class za extends m {
|
|
|
3615
3680
|
});
|
|
3616
3681
|
}
|
|
3617
3682
|
}
|
|
3618
|
-
class
|
|
3683
|
+
class za extends I {
|
|
3619
3684
|
heading;
|
|
3620
3685
|
serverInformationBox;
|
|
3621
3686
|
podmanComposeCLICard;
|
|
@@ -3635,7 +3700,7 @@ class Qa extends I {
|
|
|
3635
3700
|
}
|
|
3636
3701
|
}
|
|
3637
3702
|
}
|
|
3638
|
-
class Xa extends
|
|
3703
|
+
class Xa extends w {
|
|
3639
3704
|
parent;
|
|
3640
3705
|
extensionName;
|
|
3641
3706
|
detailsButton;
|
|
@@ -3649,7 +3714,7 @@ class Xa extends m {
|
|
|
3649
3714
|
});
|
|
3650
3715
|
}
|
|
3651
3716
|
async openDetails() {
|
|
3652
|
-
return s.step(`Open details for extension: ${this.extensionName}`, async () => (await this.parent.scrollIntoViewIfNeeded(), await a(this.detailsButton).toBeVisible(), await this.detailsButton.click(), new
|
|
3717
|
+
return s.step(`Open details for extension: ${this.extensionName}`, async () => (await this.parent.scrollIntoViewIfNeeded(), await a(this.detailsButton).toBeVisible(), await this.detailsButton.click(), new Rt(this.page, this.extensionName)));
|
|
3653
3718
|
}
|
|
3654
3719
|
async isInstalled() {
|
|
3655
3720
|
return s.step(`Check if extension ${this.extensionName} is installed`, async () => {
|
|
@@ -3729,8 +3794,8 @@ class Za extends I {
|
|
|
3729
3794
|
await a(o).toBeEnabled(), await o.click(), await a(this.editContextDialog).toBeVisible({ timeout: 1e4 });
|
|
3730
3795
|
const r = this.editContextDialog.getByLabel("contextName", { exact: !0 });
|
|
3731
3796
|
await a(r).toBeVisible(), await r.clear(), await a(r).toHaveValue(""), await r.fill(e), await a(r).toHaveValue(e);
|
|
3732
|
-
const
|
|
3733
|
-
await a(
|
|
3797
|
+
const l = this.editContextDialog.getByRole("button", { name: "Save" });
|
|
3798
|
+
await a(l).toBeEnabled(), await l.click();
|
|
3734
3799
|
}
|
|
3735
3800
|
async getContextName(t) {
|
|
3736
3801
|
return (await this.getContextRowByName(t)).getByLabel("Context Name", { exact: !0 }).innerText();
|
|
@@ -3751,7 +3816,7 @@ class Za extends I {
|
|
|
3751
3816
|
return (await this.getContextRowByName(t)).getByLabel("Set as Current Context");
|
|
3752
3817
|
}
|
|
3753
3818
|
}
|
|
3754
|
-
class tn extends
|
|
3819
|
+
class tn extends E {
|
|
3755
3820
|
podmanMachineName;
|
|
3756
3821
|
podmanMachineStatus;
|
|
3757
3822
|
podmanMachineConnectionActions;
|
|
@@ -3773,7 +3838,7 @@ class tn extends L {
|
|
|
3773
3838
|
}), this.podmanMachineRestartButton = this.podmanMachineConnectionActions.getByRole("button", { name: "Restart" }), this.podmanMachineStopButton = this.podmanMachineConnectionActions.getByRole("button", { name: "Stop" }), this.podmanMachineDeleteButton = this.podmanMachineConnectionActions.getByRole("button", { name: "Delete" }), this.tabs = t.getByRole("region", { name: "Tabs" }), this.summaryTab = this.tabs.getByText("Summary"), this.logsTab = this.tabs.getByText("Logs"), this.terminalTab = this.tabs.getByText("Terminal", { exact: !0 }), this.tabContent = t.getByRole("region", { name: "Tab Content" }), this.terminalInput = this.tabContent.getByLabel("Terminal input"), this.terminalContent = this.tabContent.locator(".xterm-rows");
|
|
3774
3839
|
}
|
|
3775
3840
|
}
|
|
3776
|
-
class en extends
|
|
3841
|
+
class en extends Vt {
|
|
3777
3842
|
podmanAutostartToggle;
|
|
3778
3843
|
createMachinePageTitle;
|
|
3779
3844
|
machineCreationForm;
|
|
@@ -3782,12 +3847,12 @@ class en extends Mt {
|
|
|
3782
3847
|
constructor(t) {
|
|
3783
3848
|
super(t), this.podmanAutostartToggle = this.mainPage.getByRole("checkbox", {
|
|
3784
3849
|
name: "Autostart Podman engine when launching Podman Desktop"
|
|
3785
|
-
}), this.createMachinePageTitle = this.onboardingComponent.getByLabel("title"), this.machineCreationForm = new
|
|
3850
|
+
}), this.createMachinePageTitle = this.onboardingComponent.getByLabel("title"), this.machineCreationForm = new Dt(this.page), this.podmanMachineShowLogsButton = this.mainPage.getByRole("button", { name: "Show Logs" }), this.goBackButton = this.page.getByRole("button", { name: "Go back to resources" });
|
|
3786
3851
|
}
|
|
3787
3852
|
}
|
|
3788
|
-
class an extends
|
|
3853
|
+
class an extends Bt {
|
|
3789
3854
|
}
|
|
3790
|
-
class nn extends
|
|
3855
|
+
class nn extends w {
|
|
3791
3856
|
heading;
|
|
3792
3857
|
header;
|
|
3793
3858
|
tabs;
|
|
@@ -3838,88 +3903,88 @@ class nn extends m {
|
|
|
3838
3903
|
}
|
|
3839
3904
|
}
|
|
3840
3905
|
export {
|
|
3841
|
-
|
|
3906
|
+
N as ArchitectureType,
|
|
3842
3907
|
Ga as AuthenticationPage,
|
|
3843
|
-
|
|
3844
|
-
|
|
3908
|
+
w as BasePage,
|
|
3909
|
+
ft as BuildImagePage,
|
|
3845
3910
|
Wa as CommandPalette,
|
|
3846
3911
|
Ya as ComposeFailedPage,
|
|
3847
3912
|
qa as ComposeLocalInstallPage,
|
|
3848
|
-
|
|
3913
|
+
J as ComposeOnboardingPage,
|
|
3849
3914
|
ja as ComposeVersionPage,
|
|
3850
3915
|
Ja as ComposeWideInstallPage,
|
|
3851
|
-
|
|
3852
|
-
|
|
3853
|
-
|
|
3916
|
+
k as ContainerDetailsPage,
|
|
3917
|
+
$ as ContainerState,
|
|
3918
|
+
V as ContainersPage,
|
|
3854
3919
|
xe as CreateClusterBasePage,
|
|
3855
3920
|
fe as CreateKindClusterPage,
|
|
3856
|
-
|
|
3921
|
+
Qa as CreateMachinePage,
|
|
3857
3922
|
me as CreateNetworkPage,
|
|
3858
3923
|
ue as CreatePodsPage,
|
|
3859
|
-
|
|
3924
|
+
kt as DashboardPage,
|
|
3860
3925
|
se as DeployToKubernetesPage,
|
|
3861
3926
|
S as DetailsPage,
|
|
3862
|
-
|
|
3927
|
+
za as DockerCompatibilityPage,
|
|
3863
3928
|
Ke as DropdownComponent,
|
|
3864
3929
|
Jt as ExperimentalPage,
|
|
3865
3930
|
ge as ExtensionCardPage,
|
|
3866
3931
|
Xa as ExtensionCatalogCardPage,
|
|
3867
|
-
|
|
3868
|
-
|
|
3869
|
-
|
|
3932
|
+
Rt as ExtensionDetailsPage,
|
|
3933
|
+
Kt as ExtensionState,
|
|
3934
|
+
it as ExtensionsPage,
|
|
3870
3935
|
re as ImageDetailsPage,
|
|
3871
3936
|
oe as ImageEditPage,
|
|
3872
|
-
|
|
3873
|
-
|
|
3937
|
+
Gt as ImageState,
|
|
3938
|
+
L as ImagesPage,
|
|
3874
3939
|
Za as KubeContextPage,
|
|
3875
3940
|
we as KubernetesBar,
|
|
3876
3941
|
de as KubernetesDashboardPage,
|
|
3877
|
-
|
|
3878
|
-
|
|
3942
|
+
Yt as KubernetesResourceAttributes,
|
|
3943
|
+
ot as KubernetesResourceDetailsPage,
|
|
3879
3944
|
H as KubernetesResourcePage,
|
|
3880
|
-
|
|
3881
|
-
|
|
3882
|
-
|
|
3945
|
+
wt as KubernetesResourceState,
|
|
3946
|
+
m as KubernetesResources,
|
|
3947
|
+
Dt as MachineCreationForm,
|
|
3883
3948
|
A as MainPage,
|
|
3884
3949
|
d as NavigationBar,
|
|
3885
|
-
|
|
3886
|
-
|
|
3887
|
-
|
|
3888
|
-
|
|
3889
|
-
|
|
3890
|
-
|
|
3891
|
-
|
|
3950
|
+
Ct as NetworkDetailsPage,
|
|
3951
|
+
st as NetworksPage,
|
|
3952
|
+
Vt as OnboardingPage,
|
|
3953
|
+
G as PodDetailsPage,
|
|
3954
|
+
z as PodState,
|
|
3955
|
+
X as PodmanKubePlayOptions,
|
|
3956
|
+
ce as PodmanKubePlayPage,
|
|
3892
3957
|
tn as PodmanMachineDetails,
|
|
3893
|
-
|
|
3958
|
+
pt as PodmanMachinePrivileges,
|
|
3894
3959
|
en as PodmanOnboardingPage,
|
|
3895
|
-
|
|
3896
|
-
|
|
3897
|
-
|
|
3898
|
-
|
|
3899
|
-
|
|
3900
|
-
|
|
3901
|
-
|
|
3902
|
-
|
|
3960
|
+
et as PodmanVirtualizationProviderVariants,
|
|
3961
|
+
C as PodmanVirtualizationProviders,
|
|
3962
|
+
j as PodsPage,
|
|
3963
|
+
Qt as PreferencesPage,
|
|
3964
|
+
qt as ProxyTypes,
|
|
3965
|
+
le as PullImagePage,
|
|
3966
|
+
zt as RegistriesPage,
|
|
3967
|
+
Bt as ResourceCardPage,
|
|
3903
3968
|
an as ResourceCliCardPage,
|
|
3904
|
-
|
|
3905
|
-
|
|
3906
|
-
|
|
3907
|
-
|
|
3908
|
-
|
|
3909
|
-
|
|
3969
|
+
Y as ResourceConnectionCardPage,
|
|
3970
|
+
Pt as ResourceDetailsPage,
|
|
3971
|
+
f as ResourceElementActions,
|
|
3972
|
+
v as ResourceElementState,
|
|
3973
|
+
E as ResourcesPage,
|
|
3974
|
+
xt as RunImagePage,
|
|
3910
3975
|
P as Runner,
|
|
3911
|
-
|
|
3976
|
+
Z as RunnerOptions,
|
|
3912
3977
|
he as SelectImagePage,
|
|
3913
|
-
|
|
3978
|
+
at as SettingsBar,
|
|
3914
3979
|
I as SettingsPage,
|
|
3915
|
-
|
|
3916
|
-
|
|
3980
|
+
Tt as StatusBar,
|
|
3981
|
+
Wt as TaskState,
|
|
3917
3982
|
ke as TasksPage,
|
|
3918
3983
|
nn as TroubleshootingPage,
|
|
3919
|
-
|
|
3984
|
+
tt as VolumeState,
|
|
3920
3985
|
Ce as WelcomePage,
|
|
3921
|
-
|
|
3922
|
-
|
|
3986
|
+
Ht as archType,
|
|
3987
|
+
Et as bootcExtension,
|
|
3923
3988
|
pa as canTestRegistry,
|
|
3924
3989
|
Ra as checkClusterResources,
|
|
3925
3990
|
Sa as checkDeploymentReplicasInfo,
|
|
@@ -3927,33 +3992,33 @@ export {
|
|
|
3927
3992
|
be as checkLocatorExistence,
|
|
3928
3993
|
Ne as composeExtension,
|
|
3929
3994
|
Da as configurePortForwarding,
|
|
3930
|
-
|
|
3995
|
+
gt as countKubernetesPodReplicas,
|
|
3931
3996
|
ka as createKindCluster,
|
|
3932
|
-
|
|
3933
|
-
|
|
3997
|
+
La as createKubernetesResource,
|
|
3998
|
+
ut as createPodmanMachineFromCLI,
|
|
3934
3999
|
pe as delay,
|
|
3935
4000
|
Re as deleteCluster,
|
|
3936
4001
|
Pa as deleteClusterFromDetails,
|
|
3937
4002
|
Ze as deleteContainer,
|
|
3938
4003
|
ta as deleteImage,
|
|
3939
|
-
|
|
4004
|
+
Ea as deleteKubernetesResource,
|
|
3940
4005
|
na as deleteNetwork,
|
|
3941
4006
|
aa as deletePod,
|
|
3942
4007
|
ia as deletePodmanMachine,
|
|
3943
4008
|
sa as deletePodmanMachineFromCLI,
|
|
3944
4009
|
ea as deleteRegistry,
|
|
3945
4010
|
Ia as deployContainerToCluster,
|
|
3946
|
-
|
|
4011
|
+
Ee as developerSandboxExtension,
|
|
3947
4012
|
$e as dockerExtension,
|
|
3948
4013
|
Va as editDeploymentYamlFile,
|
|
3949
4014
|
oa as ensureCliInstalled,
|
|
3950
|
-
|
|
4015
|
+
dt as envProvider,
|
|
3951
4016
|
rn as expect,
|
|
3952
4017
|
Ka as extensionsAllExternalList,
|
|
3953
4018
|
Ua as extensionsBuiltInList,
|
|
3954
4019
|
He as extensionsExternalList,
|
|
3955
4020
|
Ha as extensionsInstallationSmokeList,
|
|
3956
|
-
|
|
4021
|
+
Le as extensionsPackExtension,
|
|
3957
4022
|
U as fillTextbox,
|
|
3958
4023
|
Ba as findPageWithTitleInBrowser,
|
|
3959
4024
|
Te as getDefaultVirtualizationProvider,
|
|
@@ -3962,14 +4027,14 @@ export {
|
|
|
3962
4027
|
ie as getPodmanCliVersion,
|
|
3963
4028
|
Xe as getProviderFromVariant,
|
|
3964
4029
|
Fa as getVirtualizationProvider,
|
|
3965
|
-
|
|
4030
|
+
nt as getVolumeNameForContainer,
|
|
3966
4031
|
g as handleConfirmationDialog,
|
|
3967
4032
|
fa as handleCookies,
|
|
3968
|
-
|
|
4033
|
+
bt as handleEditNetworkDialog,
|
|
3969
4034
|
De as headlampExtension,
|
|
3970
|
-
|
|
3971
|
-
|
|
3972
|
-
|
|
4035
|
+
St as imageLayersExplorerExtension,
|
|
4036
|
+
ze as isCI,
|
|
4037
|
+
W as isLinux,
|
|
3973
4038
|
F as isMac,
|
|
3974
4039
|
wa as isPodmanCliVersionAtLeast,
|
|
3975
4040
|
O as isWindows,
|
|
@@ -3977,40 +4042,40 @@ export {
|
|
|
3977
4042
|
Fe as kubeContextExtension,
|
|
3978
4043
|
Oe as kubectlCLIExtension,
|
|
3979
4044
|
Oa as limaExtension,
|
|
3980
|
-
|
|
4045
|
+
mt as matchesProviderVariant,
|
|
3981
4046
|
Ie as minikubeExtension,
|
|
3982
4047
|
Ma as monitorPodStatusInClusterContainer,
|
|
3983
4048
|
Ae as openshiftCheckerExtension,
|
|
3984
4049
|
Ue as openshiftDockerExtension,
|
|
3985
4050
|
Ve as openshiftLocalExtension,
|
|
3986
4051
|
ya as performBrowserLogin,
|
|
3987
|
-
|
|
4052
|
+
Lt as podmanAILabExtension,
|
|
3988
4053
|
_a as podmanExtension,
|
|
3989
|
-
|
|
4054
|
+
At as podmanQuadletExtension,
|
|
3990
4055
|
ha as readFileInVolumeFromCLI,
|
|
3991
4056
|
_e as registriesExtension,
|
|
3992
|
-
|
|
4057
|
+
Ut as removeFolderIfExists,
|
|
3993
4058
|
te as resetPodmanMachinesFromCLI,
|
|
3994
4059
|
Ca as resourceConnectionAction,
|
|
3995
4060
|
va as resourceConnectionActionDetails,
|
|
3996
4061
|
ra as runComposeUpFromCLI,
|
|
3997
|
-
|
|
4062
|
+
ca as setDockerCompatibilityFeature,
|
|
3998
4063
|
ua as setStatusBarProvidersFeature,
|
|
3999
4064
|
Je as setup,
|
|
4000
4065
|
Be as setupRegistry,
|
|
4001
4066
|
Se as ssoExtension,
|
|
4002
4067
|
ba as startChromium,
|
|
4003
|
-
|
|
4068
|
+
Qe as teardown,
|
|
4004
4069
|
Ta as test,
|
|
4005
|
-
|
|
4006
|
-
|
|
4070
|
+
la as untagImagesFromPodman,
|
|
4071
|
+
It as validateClusterResourcesDeletion,
|
|
4007
4072
|
$a as verifyLocalPortResponse,
|
|
4008
4073
|
da as verifyMachinePrivileges,
|
|
4009
4074
|
Na as verifyPortForwardingConfiguration,
|
|
4010
4075
|
ga as verifyVirtualizationProvider,
|
|
4011
|
-
|
|
4076
|
+
vt as wait,
|
|
4012
4077
|
ma as waitForPodmanMachineStartup,
|
|
4013
|
-
|
|
4078
|
+
y as waitUntil,
|
|
4014
4079
|
T as waitWhile
|
|
4015
4080
|
};
|
|
4016
4081
|
//# sourceMappingURL=index.js.map
|