diff --git a/cypress/e2e/NewPolicy.spec.cy.ts b/cypress/e2e/NewPolicy.spec.cy.ts
index dd86b139..6d0fc43a 100644
--- a/cypress/e2e/NewPolicy.spec.cy.ts
+++ b/cypress/e2e/NewPolicy.spec.cy.ts
@@ -1,5 +1,3 @@
-import { SKIP_WELCOME_BANNER_TEST_ID } from '../support/selectors';
-
const deletePolicyFromDetailsPage = (policyName: string) => {
cy.contains('button', 'Actions', { matchCase: false }).click();
cy.contains('button', 'Delete').click();
@@ -13,27 +11,38 @@ const deletePolicyFromDetailsPage = (policyName: string) => {
cy.contains('h1', 'NodeNetworkConfigurationPolicy');
};
-describe.skip('Create new policy with form', () => {
+describe('Create new policy with form', () => {
beforeEach(() => {
cy.login();
});
- it('with bridge interface', () => {
+ it('with default node network', () => {
const testPolicyName = 'test-bridge-policy-name';
+ const testDescription = 'Test description';
+
cy.visit('/k8s/cluster/nmstate.io~v1~NodeNetworkConfigurationPolicy');
- cy.byTestID(SKIP_WELCOME_BANNER_TEST_ID).click();
cy.byTestID('item-create').click();
cy.contains('button', 'From Form').click();
- cy.get('input[name="policy-name"]').clear().type(`${testPolicyName}`);
+ // Network identity step
+ cy.get('input[name="physical-network-name"]').clear().type(`${testPolicyName}`);
+ cy.contains('button', 'Next').click();
- cy.get('input[name="policy-description"]').clear().type('test-policy-description');
+ // Nodes configuration step
+ cy.get('input[name="policy-name"]').clear().type(`${testPolicyName}`);
+ cy.get('input[name="policy-description"]').clear().type(`${testDescription}`);
+ cy.contains('button', 'Next').click();
- cy.contains('button', 'Bridging').click();
- cy.get(`button#add-bridging-interface-button`).click();
+ // Uplink connection step - 'Default node network' selected by default
cy.contains('button', 'Next').click();
- cy.contains('button', 'Create policy').click();
+
+ // Settings step is skipped because 'Default node network' is selected
+
+ // Review and Create step
+ cy.byLegacyTestID('review-physical-network-name').should('have.text', testPolicyName);
+ cy.byLegacyTestID('review-network-description').should('have.text', testDescription);
+ cy.contains('button', 'Create network').click();
cy.contains('h1', testPolicyName);
diff --git a/cypress/e2e/StatusList.spec.cy.ts b/cypress/e2e/StatusList.spec.cy.ts
index 696287a1..e0c3d054 100644
--- a/cypress/e2e/StatusList.spec.cy.ts
+++ b/cypress/e2e/StatusList.spec.cy.ts
@@ -3,8 +3,9 @@ import {
EXPAND_INTERFACES_LIST_TEST_ID,
INTERFACE_DRAWER_TEST_ID,
LLDP_DRAWER_DETAILS_SECTION_TEST_ID,
+ LLDP_SYSTEM_NAME_FILTER_OPTION_ID,
+ LLDP_VLAN_NAME_FILTER_OPTION_ID,
SEARCH_FILTER_DROPDOWN_TEST_ID,
- TEXT_FILTER_BUTTON_SELECTOR,
} from '../support/selectors';
describe('NodeNetworkState list', () => {
@@ -24,7 +25,7 @@ describe('NodeNetworkState list', () => {
cy.get('h5').should('contain', 'No NodeNetworkStates found');
});
- it('with one VID instace ', () => {
+ it('with one VID instance ', () => {
cy.intercept('GET', '/api/kubernetes/apis/nmstate.io/v1beta1/nodenetworkstates*', {
fixture: 'NodeNetworkStatusWithVID.json',
}).as('getStatuses');
@@ -52,7 +53,7 @@ describe('NodeNetworkState list', () => {
});
});
- it('with LLDP informations ', () => {
+ it('with LLDP information', () => {
cy.intercept('GET', '/api/kubernetes/apis/nmstate.io/v1beta1/nodenetworkstates*', {
fixture: 'NodeNetworkStatusWithLLDP.json',
}).as('getStatuses');
@@ -86,7 +87,7 @@ describe('NodeNetworkState list', () => {
});
});
- it('filter by lldp', () => {
+ it('filter by LLDP', () => {
cy.intercept('GET', '/api/kubernetes/apis/nmstate.io/v1beta1/nodenetworkstates*', {
fixture: 'NodeNetworkStatusWithLLDP.json',
}).as('getStatuses');
@@ -107,7 +108,7 @@ describe('NodeNetworkState list', () => {
// open filter toolbar
cy.get('button').contains('Filter').click({ force: true });
- // filter by lldp enabled
+ // filter by LLDP enabled
cy.contains('label', 'Enabled').find('input[type="checkbox"]').check();
// close filter toolbar by clicking outside
@@ -125,7 +126,7 @@ describe('NodeNetworkState list', () => {
});
});
- it('search by lldp vlan ID', () => {
+ it('search by LLDP VLAN ID', () => {
cy.intercept('GET', '/api/kubernetes/apis/nmstate.io/v1beta1/nodenetworkstates*', {
fixture: 'NodeNetworkStatusWithLLDP.json',
}).as('getStatuses');
@@ -147,7 +148,7 @@ describe('NodeNetworkState list', () => {
cy.byTestID(SEARCH_FILTER_DROPDOWN_TEST_ID).click();
- cy.get(TEXT_FILTER_BUTTON_SELECTOR).contains('LLDP VLAN name').click();
+ cy.get(LLDP_VLAN_NAME_FILTER_OPTION_ID).click();
cy.get('input[data-test-id="item-filter"]').type(VLAN_NAME);
@@ -163,7 +164,7 @@ describe('NodeNetworkState list', () => {
});
});
- it('search by lldp system name', () => {
+ it('search by LLDP system name', () => {
cy.intercept('GET', '/api/kubernetes/apis/nmstate.io/v1beta1/nodenetworkstates*', {
fixture: 'NodeNetworkStatusWithLLDP.json',
}).as('getStatuses');
@@ -185,7 +186,7 @@ describe('NodeNetworkState list', () => {
cy.byTestID(SEARCH_FILTER_DROPDOWN_TEST_ID).click();
- cy.get(TEXT_FILTER_BUTTON_SELECTOR).contains('LLDP system name').click();
+ cy.get(LLDP_SYSTEM_NAME_FILTER_OPTION_ID).click();
cy.get('input[data-test-id="item-filter"]').type(SYSTEM_NAME);
diff --git a/cypress/support/commands.ts b/cypress/support/commands.ts
index 4756b324..7aec85c3 100644
--- a/cypress/support/commands.ts
+++ b/cypress/support/commands.ts
@@ -1,13 +1,23 @@
/* eslint-disable @typescript-eslint/no-namespace */
///
-import { KUBEADMIN_IDP, KUBEADMIN_USERNAME } from './constants';
+import {
+ KUBEADMIN_IDP,
+ KUBEADMIN_PASSWORD_ENV_KEY,
+ KUBEADMIN_USERNAME,
+ NETWORKING,
+ NODE_NETWORK_CONFIGURATION_POLICY,
+} from './constants';
+import {
+ NNCP_NAV_ITEM,
+ OCP_GUIDED_TOUR_MODAL,
+ OCP_GUIDED_TOUR_SKIP_BUTTON,
+ PASSWORD_INPUT,
+ SIDE_NAV_BAR,
+ SUBMIT_BUTTON,
+ USERNAME_INPUT,
+} from './selectors';
import { ConsoleWindowType } from './types';
-import Loggable = Cypress.Loggable;
-import Timeoutable = Cypress.Timeoutable;
-import Withinable = Cypress.Withinable;
-import Shadow = Cypress.Shadow;
-
declare global {
namespace Cypress {
interface Chainable {
@@ -19,12 +29,11 @@ declare global {
): Chainable;
byLegacyTestID(selector: string): Chainable;
clickOutside(): Chainable;
+ skipOCPGuidedTour(): Chainable;
}
}
}
-const submitButton = 'button[type=submit]';
-
Cypress.Commands.add('login', (provider, username, password) => {
// Check if auth is disabled (for a local development environment).
@@ -33,11 +42,15 @@ Cypress.Commands.add('login', (provider, username, password) => {
if (win.SERVER_FLAGS?.authDisabled) {
cy.log('skipping login, console is running with auth disabled');
- cy.contains('li[data-test="nav"]', 'Networking').click();
- cy.contains(
- '*[data-test-id="nodenetworkconfigurationpolicy-nav-item"]',
- 'NodeNetworkConfigurationPolicy',
- ).should('be.visible');
+ // Close the OCP guided tour if it's displayed
+ cy.get('body').then(($body) => {
+ if ($body.find(OCP_GUIDED_TOUR_MODAL)) {
+ cy.get(OCP_GUIDED_TOUR_SKIP_BUTTON).click();
+ }
+ });
+
+ cy.contains(SIDE_NAV_BAR, NETWORKING).click();
+ cy.contains(NNCP_NAV_ITEM, NODE_NETWORK_CONFIGURATION_POLICY).should('be.visible');
return;
}
@@ -53,9 +66,9 @@ Cypress.Commands.add('login', (provider, username, password) => {
}
});
- cy.get('#inputUsername').type(username || KUBEADMIN_USERNAME);
- cy.get('#inputPassword').type(password || Cypress.env('KUBEADMIN_PASSWORD'));
- cy.get(submitButton).click();
+ cy.get(USERNAME_INPUT).type(username || KUBEADMIN_USERNAME);
+ cy.get(PASSWORD_INPUT).type(password || Cypress.env(KUBEADMIN_PASSWORD_ENV_KEY));
+ cy.get(SUBMIT_BUTTON).click();
});
});
diff --git a/cypress/support/constants.ts b/cypress/support/constants.ts
index f47e519d..add4dfe5 100644
--- a/cypress/support/constants.ts
+++ b/cypress/support/constants.ts
@@ -1,2 +1,6 @@
export const KUBEADMIN_USERNAME = 'kubeadmin';
export const KUBEADMIN_IDP = 'kube:admin';
+export const KUBEADMIN_PASSWORD_ENV_KEY = 'KUBEADMIN_PASSWORD';
+
+export const NETWORKING = 'Networking';
+export const NODE_NETWORK_CONFIGURATION_POLICY = 'NodeNetworkConfigurationPolicy';
diff --git a/cypress/support/selectors.ts b/cypress/support/selectors.ts
index 00f4bf69..0061f059 100644
--- a/cypress/support/selectors.ts
+++ b/cypress/support/selectors.ts
@@ -1,10 +1,21 @@
+export const SIDE_NAV_BAR = 'li[data-test="nav"]';
+
export const EXPAND_INTERFACES_LIST_TEST_ID = '#expand-interfaces-list0';
export const EXPAND_INTERFACE_INFO = 'ethernet-expandable-section-toggle';
export const INTERFACE_DRAWER_TEST_ID = 'interface-drawer';
export const LLDP_DRAWER_DETAILS_SECTION_TEST_ID = 'lldp-section';
export const SEARCH_FILTER_DROPDOWN_TEST_ID = 'console-select-menu-toggle';
-export const TEXT_FILTER_BUTTON_SELECTOR =
- '.pf-v6-c-menu li.pf-v6-c-menu__list-item button.pf-v6-c-menu__item';
-export const SKIP_WELCOME_BANNER_TEST_ID = 'tour-step-footer-secondary';
+export const LLDP_VLAN_NAME_FILTER_OPTION_ID = '#lldp-name-link';
+export const LLDP_SYSTEM_NAME_FILTER_OPTION_ID = '#lldp-system-name-link';
+
+export const OCP_GUIDED_TOUR_MODAL = '[data-test="guided-tour-modal"]';
+export const OCP_GUIDED_TOUR_SKIP_BUTTON = '[data-test="tour-step-footer-secondary"]';
+
+export const SUBMIT_BUTTON = 'button[type=submit]';
+
+export const NNCP_NAV_ITEM = '*[data-test-id="nodenetworkconfigurationpolicy-nav-item"]';
+
+export const USERNAME_INPUT = '#inputUsername';
+export const PASSWORD_INPUT = '#inputPassword';
diff --git a/src/utils/components/PolicyForm/PolicyWizard/steps/ReviewStep/ReviewStep.tsx b/src/utils/components/PolicyForm/PolicyWizard/steps/ReviewStep/ReviewStep.tsx
index afcbc5a0..54a95879 100644
--- a/src/utils/components/PolicyForm/PolicyWizard/steps/ReviewStep/ReviewStep.tsx
+++ b/src/utils/components/PolicyForm/PolicyWizard/steps/ReviewStep/ReviewStep.tsx
@@ -103,6 +103,7 @@ const ReviewStep: FC = ({ policy, creationError, setPolicy }) =
= ({ policy, creationError, setPolicy }) =