import { OpenViduCall } from './call.po' ; import { browser , by , ProtractorBrowser , Key , WebElement } from 'protractor' ; import { protractor } from 'protractor/built/ptor' ; describe ( 'Connect to the room' , ( ) => { const OVC = new OpenViduCall ( ) ; beforeEach ( ( ) => { browser . waitForAngularEnabled ( false ) ; browser . get ( '#/' ) ; } ) ; it ( 'should navigate to OpenVidu room' , ( ) => { const input = OVC . getRoomInput ( browser ) ; input . clear ( ) ; input . sendKeys ( 'OpenVidu' ) ; OVC . getRoomJoinButton ( browser ) . click ( ) ; expect ( browser . getCurrentUrl ( ) ) . toMatch ( '#/OpenVidu' ) ; } ) ; it ( 'should show a short room name error' , ( ) => { const input = OVC . getRoomInput ( browser ) ; input . clear ( ) ; input . sendKeys ( 'OV' ) ; const shortError = OVC . getShortRoomNameError ( browser ) ; expect ( shortError . isDisplayed ( ) ) . toBeTruthy ( ) ; OVC . getRoomJoinButton ( browser ) . click ( ) ; expect ( browser . getCurrentUrl ( ) ) . toMatch ( '#/' ) ; } ) ; it ( 'should show a required name room error' , async ( ) => { const input = OVC . getRoomInput ( browser ) ; await input . sendKeys ( Key . CONTROL , 'a' ) ; await input . sendKeys ( Key . DELETE ) ; expect ( OVC . getRequiredRoomNameError ( browser ) . isDisplayed ( ) ) . toBeTruthy ( ) ; OVC . getRoomJoinButton ( browser ) . click ( ) ; expect ( browser . getCurrentUrl ( ) ) . toMatch ( '#/' ) ; } ) ; } ) ; describe ( 'Testing config card' , ( ) => { const OVC = new OpenViduCall ( ) ; const EC = protractor . ExpectedConditions ; beforeEach ( ( ) => { browser . waitForAngularEnabled ( false ) ; browser . get ( '#/OpenVidu' ) ; } ) ; it ( 'should show the config card' , ( ) => { const configCard = OVC . getConfigCard ( browser ) ; browser . wait ( EC . visibilityOf ( configCard ) , 3000 ) ; expect ( configCard . isDisplayed ( ) ) . toBeTruthy ( ) ; } ) ; it ( 'should close the config card and go to home' , ( ) => { browser . wait ( EC . visibilityOf ( OVC . getConfigCard ( browser ) ) , 3000 ) ; expect ( OVC . getConfigCard ( browser ) . isDisplayed ( ) ) . toBeTruthy ( ) ; browser . wait ( EC . elementToBeClickable ( OVC . getCloseButtonConfigCard ( browser ) ) , 5000 ) ; OVC . getCloseButtonConfigCard ( browser ) . click ( ) ; expect ( browser . getCurrentUrl ( ) ) . toMatch ( '#/' ) ; } ) ; it ( 'should be able to mute the camera' , async ( ) => { let isVideoEnabled ; const videoEnableScript = 'const videoTrack = document.getElementsByTagName("video")[0].srcObject.getVideoTracks()[0]; return videoTrack.enabled;' ; browser . wait ( EC . elementToBeClickable ( OVC . getConfigCardCameraButton ( browser ) ) , 5000 ) ; OVC . getAllVideos ( browser ) . then ( ( videos ) => { expect ( videos . length ) . toEqual ( 1 ) ; } ) ; isVideoEnabled = await browser . executeScript ( videoEnableScript ) ; expect ( isVideoEnabled ) . toBe ( true ) ; OVC . getConfigCardCameraButton ( browser ) . click ( ) ; isVideoEnabled = await browser . executeScript ( videoEnableScript ) ; expect ( isVideoEnabled ) . toBe ( false ) ; } ) ; it ( 'should be able to mute the microphone' , async ( ) => { let isAudioEnabled ; const audioEnableScript = 'const audioTrack = document.getElementsByTagName("video")[0].srcObject.getAudioTracks()[0]; return audioTrack.enabled;' ; browser . wait ( EC . elementToBeClickable ( OVC . getConfigCardMicrophoneButton ( browser ) ) , 5000 ) ; OVC . getAllVideos ( browser ) . then ( ( videos ) => { expect ( videos . length ) . toEqual ( 1 ) ; } ) ; isAudioEnabled = await browser . executeScript ( audioEnableScript ) ; expect ( isAudioEnabled ) . toBe ( true ) ; OVC . getConfigCardMicrophoneButton ( browser ) . click ( ) ; isAudioEnabled = await browser . executeScript ( audioEnableScript ) ; expect ( isAudioEnabled ) . toBe ( false ) ; } ) ; it ( 'should be able to share the screen' , async ( ) => { browser . wait ( EC . elementToBeClickable ( OVC . getConfigCardScreenShareButton ( browser ) ) , 5000 ) ; OVC . getAllVideos ( browser ) . then ( ( videos ) => { expect ( videos . length ) . toEqual ( 1 ) ; } ) ; OVC . getConfigCardScreenShareButton ( browser ) . click ( ) ; OVC . getAllVideos ( browser ) . then ( ( videos ) => { expect ( videos . length ) . toEqual ( 2 ) ; } ) ; } ) ; it ( 'should be able to share the screen and remove the camera video if it is muted' , ( ) => { browser . wait ( EC . elementToBeClickable ( OVC . getConfigCardScreenShareButton ( browser ) ) , 5000 ) ; browser . wait ( EC . elementToBeClickable ( OVC . getConfigCardCameraButton ( browser ) ) , 5000 ) ; OVC . getAllVideos ( browser ) . then ( ( videos ) => { expect ( videos . length ) . toEqual ( 1 ) ; } ) ; OVC . getConfigCardCameraButton ( browser ) . click ( ) ; OVC . getAllVideos ( browser ) . then ( ( videos ) => { expect ( videos . length ) . toEqual ( 1 ) ; } ) ; OVC . getConfigCardScreenShareButton ( browser ) . click ( ) ; OVC . getAllVideos ( browser ) . then ( ( videos ) => { expect ( videos . length ) . toEqual ( 1 ) ; } ) ; } ) ; it ( 'should be able to add the camera video when the screen is active clicking on camera button' , ( ) => { browser . wait ( EC . elementToBeClickable ( OVC . getConfigCardScreenShareButton ( browser ) ) , 5000 ) ; browser . wait ( EC . elementToBeClickable ( OVC . getConfigCardCameraButton ( browser ) ) , 5000 ) ; OVC . getAllVideos ( browser ) . then ( ( videos ) => { expect ( videos . length ) . toEqual ( 1 ) ; } ) ; OVC . getConfigCardCameraButton ( browser ) . click ( ) ; OVC . getAllVideos ( browser ) . then ( ( videos ) => { expect ( videos . length ) . toEqual ( 1 ) ; } ) ; OVC . getConfigCardScreenShareButton ( browser ) . click ( ) ; OVC . getAllVideos ( browser ) . then ( ( videos ) => { expect ( videos . length ) . toEqual ( 1 ) ; } ) ; OVC . getConfigCardCameraButton ( browser ) . click ( ) ; OVC . getAllVideos ( browser ) . then ( ( videos ) => { expect ( videos . length ) . toEqual ( 2 ) ; } ) ; } ) ; it ( 'should be able to add the camera video disabling screen share' , ( ) => { browser . wait ( EC . elementToBeClickable ( OVC . getConfigCardScreenShareButton ( browser ) ) , 5000 ) ; browser . wait ( EC . elementToBeClickable ( OVC . getConfigCardCameraButton ( browser ) ) , 5000 ) ; OVC . getAllVideos ( browser ) . then ( ( videos ) => { expect ( videos . length ) . toEqual ( 1 ) ; } ) ; OVC . getConfigCardCameraButton ( browser ) . click ( ) ; OVC . getAllVideos ( browser ) . then ( ( videos ) => { expect ( videos . length ) . toEqual ( 1 ) ; } ) ; OVC . getConfigCardScreenShareButton ( browser ) . click ( ) ; OVC . getAllVideos ( browser ) . then ( ( videos ) => { expect ( videos . length ) . toEqual ( 1 ) ; } ) ; OVC . getConfigCardScreenShareButton ( browser ) . click ( ) ; OVC . getAllVideos ( browser ) . then ( ( videos ) => { expect ( videos . length ) . toEqual ( 1 ) ; } ) ; } ) ; it ( 'should be able to join to room' , async ( ) => { browser . wait ( EC . elementToBeClickable ( OVC . getRoomJoinButton ( browser ) ) , 5000 ) ; OVC . getRoomJoinButton ( browser ) . click ( ) ; expect ( OVC . getRoomContainer ( browser ) . isDisplayed ( ) ) . toBeTruthy ( ) ; } ) ; } ) ; describe ( 'Testing room' , ( ) => { const OVC = new OpenViduCall ( ) ; const EC = protractor . ExpectedConditions ; beforeEach ( ( ) => { browser . waitForAngularEnabled ( false ) ; browser . get ( '#/' ) ; browser . wait ( EC . elementToBeClickable ( OVC . getRoomJoinButton ( browser ) ) , 5000 ) ; OVC . getRoomJoinButton ( browser ) . click ( ) ; browser . sleep ( 1000 ) ; browser . wait ( EC . elementToBeClickable ( OVC . getRoomJoinButton ( browser ) ) , 5000 ) ; OVC . getRoomJoinButton ( browser ) . click ( ) ; browser . sleep ( 1000 ) ; } ) ; afterEach ( ( ) => { browser . wait ( EC . elementToBeClickable ( OVC . getLeaveButton ( browser ) ) , 5000 ) ; OVC . getLeaveButton ( browser ) . click ( ) ; expect ( expect ( browser . getCurrentUrl ( ) ) . toMatch ( '#/' ) ) ; } ) ; it ( 'should be able to mute the camera' , async ( ) => { let isVideoEnabled ; const videoEnableScript = 'const videoTrack = document.getElementsByTagName("video")[0].srcObject.getVideoTracks()[0]; return videoTrack.enabled;' ; browser . wait ( EC . elementToBeClickable ( OVC . getRoomCameraButton ( browser ) ) , 5000 ) ; OVC . getAllVideos ( browser ) . then ( ( videos ) => { expect ( videos . length ) . toEqual ( 1 ) ; } ) ; isVideoEnabled = await browser . executeScript ( videoEnableScript ) ; expect ( isVideoEnabled ) . toBe ( true ) ; OVC . getRoomCameraButton ( browser ) . click ( ) ; isVideoEnabled = await browser . executeScript ( videoEnableScript ) ; expect ( isVideoEnabled ) . toBe ( false ) ; } ) ; it ( 'should be able to mute the microphone' , async ( ) => { let isAudioEnabled ; const audioEnableScript = 'const audioTrack = document.getElementsByTagName("video")[0].srcObject.getAudioTracks()[0]; return audioTrack.enabled;' ; browser . wait ( EC . elementToBeClickable ( OVC . getRoomMicrophoneButton ( browser ) ) , 5000 ) ; OVC . getAllVideos ( browser ) . then ( ( videos ) => { expect ( videos . length ) . toEqual ( 1 ) ; } ) ; isAudioEnabled = await browser . executeScript ( audioEnableScript ) ; expect ( isAudioEnabled ) . toBe ( true ) ; OVC . getRoomMicrophoneButton ( browser ) . click ( ) ; isAudioEnabled = await browser . executeScript ( audioEnableScript ) ; expect ( isAudioEnabled ) . toBe ( false ) ; expect ( OVC . getMicrophoneStatusDisabled ( browser ) . isDisplayed ( ) ) . toBe ( true ) ; } ) ; it ( 'should be able to share the screen' , ( ) => { browser . wait ( EC . elementToBeClickable ( OVC . getRoomScreenButton ( browser ) ) , 5000 ) ; OVC . getAllVideos ( browser ) . then ( ( videos ) => { expect ( videos . length ) . toEqual ( 1 ) ; } ) ; browser . sleep ( 3000 ) ; OVC . getRoomScreenButton ( browser ) . click ( ) ; OVC . getAllVideos ( browser ) . then ( ( videos ) => { expect ( videos . length ) . toEqual ( 2 ) ; } ) ; } ) ; it ( 'should be able to share the screen and remove the camera video if it is muted' , ( ) => { browser . wait ( EC . elementToBeClickable ( OVC . getRoomScreenButton ( browser ) ) , 5000 ) ; browser . wait ( EC . elementToBeClickable ( OVC . getRoomCameraButton ( browser ) ) , 5000 ) ; OVC . getAllVideos ( browser ) . then ( ( videos ) => { expect ( videos . length ) . toEqual ( 1 ) ; } ) ; OVC . getRoomCameraButton ( browser ) . click ( ) ; OVC . getAllVideos ( browser ) . then ( ( videos ) => { expect ( videos . length ) . toEqual ( 1 ) ; } ) ; OVC . getRoomScreenButton ( browser ) . click ( ) ; OVC . getAllVideos ( browser ) . then ( ( videos ) => { expect ( videos . length ) . toEqual ( 1 ) ; } ) ; } ) ; it ( 'should be able to add the camera video when the screen is active clicking on camera button' , ( ) => { browser . wait ( EC . elementToBeClickable ( OVC . getRoomScreenButton ( browser ) ) , 5000 ) ; browser . wait ( EC . elementToBeClickable ( OVC . getRoomCameraButton ( browser ) ) , 5000 ) ; OVC . getAllVideos ( browser ) . then ( ( videos ) => { expect ( videos . length ) . toEqual ( 1 ) ; } ) ; OVC . getRoomCameraButton ( browser ) . click ( ) ; OVC . getAllVideos ( browser ) . then ( ( videos ) => { expect ( videos . length ) . toEqual ( 1 ) ; } ) ; OVC . getRoomScreenButton ( browser ) . click ( ) ; OVC . getAllVideos ( browser ) . then ( ( videos ) => { expect ( videos . length ) . toEqual ( 1 ) ; } ) ; browser . sleep ( 5000 ) ; OVC . getRoomCameraButton ( browser ) . click ( ) ; browser . sleep ( 1000 ) ; OVC . getAllVideos ( browser ) . then ( ( videos ) => { expect ( videos . length ) . toEqual ( 2 ) ; } ) ; } ) ; it ( 'should be able to add the camera video disabling screen share' , ( ) => { browser . wait ( EC . elementToBeClickable ( OVC . getRoomScreenButton ( browser ) ) , 5000 ) ; browser . wait ( EC . elementToBeClickable ( OVC . getRoomCameraButton ( browser ) ) , 5000 ) ; OVC . getAllVideos ( browser ) . then ( ( videos ) => { expect ( videos . length ) . toEqual ( 1 ) ; } ) ; OVC . getRoomCameraButton ( browser ) . click ( ) ; OVC . getAllVideos ( browser ) . then ( ( videos ) => { expect ( videos . length ) . toEqual ( 1 ) ; } ) ; OVC . getRoomScreenButton ( browser ) . click ( ) ; OVC . getAllVideos ( browser ) . then ( ( videos ) => { expect ( videos . length ) . toEqual ( 1 ) ; } ) ; OVC . getRoomScreenButton ( browser ) . click ( ) ; OVC . getAllVideos ( browser ) . then ( ( videos ) => { expect ( videos . length ) . toEqual ( 1 ) ; } ) ; } ) ; it ( 'should enable and disable fullscreen' , ( ) => { browser . wait ( EC . elementToBeClickable ( OVC . getFullscreenButton ( browser ) ) , 5000 ) ; const button = OVC . getFullscreenButton ( browser ) ; button . click ( ) ; browser . sleep ( 1000 ) ; browser . driver . manage ( ) . window ( ) . getSize ( ) . then ( ( value ) => { expect ( value . width === OVC . getVideo ( browser ) . width && value . height === OVC . getVideo ( browser ) . height ) ; button . click ( ) ; browser . driver . manage ( ) . window ( ) . getSize ( ) . then ( ( value2 ) => { expect ( value2 . width !== OVC . getVideo ( browser ) . width && value2 . height !== OVC . getVideo ( browser ) . height ) ; } ) ; } ) ; } ) ; } ) ;