From 2babff1e418d9c82d187f7c016d7e33ef00a3d2a Mon Sep 17 00:00:00 2001 From: Jonas Zohren Date: Mon, 19 Jul 2021 08:23:04 +0000 Subject: CI: Test registration with element web --- .../test-element-web-registration.js | 101 +++++++++++++++++++++ tests/test-config.toml | 15 +++ 2 files changed, 116 insertions(+) create mode 100644 tests/client-element-web/test-element-web-registration.js create mode 100644 tests/test-config.toml (limited to 'tests') diff --git a/tests/client-element-web/test-element-web-registration.js b/tests/client-element-web/test-element-web-registration.js new file mode 100644 index 0000000..8f2e7f0 --- /dev/null +++ b/tests/client-element-web/test-element-web-registration.js @@ -0,0 +1,101 @@ +const puppeteer = require('puppeteer'); + +run().then(() => console.log('Done')).catch(error => { + console.error("Registration test failed."); + console.error("There might be a screenshot of the failure in the artifacts.\n"); + console.error(error); + process.exit(111); +}); + +async function run() { + + const elementUrl = process.argv[process.argv.length - 2]; + console.debug("Testing registration with ElementWeb hosted at "+ elementUrl); + + const homeserverUrl = process.argv[process.argv.length - 1]; + console.debug("Homeserver url: "+ homeserverUrl); + + const username = "testuser" + String(Math.floor(Math.random() * 100000)); + const password = "testpassword" + String(Math.floor(Math.random() * 100000)); + console.debug("Testuser for this run:\n User: " + username + "\n Password: " + password); + + const browser = await puppeteer.launch({ + headless: true, args: [ + "--no-sandbox" + ] + }); + + const page = await browser.newPage(); + await page.goto(elementUrl); + + await page.screenshot({ path: '01-element-web-opened.png' }); + + console.debug("Click [Create Account] button"); + await page.waitForSelector('a.mx_ButtonCreateAccount'); + await page.click('a.mx_ButtonCreateAccount'); + + await page.screenshot({ path: '02-clicked-create-account-button.png' }); + + // The webapp should have loaded right now, if anything takes more than 5 seconds, something probably broke + page.setDefaultTimeout(5000); + + console.debug("Click [Edit] to switch homeserver"); + await page.waitForSelector('div.mx_ServerPicker_change'); + await page.click('div.mx_ServerPicker_change'); + + await page.screenshot({ path: '03-clicked-edit-homeserver-button.png' }); + + console.debug("Type in local homeserver url"); + await page.waitForSelector('input#mx_homeserverInput'); + await page.click('input#mx_homeserverInput'); + await page.click('input#mx_homeserverInput'); + await page.keyboard.type(homeserverUrl); + + await page.screenshot({ path: '04-typed-in-homeserver.png' }); + + console.debug("[Continue] with changed homeserver"); + await page.waitForSelector("div.mx_ServerPickerDialog_continue"); + await page.click('div.mx_ServerPickerDialog_continue'); + + await page.screenshot({ path: '05-back-to-enter-user-credentials.png' }); + + console.debug("Type in username"); + await page.waitForSelector("input#mx_RegistrationForm_username"); + await page.click('input#mx_RegistrationForm_username'); + await page.keyboard.type(username); + + await page.screenshot({ path: '06-typed-in-username.png' }); + + console.debug("Type in password"); + await page.waitForSelector("input#mx_RegistrationForm_password"); + await page.click('input#mx_RegistrationForm_password'); + await page.keyboard.type(password); + + await page.screenshot({ path: '07-typed-in-password-once.png' }); + + console.debug("Type in password again"); + await page.waitForSelector("input#mx_RegistrationForm_passwordConfirm"); + await page.click('input#mx_RegistrationForm_passwordConfirm'); + await page.keyboard.type(password); + + await page.screenshot({ path: '08-typed-in-password-twice.png' }); + + console.debug("Click on [Register] to finish the account creation"); + await page.waitForSelector("input.mx_Login_submit"); + await page.click('input.mx_Login_submit'); + + await page.screenshot({ path: '09-clicked-on-register-button.png' }); + + // Waiting for the app to login can take some time, so be patient. + page.setDefaultTimeout(10000); + + console.debug("Wait for chat window to show up"); + await page.waitForSelector("div.mx_HomePage_default_buttons"); + console.debug("Apparently the registration worked."); + + await page.screenshot({ path: '10-logged-in-homescreen.png' }); + + + // Close the browser and exit the script + await browser.close(); +} \ No newline at end of file diff --git a/tests/test-config.toml b/tests/test-config.toml new file mode 100644 index 0000000..c466687 --- /dev/null +++ b/tests/test-config.toml @@ -0,0 +1,15 @@ +[global] + +# Server runs in same container as tests do, so localhost is fine +server_name = "localhost" + +# With a bit of luck /tmp is a RAM disk, so that the file system does not become the bottleneck while testing +database_path = "/tmp" + +# All the other settings are left at their defaults: +port = 6167 +max_request_size = 20_000_000 +allow_registration = true +trusted_servers = ["matrix.org"] +address = "127.0.0.1" +proxy = "none" \ No newline at end of file -- cgit v1.2.3