import { getCheckbox , go } from '../utils' ; export class MyAccountPage { navigateToMyVideos ( ) { return $ ( 'a[href="/my-library/videos"]' ) . click ( ) ; } navigateToMyPlaylists ( ) { return $ ( 'a[href="/my-library/video-playlists"]' ) . click ( ) ; } navigateToMyHistory ( ) { return $ ( 'a[href="/my-library/history/videos"]' ) . click ( ) ; } navigateToMySettings ( ) { return $ ( 'a[href="/my-account"]' ) . click ( ) ; } async updateNSFW ( newValue ) { const nsfw = $ ( '#nsfwPolicy' ) ; await nsfw . waitForDisplayed ( ) ; await nsfw . scrollIntoView ( false ) ; await nsfw . selectByAttribute ( 'value' , newValue ) ; await this . submitVideoSettings ( ) ; } async clickOnP2PCheckbox ( ) { const p2p = await getCheckbox ( 'p2pEnabled' ) ; await p2p . waitForClickable ( ) ; await p2p . scrollIntoView ( false ) ; await p2p . click ( ) ; await this . submitVideoSettings ( ) ; } private async submitVideoSettings ( ) { const submit = $ ( 'my-user-video-settings input[type=submit]' ) ; await submit . scrollIntoView ( false ) ; await submit . click ( ) ; } async removeVideo ( name ) { const container = await this . getVideoElement ( name ) ; await container . $ ( '.dropdown-toggle' ) . click ( ) ; const dropdownMenu = ( ) => container . $$ ( '.dropdown-menu .dropdown-item' ) [ 1 ] ; await dropdownMenu ( ) . waitForDisplayed ( ) ; return dropdownMenu ( ) . click ( ) ; } validRemove ( ) { return $ ( 'input[type=submit]' ) . click ( ) ; } async countVideos ( names ) { const elements = await $$ ( '.video' ) . filter ( async ( e ) => { const t = await e . $ ( '.video-miniature-name' ) . getText ( ) ; return names . some ( n => t . includes ( n ) ) ; } ) ; return elements . length ; } async getPlaylistVideosText ( name ) { const elem = await this . getPlaylist ( name ) ; return elem . $ ( '.miniature-playlist-info-overlay' ) . getText ( ) ; } async clickOnPlaylist ( name ) { const elem = await this . getPlaylist ( name ) ; return elem . $ ( '.miniature-thumbnail' ) . click ( ) ; } async countTotalPlaylistElements ( ) { await $ ( '<my-video-playlist-element-miniature>' ) . waitForDisplayed ( ) ; return $$ ( '<my-video-playlist-element-miniature>' ) . length ; } playPlaylist ( ) { return $ ( '.playlist-info .miniature-thumbnail' ) . click ( ) ; } async goOnAssociatedPlaylistEmbed ( ) { let url = await browser . getUrl ( ) ; url = url . replace ( '/w/p/' , '/video-playlists/embed/' ) ; url = url . replace ( ':3333' , ':9001' ) ; return go ( url ) ; } private async getVideoElement ( name ) { const video = async ( ) => { const videos = await $$ ( '.video' ) . filter ( async ( e ) => { const t = await e . $ ( '.video-miniature-name' ) . getText ( ) ; return t . includes ( name ) ; } ) ; return videos [ 0 ] ; } ; await browser . waitUntil ( async ( ) => { return ( await video ( ) ) . isDisplayed ( ) ; } ) ; return video ( ) ; } private async getPlaylist ( name ) { const playlist = ( ) => { return $$ ( 'my-video-playlist-miniature' ) . filter ( async ( e ) => { const t = await e . $ ( '.miniature-name' ) . getText ( ) ; return t . includes ( name ) ; } ) . then ( elems => elems [ 0 ] ) ; } ; await browser . waitUntil ( async ( ) => { const el = await playlist ( ) ; return el ?. isDisplayed ( ) ; } ) ; return playlist ( ) ; } }