debian-image-builder-frontend/playwright/Customizations/Firewall.spec.ts
Tom Koscielniak b499dfcf93 playwright: Add single login for all tests
Add a single login for all tests in the form of a global setup. This commit also removes the login from all tests and replaces it with navigation to landing page and revamps the popup closing logic from being applied in logging step  into a separate fixture.
2025-06-19 14:26:03 +00:00

142 lines
5.7 KiB
TypeScript

import { expect } from '@playwright/test';
import { v4 as uuidv4 } from 'uuid';
import { test } from '../fixtures/customizations';
import { isHosted } from '../helpers/helpers';
import {
navigateToOptionalSteps,
ibFrame,
navigateToLandingPage,
} from '../helpers/navHelpers';
import {
registerLater,
fillInDetails,
createBlueprint,
fillInImageOutputGuest,
deleteBlueprint,
exportBlueprint,
importBlueprint,
} from '../helpers/wizardHelpers';
test('Create a blueprint with Firewall customization', async ({
page,
cleanup,
}) => {
const blueprintName = 'test-' + uuidv4();
// Delete the blueprint after the run fixture
await cleanup.add(() => deleteBlueprint(page, blueprintName));
// Navigate to IB landing page and get the frame
await navigateToLandingPage(page);
const frame = await ibFrame(page);
await test.step('Navigate to optional steps in Wizard', async () => {
await navigateToOptionalSteps(frame);
await registerLater(frame);
});
await test.step('Select and correctly fill the ports in Firewall step', async () => {
await frame.getByRole('button', { name: 'Firewall' }).click();
await frame.getByPlaceholder('Add ports').fill('80:tcp');
await frame.getByRole('button', { name: 'Add ports' }).click();
await expect(frame.getByText('80:tcp')).toBeVisible();
});
await test.step('Select and correctly fill the disabled services in Firewall step', async () => {
await frame
.getByPlaceholder('Add disabled service')
.fill('disabled_service');
await frame.getByRole('button', { name: 'Add disabled service' }).click();
await expect(frame.getByText('disabled_service')).toBeVisible();
});
await test.step('Select and correctly fill the enabled services in Firewall step', async () => {
await frame.getByPlaceholder('Add enabled service').fill('enabled_service');
await frame.getByRole('button', { name: 'Add enabled service' }).click();
await expect(frame.getByText('enabled_service')).toBeVisible();
});
await test.step('Select and incorrectly fill the ports in Firewall step', async () => {
await frame.getByPlaceholder('Add ports').fill('x');
await frame.getByRole('button', { name: 'Add ports' }).click();
await expect(frame.getByText('Invalid format.').nth(0)).toBeVisible();
});
await test.step('Select and incorrectly fill the disabled services in Firewall step', async () => {
await frame.getByPlaceholder('Add disabled service').fill('1');
await frame.getByRole('button', { name: 'Add disabled service' }).click();
await expect(frame.getByText('Invalid format.').nth(1)).toBeVisible();
});
await test.step('Select and incorrectly fill the enabled services in Firewall step', async () => {
await frame.getByPlaceholder('Add enabled service').fill('ťčš');
await frame.getByRole('button', { name: 'Add enabled service' }).click();
await expect(frame.getByText('Invalid format.').nth(2)).toBeVisible();
});
await test.step('Fill the BP details', async () => {
await frame.getByRole('button', { name: 'Review and finish' }).click();
await fillInDetails(frame, blueprintName);
});
await test.step('Create BP', async () => {
await createBlueprint(frame, blueprintName);
});
await test.step('Edit BP', async () => {
await frame.getByRole('button', { name: 'Edit blueprint' }).click();
await frame.getByLabel('Revisit Firewall step').click();
await frame.getByPlaceholder('Add ports').fill('90:tcp');
await frame.getByRole('button', { name: 'Add ports' }).click();
await frame.getByPlaceholder('Add disabled service').fill('x');
await frame.getByRole('button', { name: 'Add disabled service' }).click();
await frame.getByPlaceholder('Add enabled service').fill('y');
await frame.getByRole('button', { name: 'Add enabled service' }).click();
await frame.getByRole('button', { name: 'Close 80:tcp' }).click();
await frame.getByRole('button', { name: 'Close enabled_service' }).click();
await frame.getByRole('button', { name: 'Close disabled_service' }).click();
await expect(frame.getByText('90:tcp')).toBeVisible();
await expect(frame.getByText('x').nth(0)).toBeVisible();
await expect(frame.getByText('y').nth(0)).toBeVisible();
await expect(frame.getByText('80:tcp')).toBeHidden();
await expect(frame.getByText('disabled_service')).toBeHidden();
await expect(frame.getByText('enabled_service')).toBeHidden();
await frame.getByRole('button', { name: 'Review and finish' }).click();
await frame
.getByRole('button', { name: 'Save changes to blueprint' })
.click();
});
// This is for hosted service only as these features are not available in cockpit plugin
await test.step('Export BP', async (step) => {
step.skip(!isHosted(), 'Exporting is not available in the plugin');
await exportBlueprint(page, blueprintName);
});
await test.step('Import BP', async (step) => {
step.skip(!isHosted(), 'Importing is not available in the plugin');
await importBlueprint(page, blueprintName);
});
await test.step('Review imported BP', async (step) => {
step.skip(!isHosted(), 'Importing is not available in the plugin');
await fillInImageOutputGuest(page);
await page.getByRole('button', { name: 'Firewall' }).click();
await expect(frame.getByText('90:tcp')).toBeVisible();
await expect(frame.getByText('x').nth(0)).toBeVisible();
await expect(frame.getByText('y').nth(0)).toBeVisible();
await expect(frame.getByText('80:tcp')).toBeHidden();
await expect(frame.getByText('disabled_service')).toBeHidden();
await expect(frame.getByText('enabled_service')).toBeHidden();
await page.getByRole('button', { name: 'Cancel' }).click();
});
});