diff --git a/.github/workflows/accessibility-tests.yml b/.github/workflows/accessibility-tests.yml
index c7823d7c57..c5c370692e 100644
--- a/.github/workflows/accessibility-tests.yml
+++ b/.github/workflows/accessibility-tests.yml
@@ -15,10 +15,15 @@ jobs:
with:
ref: ${{ github.event.pull_request.head.sha }}
fetch-depth: 0
- - name: Install k3d
- env:
- K3D_URL: https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh
- run: curl --silent --fail $K3D_URL | bash
+ - name: Create Single Cluster
+ uses: AbsaOSS/k3d-action@4e8b3239042be1dc0aed6c5eb80c13b18200fc79 #v2.4.0
+ with:
+ cluster-name: "k3dCluster"
+ args: >-
+ --agents 1
+ --port 80:80@loadbalancer
+ --port 443:443@loadbalancer
+ --wait
- name: Setup Kyma
run: |
set -o pipefail
diff --git a/src/resources/CustomResourceDefinitions/templates.js b/src/resources/CustomResourceDefinitions/templates.js
index 077aa3d243..8be93a6290 100644
--- a/src/resources/CustomResourceDefinitions/templates.js
+++ b/src/resources/CustomResourceDefinitions/templates.js
@@ -50,7 +50,7 @@ const convert = (arg, currentPath, spec) => {
export function createTemplate(crd) {
const spec = {};
- const currentVersion = crd.spec.versions.find(ver => ver.storage);
+ const currentVersion = crd?.spec?.versions.find(ver => ver.storage);
return {
apiVersion: `${crd.spec.group}/${currentVersion.name}`,
diff --git a/tests/integration/continuum/cypress.js b/tests/integration/continuum/cypress.js
index d1595d3633..938ac561b4 100644
--- a/tests/integration/continuum/cypress.js
+++ b/tests/integration/continuum/cypress.js
@@ -98,7 +98,10 @@ const failIfAnyAccessibilityConcerns = () => {
).to.have.lengthOf(0);
};
-const submitAccessibilityConcernsToAMP = (reportTitle = 'Busola ACC') => {
+const submitAccessibilityConcernsToAMP = (
+ reportTitle = 'Busola ACC',
+ moduleName,
+) => {
const accessibilityConcerns = Continuum.getAccessibilityConcerns();
if (accessibilityConcerns.length <= 0) {
return;
@@ -113,7 +116,10 @@ const submitAccessibilityConcernsToAMP = (reportTitle = 'Busola ACC') => {
await ampReportingService.setActiveOrganization(10274); // ID of AMP organization to submit test results to
await ampReportingService.setActiveAsset(38893); // ID of AMP asset to submit test results to
await ampReportingService.setActiveReportByName(reportTitle);
- await ampReportingService.setActiveModuleByName(pageTitle, pageUrl);
+ await ampReportingService.setActiveModuleByName(
+ moduleName ?? pageTitle,
+ pageUrl,
+ );
await ampReportingService.setActiveReportManagementStrategy(
ReportManagementStrategy.APPEND,
);
diff --git a/tests/integration/cypress.config.js b/tests/integration/cypress.config.js
index 33f992d915..747988019a 100644
--- a/tests/integration/cypress.config.js
+++ b/tests/integration/cypress.config.js
@@ -32,6 +32,12 @@ module.exports = defineConfig({
specPattern: [
'tests/accessibility/test-acc-cluster.spec.js',
'tests/accessibility/test-acc-namespace-overview.spec.js',
+ 'tests/accessibility/test-acc-modules.spec.js',
+ 'tests/accessibility/test-acc-cron-jobs.spec.js',
+ 'tests/accessibility/test-acc-performance.spec.js',
+ 'tests/accessibility/test-acc-extensions.spec.js',
+ 'tests/accessibility/test-acc-pizzas.spec.js',
+ 'tests/accessibility/test-acc-custom-resoureces.spec.js',
'tests/cluster/test-download-a-kubeconfig.spec.js',
'tests/cluster/test-edit-cluster.spec.js',
'tests/cluster/test-cluster-overview.spec.js',
diff --git a/tests/integration/tests/accessibility/test-acc-cluster.spec.js b/tests/integration/tests/accessibility/test-acc-cluster.spec.js
index 8f5874ad9e..1f28f888e1 100644
--- a/tests/integration/tests/accessibility/test-acc-cluster.spec.js
+++ b/tests/integration/tests/accessibility/test-acc-cluster.spec.js
@@ -13,7 +13,10 @@ context('Accessibility test Cluster list and overview', () => {
cy.visit(`${config.clusterAddress}/clusters`)
.runAllAccessibilityTests()
.printAccessibilityTestResults()
- .submitAccessibilityConcernsToAMP(Cypress.env('AMP_REPORT_NAME'));
+ .submitAccessibilityConcernsToAMP(
+ Cypress.env('AMP_REPORT_NAME'),
+ 'Clusters list',
+ );
});
it('Acc test cluster overview', () => {
@@ -23,6 +26,9 @@ context('Accessibility test Cluster list and overview', () => {
cy.runAllAccessibilityTests()
.printAccessibilityTestResults()
- .submitAccessibilityConcernsToAMP(Cypress.env('AMP_REPORT_NAME'));
+ .submitAccessibilityConcernsToAMP(
+ Cypress.env('AMP_REPORT_NAME'),
+ 'Cluster overview',
+ );
});
});
diff --git a/tests/integration/tests/accessibility/test-acc-cron-jobs.spec.js b/tests/integration/tests/accessibility/test-acc-cron-jobs.spec.js
new file mode 100644
index 0000000000..429203494c
--- /dev/null
+++ b/tests/integration/tests/accessibility/test-acc-cron-jobs.spec.js
@@ -0,0 +1,141 @@
+///
+
+import 'cypress-file-upload';
+
+const NAMESPACE_NAME = 'acc-cron-jobs';
+const CRON_JOB_NAME = 'acc-test-cron-job';
+
+context('Accessibility test Cron Jobs', () => {
+ Cypress.skipAfterFail();
+
+ before(() => {
+ cy.handleExceptions();
+ cy.setUpContinuum('continuum/continuum.conf.js');
+ cy.loginAndSelectCluster();
+ cy.createNamespace(NAMESPACE_NAME);
+ });
+
+ it('Acc test Cron Jobs list', () => {
+ cy.loginAndSelectCluster();
+
+ cy.getLeftNav()
+ .contains('Namespaces')
+ .click();
+
+ cy.get('ui5-input[placeholder="Search"]:visible')
+ .find('input')
+ .wait(1000)
+ .type(NAMESPACE_NAME);
+
+ cy.clickGenericListLink(NAMESPACE_NAME);
+
+ cy.navigateTo('Workloads', 'Cron Jobs');
+
+ cy.contains('ui5-title', 'Cron Jobs').should('be.visible');
+
+ cy.runAllAccessibilityTests()
+ .printAccessibilityTestResults()
+ .submitAccessibilityConcernsToAMP(
+ Cypress.env('AMP_REPORT_NAME'),
+ 'Cron Jobs list',
+ );
+ });
+
+ it('Acc test Cron Jobs create', () => {
+ cy.openCreate();
+
+ cy.getMidColumn()
+ .contains('ui5-title', 'Create Cron Job')
+ .should('be.visible');
+
+ cy.runAllAccessibilityTests()
+ .printAccessibilityTestResults()
+ .submitAccessibilityConcernsToAMP(
+ Cypress.env('AMP_REPORT_NAME'),
+ 'Cron Jobs create',
+ );
+ });
+
+ it('Acc test Cron Jobs details', () => {
+ cy.get('[accessible-name="CronJob name"]')
+ .find('input')
+ .type(CRON_JOB_NAME, { force: true });
+
+ cy.get('[placeholder="Minute"]')
+ .find('input')
+ .click()
+ .clear()
+ .type(0, { force: true });
+
+ cy.get('[placeholder="Hour"]')
+ .find('input')
+ .click()
+ .clear()
+ .type(0, { force: true });
+
+ cy.get('[placeholder="Day of Month"]')
+ .find('input')
+ .click()
+ .clear()
+ .type(1, { force: true });
+
+ cy.get('[placeholder="Month"]')
+ .find('input')
+ .click()
+ .clear()
+ .type('*', { force: true });
+
+ cy.get('[placeholder="Day of Week"]')
+ .find('input')
+ .click()
+ .clear()
+ .type('*', { force: true });
+
+ cy.get(
+ '[aria-label="expand Schedule: At 12:00 AM, on day 1 of the month"]',
+ ).click();
+
+ cy.contains('Command').click();
+
+ cy.get('[placeholder="Command to run in a container"]')
+ .find('input')
+ .click()
+ .clear()
+ .type('ls -la', { force: true });
+
+ cy.get('[accessible-name="Container name"]')
+ .find('input')
+ .click()
+ .clear()
+ .type('test-container', { force: true });
+
+ cy.get(
+ '[placeholder="Enter the Docker image tag, for example, \'busybox\'"]',
+ )
+ .find('input')
+ .click()
+ .clear()
+ .type('busybox', { force: true });
+
+ cy.get('ui5-combobox[value="IfNotPresent"]')
+ .find('ui5-icon[accessible-name="Select Options"]')
+ .click();
+
+ cy.get('ui5-li:visible')
+ .contains('Always')
+ .click();
+
+ cy.saveChanges('Create');
+
+ cy.getMidColumn()
+ .contains('ui5-title', CRON_JOB_NAME)
+ .should('be.visible');
+
+ cy.runAllAccessibilityTests()
+ .printAccessibilityTestResults()
+ .submitAccessibilityConcernsToAMP(
+ Cypress.env('AMP_REPORT_NAME'),
+ 'Cron Jobs details',
+ );
+ });
+});
diff --git a/tests/integration/tests/accessibility/test-acc-custom-resoureces.spec.js b/tests/integration/tests/accessibility/test-acc-custom-resoureces.spec.js
new file mode 100644
index 0000000000..cd5f39943b
--- /dev/null
+++ b/tests/integration/tests/accessibility/test-acc-custom-resoureces.spec.js
@@ -0,0 +1,95 @@
+///
+
+import { loadFile } from '../../support/loadFile';
+
+const FILE_NAME = 'test-customresourcedefinisions-cluster.yaml';
+const TCLUSTER_FILE_NAME = 'test-Tcluster.yaml';
+
+context('Accessibility test Custom Resources', () => {
+ Cypress.skipAfterFail();
+
+ before(() => {
+ cy.setUpContinuum('continuum/continuum.conf.js');
+
+ cy.loginAndSelectCluster();
+
+ cy.navigateTo('Configuration', 'Custom Resource Definitions');
+
+ cy.openCreate().click();
+
+ cy.wrap(loadFile(FILE_NAME)).then(CRD_CONFIG => {
+ const CRD = JSON.stringify(CRD_CONFIG);
+ cy.pasteToMonaco(CRD);
+ });
+
+ cy.checkUnsavedDialog();
+
+ cy.saveChanges('Create');
+ });
+
+ it('Acc test Custom Resources overview', () => {
+ cy.getLeftNav()
+ .contains('Custom Resources')
+ .click();
+
+ cy.contains('ui5-title', 'Custom Resources').should('be.visible');
+
+ cy.runAllAccessibilityTests()
+ .printAccessibilityTestResults()
+ .submitAccessibilityConcernsToAMP(
+ Cypress.env('AMP_REPORT_NAME'),
+ 'Custom Resources overview',
+ );
+ });
+
+ it('Acc test single Custom Resource list', () => {
+ cy.get('ui5-table-row')
+ .contains('Tclusters')
+ .click();
+
+ cy.contains('ui5-title', 'Tclusters').should('be.visible');
+
+ cy.contains('ui5-button', /Create/i).should('be.visible');
+
+ cy.url().should('match', /customresources/);
+
+ cy.runAllAccessibilityTests()
+ .printAccessibilityTestResults()
+ .submitAccessibilityConcernsToAMP(
+ Cypress.env('AMP_REPORT_NAME'),
+ 'Custom Resources single list',
+ );
+ });
+
+ it('Acc test Tcluster Custom Resource details', () => {
+ cy.getLeftNav()
+ .contains('Custom Resources')
+ .click();
+
+ cy.get('ui5-input[placeholder="Search"]:visible')
+ .find('input')
+ .wait(1000)
+ .type('cypress');
+ cy.clickGenericListLink('Tclusters');
+
+ cy.contains('ui5-button', 'Create').click();
+
+ cy.wrap(loadFile(TCLUSTER_FILE_NAME)).then(TC_CONFIG => {
+ const TC = JSON.stringify(TC_CONFIG);
+ cy.pasteToMonaco(TC);
+ });
+
+ cy.checkUnsavedDialog();
+
+ cy.saveChanges('Create');
+
+ cy.contains('ui5-title', 'tcluster-test').should('be.visible');
+
+ cy.runAllAccessibilityTests()
+ .printAccessibilityTestResults()
+ .submitAccessibilityConcernsToAMP(
+ Cypress.env('AMP_REPORT_NAME'),
+ 'Tcluster Custom Resource details',
+ );
+ });
+});
diff --git a/tests/integration/tests/accessibility/test-acc-extensions.spec.js b/tests/integration/tests/accessibility/test-acc-extensions.spec.js
new file mode 100644
index 0000000000..f62867b063
--- /dev/null
+++ b/tests/integration/tests/accessibility/test-acc-extensions.spec.js
@@ -0,0 +1,100 @@
+///
+
+import jsyaml from 'js-yaml';
+
+context('Accessibility test Extensions view', () => {
+ Cypress.skipAfterFail();
+
+ before(() => {
+ cy.handleExceptions();
+ cy.setUpContinuum('continuum/continuum.conf.js');
+ cy.loginAndSelectCluster();
+
+ cy.createNamespace('pizzas');
+
+ cy.getLeftNav()
+ .contains('Cluster Details')
+ .click();
+
+ cy.contains('ui5-button', 'Upload YAML').click();
+
+ cy.loadFiles(
+ 'examples/pizzas/configuration/pizzas-configmap.yaml',
+ 'examples/pizzas/configuration/pizzas-crd.yaml',
+ ).then(resources => {
+ const input = resources.map(r => jsyaml.dump(r)).join('\n---\n');
+ cy.pasteToMonaco(input);
+ });
+
+ cy.get('ui5-dialog')
+ .contains('ui5-button', 'Upload')
+ .should('be.visible')
+ .click();
+
+ cy.get('ui5-dialog')
+ .find('.status-message-success')
+ .should('have.length', 2);
+ });
+
+ it('Acc test Extensions list', () => {
+ cy.loginAndSelectCluster();
+
+ cy.navigateTo('Configuration', 'Extensions');
+
+ cy.wait(500);
+
+ cy.runAllAccessibilityTests()
+ .printAccessibilityTestResults()
+ .submitAccessibilityConcernsToAMP(
+ Cypress.env('AMP_REPORT_NAME'),
+ 'Extensions list',
+ );
+ });
+
+ it('Acc test Extensions create', () => {
+ cy.openCreate();
+
+ cy.runAllAccessibilityTests()
+ .printAccessibilityTestResults()
+ .submitAccessibilityConcernsToAMP(
+ Cypress.env('AMP_REPORT_NAME'),
+ 'Extensions create',
+ );
+ });
+
+ it('Acc test Extensions details', () => {
+ cy.getLeftNav()
+ .contains('Extensions')
+ .click();
+
+ cy.get('ui5-input[placeholder="Search"]:visible')
+ .find('input')
+ .wait(1000)
+ .type('pizzas');
+
+ cy.clickGenericListLink('pizzas');
+
+ cy.runAllAccessibilityTests()
+ .printAccessibilityTestResults()
+ .submitAccessibilityConcernsToAMP(
+ Cypress.env('AMP_REPORT_NAME'),
+ 'Extensions details',
+ );
+ });
+
+ it('Clean up', () => {
+ cy.getLeftNav()
+ .contains('Namespaces')
+ .click();
+
+ cy.deleteFromGenericList('Namespace', 'pizzas', {
+ clearSearch: false,
+ checkIfResourceIsRemoved: false,
+ selectSearchResult: true,
+ });
+
+ cy.get('ui5-table-row')
+ .find('.status-badge')
+ .contains('Terminating');
+ });
+});
diff --git a/tests/integration/tests/accessibility/test-acc-modules.spec.js b/tests/integration/tests/accessibility/test-acc-modules.spec.js
new file mode 100644
index 0000000000..e4d9007cb3
--- /dev/null
+++ b/tests/integration/tests/accessibility/test-acc-modules.spec.js
@@ -0,0 +1,70 @@
+///
+
+context('Accessibility test Modules view', () => {
+ before(() => {
+ cy.handleExceptions();
+ cy.loginAndSelectCluster();
+ cy.setUpContinuum('continuum/continuum.conf.js');
+ });
+
+ it('Acc test Modules view', () => {
+ cy.wait(2000);
+
+ cy.get('ui5-card')
+ .contains('Modify Modules')
+ .click();
+
+ cy.runAllAccessibilityTests()
+ .printAccessibilityTestResults()
+ .submitAccessibilityConcernsToAMP(
+ Cypress.env('AMP_REPORT_NAME'),
+ 'Modules view',
+ );
+ });
+
+ it('Acc test add Modules view', () => {
+ cy.get('ui5-panel')
+ .contains('ui5-button', 'Add')
+ .click();
+
+ cy.wait(1000);
+
+ cy.runAllAccessibilityTests()
+ .printAccessibilityTestResults()
+ .submitAccessibilityConcernsToAMP(
+ Cypress.env('AMP_REPORT_NAME'),
+ 'Add Modules view',
+ );
+ });
+
+ it('Acc test edit Modules view', () => {
+ cy.get('ui5-card')
+ .contains('api-gateway')
+ .should('be.visible');
+
+ cy.get('ui5-title')
+ .contains('api-gateway')
+ .click();
+
+ cy.get('[data-testid="create-form-footer-bar"]')
+ .contains('ui5-button:visible', 'Add')
+ .click();
+
+ cy.wait(7000);
+
+ cy.get('ui5-table-row')
+ .contains('api-gateway')
+ .should('be.visible');
+
+ cy.inspectTab('Edit');
+
+ cy.wait(1000);
+
+ cy.runAllAccessibilityTests()
+ .printAccessibilityTestResults()
+ .submitAccessibilityConcernsToAMP(
+ Cypress.env('AMP_REPORT_NAME'),
+ 'Edit Modules view',
+ );
+ });
+});
diff --git a/tests/integration/tests/accessibility/test-acc-namespace-overview.spec.js b/tests/integration/tests/accessibility/test-acc-namespace-overview.spec.js
index 3ec3bb3901..bf4a06338b 100644
--- a/tests/integration/tests/accessibility/test-acc-namespace-overview.spec.js
+++ b/tests/integration/tests/accessibility/test-acc-namespace-overview.spec.js
@@ -17,6 +17,9 @@ context('Accessibility test Namespace overview', () => {
cy.runAllAccessibilityTests()
.printAccessibilityTestResults()
- .submitAccessibilityConcernsToAMP(Cypress.env('AMP_REPORT_NAME'));
+ .submitAccessibilityConcernsToAMP(
+ Cypress.env('AMP_REPORT_NAME'),
+ 'Namespace overview',
+ );
});
});
diff --git a/tests/integration/tests/accessibility/test-acc-performance.spec.js b/tests/integration/tests/accessibility/test-acc-performance.spec.js
new file mode 100644
index 0000000000..b224db89e8
--- /dev/null
+++ b/tests/integration/tests/accessibility/test-acc-performance.spec.js
@@ -0,0 +1,27 @@
+///
+import config from '../../config';
+
+context('Accessibility test Cluster list and overview', () => {
+ Cypress.skipAfterFail();
+
+ before(() => {
+ cy.handleExceptions();
+ cy.setUpContinuum('continuum/continuum.conf.js');
+ cy.loginAndSelectCluster();
+ });
+
+ it('Acc test with performance panel open', () => {
+ cy.get('[title="Profile"]').click();
+
+ cy.get('ui5-menu-li:visible')
+ .contains('Preferences')
+ .click({ force: true });
+
+ cy.runAllAccessibilityTests()
+ .printAccessibilityTestResults()
+ .submitAccessibilityConcernsToAMP(
+ Cypress.env('AMP_REPORT_NAME'),
+ 'Performance panel',
+ );
+ });
+});
diff --git a/tests/integration/tests/accessibility/test-acc-pizzas.spec.js b/tests/integration/tests/accessibility/test-acc-pizzas.spec.js
new file mode 100644
index 0000000000..1d9316f745
--- /dev/null
+++ b/tests/integration/tests/accessibility/test-acc-pizzas.spec.js
@@ -0,0 +1,112 @@
+///
+
+import 'cypress-file-upload';
+import jsyaml from 'js-yaml';
+
+context('Accessibility test Pizza Orders', () => {
+ Cypress.skipAfterFail();
+
+ before(() => {
+ cy.handleExceptions();
+ cy.setUpContinuum('continuum/continuum.conf.js');
+ cy.loginAndSelectCluster();
+ cy.createNamespace('pizzas');
+ });
+
+ it('Creates the EXT pizza orders config', () => {
+ cy.getLeftNav()
+ .contains('Cluster Details')
+ .click();
+
+ cy.contains('ui5-button', 'Upload YAML').click();
+
+ cy.loadFiles(
+ 'examples/pizzas/configuration/pizza-orders-configmap.yaml',
+ 'examples/pizzas/configuration/pizza-orders-crd.yaml',
+ ).then(resources => {
+ const input = resources.map(r => jsyaml.dump(r)).join('\n---\n');
+ cy.pasteToMonaco(input);
+ });
+
+ cy.get('ui5-dialog')
+ .contains('ui5-button', 'Upload')
+ .should('be.visible')
+ .click();
+
+ cy.get('ui5-dialog')
+ .find('.status-message-success')
+ .should('have.length', 2);
+
+ cy.loadFiles('examples/pizzas/samples/pizza-orders-samples.yaml').then(
+ resources => {
+ const input = resources.map(r => jsyaml.dump(r)).join('\n---\n');
+ cy.pasteToMonaco(input);
+ },
+ );
+
+ cy.get('ui5-dialog')
+ .contains('ui5-button', 'Upload')
+ .should('be.visible')
+ .click();
+
+ cy.get('ui5-dialog')
+ .find('.status-message-success')
+ .should('have.length', 2);
+ });
+
+ it('Acc test Pizza Orders list', () => {
+ cy.loginAndSelectCluster();
+
+ cy.getLeftNav()
+ .contains('Namespaces')
+ .click();
+
+ cy.get('ui5-input[placeholder="Search"]:visible')
+ .find('input')
+ .wait(1000)
+ .type('pizzas');
+
+ cy.clickGenericListLink('pizzas');
+
+ cy.getLeftNav()
+ .contains('Lunch')
+ .click();
+
+ cy.getLeftNav()
+ .contains('Pizza Orders')
+ .click();
+
+ cy.runAllAccessibilityTests()
+ .printAccessibilityTestResults()
+ .submitAccessibilityConcernsToAMP(
+ Cypress.env('AMP_REPORT_NAME'),
+ 'Pizza Orders list',
+ );
+ });
+
+ it('Acc test Pizza Orders create', () => {
+ cy.contains('ui5-button', 'Create').click();
+
+ cy.runAllAccessibilityTests()
+ .printAccessibilityTestResults()
+ .submitAccessibilityConcernsToAMP(
+ Cypress.env('AMP_REPORT_NAME'),
+ 'Pizza Orders create',
+ );
+ });
+
+ it('Acc test Pizza Orders details', () => {
+ cy.getLeftNav()
+ .contains('Pizza Orders')
+ .click();
+
+ cy.clickGenericListLink('diavola-order');
+
+ cy.runAllAccessibilityTests()
+ .printAccessibilityTestResults()
+ .submitAccessibilityConcernsToAMP(
+ Cypress.env('AMP_REPORT_NAME'),
+ 'Pizza Orders details',
+ );
+ });
+});