bigbluebutton-Github/bigbluebutton-tests/playwright/user/timer.js
Anton B 86eab96232 test: update timer test
- steps flow enhanced;
- text assertions checked simultaneously with promise.all;
2024-09-13 16:25:22 -03:00

113 lines
4.8 KiB
JavaScript

const { MultiUsers } = require('./multiusers');
const { timeInSeconds } = require('./util');
const { expect } = require('@playwright/test');
const { sleep } = require('../core/helpers');
const e = require('../core/elements');
class Timer extends MultiUsers {
constructor(browser, context) {
super(browser, context);
}
async stopwatchTest() {
await this.openTimerAndStopwatch();
const timerCurrentLocator = this.modPage.getLocator(e.timerCurrent);
const timerIndicatorLocator = this.modPage.getLocator(e.timerIndicator);
// compare initial values of the stopwatch elements after 2 seconds running
const initialValueStopWatch = await timeInSeconds(timerCurrentLocator);
const initialValueStopWatchIndicator = await timeInSeconds(timerIndicatorLocator);
await this.modPage.hasText(e.timerCurrent, /00:00/);
await this.clickOnTimerControl();
await sleep(5000);
await expect(await timeInSeconds(timerCurrentLocator)).toBeGreaterThan(initialValueStopWatch);
await expect(await timeInSeconds(timerIndicatorLocator)).toBeGreaterThan(initialValueStopWatchIndicator);
// stop the stopwatch and check if the values are the same after 2 seconds
await this.clickOnTimerControl(false);
const stopWatchValueStopped = await timeInSeconds(timerCurrentLocator);
const stopWatchIndicatorValueStopped = await timeInSeconds(timerIndicatorLocator);
await sleep(2000);
await expect(await timeInSeconds(timerCurrentLocator)).toBe(stopWatchValueStopped);
await expect(await timeInSeconds(timerCurrentLocator)).toBe(stopWatchIndicatorValueStopped);
// reset a stopped stopwatch
await this.modPage.waitAndClick(e.resetTimerStopwatch);
await this.modPage.hasText(e.timerCurrent, /00:00/);
await this.modPage.hasText(e.timerIndicator, /00:00/);
// reset a running stopwatch and check if the values are reset
await this.clickOnTimerControl();
await this.modPage.hasText(e.timerCurrent, /00:02/);
await this.modPage.waitAndClick(e.resetTimerStopwatch);
await expect(this.modPage.getLocator(e.startStopTimer)).toHaveAttribute('color', 'danger');
await this.modPage.hasText(e.timerCurrent, /00:00/);
await this.modPage.hasText(e.timerIndicator, /00:00/);
}
async timerTest() {
await this.openTimerAndStopwatch();
await this.modPage.waitAndClick(e.timerButton);
await this.modPage.hasElement(e.timerCurrent);
const timerCurrentLocator = this.modPage.getLocator(e.timerCurrent);
const timerIndicatorLocator = this.modPage.getLocator(e.timerIndicator);
// check for initial values
await this.modPage.hasText(e.timerCurrent, /05:00/);
await this.modPage.hasValue(e.minutesInput, '05');
await this.modPage.hasValue(e.secondsInput, '00');
// start timer and check the current values
await this.clickOnTimerControl();
await Promise.all([
this.modPage.hasText(e.timerCurrent, /04:57/),
this.modPage.hasText(e.timerIndicator, /04:57/),
]);
// change input value and check if the timer is updated
await this.clickOnTimerControl(false);
await this.modPage.type(e.secondsInput, '5');
await this.clickOnTimerControl();
await Promise.all([
this.modPage.hasText(e.timerCurrent, /05:02/),
this.modPage.hasText(e.timerIndicator, /05:02/),
]);
// reset timer and check if the values are set to the previous values
await this.clickOnTimerControl(false);
await this.modPage.waitAndClick(e.resetTimerStopwatch);
await Promise.all([
this.modPage.hasText(e.timerCurrent, /05:05/),
this.modPage.hasText(e.timerIndicator, /05:05/),
]);
// check if the timer stops when clicking on the timer indicator
await this.clickOnTimerControl();
const timerValueAfterStartingTimer = await timeInSeconds(timerCurrentLocator);
const timerIndicatorValueAfterStartingTimer = await timeInSeconds(timerIndicatorLocator);
await this.modPage.waitAndClick(e.timerIndicator);
await sleep(2000);
await expect(timerValueAfterStartingTimer).toBe(await timeInSeconds(timerCurrentLocator));
await expect(timerIndicatorValueAfterStartingTimer).toBe(await timeInSeconds(timerIndicatorLocator));
}
async openTimerAndStopwatch() {
await this.modPage.waitForSelector(e.whiteboard);
await this.modPage.waitAndClick(e.actions);
await this.modPage.waitAndClick(e.timerStopwatchFeature);
await this.modPage.hasElement(e.timerCurrent);
}
async clickOnTimerControl(isStarting = true) {
await this.modPage.waitAndClick(e.startStopTimer);
const expectedColor = isStarting ? 'danger' : 'primary';
await expect(
this.modPage.getLocator(e.startStopTimer),
`should switch the button color after ${isStarting ? 'starting' : 'stopping'} the timer`
).toHaveAttribute('color', expectedColor);
}
}
exports.Timer = Timer;