187 lines
8.0 KiB
JavaScript
187 lines
8.0 KiB
JavaScript
const Page = require('../core/page');
|
|
const e = require('../core/elements');
|
|
const util = require('./util');
|
|
const { ELEMENT_WAIT_LONGER_TIME } = require('../core/constants');
|
|
const { checkElement, checkElementText } = require('../core/util');
|
|
|
|
class Presentation {
|
|
constructor() {
|
|
this.modPage = new Page();
|
|
this.userPage = new Page();
|
|
}
|
|
|
|
async initPages(testName, extraFlags) {
|
|
await this.initModPage(testName, extraFlags);
|
|
await this.initUserPage(testName, extraFlags);
|
|
}
|
|
|
|
async initModPage(testName, extraFlags) {
|
|
await this.modPage.init(true, true, testName, 'Mod', undefined, undefined, undefined, undefined, extraFlags);
|
|
}
|
|
|
|
async initUserPage(testName, extraFlags) {
|
|
await this.userPage.init(false, true, testName, 'Attendee', this.modPage.meetingId, undefined, undefined, undefined, extraFlags);
|
|
}
|
|
|
|
async skipSlide() {
|
|
try {
|
|
await this.modPage.waitForSelector(e.whiteboard, ELEMENT_WAIT_LONGER_TIME);
|
|
await this.modPage.waitForSelector(e.presentationToolbarWrapper);
|
|
|
|
const svg0 = await this.modPage.page.evaluate(util.checkSvgIndex, '/svg/1');
|
|
|
|
await this.modPage.waitAndClick(e.nextSlide);
|
|
await this.modPage.waitForSelector(e.whiteboard);
|
|
await this.modPage.page.waitForTimeout(1000);
|
|
|
|
const svg1 = await this.modPage.page.evaluate(util.checkSvgIndex, '/svg/2');
|
|
|
|
await this.modPage.waitAndClick(e.prevSlide);
|
|
await this.modPage.waitForSelector(e.whiteboard);
|
|
await this.modPage.page.waitForTimeout(1000);
|
|
|
|
const svg2 = await this.modPage.page.evaluate(util.checkSvgIndex, '/svg/1');
|
|
|
|
return svg0 === true && svg1 === true && svg2 === true;
|
|
} catch (err) {
|
|
await this.modPage.logger(err);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
async uploadPresentation(testName) {
|
|
try {
|
|
await this.modPage.waitForSelector(e.whiteboard, ELEMENT_WAIT_LONGER_TIME);
|
|
await this.modPage.waitForSelector(e.skipSlide);
|
|
|
|
const slides0 = await this.modPage.page.evaluate(util.getSvgOuterHtml);
|
|
|
|
await util.uploadPresentation(this.modPage, e.uploadPresentationFileName);
|
|
await this.modPage.screenshot(testName, 'after-presentation-upload');
|
|
|
|
const slides1 = await this.modPage.page.evaluate(async () => await document.querySelector('svg g g g').outerHTML);
|
|
|
|
await this.modPage.logger('Slides before presentation upload');
|
|
await this.modPage.logger(slides0);
|
|
await this.modPage.logger('Slides after presentation upload');
|
|
await this.modPage.logger(slides1);
|
|
|
|
return slides0 !== slides1;
|
|
} catch (err) {
|
|
await this.modPage.logger(err);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
async allowAndDisallowDownload(testName) {
|
|
try {
|
|
// allow the presentation download
|
|
await this.modPage.waitForSelector(e.whiteboard, ELEMENT_WAIT_LONGER_TIME);
|
|
await this.modPage.waitAndClick(e.actions);
|
|
await this.modPage.waitAndClick(e.uploadPresentation);
|
|
await this.modPage.screenshot(testName, `1-modPage-before-allow-download-[${this.modPage.meetingId}]`);
|
|
await this.modPage.waitAndClick(e.allowPresentationDownload);
|
|
await this.userPage.screenshot(testName, `2-userPage-after-allow-download-without-save-[${this.modPage.meetingId}]`);
|
|
await this.userPage.waitForElementHandleToBeRemoved(e.smallToastMsg);
|
|
await this.modPage.waitAndClick(e.confirmManagePresentation);
|
|
await this.userPage.screenshot(testName, `3-userPage-after-allow-download-and-save-[${this.modPage.meetingId}]`);
|
|
await this.userPage.waitForSelector(e.toastDownload);
|
|
// check download button in presentation after ALLOW it - should be true
|
|
const hasPresentationDownloadBtnAfterAllow = await this.userPage.hasElement(e.presentationDownloadBtn);
|
|
|
|
// disallow the presentation download
|
|
await this.modPage.waitAndClick(e.actions);
|
|
await this.modPage.waitAndClick(e.uploadPresentation);
|
|
await this.modPage.screenshot(testName, `4-modPage-before-disallow-download-[${this.modPage.meetingId}]`);
|
|
await this.modPage.waitAndClick(e.disallowPresentationDownload);
|
|
await this.modPage.waitAndClick(e.confirmManagePresentation);
|
|
await this.modPage.screenshot(testName, `5-userPage-after-disallow-download-[${this.modPage.meetingId}]`);
|
|
await this.userPage.waitForElementHandleToBeRemoved(e.toastDownload);
|
|
// check download button in presentation after DISALLOW it - should be false
|
|
const hasPresentationDownloadBtnAfterDisallow = await this.userPage.page.evaluate(checkElement, e.presentationDownloadBtn);
|
|
|
|
return hasPresentationDownloadBtnAfterAllow && !hasPresentationDownloadBtnAfterDisallow;
|
|
} catch (err) {
|
|
await this.modPage.logger(err);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
async removeAllPresentation(testName) {
|
|
try {
|
|
await this.modPage.waitForSelector(e.whiteboard, ELEMENT_WAIT_LONGER_TIME);
|
|
await this.modPage.waitAndClick(e.actions);
|
|
await this.modPage.waitAndClick(e.uploadPresentation);
|
|
await this.modPage.screenshot(testName, '1-modPage-before-remove-presentation');
|
|
await this.modPage.waitAndClick(e.removePresentation);
|
|
await this.modPage.waitAndClick(e.confirmManagePresentation);
|
|
|
|
await this.modPage.waitForSelector(e.presentationPlaceholder);
|
|
await this.modPage.screenshot(testName, '2-modPage-after-remove-presentation');
|
|
const modPagePlaceholder = await this.modPage.page.evaluate(checkElementText, e.presentationPlaceholder, e.presentationPlaceholderLabel);
|
|
await this.userPage.waitForSelector(e.presentationPlaceholder);
|
|
await this.userPage.screenshot(testName, '3-userPage-after-remove-presentation');
|
|
const userPagePlaceholder = await this.userPage.page.evaluate(checkElementText, e.presentationPlaceholder, e.presentationPlaceholderLabel);
|
|
|
|
return modPagePlaceholder && userPagePlaceholder;
|
|
} catch (err) {
|
|
await this.modPage.logger(err);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
async hideAndRestorePresentation(testName) {
|
|
try {
|
|
await this.modPage.waitForSelector(e.whiteboard);
|
|
await this.modPage.screenshot(testName, '01-after-close-audio-modal');
|
|
await this.modPage.waitAndClick(e.minimizePresentation);
|
|
const presentationWasRemoved = await this.modPage.wasRemoved(e.presentationContainer);
|
|
await this.modPage.screenshot(testName, '02-minimize-presentation');
|
|
|
|
await this.modPage.waitAndClick(e.restorePresentation);
|
|
const presentationWasRestored = await this.modPage.hasElement(e.presentationContainer);
|
|
await this.modPage.screenshot(testName, '03-restore-presentation');
|
|
|
|
return presentationWasRemoved && presentationWasRestored;
|
|
} catch (err) {
|
|
await this.modPage.logger(err);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
async startExternalVideo(testName) {
|
|
try {
|
|
await this.modPage.waitForSelector(e.whiteboard);
|
|
await this.modPage.screenshot(testName, '01-after-close-audio-modal');
|
|
await this.modPage.waitAndClick(e.actions);
|
|
await this.modPage.waitAndClick(e.externalVideoBtn);
|
|
await this.modPage.waitForSelector(e.externalVideoModalHeader);
|
|
await this.modPage.type(e.videoModalInput, e.youtubeLink);
|
|
await this.modPage.screenshot(testName, '02-before-start-sharing-video');
|
|
await this.modPage.waitAndClick(e.startShareVideoBtn);
|
|
|
|
const modFrame = await this.getFrame(this.modPage, e.youtubeFrame);
|
|
await this.modPage.screenshot(testName, '03-modPage-after-rendering-frame');
|
|
const userFrame = await this.getFrame(this.userPage, e.youtubeFrame);
|
|
await this.userPage.screenshot(testName, '03-userPage-after-rendering-frame');
|
|
|
|
const resp = (await modFrame.hasElement('video')) && (await userFrame.hasElement('video'));
|
|
|
|
return resp === true;
|
|
} catch (err) {
|
|
await this.modPage.logger(err);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
async getFrame(page, frameSelector) {
|
|
await page.waitForSelector(frameSelector);
|
|
const handleFrame = await page.page.$(frameSelector);
|
|
const contentFrame = await handleFrame.contentFrame();
|
|
const frame = new Page(contentFrame);
|
|
await frame.waitForSelector(e.ytFrameTitle);
|
|
return frame;
|
|
}
|
|
}
|
|
|
|
module.exports = exports = Presentation; |