Files
object-browser/web-app/e2e/pom/CreateBucketPage.tsx
2023-12-29 11:44:01 -06:00

115 lines
3.0 KiB
TypeScript

import { Page, Locator } from "@playwright/test";
import { BUCKET_LIST_PAGE } from "../consts";
export class CreateBucketPage {
page: Page;
/* Locators */
submitBtn: Locator | undefined;
clearBtn: Locator | undefined;
bucketNameInput: Locator | undefined;
versioningToggle: Locator | undefined;
lockingToggle: Locator | undefined;
quotaToggle: Locator | undefined;
bucketNamingRules: Locator | undefined;
bucketRetentionToggle: Locator | undefined;
quotaSizeInput: Locator | undefined;
retentionModeRadio: Locator | undefined;
retentionValidity: Locator | undefined;
constructor(page: Page) {
this.page = page;
this.initLocators();
}
getLocator(selector: string): Locator {
const page = this.page;
const locator: Locator = page.locator(`${selector}`);
return locator;
}
initLocators() {
this.submitBtn = this.getLocator("#create-bucket");
this.clearBtn = this.getLocator("#clear");
this.versioningToggle = this.getLocator("#versioned-switch");
this.lockingToggle = this.getLocator("#locking-switch");
this.quotaToggle = this.getLocator("#bucket_quota-switch");
this.bucketNamingRules = this.getLocator("#toggle-naming-rules");
this.bucketNameInput = this.getLocator("#bucket-name");
}
//Lazy/Conditional selectors Note: These respective methods must be called before using them.
onVersioningToggleOn() {
this.bucketRetentionToggle = this.getLocator("#bucket_retention");
}
onBucketQuotaToggleOn() {
this.quotaSizeInput = this.getLocator("#quota_size");
}
onRetentionToggleOn() {
this.retentionModeRadio = this.getLocator("#retention_mode");
this.retentionValidity = this.getLocator("#retention_validity");
}
loadPage() {
const page = this.page;
page.goto(BUCKET_LIST_PAGE);
}
async fillBucketName(bucketName: string) {
await this.bucketNameInput?.click();
await this.bucketNameInput?.fill(bucketName);
}
async toggleBucketNamingRules() {
await this.bucketNamingRules?.click();
}
async toggleVersioning() {
await this.versioningToggle?.check();
this.onVersioningToggleOn();
//expect to be on
}
async toggleObjectLocking() {
await this.lockingToggle?.click();
this.onVersioningToggleOn();
this.onRetentionToggleOn();
}
async toggleBucketQuota() {
await this.quotaToggle?.click();
this.onBucketQuotaToggleOn();
}
async toggleRetention() {
await this.bucketRetentionToggle?.click();
}
async submitForm() {
await this.submitBtn?.click();
}
//Convenience Methods for easy testing
//create a bucket without any features like versioning, locking, quota etc.
async createBucket(bucketName: string) {
await this.fillBucketName(bucketName);
await this.submitForm();
}
//create a bucket with versioning feature
async createVersionedBucket(bucketName: string) {
await this.fillBucketName(bucketName);
await this.toggleVersioning();
await this.submitForm();
}
//create a bucket with locking feature
async goToCreateBucket() {
await this.submitBtn?.click();
}
}