]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
Add E2E tests for signup
authorChocobozzz <me@florianbigard.com>
Tue, 21 Jun 2022 07:09:46 +0000 (09:09 +0200)
committerChocobozzz <me@florianbigard.com>
Tue, 21 Jun 2022 08:49:54 +0000 (10:49 +0200)
client/e2e/src/po/admin-config.po.ts
client/e2e/src/po/admin-plugin.po.ts
client/e2e/src/po/login.po.ts
client/e2e/src/po/signup.po.ts [new file with mode: 0644]
client/e2e/src/suites-local/plugins.e2e-spec.ts
client/e2e/src/suites-local/signup.e2e-spec.ts [new file with mode: 0644]
client/e2e/src/utils/elements.ts
client/e2e/src/utils/server.ts

index a1518478189ed069241987d50311403cbb0ff08d..6d48a0fd73d26059ce876669a98c9d4d6af7678e 100644 (file)
@@ -1,4 +1,4 @@
-import { browserSleep, go } from '../utils'
+import { getCheckbox, go } from '../utils'
 
 export class AdminConfigPage {
 
@@ -22,8 +22,13 @@ export class AdminConfigPage {
     return $('#instanceCustomHomepageContent').setValue(newValue)
   }
 
+  async toggleSignup () {
+    const checkbox = await getCheckbox('signupEnabled')
+    await checkbox.click()
+  }
+
   async save () {
-    await $('input[type=submit]').click()
-    await browserSleep(200)
+    const button = $('input[type=submit]')
+    await button.click()
   }
 }
index 6a3f3cf28f2b63eacbbc637b9e2542f6641c07be..0259f34d6c6cc0a6a939186dd2c23e5d9cfd52fb 100644 (file)
@@ -2,7 +2,7 @@ import { browserSleep, go } from '../utils'
 
 export class AdminPluginPage {
 
-  async navigateToSearch () {
+  async navigateToPluginSearch () {
     await go('/admin/plugins/search')
 
     await $('my-plugin-search').waitForDisplayed()
index 486b9a6d8b5a164b58f400d5e1c13b678e130ca7..2c4561b7de08853f9247fca54d6ec50be24ed3fa 100644 (file)
@@ -15,9 +15,7 @@ export class LoginPage {
 
     await $('form input[type=submit]').click()
 
-    await this.getLoggedInInfoElem().waitForExist()
-
-    await expect(this.getLoggedInInfoElem()).toHaveText('root')
+    await this.ensureIsLoggedInAs('root')
   }
 
   async logout () {
@@ -31,6 +29,12 @@ export class LoginPage {
     await $('.login-buttons-block').waitForDisplayed()
   }
 
+  async ensureIsLoggedInAs (displayName: string) {
+    await this.getLoggedInInfoElem().waitForExist()
+
+    await expect(this.getLoggedInInfoElem()).toHaveText(displayName)
+  }
+
   private getLoggedInInfoElem () {
     return $('.logged-in-display-name')
   }
diff --git a/client/e2e/src/po/signup.po.ts b/client/e2e/src/po/signup.po.ts
new file mode 100644 (file)
index 0000000..ef36dbc
--- /dev/null
@@ -0,0 +1,64 @@
+import { getCheckbox } from '../utils'
+
+export class SignupPage {
+
+  getRegisterMenuButton () {
+    return $('.create-account-button')
+  }
+
+  async clickOnRegisterInMenu () {
+    const button = this.getRegisterMenuButton()
+
+    await button.waitForDisplayed()
+    await button.click()
+  }
+
+  async validateStep () {
+    const next = $('button[type=submit]')
+
+    await next.waitForClickable()
+    await next.click()
+  }
+
+  async checkTerms () {
+    const terms = await getCheckbox('terms')
+
+    return terms.click()
+  }
+
+  async fillAccountStep (options: {
+    displayName: string
+    username: string
+    email: string
+    password: string
+  }) {
+    if (options.displayName) {
+      await $('#displayName').setValue(options.displayName)
+    }
+
+    if (options.username) {
+      await $('#username').setValue(options.username)
+    }
+
+    if (options.email) {
+      await $('#email').setValue(options.email)
+    }
+
+    if (options.password) {
+      await $('#password').setValue(options.password)
+    }
+  }
+
+  async fillChannelStep (options: {
+    displayName: string
+    name: string
+  }) {
+    if (options.displayName) {
+      await $('#displayName').setValue(options.displayName)
+    }
+
+    if (options.name) {
+      await $('#name').setValue(options.name)
+    }
+  }
+}
index 411f1d21716d1c05ea434ccf273197f3344cf753..a32ba10440b7944bda6e2a01c852fceeddb07a39 100644 (file)
@@ -34,7 +34,7 @@ describe('Plugins', () => {
   it('Should install hello world plugin', async () => {
     await loginPage.loginAsRootUser()
 
-    await adminPluginPage.navigateToSearch()
+    await adminPluginPage.navigateToPluginSearch()
     await adminPluginPage.search('hello-world')
     await adminPluginPage.installHelloWorld()
     await browser.refresh()
diff --git a/client/e2e/src/suites-local/signup.e2e-spec.ts b/client/e2e/src/suites-local/signup.e2e-spec.ts
new file mode 100644 (file)
index 0000000..0f6d7a0
--- /dev/null
@@ -0,0 +1,87 @@
+import { AdminConfigPage } from '../po/admin-config.po'
+import { LoginPage } from '../po/login.po'
+import { SignupPage } from '../po/signup.po'
+import { waitServerUp } from '../utils'
+
+describe('Signup', () => {
+  let loginPage: LoginPage
+  let adminConfigPage: AdminConfigPage
+  let signupPage: SignupPage
+
+  before(async () => {
+    await waitServerUp()
+  })
+
+  beforeEach(async () => {
+    loginPage = new LoginPage()
+    adminConfigPage = new AdminConfigPage()
+    signupPage = new SignupPage()
+
+    await browser.maximizeWindow()
+  })
+
+  it('Should disable signup', async () => {
+    await loginPage.loginAsRootUser()
+
+    await adminConfigPage.navigateTo('basic-configuration')
+    await adminConfigPage.toggleSignup()
+
+    await adminConfigPage.save()
+
+    await loginPage.logout()
+    await browser.refresh()
+
+    expect(signupPage.getRegisterMenuButton()).not.toBeDisplayed()
+  })
+
+  it('Should enable signup', async () => {
+    await loginPage.loginAsRootUser()
+
+    await adminConfigPage.navigateTo('basic-configuration')
+    await adminConfigPage.toggleSignup()
+
+    await adminConfigPage.save()
+
+    await loginPage.logout()
+    await browser.refresh()
+
+    expect(signupPage.getRegisterMenuButton()).toBeDisplayed()
+  })
+
+  it('Should go on signup page', async function () {
+    await signupPage.clickOnRegisterInMenu()
+  })
+
+  it('Should validate the first step (about page)', async function () {
+    await signupPage.validateStep()
+  })
+
+  it('Should validate the second step (terms)', async function () {
+    await signupPage.checkTerms()
+    await signupPage.validateStep()
+  })
+
+  it('Should validate the third step (account)', async function () {
+    await signupPage.fillAccountStep({
+      displayName: 'user 1',
+      username: 'user_1',
+      email: 'user_1@example.com',
+      password: 'my_super_password'
+    })
+
+    await signupPage.validateStep()
+  })
+
+  it('Should validate the third step (channel)', async function () {
+    await signupPage.fillChannelStep({
+      displayName: 'user 1 channel',
+      name: 'user_1_channel'
+    })
+
+    await signupPage.validateStep()
+  })
+
+  it('Should be logged in', async function () {
+    await loginPage.ensureIsLoggedInAs('user 1')
+  })
+})
index 3ffa5defd38c8ef074d341ba39a0a68af6bdd3e3..9d6cfe6730da4cb6ddd7805c861cf1dba9ba0ed4 100644 (file)
@@ -1,5 +1,8 @@
-function getCheckbox (name: string) {
-  return $(`my-peertube-checkbox input[id=${name}]`).parentElement()
+async function getCheckbox (name: string) {
+  const input = $(`my-peertube-checkbox input[id=${name}]`)
+  await input.waitForExist()
+
+  return input.parentElement()
 }
 
 async function selectCustomSelect (id: string, valueLabel: string) {
index a0c59163058e191a9b78319f39088aa0a3161981..1400547943401d22ed91f69fd7ee83e6d3d97b79 100644 (file)
@@ -18,9 +18,6 @@ function runServer (appInstance: string, config: any = {}) {
     log: {
       level: 'warn'
     },
-    signup: {
-      enabled: false
-    },
     transcoding: {
       enabled: false
     },