From b189f8efb07d91baa3564d5fa1433f497ca34a03 Mon Sep 17 00:00:00 2001 From: yonasberhe23 Date: Mon, 5 Feb 2024 17:04:57 -0800 Subject: [PATCH] Cluster management (#10161) * actions on cluster tests * initial iteration for cluster drivers tests * node drivers tests * rke templates tests * cloud credentials tests and initial node templates tests * completed node templates tests * pod security admissions and policy templates * MachineDeployments MachineSets and Machines tests * repositories tests * filter out tests with @jenkins tag --- .github/workflows/test.yaml | 4 +- cypress.config.ts | 4 +- .../machine-deployments-edit.yml | 52 ++++++ .../machine-deployments.yml | 65 +++++++ .../cluster_management/machine-sets-edit.yml | 44 +++++ .../cluster_management/machine-sets.yml | 58 +++++++ .../cluster_management/machines-edit.yml | 33 ++++ .../cluster_management/machines.yml | 32 ++++ .../pod-security-admissions-payload.ts | 37 ++++ .../ResourceList/resource-list-masthead.po.ts | 4 + cypress/e2e/po/components/cru-resource.po.ts | 17 ++ .../po/components/ember/ember-accordion.po.ts | 1 - .../ember/ember-checkbox-input.po.ts | 19 +++ .../ember-form-pod-security-template.po.ts | 29 ++++ .../ember/ember-form-rke-templates.po.ts | 16 ++ .../ember-modal-add-edit-cluster-driver.po.ts | 20 +++ .../ember-modal-add-edit-node-driver.po.ts | 20 +++ .../ember/ember-modal-add-node-template.po.ts | 33 ++++ .../e2e/po/components/ember/ember-modal.po.ts | 8 + .../po/components/ember/ember-select.po.ts | 25 +++ .../ember/ember-sortable-table.po.ts | 70 ++++++++ cypress/e2e/po/components/labeled-input.po.ts | 9 +- cypress/e2e/po/components/resource-yaml.po.ts | 5 + .../e2e/po/edit/base-cloud-credentials.po.ts | 22 +++ cypress/e2e/po/edit/chart-repositories.po.ts | 53 ++++++ .../po/edit/cloud-credentials-amazon.po.ts | 26 +++ cypress/e2e/po/edit/machine-deployments.po.ts | 21 +++ cypress/e2e/po/edit/machine-sets.po.ts | 21 +++ cypress/e2e/po/edit/machines.po.ts | 22 +++ .../e2e/po/edit/pod-security-admissions.po.ts | 49 ++++++ .../cluster-create-rke1-amazonec2.po.ts | 50 ++++++ .../create/cluster-create-rke1-custom.po.ts | 14 ++ .../lists/catalog.cattle.io.clusterrepo.po.ts | 10 -- cypress/e2e/po/lists/chart-repositories.po.ts | 22 +++ .../e2e/po/lists/cloud-credentials-list.po.ts | 7 + .../po/lists/machine-deployments-list.po.ts | 15 ++ cypress/e2e/po/lists/machine-set-list.po.ts | 15 ++ cypress/e2e/po/lists/machines-list.po.ts | 7 + .../lists/pod-security-admissions-list.po.ts | 7 + .../provisioning.cattle.io.cluster.po.ts | 12 ++ cypress/e2e/po/pages/chart-repositories.po.ts | 58 +++++++ .../cluster-manager/cloud-credentials.po.ts | 39 +++++ .../cluster-manager-list.po.ts | 1 - .../cluster-manager/machine-deployments.po.ts | 44 +++++ .../pages/cluster-manager/machine-sets.po.ts | 45 +++++ .../po/pages/cluster-manager/machines.po.ts | 45 +++++ .../cluster-manager/node-templates.po.ts | 39 +++++ .../pod-security-admissions.po.ts | 39 +++++ .../pod-security-policy-templates.po.ts | 54 ++++++ .../pages/cluster-manager/rke-drivers.po.ts | 64 +++++++ .../pages/cluster-manager/rke-templates.po.ts | 48 ++++++ cypress/e2e/po/pages/extensions.po.ts | 17 +- cypress/e2e/po/pages/get-support.po.ts | 2 +- cypress/e2e/po/pages/repositories.po.ts | 43 ----- .../pages/explorer/apps/repositories.spec.ts | 2 +- .../tests/pages/extensions/extensions.spec.ts | 6 +- .../tests/pages/extensions/kubewarden.spec.ts | 4 +- .../pages/manager/cloud-credentials.spec.ts | 116 +++++++++++++ .../pages/manager/cluster-manager.spec.ts | 58 ++++++- .../e2e/tests/pages/manager/drivers.spec.ts | 151 +++++++++++++++++ .../pages/manager/machine-deployments.spec.ts | 158 ++++++++++++++++++ .../tests/pages/manager/machine-sets.spec.ts | 155 +++++++++++++++++ .../e2e/tests/pages/manager/machines.spec.ts | 113 +++++++++++++ .../pages/manager/node-templates.spec.ts | 145 ++++++++++++++++ .../manager/pod-security-admissions.spec.ts | 142 ++++++++++++++++ .../pod-security-policy-templates.spec.ts | 63 +++++++ .../tests/pages/manager/repositories.spec.ts | 126 ++++++++++++++ .../tests/pages/manager/rke-templates.spec.ts | 102 +++++++++++ .../tests/pages/user-menu/preferences.spec.ts | 6 +- cypress/globals.d.ts | 2 + cypress/support/commands/commands.ts | 9 + .../support/commands/rancher-api-commands.ts | 30 +++- 72 files changed, 2824 insertions(+), 80 deletions(-) create mode 100644 cypress/e2e/blueprints/cluster_management/machine-deployments-edit.yml create mode 100644 cypress/e2e/blueprints/cluster_management/machine-deployments.yml create mode 100644 cypress/e2e/blueprints/cluster_management/machine-sets-edit.yml create mode 100644 cypress/e2e/blueprints/cluster_management/machine-sets.yml create mode 100644 cypress/e2e/blueprints/cluster_management/machines-edit.yml create mode 100644 cypress/e2e/blueprints/cluster_management/machines.yml create mode 100644 cypress/e2e/blueprints/cluster_management/pod-security-admissions-payload.ts create mode 100644 cypress/e2e/po/components/ember/ember-checkbox-input.po.ts create mode 100644 cypress/e2e/po/components/ember/ember-form-pod-security-template.po.ts create mode 100644 cypress/e2e/po/components/ember/ember-form-rke-templates.po.ts create mode 100644 cypress/e2e/po/components/ember/ember-modal-add-edit-cluster-driver.po.ts create mode 100644 cypress/e2e/po/components/ember/ember-modal-add-edit-node-driver.po.ts create mode 100644 cypress/e2e/po/components/ember/ember-modal-add-node-template.po.ts create mode 100644 cypress/e2e/po/components/ember/ember-select.po.ts create mode 100644 cypress/e2e/po/components/ember/ember-sortable-table.po.ts create mode 100644 cypress/e2e/po/edit/base-cloud-credentials.po.ts create mode 100644 cypress/e2e/po/edit/chart-repositories.po.ts create mode 100644 cypress/e2e/po/edit/cloud-credentials-amazon.po.ts create mode 100644 cypress/e2e/po/edit/machine-deployments.po.ts create mode 100644 cypress/e2e/po/edit/machine-sets.po.ts create mode 100644 cypress/e2e/po/edit/machines.po.ts create mode 100644 cypress/e2e/po/edit/pod-security-admissions.po.ts create mode 100644 cypress/e2e/po/edit/provisioning.cattle.io.cluster/create/cluster-create-rke1-amazonec2.po.ts delete mode 100644 cypress/e2e/po/lists/catalog.cattle.io.clusterrepo.po.ts create mode 100644 cypress/e2e/po/lists/chart-repositories.po.ts create mode 100644 cypress/e2e/po/lists/cloud-credentials-list.po.ts create mode 100644 cypress/e2e/po/lists/machine-deployments-list.po.ts create mode 100644 cypress/e2e/po/lists/machine-set-list.po.ts create mode 100644 cypress/e2e/po/lists/machines-list.po.ts create mode 100644 cypress/e2e/po/lists/pod-security-admissions-list.po.ts create mode 100644 cypress/e2e/po/pages/chart-repositories.po.ts create mode 100644 cypress/e2e/po/pages/cluster-manager/cloud-credentials.po.ts create mode 100644 cypress/e2e/po/pages/cluster-manager/machine-deployments.po.ts create mode 100644 cypress/e2e/po/pages/cluster-manager/machine-sets.po.ts create mode 100644 cypress/e2e/po/pages/cluster-manager/machines.po.ts create mode 100644 cypress/e2e/po/pages/cluster-manager/node-templates.po.ts create mode 100644 cypress/e2e/po/pages/cluster-manager/pod-security-admissions.po.ts create mode 100644 cypress/e2e/po/pages/cluster-manager/pod-security-policy-templates.po.ts create mode 100644 cypress/e2e/po/pages/cluster-manager/rke-drivers.po.ts create mode 100644 cypress/e2e/po/pages/cluster-manager/rke-templates.po.ts delete mode 100644 cypress/e2e/po/pages/repositories.po.ts create mode 100644 cypress/e2e/tests/pages/manager/cloud-credentials.spec.ts create mode 100644 cypress/e2e/tests/pages/manager/drivers.spec.ts create mode 100644 cypress/e2e/tests/pages/manager/machine-deployments.spec.ts create mode 100644 cypress/e2e/tests/pages/manager/machine-sets.spec.ts create mode 100644 cypress/e2e/tests/pages/manager/machines.spec.ts create mode 100644 cypress/e2e/tests/pages/manager/node-templates.spec.ts create mode 100644 cypress/e2e/tests/pages/manager/pod-security-admissions.spec.ts create mode 100644 cypress/e2e/tests/pages/manager/pod-security-policy-templates.spec.ts create mode 100644 cypress/e2e/tests/pages/manager/repositories.spec.ts create mode 100644 cypress/e2e/tests/pages/manager/rke-templates.spec.ts diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index b4103373db..0f1b164646 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -74,7 +74,7 @@ jobs: run: | yarn e2e:prod env: - GREP_TAGS: ${{ matrix.role.tag }}Setup+${{ matrix.features[0] }} ${{ matrix.role.tag }}Setup+${{ matrix.features[1] || matrix.features[0] }} + GREP_TAGS: ${{ matrix.role.tag }}Setup+${{ matrix.features[0] }} --@jenkins ${{ matrix.role.tag }}Setup+${{ matrix.features[1] || matrix.features[0] }} --@jenkins TEST_USERNAME: admin TEST_ONLY: setup @@ -84,7 +84,7 @@ jobs: [ "$BUILD_DASHBOARD" != "false" ] || exit 0 env: TEST_SKIP: setup - GREP_TAGS: ${{ matrix.role.tag }}+${{ matrix.features[0] }} ${{ matrix.role.tag }}+${{ matrix.features[1] || matrix.features[0] }} + GREP_TAGS: ${{ matrix.role.tag }}+${{ matrix.features[0] }} --@jenkins ${{ matrix.role.tag }}+${{ matrix.features[1] || matrix.features[0] }} --@jenkins TEST_USERNAME: ${{ matrix.role.username }} - name: Upload screenshots diff --git a/cypress.config.ts b/cypress.config.ts index df038c13b7..d3a2788f72 100644 --- a/cypress.config.ts +++ b/cypress.config.ts @@ -80,7 +80,9 @@ export default defineConfig({ username, password: process.env.CATTLE_BOOTSTRAP_PASSWORD || process.env.TEST_PASSWORD, bootstrapPassword: process.env.CATTLE_BOOTSTRAP_PASSWORD, - grepTags: process.env.GREP_TAGS + grepTags: process.env.GREP_TAGS, + awsAccessKey: process.env.AWS_ACCESS_KEY_ID, + awsSecretKey: process.env.AWS_SECRET_ACCESS_KEY }, e2e: { fixturesFolder: 'cypress/e2e/blueprints', diff --git a/cypress/e2e/blueprints/cluster_management/machine-deployments-edit.yml b/cypress/e2e/blueprints/cluster_management/machine-deployments-edit.yml new file mode 100644 index 0000000000..45a107e2f3 --- /dev/null +++ b/cypress/e2e/blueprints/cluster_management/machine-deployments-edit.yml @@ -0,0 +1,52 @@ +apiVersion: cluster.x-k8s.io/v1beta1 +kind: MachineDeployment +metadata: + creationTimestamp: '2023-12-07T18:14:50Z' + generation: 1 + labels: + cluster.x-k8s.io/cluster-name: local + managedFields: + - apiVersion: cluster.x-k8s.io/v1beta1 + fieldsType: FieldsV1 + fieldsV1: + f:spec: + .: {} + f:clusterName: {} + f:selector: {} + f:template: + .: {} + f:metadata: {} + f:spec: + .: {} + f:clusterName: {} + manager: rancher + operation: Update + time: '2023-12-07T18:14:50Z' + name: e2e-machinedeployment-name-1701972886077 + namespace: default + resourceVersion: '22851' + uid: f5bf052d-7bbf-483a-a20a-b2f6e48d1e15 +spec: + clusterName: local + minReadySeconds: 0 + progressDeadlineSeconds: 600 + replicas: 1 + revisionHistoryLimit: 1 + selector: + matchLabels: + cluster.x-k8s.io/cluster-name: local + cluster.x-k8s.io/deployment-name: e2e-machinedeployment-name-1701972886077 + strategy: + rollingUpdate: + maxSurge: 1 + maxUnavailable: 0 + type: RollingUpdate + template: + metadata: + labels: + cluster.x-k8s.io/cluster-name: local + cluster.x-k8s.io/deployment-name: e2e-machinedeployment-name-1701972886077 + spec: + bootstrap: {} + clusterName: local + infrastructureRef: {} diff --git a/cypress/e2e/blueprints/cluster_management/machine-deployments.yml b/cypress/e2e/blueprints/cluster_management/machine-deployments.yml new file mode 100644 index 0000000000..3487b20fd1 --- /dev/null +++ b/cypress/e2e/blueprints/cluster_management/machine-deployments.yml @@ -0,0 +1,65 @@ +apiVersion: cluster.x-k8s.io/v1beta1 +kind: MachineDeployment +metadata: + name: e2etest + namespace: default +# annotations: key: string +# labels: key: string +spec: + selector: + matchLabels:# key: string +# matchExpressions: +# - key: string +# operator: string +# values: +# - string + template: + metadata: + labels:# key: string +# annotations: key: string +# generateName: string +# name: string +# namespace: string +# ownerReferences: +# - apiVersion: string +# blockOwnerDeletion: boolean +# controller: boolean +# kind: string +# name: string +# uid: string + spec: +# bootstrap: +# configRef: +# apiVersion: string +# fieldPath: string +# kind: string +# name: string +# namespace: string +# resourceVersion: string +# uid: string +# data: string +# dataSecretName: string + clusterName: local +# failureDomain: string +# infrastructureRef: +# apiVersion: string +# fieldPath: string +# kind: string +# name: string +# namespace: string +# resourceVersion: string +# uid: string +# nodeDrainTimeout: string +# providerID: string +# version: string + clusterName: local +# minReadySeconds: int +# paused: boolean +# progressDeadlineSeconds: int +# replicas: int +# revisionHistoryLimit: int +# strategy: +# type: string +# rollingUpdate: +# maxSurge: json +# maxUnavailable: json \ No newline at end of file diff --git a/cypress/e2e/blueprints/cluster_management/machine-sets-edit.yml b/cypress/e2e/blueprints/cluster_management/machine-sets-edit.yml new file mode 100644 index 0000000000..c38d55c00b --- /dev/null +++ b/cypress/e2e/blueprints/cluster_management/machine-sets-edit.yml @@ -0,0 +1,44 @@ +apiVersion: cluster.x-k8s.io/v1beta1 +kind: MachineSet +metadata: + creationTimestamp: '2023-12-06T23:41:44Z' + generation: 3 + labels: + cluster.x-k8s.io/cluster-name: local + managedFields: + - apiVersion: cluster.x-k8s.io/v1beta1 + fieldsType: FieldsV1 + fieldsV1: + f:spec: + .: {} + f:clusterName: {} + f:replicas: {} + f:selector: {} + f:template: + .: {} + f:metadata: {} + f:spec: + .: {} + f:clusterName: {} + manager: rancher + operation: Update + time: '2023-12-06T23:46:28Z' + name: e2e-machine-name-1701906098950 + namespace: default + resourceVersion: '647485' + uid: 98380f64-0706-4522-8dc2-b91a7f012dcf +spec: + clusterName: local + deletePolicy: Random + replicas: 1 + selector: + matchLabels: + cluster.x-k8s.io/set-name: e2e-machine-name-1701906098950 + template: + metadata: + labels: + cluster.x-k8s.io/set-name: e2e-machine-name-1701906098950 + spec: + bootstrap: {} + clusterName: local + infrastructureRef: {} diff --git a/cypress/e2e/blueprints/cluster_management/machine-sets.yml b/cypress/e2e/blueprints/cluster_management/machine-sets.yml new file mode 100644 index 0000000000..21e0f9a66c --- /dev/null +++ b/cypress/e2e/blueprints/cluster_management/machine-sets.yml @@ -0,0 +1,58 @@ +apiVersion: cluster.x-k8s.io/v1beta1 +kind: MachineSet +metadata: + name: e2etest + namespace: default +# annotations: key: string +# labels: key: string +spec: + selector: + matchLabels:# key: string +# matchExpressions: +# - key: string +# operator: string +# values: +# - string + template: + metadata: + labels:# key: string +# annotations: key: string +# generateName: string +# name: string +# namespace: string +# ownerReferences: +# - apiVersion: string +# blockOwnerDeletion: boolean +# controller: boolean +# kind: string +# name: string +# uid: string + spec: + bootstrap: +# configRef: +# apiVersion: string +# fieldPath: string +# kind: string +# name: string +# namespace: string +# resourceVersion: string +# uid: string +# data: string + dataSecretName: secretName + clusterName: local +# failureDomain: string +# infrastructureRef: +# apiVersion: string +# fieldPath: string +# kind: string +# name: string +# namespace: string +# resourceVersion: string +# uid: string +# nodeDrainTimeout: string +# providerID: string +# version: string + clusterName: local +# deletePolicy: string +# minReadySeconds: int +# replicas: int \ No newline at end of file diff --git a/cypress/e2e/blueprints/cluster_management/machines-edit.yml b/cypress/e2e/blueprints/cluster_management/machines-edit.yml new file mode 100644 index 0000000000..5b8289e504 --- /dev/null +++ b/cypress/e2e/blueprints/cluster_management/machines-edit.yml @@ -0,0 +1,33 @@ +apiVersion: cluster.x-k8s.io/v1beta1 +kind: Machine +metadata: + creationTimestamp: '2023-12-06T22:21:54Z' + generation: 1 + labels: + cluster.x-k8s.io/cluster-name: local + managedFields: + - apiVersion: cluster.x-k8s.io/v1beta1 + fieldsType: FieldsV1 + fieldsV1: + f:spec: + .: {} + f:bootstrap: + .: {} + f:dataSecretName: {} + f:clusterName: {} + f:infrastructureRef: {} + manager: rancher + operation: Update + time: '2023-12-06T22:21:54Z' + name: e2e-machine-name-1701901308645 + namespace: default + resourceVersion: '609444' + uid: 7d61939a-b44a-4113-a7d1-9db2eda08811 +spec: + bootstrap: + dataSecretName: secretname + clusterName: local + infrastructureRef: + namespace: default + resourceVersion: abc123 + nodeDeletionTimeout: 10s diff --git a/cypress/e2e/blueprints/cluster_management/machines.yml b/cypress/e2e/blueprints/cluster_management/machines.yml new file mode 100644 index 0000000000..5062159c90 --- /dev/null +++ b/cypress/e2e/blueprints/cluster_management/machines.yml @@ -0,0 +1,32 @@ +apiVersion: cluster.x-k8s.io/v1beta1 +kind: Machine +metadata: + name: string + namespace: default +# annotations: key: string +# labels: key: string +spec: + bootstrap: +# configRef: +# apiVersion: string +# fieldPath: string +# kind: string +# name: string +# namespace: string +# resourceVersion: string +# uid: string +# data: string + dataSecretName: secretname + clusterName: local +# failureDomain: string +# infrastructureRef: +# apiVersion: string +# fieldPath: string +# kind: string +# name: string +# namespace: string +# resourceVersion: string +# uid: string +# nodeDrainTimeout: string +# providerID: string +# version: string \ No newline at end of file diff --git a/cypress/e2e/blueprints/cluster_management/pod-security-admissions-payload.ts b/cypress/e2e/blueprints/cluster_management/pod-security-admissions-payload.ts new file mode 100644 index 0000000000..d817fce64f --- /dev/null +++ b/cypress/e2e/blueprints/cluster_management/pod-security-admissions-payload.ts @@ -0,0 +1,37 @@ +export const createPayloadData = { + id: 'e2e-pod-security-admission-1705617529465', + type: 'management.cattle.io.podsecurityadmissionconfigurationtemplate', + apiVersion: 'management.cattle.io/v3', + configuration: { + defaults: { + audit: 'baseline', 'audit-version': 'latest', enforce: 'privileged', 'enforce-version': 'latest', warn: 'restricted', 'warn-version': 'latest' + }, + exemptions: { + usernames: ['admin', 'user'], runtimeClasses: ['myclass1', 'myclass2'], namespaces: ['ingress-nginx', 'kube-system'] + } + }, + kind: 'PodSecurityAdmissionConfigurationTemplate', + metadata: { + fields: ['e2e-pod-security-admission-1705617529465', '18s'], name: 'e2e-pod-security-admission-1705617529465', resourceVersion: '831667' + }, + description: 'e2e-pod-security-admission-1705617529465-description' +}; + +export const updatePayloadData = { + id: 'e2e-pod-security-admission-1705628550961', + type: 'management.cattle.io.podsecurityadmissionconfigurationtemplate', + apiVersion: 'management.cattle.io/v3', + configuration: { + defaults: { + audit: 'baseline', 'audit-version': 'v1.25', enforce: 'privileged', 'enforce-version': 'v1.25', warn: 'restricted', 'warn-version': 'v1.25' + }, + exemptions: { + usernames: ['admin1', 'user1'], runtimeClasses: ['myclass3', 'myclass4'], namespaces: ['cattle-system', 'cattle-epinio-system'] + } + }, + kind: 'PodSecurityAdmissionConfigurationTemplate', + metadata: { + fields: ['e2e-pod-security-admission-1705628550961', '7s'], name: 'e2e-pod-security-admission-1705628550961', resourceVersion: '938739' + }, + description: 'e2e-pod-security-admission-1705628550961-description-edit' +}; diff --git a/cypress/e2e/po/components/ResourceList/resource-list-masthead.po.ts b/cypress/e2e/po/components/ResourceList/resource-list-masthead.po.ts index 6608a59b45..0f452a7eaf 100644 --- a/cypress/e2e/po/components/ResourceList/resource-list-masthead.po.ts +++ b/cypress/e2e/po/components/ResourceList/resource-list-masthead.po.ts @@ -8,4 +8,8 @@ export default class ResourceListMastheadPo extends ComponentPo { title() { return this.self().get('.title h1').invoke('text'); } + + create() { + return this.self().find('[data-testid="masthead-create-yaml"]').click(); + } } diff --git a/cypress/e2e/po/components/cru-resource.po.ts b/cypress/e2e/po/components/cru-resource.po.ts index 7f9bc6ab04..7f14e8854e 100644 --- a/cypress/e2e/po/components/cru-resource.po.ts +++ b/cypress/e2e/po/components/cru-resource.po.ts @@ -1,4 +1,5 @@ import ComponentPo from '@/cypress/e2e/po/components/component.po'; +import AsyncButtonPo from '@/cypress/e2e/po/components/async-button.po'; export default class CruResourcePo extends ComponentPo { selectSubType(groupIndex: number, itemIndex: number) { @@ -6,4 +7,20 @@ export default class CruResourcePo extends ComponentPo { .eq(groupIndex).find('.item') .eq(itemIndex); } + + selectSubTypeByIndex(index: number) { + return this.self().find('.subtypes-container > div') + .eq(index); + } + + saveOrCreate(): AsyncButtonPo { + return new AsyncButtonPo('[data-testid="form-save"]', this.self()); + } + + saveAndWaitForRequests(method: string, url: string) { + cy.intercept(method, url).as('request'); + this.saveOrCreate().click(); + + return cy.wait('@request', { timeout: 10000 }); + } } diff --git a/cypress/e2e/po/components/ember/ember-accordion.po.ts b/cypress/e2e/po/components/ember/ember-accordion.po.ts index e57250f915..c36a121aae 100644 --- a/cypress/e2e/po/components/ember/ember-accordion.po.ts +++ b/cypress/e2e/po/components/ember/ember-accordion.po.ts @@ -1,5 +1,4 @@ import EmberComponentPo from '@/cypress/e2e/po/components/ember/ember-component.po'; - export default class EmberAccordionPo extends EmberComponentPo { private headerSelector: string; private contentSelector: string; diff --git a/cypress/e2e/po/components/ember/ember-checkbox-input.po.ts b/cypress/e2e/po/components/ember/ember-checkbox-input.po.ts new file mode 100644 index 0000000000..b62a6ee891 --- /dev/null +++ b/cypress/e2e/po/components/ember/ember-checkbox-input.po.ts @@ -0,0 +1,19 @@ +import EmberComponentPo from '@/cypress/e2e/po/components/ember/ember-component.po'; + +export default class EmberCheckboxInputPo extends EmberComponentPo { + /** + * Click on the checkbox input button + * @returns + */ + set(): Cypress.Chainable { + return this.input().click({ force: true }); + } + + /** + * Return the checkbox input button from a given container + * @returns + */ + private input(): Cypress.Chainable { + return this.self().find('.ember-checkbox'); + } +} diff --git a/cypress/e2e/po/components/ember/ember-form-pod-security-template.po.ts b/cypress/e2e/po/components/ember/ember-form-pod-security-template.po.ts new file mode 100644 index 0000000000..d1bfeea562 --- /dev/null +++ b/cypress/e2e/po/components/ember/ember-form-pod-security-template.po.ts @@ -0,0 +1,29 @@ +import EmberAccordionPo from '@/cypress/e2e/po/components/ember/ember-accordion.po'; +import EmberComponentPo from '@/cypress/e2e/po/components/ember/ember-component.po'; +import EmberInputPo from '@/cypress/e2e/po/components/ember/ember-input.po'; + +export default class EmberAddPodSecurityTemplatePo extends EmberComponentPo { + templateName(): EmberInputPo { + return new EmberInputPo('[data-testid="form-name-description__name"]'); + } + + templateDescription(): EmberInputPo { + return new EmberInputPo('.ember-text-area'); + } + + addDescription() { + this.self().find('div > a.btn', 'Add a Description').click(); + } + + accordion() { + return new EmberAccordionPo('.accordion-wrapper'); + } + + create() { + return this.self().find('button.btn').contains('Create').click(); + } + + save() { + return this.self().find('button.btn').contains('Save').click(); + } +} diff --git a/cypress/e2e/po/components/ember/ember-form-rke-templates.po.ts b/cypress/e2e/po/components/ember/ember-form-rke-templates.po.ts new file mode 100644 index 0000000000..5813966b5d --- /dev/null +++ b/cypress/e2e/po/components/ember/ember-form-rke-templates.po.ts @@ -0,0 +1,16 @@ +import EmberComponentPo from '@/cypress/e2e/po/components/ember/ember-component.po'; +import EmberInputPo from '@/cypress/e2e/po/components/ember/ember-input.po'; + +export default class EmberFormRkeTemplatesPo extends EmberComponentPo { + templateDetails(index): EmberInputPo { + return new EmberInputPo(`.horizontal-form .row:nth-of-type(1) input:nth-child(${ index })`); + } + + create() { + return this.self().contains('[data-testid="save-cancel-rke1"] button', 'Create').click(); + } + + save() { + return this.self().contains('[data-testid="save-cancel-rke1"] button', 'Save').click(); + } +} diff --git a/cypress/e2e/po/components/ember/ember-modal-add-edit-cluster-driver.po.ts b/cypress/e2e/po/components/ember/ember-modal-add-edit-cluster-driver.po.ts new file mode 100644 index 0000000000..c63e3805ff --- /dev/null +++ b/cypress/e2e/po/components/ember/ember-modal-add-edit-cluster-driver.po.ts @@ -0,0 +1,20 @@ +import EmberModalPo from '@/cypress/e2e/po/components/ember/ember-modal.po'; +import EmberInputPo from '@/cypress/e2e/po/components/ember/ember-input.po'; + +export default class EmberModalClusterDriverPo extends EmberModalPo { + formInput(index: number) { + return new EmberInputPo(`.modal-open .inline-form:nth-of-type(${ index }) input`); + } + + addDomainButton() { + this.self().find('button').contains('Add Domain').click(); + } + + create() { + return this.self().find('button').contains('Create').click(); + } + + save() { + return this.self().find('button').contains('Save').click(); + } +} diff --git a/cypress/e2e/po/components/ember/ember-modal-add-edit-node-driver.po.ts b/cypress/e2e/po/components/ember/ember-modal-add-edit-node-driver.po.ts new file mode 100644 index 0000000000..1dd7d3fd22 --- /dev/null +++ b/cypress/e2e/po/components/ember/ember-modal-add-edit-node-driver.po.ts @@ -0,0 +1,20 @@ +import EmberModalPo from '@/cypress/e2e/po/components/ember/ember-modal.po'; +import EmberInputPo from '@/cypress/e2e/po/components/ember/ember-input.po'; + +export default class EmberModalNodeDriverPo extends EmberModalPo { + formInput(index: number) { + return new EmberInputPo(`.modal-open .inline-form:nth-of-type(${ index }) input`); + } + + addDomainButton() { + this.self().find('button').contains('Add Domain').click(); + } + + create() { + return this.self().find('button').contains('Create').click(); + } + + save() { + return this.self().find('button').contains('Save').click(); + } +} diff --git a/cypress/e2e/po/components/ember/ember-modal-add-node-template.po.ts b/cypress/e2e/po/components/ember/ember-modal-add-node-template.po.ts new file mode 100644 index 0000000000..db7eae2d32 --- /dev/null +++ b/cypress/e2e/po/components/ember/ember-modal-add-node-template.po.ts @@ -0,0 +1,33 @@ +import EmberAccordionPo from '@/cypress/e2e/po/components/ember/ember-accordion.po'; +import EmberModalPo from '@/cypress/e2e/po/components/ember/ember-modal.po'; +import EmberInputPo from '@/cypress/e2e/po/components/ember/ember-input.po'; + +export default class EmberModalAddNodeTemplatePo extends EmberModalPo { + serviceProviderOptions(label: string) { + return this.self().contains('.nav-box-item', new RegExp(` ${ label } `)); + } + + nextButton(label: string) { + return this.self().contains('.btn', label, { timeout: 10000 }); + } + + accordion() { + return new EmberAccordionPo(''); + } + + checkOption(value: string) { + return this.self().find('.form-control').contains(value).click(); + } + + templateName(): EmberInputPo { + return new EmberInputPo('[data-testid="form-name-description__name"]'); + } + + create() { + return this.self().find('button').contains('Create').click(); + } + + save() { + return this.self().find('button').contains('Save').click(); + } +} diff --git a/cypress/e2e/po/components/ember/ember-modal.po.ts b/cypress/e2e/po/components/ember/ember-modal.po.ts index a4931385d6..b2ca2d8192 100644 --- a/cypress/e2e/po/components/ember/ember-modal.po.ts +++ b/cypress/e2e/po/components/ember/ember-modal.po.ts @@ -4,4 +4,12 @@ export default class EmberModalPo extends EmberComponentPo { constructor() { super('.modal-open'); } + + deactivate() { + return this.self().contains('.btn', 'Deactivate').click(); + } + + delete() { + return this.self().contains('.btn', 'Delete').click(); + } } diff --git a/cypress/e2e/po/components/ember/ember-select.po.ts b/cypress/e2e/po/components/ember/ember-select.po.ts new file mode 100644 index 0000000000..2388af538a --- /dev/null +++ b/cypress/e2e/po/components/ember/ember-select.po.ts @@ -0,0 +1,25 @@ +import EmberComponentPo from '@/cypress/e2e/po/components/ember/ember-component.po'; + +export default class EmberSelectPo extends EmberComponentPo { + getMenuItem(label: string, index = 0) { + return this.self().eq(index).contains(label); + } + + selectMenuItemByLabel(label: string, index = 0) { + return this.self().eq(index).contains(label).click(); + } + + /** + * Select an