62 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
import {
 | 
						|
  type Locator,
 | 
						|
  type Page,
 | 
						|
  test as base,
 | 
						|
  expect,
 | 
						|
} from "@playwright/test";
 | 
						|
import { AuthPage } from "./auth";
 | 
						|
 | 
						|
type SettingsType = "profile" | "shares" | "global" | "users";
 | 
						|
 | 
						|
export class SettingsPage {
 | 
						|
  public readonly hideDotfiles: Locator; // checkbox
 | 
						|
  public readonly singleClick: Locator; // checkbox
 | 
						|
  public readonly dateFormat: Locator; // checkbox
 | 
						|
  private readonly languages: Locator; // selection
 | 
						|
  private readonly submitProfile: Locator; // submit
 | 
						|
  private readonly submitPassword: Locator; // submit
 | 
						|
 | 
						|
  constructor(public readonly page: Page) {
 | 
						|
    this.hideDotfiles = this.page.locator('input[name="hideDotfiles"]');
 | 
						|
    this.singleClick = this.page.locator('input[name="singleClick"]');
 | 
						|
    this.dateFormat = this.page.locator('input[name="dateFormat"]');
 | 
						|
    this.languages = this.page.locator('select[name="selectLanguage"]');
 | 
						|
    this.submitProfile = this.page.locator('input[name="submitProfile"]');
 | 
						|
    this.submitPassword = this.page.locator('input[name="submitPassword"]');
 | 
						|
  }
 | 
						|
 | 
						|
  async goto(type: SettingsType = "profile") {
 | 
						|
    await this.page.goto(`/settings/${type}`);
 | 
						|
  }
 | 
						|
 | 
						|
  async setLanguage(locale: string = "en") {
 | 
						|
    await this.languages.selectOption(locale);
 | 
						|
  }
 | 
						|
 | 
						|
  async saveProfile() {
 | 
						|
    await this.submitProfile.click();
 | 
						|
  }
 | 
						|
 | 
						|
  async savePassword() {
 | 
						|
    await this.submitPassword.click();
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
const test = base.extend<{ settingsPage: SettingsPage }>({
 | 
						|
  page: async ({ page }, use) => {
 | 
						|
    // Sign in with our account.
 | 
						|
    const authPage = new AuthPage(page);
 | 
						|
    await authPage.goto();
 | 
						|
    await authPage.loginAs();
 | 
						|
    await expect(page).toHaveTitle(/.*Files - File Browser$/);
 | 
						|
    // Use signed-in page in the test.
 | 
						|
    await use(page);
 | 
						|
  },
 | 
						|
  settingsPage: async ({ page }, use) => {
 | 
						|
    const settingsPage = new SettingsPage(page);
 | 
						|
    await use(settingsPage);
 | 
						|
  },
 | 
						|
});
 | 
						|
 | 
						|
export { test, expect };
 |