aboutsummaryrefslogtreecommitdiffhomepage
path: root/client/e2e/src/po/my-account.ts
blob: 8b5e79b5ee3b9fda65879e5f31a57657f656a09f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
import { 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()
  }

  // Settings

  navigateToMySettings () {
    return $('a[href="/my-account"]').click()
  }

  async updateNSFW (newValue: 'do_not_list' | 'blur' | 'display') {
    const nsfw = $('#nsfwPolicy')

    await nsfw.waitForDisplayed()
    await nsfw.scrollIntoView(false) // Avoid issues with fixed header on firefox
    await nsfw.selectByAttribute('value', newValue)

    const submit = $('my-user-video-settings input[type=submit]')
    await submit.scrollIntoView(false)
    await submit.click()
  }

  // My account Videos

  async removeVideo (name: string) {
    const container = await this.getVideoElement(name)

    await container.$('.dropdown-toggle').click()

    const dropdownMenu = () => container.$('.dropdown-menu .dropdown-item:nth-child(2)')

    await dropdownMenu().waitForDisplayed()
    return dropdownMenu().click()
  }

  validRemove () {
    return $('input[type=submit]').click()
  }

  async countVideos (names: string[]) {
    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
  }

  // My account playlists

  async getPlaylistVideosText (name: string) {
    const elem = await this.getPlaylist(name)

    return elem.$('.miniature-playlist-info-overlay').getText()
  }

  async clickOnPlaylist (name: string) {
    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)
  }

  // My account Videos

  private async getVideoElement (name: string) {
    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()
  }

  // My account playlists

  private async getPlaylist (name: string) {
    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()
  }
}