Skip to content

Commit

Permalink
Replace repeating code for user and root password in playwright tests
Browse files Browse the repository at this point in the history
  • Loading branch information
manfredi committed Sep 15, 2023
1 parent 8f564fe commit 772ddc4
Show file tree
Hide file tree
Showing 10 changed files with 99 additions and 124 deletions.
57 changes: 57 additions & 0 deletions actors/user-actor.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import { type Page } from '@playwright/test';
import { ConfigureRootPasswordPage } from '../pages/configure-root-password-page';
import { DefineUserPage } from '../pages/define-user-page';
import { UsersPage } from '../pages/users-page';

interface User {
fullname: string,
username: string,
password: string
}

export class UserActor {
readonly page: Page;
readonly usersPage: UsersPage;
readonly defineUserPage: DefineUserPage;
readonly configureRootPasswordPage: ConfigureRootPasswordPage;

static readonly user: User = {
fullname: 'Bernhard M. Wiedemann',
username: 'bernhard',
password: 'nots3cr3t'
};

constructor(page: Page) {
this.page = page;
this.usersPage = new UsersPage(page);
this.defineUserPage = new DefineUserPage(page);
this.configureRootPasswordPage = new ConfigureRootPasswordPage(page);
}

async handleUser() {
await this.defineUser(UserActor.user);
await this.setRootPassword(UserActor.user.password);
await this.back();
}

async defineUser(user: User) {
await this.usersPage.expectNoUserDefined();
await this.usersPage.defineUser();
await this.defineUserPage.fillUserFullName(user.fullname);
await this.defineUserPage.fillUserName(user.username);
await this.defineUserPage.fillAndConfirmPassword(user.password);
await this.defineUserPage.confirm();
}

async setRootPassword(password: string) {
await this.usersPage.expectRootPasswordNotSet();
await this.usersPage.configureRootPassword();
await this.configureRootPasswordPage.fillAndConfirmPassword(password);
await this.configureRootPasswordPage.confirm();
}

async back() {
await this.usersPage.back();
}

}
2 changes: 2 additions & 0 deletions pages/configure-root-password-page.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { type Locator, type Page } from '@playwright/test';

export class ConfigureRootPasswordPage {
readonly page: Page;
readonly password: Locator;
Expand Down
15 changes: 8 additions & 7 deletions pages/define-user-page.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
import { type Locator, type Page } from '@playwright/test';

export class DefineUserPage {
readonly page: Page;
readonly userFullName: Locator;
readonly confirmButton: Locator;
readonly confirmPassword: Locator;
readonly password: Locator;
readonly userFullName: Locator;
readonly userName: Locator;
readonly confirmPassword: Locator;
readonly confirmButton: Locator;

constructor(page: Page) {
this.page = page;
this.userFullName = page.getByLabel('User full name');
this.userName = page.getByLabel('Username');
this.password = page.getByLabel('User password', { exact: true });
this.confirmPassword = page.getByLabel('Password confirmation');
this.confirmButton = page.getByRole('button', { name: 'Confirm' });
this.confirmPassword = page.locator('#passwordConfirmation')
this.password = page.locator('#password')
this.userFullName = page.locator('#userFullName');
this.userName = page.locator('#userName');
}

async fillUserFullName(fullname: string) {
Expand Down
3 changes: 2 additions & 1 deletion pages/users-page.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import { test, expect } from '@playwright/test';
import { expect, type Locator, type Page } from '@playwright/test';

export class UsersPage {
readonly page: Page;
readonly configureRootPasswordButton: Locator;
readonly defineUserButton: Locator;
readonly setRootPasswordDots: Locator;
readonly setRootPasswordMenuItem: Locator;
Expand Down
23 changes: 5 additions & 18 deletions tests/add-home-file-system.spec.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
import { test, expect } from '@playwright/test';
import { AddFileSystemPage } from '../pages/add-file-system-page';
import { IndexActor } from "../actors/index-actor";
import { UserActor } from "../actors/user-actor";
import { MainPage } from '../pages/main-page';
import { ProductSelectionOpensusePage } from '../pages/product-selection-opensuse-page';
import { StoragePage } from '../pages/storage-page';
import { UsersPage } from '../pages/users-page';
import { DefineUserPage } from '../pages/define-user-page';
import { ConfigureRootPasswordPage } from '../pages/configure-root-password-page';

const minute = 60 * 1000;
test.describe('The main page', () => {
Expand All @@ -29,22 +27,11 @@ test.describe('The main page', () => {
await addFileSystemPage.accept();
await storagePage.back();

});

await test.step("set mandatory user and root password", async () => {
await mainPage.accessUsers();

const usersPage = new UsersPage(page);
await usersPage.expectNoUserDefined();
await usersPage.defineUser();
const defineUserPage = new DefineUserPage(page);
await defineUserPage.fillUserFullName('Bernhard M. Wiedemann');
await defineUserPage.fillUserName('bernhard');
await defineUserPage.fillAndConfirmPassword('nots3cr3t');
await defineUserPage.confirm();
await usersPage.expectRootPasswordNotSet();
await usersPage.configureRootPassword();
const configureRootPasswordPage = new ConfigureRootPasswordPage(page);
await configureRootPasswordPage.fillAndConfirmPassword('nots3cr3t');
await configureRootPasswordPage.confirm();
await usersPage.back();
await (new UserActor(page)).handleUser();
});

await test.step("Run installation", async () => {
Expand Down
21 changes: 2 additions & 19 deletions tests/default_installation.spec.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
import { test, expect } from '@playwright/test';
import { IndexActor } from "../actors/index-actor";
import { UserActor } from "../actors/user-actor";
import { MainPage } from '../pages/main-page';
import { ProductSelectionOpensusePage } from '../pages/product-selection-opensuse-page';
import { UsersPage } from '../pages/users-page';
import { DefineUserPage } from '../pages/define-user-page';
import { ConfigureRootPasswordPage } from '../pages/configure-root-password-page';

const minute = 60 * 1000;
test.describe('The main page', () => {
Expand All @@ -19,23 +17,8 @@ test.describe('The main page', () => {
test('Default installation test', async ({ page }) => {
const mainPage = new MainPage(page);
await test.step("set mandatory user and root password", async () => {

await mainPage.accessUsers();

const usersPage = new UsersPage(page);
await usersPage.expectNoUserDefined();
await usersPage.defineUser();
const defineUserPage = new DefineUserPage(page);
await defineUserPage.fillUserFullName('Bernhard M. Wiedemann');
await defineUserPage.fillUserName('bernhard');
await defineUserPage.fillAndConfirmPassword('nots3cr3t');
await defineUserPage.confirm();
await usersPage.expectRootPasswordNotSet();
await usersPage.configureRootPassword();
const configureRootPasswordPage = new ConfigureRootPasswordPage(page);
await configureRootPasswordPage.fillAndConfirmPassword('nots3cr3t');
await configureRootPasswordPage.confirm();
await usersPage.back();
await (new UserActor(page)).handleUser();
});

//Installation
Expand Down
27 changes: 7 additions & 20 deletions tests/encrypted_lvm.spec.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
import { test, expect } from '@playwright/test';
import { IndexActor } from "../actors/index-actor";
import { UserActor } from "../actors/user-actor";
import { StoragePage } from '../pages/storage-page';
import { MainPage } from '../pages/main-page';
import { ProductSelectionOpensusePage } from '../pages/product-selection-opensuse-page';
import { EncryptionPasswordPopup } from '../pages/encryption-password-popup';
import { UsersPage } from '../pages/users-page';
import { DefineUserPage } from '../pages/define-user-page';
import { ConfigureRootPasswordPage } from '../pages/configure-root-password-page';

const minute = 60 * 1000;
test.describe('The main page', () => {
Expand All @@ -27,30 +25,19 @@ test.describe('The main page', () => {
await storagePage.useEncryption();

const passwordPopup = new EncryptionPasswordPopup(page);
await passwordPopup.fillPassword('nots3cr3t');
await passwordPopup.fillPasswordConfirmation('nots3cr3t');
await passwordPopup.fillPassword(UserActor.user.password);
await passwordPopup.fillPasswordConfirmation(UserActor.user.password);
await passwordPopup.accept();

await storagePage.validateEncryptionIsUsed();
await storagePage.useLVM();
await storagePage.back();

await mainPage.accessUsers();
});

const usersPage = new UsersPage(page);
await usersPage.expectNoUserDefined();
await usersPage.defineUser();
const defineUserPage = new DefineUserPage(page);
await defineUserPage.fillUserFullName('Bernhard M. Wiedemann');
await defineUserPage.fillUserName('bernhard');
await defineUserPage.fillAndConfirmPassword('nots3cr3t');
await defineUserPage.confirm();
await usersPage.expectRootPasswordNotSet();
await usersPage.configureRootPassword();
const configureRootPasswordPage = new ConfigureRootPasswordPage(page);
await configureRootPasswordPage.fillAndConfirmPassword('nots3cr3t');
await configureRootPasswordPage.confirm();
await usersPage.back();
await test.step("set mandatory user and root password", async () => {
await mainPage.accessUsers();
await (new UserActor(page)).handleUser();
});

//Installation
Expand Down
27 changes: 7 additions & 20 deletions tests/full-disk-encryption.spec.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
import { test, expect } from '@playwright/test';
import { IndexActor } from "../actors/index-actor";
import { UserActor } from "../actors/user-actor";
import { StoragePage } from '../pages/storage-page';
import { MainPage } from '../pages/main-page';
import { ProductSelectionOpensusePage } from '../pages/product-selection-opensuse-page';
import { EncryptionPasswordPopup } from '../pages/encryption-password-popup';
import { UsersPage } from '../pages/users-page';
import { DefineUserPage } from '../pages/define-user-page';
import { ConfigureRootPasswordPage } from '../pages/configure-root-password-page';

const minute = 60 * 1000;
test.describe('The main page', () => {
Expand All @@ -27,29 +25,18 @@ test.describe('The main page', () => {
await storagePage.useEncryption();

const passwordPopup = new EncryptionPasswordPopup(page);
await passwordPopup.fillPassword('nots3cr3t');
await passwordPopup.fillPasswordConfirmation('nots3cr3t');
await passwordPopup.fillPassword(UserActor.user.password);
await passwordPopup.fillPasswordConfirmation(UserActor.user.password);
await passwordPopup.accept();

await storagePage.validateEncryptionIsUsed();
await storagePage.back();

await mainPage.accessUsers();
});

const usersPage = new UsersPage(page);
await usersPage.expectNoUserDefined();
await usersPage.defineUser();
const defineUserPage = new DefineUserPage(page);
await defineUserPage.fillUserFullName('Bernhard M. Wiedemann');
await defineUserPage.fillUserName('bernhard');
await defineUserPage.fillAndConfirmPassword('nots3cr3t');
await defineUserPage.confirm();
await usersPage.expectRootPasswordNotSet();
await usersPage.configureRootPassword();
const configureRootPasswordPage = new ConfigureRootPasswordPage(page);
await configureRootPasswordPage.fillAndConfirmPassword('nots3cr3t');
await configureRootPasswordPage.confirm();
await usersPage.back();
await test.step("set mandatory user and root password", async () => {
await mainPage.accessUsers();
await (new UserActor(page)).handleUser();
});

//Installation
Expand Down
23 changes: 5 additions & 18 deletions tests/lvm.spec.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
import { test, expect } from '@playwright/test';
import { IndexActor } from "../actors/index-actor";
import { UserActor } from "../actors/user-actor";
import { ProductSelectionOpensusePage } from '../pages/product-selection-opensuse-page';
import { MainPage } from '../pages/main-page';
import { StoragePage } from '../pages/storage-page';
import { UsersPage } from '../pages/users-page';
import { DefineUserPage } from '../pages/define-user-page';
import { ConfigureRootPasswordPage } from '../pages/configure-root-password-page';

const minute = 60 * 1000;
test.describe('The main page', () => {
Expand All @@ -26,22 +24,11 @@ test.describe('The main page', () => {
await storagePage.useLVM();
await storagePage.back();

await mainPage.accessUsers();
});

const usersPage = new UsersPage(page);
await usersPage.expectNoUserDefined();
await usersPage.defineUser();
const defineUserPage = new DefineUserPage(page);
await defineUserPage.fillUserFullName('Bernhard M. Wiedemann');
await defineUserPage.fillUserName('bernhard');
await defineUserPage.fillAndConfirmPassword('nots3cr3t');
await defineUserPage.confirm();
await usersPage.expectRootPasswordNotSet();
await usersPage.configureRootPassword();
const configureRootPasswordPage = new ConfigureRootPasswordPage(page);
await configureRootPasswordPage.fillAndConfirmPassword('nots3cr3t');
await configureRootPasswordPage.confirm();
await usersPage.back();
await test.step("set mandatory user and root password", async () => {
await mainPage.accessUsers();
await (new UserActor(page)).handleUser();
});

await test.step("Run installation", async () => {
Expand Down
25 changes: 4 additions & 21 deletions tests/select-install-device.spec.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
import { test, expect } from '@playwright/test';
import { IndexActor } from "../actors/index-actor";
import { UserActor } from "../actors/user-actor";
import { StoragePage } from '../pages/storage-page';
import { MainPage } from '../pages/main-page';
import { ProductSelectionOpensusePage } from '../pages/product-selection-opensuse-page';
import { UsersPage } from '../pages/users-page';
import { DefineUserPage } from '../pages/define-user-page';
import { ConfigureRootPasswordPage } from '../pages/configure-root-password-page';
import { InstallationDevicePage } from '../pages/install-device-page';

const minute = 60 * 1000;
Expand All @@ -31,25 +29,10 @@ test.describe('The main page', () => {
await storagePage.back();
});

await test.step("Define user and set root password", async () => {
const usersPage = new UsersPage(page);
const defineUserPage = new DefineUserPage(page);
const configureRootPasswordPage = new ConfigureRootPasswordPage(page);

await test.step("set mandatory user and root password", async () => {
await mainPage.accessUsers();
await usersPage.expectNoUserDefined();
await usersPage.defineUser();
await defineUserPage.fillUserFullName('Bernhard M. Wiedemann');
await defineUserPage.fillUserName('bernhard');
await defineUserPage.fillAndConfirmPassword('nots3cr3t');
await defineUserPage.confirm();
await usersPage.expectRootPasswordNotSet();

await usersPage.configureRootPassword();
await configureRootPasswordPage.fillAndConfirmPassword('nots3cr3t');
await configureRootPasswordPage.confirm();
await usersPage.back();
})
await (new UserActor(page)).handleUser();
});

//Installation
await test.step("Run installation", async () => {
Expand Down

0 comments on commit 772ddc4

Please sign in to comment.