Skip to content
Snippets Groups Projects
Commit 7f1d2a4a authored by Mohamed Amine Ben Salah's avatar Mohamed Amine Ben Salah
Browse files

adds share/load/check webcams test specs with multi users

parent 9a56c017
No related branches found
No related tags found
No related merge requests found
......@@ -123,6 +123,7 @@ class VideoListItem extends Component {
return (
<FullscreenButtonContainer
data-test="presentationFullscreenButton"
fullscreenRef={this.videoContainer}
elementName={name}
isFullscreen={isFullscreen}
......
const Share = require('./webcam/share');
const Check = require('./webcam/check');
const LoadingTime = require('./webcam/loadtime');
describe('Webcam', () => {
describe('Webcams multiplayer', () => {
test('Shares webcam', async () => {
const test = new Share();
let response;
......@@ -14,4 +16,32 @@ describe('Webcam', () => {
}
expect(response).toBe(true);
});
test('Check Webcam loading time', async () => {
const test = new LoadingTime();
let response;
try {
await test.init();
response = await test.test();
} catch (e) {
console.log(e);
} finally {
await test.close();
}
expect(response).toBeLessThan(parseInt(process.env.CAMERA_SHARE_FAILED_WAIT_TIME));
});
test('Checks content of webcam', async () => {
const test = new Check();
let response;
try {
await test.init();
response = await test.test();
} catch (e) {
console.log(e);
} finally {
await test.close();
}
expect(response).toBe(true);
});
});
const Share = require('./share');
const util = require('./util');
class Check extends Share {
constructor() {
super('check-webcam-content');
}
async test() {
const response1 = await util.startAndCheckForWebcams(this.page1);
const response2 = await util.startAndCheckForWebcams(this.page2);
const response = response1 && response2;
return response;
}
}
module.exports = exports = Check;
......@@ -2,3 +2,5 @@ exports.joinVideo = 'button[data-test="joinVideo"]';
exports.videoPreview = 'video[data-test="videoPreview"]';
exports.startSharingWebcam = 'button[data-test="startSharingWebcam"]';
exports.videoContainer = 'video[data-test="videoContainer"]';
exports.webcamConnectingStatus = '[data-test="webcamConnectingStatus"]';
exports.presentationFullscreenButton = '[data-test="presentationFullscreenButton"]';
const Share = require('./share');
const util = require('./util');
class LoadingTime extends Share {
constructor() {
super('check-webcam-loading-time');
}
async test() {
await util.enableWebcam(this.page1);
await util.enableWebcam(this.page2);
const now = new Date().getMilliseconds();
await util.waitForWebcamsLoading(this.page1);
await util.waitForWebcamsLoading(this.page2);
const end = new Date().getMilliseconds();
const response = end - now;
return response;
}
}
module.exports = exports = LoadingTime;
......@@ -14,9 +14,11 @@ class Share {
}
async test() {
await util.enableWebcam(this.page1, this.page2);
const response = await util.evaluateCheck(this.page1, this.page2);
return response;
await util.enableWebcam(this.page1);
await util.enableWebcam(this.page2);
const response1 = await util.evaluateCheck(this.page1);
const response2 = await util.evaluateCheck(this.page2);
return response1 && response2;
}
async close() {
......
......@@ -3,10 +3,10 @@ const we = require('./elements');
async function enableWebcam(test) {
// Enabling webcam
await test.waitForSelector(we.joinVideo);
await test.click(we.joinVideo);
await test.click(we.joinVideo, true);
await test.waitForSelector(we.videoPreview);
await test.waitForSelector(we.startSharingWebcam);
await test.click(we.startSharingWebcam);
await test.click(we.startSharingWebcam, true);
}
async function getTestElement(element) {
......@@ -14,12 +14,58 @@ async function getTestElement(element) {
}
async function evaluateCheck(test) {
await test.waitForSelector(we.videoContainer);
const videoContainer = await test.page.evaluate(getTestElement, we.videoContainer);
const videoContainer = await test.page.evaluate(getTestElement, we.presentationFullscreenButton);
const response = videoContainer !== null;
return response;
}
async function waitForWebcamsLoading(test) {
await test.waitForSelector(we.videoContainer);
await test.waitForSelector(we.webcamConnectingStatus);
await test.waitForSelector(we.presentationFullscreenButton);
}
async function startAndCheckForWebcams(test) {
await enableWebcam(test);
await waitForWebcamsLoading(test);
const response = await evaluateCheck(test);
return response;
}
async function webcamContentCheck(test) {
await waitForWebcamsLoading(test);
const repeats = 5;
let check;
for (let i = repeats; i >= 0; i--) {
const checkCameras = function (i) {
const videos = document.querySelectorAll('video');
const lastVideoColor = document.lastVideoColor || {};
document.lastVideoColor = lastVideoColor;
for (let v = 0; v < videos.length; v++) {
const video = videos[v];
const canvas = document.createElement('canvas');
const context = canvas.getContext('2d');
context.drawImage(video, 0, 0, video.videoWidth, video.videoHeight);
const pixel = context.getImageData(50, 50, 1, 1).data;
const pixelString = new Array(pixel).join(' ').toString();
if (lastVideoColor[v]) {
if (lastVideoColor[v] == pixelString) {
return false;
}
}
lastVideoColor[v] = pixelString;
}
return true;
};
return check = await test.page.evaluate(checkCameras, i);
}
}
exports.startAndCheckForWebcams = startAndCheckForWebcams;
exports.waitForWebcamsLoading = waitForWebcamsLoading;
exports.webcamContentCheck = webcamContentCheck;
exports.evaluateCheck = evaluateCheck;
exports.getTestElement = getTestElement;
exports.enableWebcam = enableWebcam;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment