From b76c3a1842fb0b1eff7debf57a3df36774550e51 Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Mon, 9 Jul 2018 17:43:21 +0200 Subject: [PATCH] don't use jest and just run test code sequentially since a lot of tests will be interdepent and need to happen in order, it seems easier to not use a test runner enforcing tests to be semi-independent and instead just run the code and have some logging code to see where a problem occurs --- title.test.js => index.js | 57 ++++++++++++----- package.json | 1 - start.js | 126 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 167 insertions(+), 17 deletions(-) rename title.test.js => index.js (77%) create mode 100644 start.js diff --git a/title.test.js b/index.js similarity index 77% rename from title.test.js rename to index.js index 0bbb8d56ac..a47a51252f 100644 --- a/title.test.js +++ b/index.js @@ -16,28 +16,53 @@ limitations under the License. const puppeteer = require('puppeteer'); const helpers = require('./helpers'); +const assert = require('assert'); + global.riotserver = 'http://localhost:8080'; global.homeserver = 'http://localhost:8008'; global.browser = null; -jest.setTimeout(10000); +async function run_tests() { + await start_session(); -beforeAll(async () => { + process.stdout.write(`* testing riot loads ... `); + await test_title(); + process.stdout.write('done\n'); + + const username = 'bruno-' + helpers.rnd_int(10000); + const password = 'testtest'; + process.stdout.write(`* signing up as ${username} ... `); + await do_signup(username, password, homeserver); + process.stdout.write('done\n'); + await end_session(); +} + +async function start_session() { global.browser = await puppeteer.launch(); -}); +} -afterAll(() => { +function end_session() { return browser.close(); -}) +} -test('test page loads', async () => { +function on_success() { + console.log('all tests finished successfully'); +} + +function on_failure(err) { + console.log('failure: ', err); + process.exit(-1); +} + + +async function test_title() { const page = await browser.newPage(); await page.goto(helpers.riot_url('/')); const title = await page.title(); - expect(title).toBe("Riot"); -}); + assert.strictEqual(title, "Riot"); +}; -test('test signup', async () => { +async function do_signup(username, password, homeserver) { const page = await helpers.new_page(); const console_logs = helpers.log_console(page); const xhr_logs = helpers.log_xhr_requests(page); @@ -46,12 +71,10 @@ test('test signup', async () => { await page.waitForSelector('#advanced', {visible: true, timeout: 500}); await page.click('#advanced'); - const username = 'bruno-' + helpers.rnd_int(10000); - const password = 'testtest'; //fill out form await page.waitForSelector('.mx_ServerConfig', {visible: true, timeout: 500}); const login_fields = await page.$$('.mx_Login_field'); - expect(login_fields.length).toBe(7); + assert.strictEqual(login_fields.length, 7); const username_field = login_fields[2]; const password_field = login_fields[3]; const password_repeat_field = login_fields[4]; @@ -70,7 +93,7 @@ test('test signup', async () => { await register_button.focus(); //check no errors const error_text = await helpers.try_get_innertext(page, '.mx_Login_error'); - expect(error_text).toBeFalsy(); + assert.strictEqual(!!error_text, false); //submit form await page.screenshot({path: "beforesubmit.png", fullPage: true}); await register_button.click(); @@ -78,7 +101,7 @@ test('test signup', async () => { //confirm dialog saying you cant log back in without e-mail await page.waitForSelector('.mx_QuestionDialog', {visible: true, timeout: 500}); const continue_button = await page.$('.mx_QuestionDialog button.mx_Dialog_primary'); - await helpers.print_elements('continue_button', [continue_button]); + //await helpers.print_elements('continue_button', [continue_button]); await continue_button.click(); //wait for registration to finish so the hash gets set //onhashchange better? @@ -97,5 +120,7 @@ test('test signup', async () => { //await page.waitForSelector('.mx_MatrixChat', {visible: true, timeout: 3000}); const url = page.url(); - expect(url).toBe(helpers.riot_url('/#/home')); -}); + assert.strictEqual(url, helpers.riot_url('/#/home')); +}; + +run_tests().then(on_success, on_failure); \ No newline at end of file diff --git a/package.json b/package.json index fa67de0069..48644df401 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,6 @@ "author": "", "license": "ISC", "dependencies": { - "jest": "^23.2.0", "puppeteer": "^1.5.0" } } diff --git a/start.js b/start.js new file mode 100644 index 0000000000..a47a51252f --- /dev/null +++ b/start.js @@ -0,0 +1,126 @@ +/* +Copyright 2018 New Vector Ltd + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +const puppeteer = require('puppeteer'); +const helpers = require('./helpers'); +const assert = require('assert'); + +global.riotserver = 'http://localhost:8080'; +global.homeserver = 'http://localhost:8008'; +global.browser = null; + +async function run_tests() { + await start_session(); + + process.stdout.write(`* testing riot loads ... `); + await test_title(); + process.stdout.write('done\n'); + + const username = 'bruno-' + helpers.rnd_int(10000); + const password = 'testtest'; + process.stdout.write(`* signing up as ${username} ... `); + await do_signup(username, password, homeserver); + process.stdout.write('done\n'); + await end_session(); +} + +async function start_session() { + global.browser = await puppeteer.launch(); +} + +function end_session() { + return browser.close(); +} + +function on_success() { + console.log('all tests finished successfully'); +} + +function on_failure(err) { + console.log('failure: ', err); + process.exit(-1); +} + + +async function test_title() { + const page = await browser.newPage(); + await page.goto(helpers.riot_url('/')); + const title = await page.title(); + assert.strictEqual(title, "Riot"); +}; + +async function do_signup(username, password, homeserver) { + const page = await helpers.new_page(); + const console_logs = helpers.log_console(page); + const xhr_logs = helpers.log_xhr_requests(page); + await page.goto(helpers.riot_url('/#/register')); + //click 'Custom server' radio button + await page.waitForSelector('#advanced', {visible: true, timeout: 500}); + await page.click('#advanced'); + + //fill out form + await page.waitForSelector('.mx_ServerConfig', {visible: true, timeout: 500}); + const login_fields = await page.$$('.mx_Login_field'); + assert.strictEqual(login_fields.length, 7); + const username_field = login_fields[2]; + const password_field = login_fields[3]; + const password_repeat_field = login_fields[4]; + const hsurl_field = login_fields[5]; + await helpers.replace_input_text(username_field, username); + await helpers.replace_input_text(password_field, password); + await helpers.replace_input_text(password_repeat_field, password); + await helpers.replace_input_text(hsurl_field, homeserver); + //wait over a second because Registration/ServerConfig have a 1000ms + //delay to internally set the homeserver url + //see Registration::render and ServerConfig::props::delayTimeMs + await helpers.delay(1200); + /// focus on the button to make sure error validation + /// has happened before checking the form is good to go + const register_button = await page.$('.mx_Login_submit'); + await register_button.focus(); + //check no errors + const error_text = await helpers.try_get_innertext(page, '.mx_Login_error'); + assert.strictEqual(!!error_text, false); + //submit form + await page.screenshot({path: "beforesubmit.png", fullPage: true}); + await register_button.click(); + + //confirm dialog saying you cant log back in without e-mail + await page.waitForSelector('.mx_QuestionDialog', {visible: true, timeout: 500}); + const continue_button = await page.$('.mx_QuestionDialog button.mx_Dialog_primary'); + //await helpers.print_elements('continue_button', [continue_button]); + await continue_button.click(); + //wait for registration to finish so the hash gets set + //onhashchange better? + await helpers.delay(1000); +/* + await page.screenshot({path: "afterlogin.png", fullPage: true}); + console.log('browser console logs:'); + console.log(console_logs.logs()); + console.log('xhr logs:'); + console.log(xhr_logs.logs()); +*/ + + + //print_elements('page', await page.$('#matrixchat')); +// await navigation_promise; + + //await page.waitForSelector('.mx_MatrixChat', {visible: true, timeout: 3000}); + const url = page.url(); + assert.strictEqual(url, helpers.riot_url('/#/home')); +}; + +run_tests().then(on_success, on_failure); \ No newline at end of file