From 1db86422eb516acd23550f30536de4ebd8f0daea Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Tue, 21 Jun 2022 09:09:46 +0200 Subject: [PATCH] Add E2E tests for signup --- client/e2e/src/po/admin-config.po.ts | 11 ++- client/e2e/src/po/admin-plugin.po.ts | 2 +- client/e2e/src/po/login.po.ts | 10 ++- client/e2e/src/po/signup.po.ts | 64 ++++++++++++++ .../e2e/src/suites-local/plugins.e2e-spec.ts | 2 +- .../e2e/src/suites-local/signup.e2e-spec.ts | 87 +++++++++++++++++++ client/e2e/src/utils/elements.ts | 7 +- client/e2e/src/utils/server.ts | 3 - 8 files changed, 173 insertions(+), 13 deletions(-) create mode 100644 client/e2e/src/po/signup.po.ts create mode 100644 client/e2e/src/suites-local/signup.e2e-spec.ts diff --git a/client/e2e/src/po/admin-config.po.ts b/client/e2e/src/po/admin-config.po.ts index a15184781..6d48a0fd7 100644 --- a/client/e2e/src/po/admin-config.po.ts +++ b/client/e2e/src/po/admin-config.po.ts @@ -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() } } diff --git a/client/e2e/src/po/admin-plugin.po.ts b/client/e2e/src/po/admin-plugin.po.ts index 6a3f3cf28..0259f34d6 100644 --- a/client/e2e/src/po/admin-plugin.po.ts +++ b/client/e2e/src/po/admin-plugin.po.ts @@ -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() diff --git a/client/e2e/src/po/login.po.ts b/client/e2e/src/po/login.po.ts index 486b9a6d8..2c4561b7d 100644 --- a/client/e2e/src/po/login.po.ts +++ b/client/e2e/src/po/login.po.ts @@ -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 index 000000000..ef36dbcc4 --- /dev/null +++ b/client/e2e/src/po/signup.po.ts @@ -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) + } + } +} diff --git a/client/e2e/src/suites-local/plugins.e2e-spec.ts b/client/e2e/src/suites-local/plugins.e2e-spec.ts index 411f1d217..a32ba1044 100644 --- a/client/e2e/src/suites-local/plugins.e2e-spec.ts +++ b/client/e2e/src/suites-local/plugins.e2e-spec.ts @@ -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 index 000000000..0f6d7a0e6 --- /dev/null +++ b/client/e2e/src/suites-local/signup.e2e-spec.ts @@ -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') + }) +}) diff --git a/client/e2e/src/utils/elements.ts b/client/e2e/src/utils/elements.ts index 3ffa5defd..9d6cfe673 100644 --- a/client/e2e/src/utils/elements.ts +++ b/client/e2e/src/utils/elements.ts @@ -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) { diff --git a/client/e2e/src/utils/server.ts b/client/e2e/src/utils/server.ts index a0c591630..140054794 100644 --- a/client/e2e/src/utils/server.ts +++ b/client/e2e/src/utils/server.ts @@ -18,9 +18,6 @@ function runServer (appInstance: string, config: any = {}) { log: { level: 'warn' }, - signup: { - enabled: false - }, transcoding: { enabled: false },