aboutsummaryrefslogtreecommitdiffhomepage
path: root/client/e2e/src/po/login.po.ts
blob: a8606dbd232949c403ee95ce8aa8fb1f029482af (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
import { browserSleep, go, isAndroid, isMobileDevice } from '../utils'

export class LoginPage {

  constructor (private isMobileDevice: boolean) {

  }

  async login (options: {
    username: string
    password: string
    displayName?: string
    url?: string
  }) {
    const { username, password, url = '/login', displayName = username } = options

    await go(url)

    await browser.execute(`window.localStorage.setItem('no_account_setup_warning_modal', 'true')`)
    await browser.execute(`window.localStorage.setItem('no_instance_config_warning_modal', 'true')`)
    await browser.execute(`window.localStorage.setItem('no_welcome_modal', 'true')`)

    await $('input#username').setValue(username)
    await $('input#password').setValue(password)

    await browserSleep(1000)

    const submit = $('.login-form-and-externals > form input[type=submit]')
    await submit.click()

    // Have to do this on Android, don't really know why
    // I think we need to "escape" from the password input, so click twice on the submit button
    if (isAndroid()) {
      await browserSleep(2000)
      await submit.click()
    }

    if (this.isMobileDevice) {
      const menuToggle = $('.top-left-block span[role=button]')

      await $('h2=Our content selection').waitForDisplayed()

      await menuToggle.click()

      await this.ensureIsLoggedInAs(displayName)

      await menuToggle.click()
    } else {
      await this.ensureIsLoggedInAs(displayName)
    }
  }

  async getLoginError (username: string, password: string) {
    await go('/login')

    await $('input#username').setValue(username)
    await $('input#password').setValue(password)

    await browser.pause(1000)

    await $('form input[type=submit]').click()

    return $('.alert-danger').getText()
  }

  async loginAsRootUser () {
    return this.login({ username: 'root', password: 'test' + this.getSuffix() })
  }

  loginOnPeerTube2 () {
    if (!process.env.PEERTUBE2_E2E_PASSWORD) {
      throw new Error('PEERTUBE2_E2E_PASSWORD env is missing for user e2e on peertube2.cpy.re')
    }

    return this.login({ username: 'e2e', password: process.env.PEERTUBE2_E2E_PASSWORD, url: 'https://peertube2.cpy.re/login' })
  }

  async logout () {
    const loggedInDropdown = $('.logged-in-more .logged-in-info')

    await loggedInDropdown.waitForClickable()
    await loggedInDropdown.click()

    const logout = $('.dropdown-item*=Log out')

    await logout.waitForClickable()
    await logout.click()

    await browser.waitUntil(() => {
      return $('.login-buttons-block, my-error-page a[href="/login"]').isDisplayed()
    })
  }

  async ensureIsLoggedInAs (displayName: string) {
    await this.getLoggedInInfoElem().waitForExist()

    await expect(this.getLoggedInInfoElem()).toHaveText(displayName)
  }

  private getLoggedInInfoElem () {
    return $('.logged-in-display-name')
  }

  private getSuffix () {
    return browser.options.baseUrl
      ? browser.options.baseUrl.slice(-1)
      : '1'
  }
}