From 4e7df2126bcd42c6fd9a186d41fb68cc2ec767ff Mon Sep 17 00:00:00 2001 From: Bruno Windels Date: Tue, 7 Aug 2018 17:58:58 +0200 Subject: [PATCH] move step logging to tests, DRY; put test scenario in separate file, less globals --- src/scenario.js | 37 ++++++++++ src/tests/create-room.js | 2 + src/tests/join.js | 2 + src/tests/server-notices-consent.js | 8 ++- src/tests/signup.js | 2 + start.js | 102 ++++++++++++---------------- 6 files changed, 90 insertions(+), 63 deletions(-) create mode 100644 src/scenario.js diff --git a/src/scenario.js b/src/scenario.js new file mode 100644 index 0000000000..ee049a14f9 --- /dev/null +++ b/src/scenario.js @@ -0,0 +1,37 @@ +/* +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 signup = require('./tests/signup'); +const join = require('./tests/join'); +const createRoom = require('./tests/create-room'); +const acceptServerNoticesInviteAndConsent = require('./tests/server-notices-consent'); + +module.exports = async function scenario(createSession) { + async function createUser(username) { + const session = await createSession(username); + await signup(session, session.username, 'testtest'); + const noticesName = "Server Notices"; + await acceptServerNoticesInviteAndConsent(session, noticesName); + return session; + } + + const alice = await createUser("alice"); + const bob = await createUser("bob"); + const room = 'test'; + await createRoom(alice, room); + // await join(bob, room); +} diff --git a/src/tests/create-room.js b/src/tests/create-room.js index 948e0b115f..eff92baf83 100644 --- a/src/tests/create-room.js +++ b/src/tests/create-room.js @@ -17,6 +17,7 @@ limitations under the License. const assert = require('assert'); module.exports = async function createRoom(session, roomName) { + session.log.step(`creates room ${roomName}`); //TODO: brittle selector const createRoomButton = await session.waitAndQuerySelector('.mx_RoleButton[aria-label="Create new room"]'); await createRoomButton.click(); @@ -28,4 +29,5 @@ module.exports = async function createRoom(session, roomName) { await createButton.click(); await session.waitForSelector('.mx_MessageComposer'); + session.log.done(); } \ No newline at end of file diff --git a/src/tests/join.js b/src/tests/join.js index a359d6ef64..72d4fe10cf 100644 --- a/src/tests/join.js +++ b/src/tests/join.js @@ -17,6 +17,7 @@ limitations under the License. const assert = require('assert'); module.exports = async function join(session, roomName) { + session.log.step(`joins room ${roomName}`); //TODO: brittle selector const directoryButton = await session.waitAndQuerySelector('.mx_RoleButton[aria-label="Room directory"]'); await directoryButton.click(); @@ -31,4 +32,5 @@ module.exports = async function join(session, roomName) { await joinLink.click(); await session.waitForSelector('.mx_MessageComposer'); + session.log.done(); } \ No newline at end of file diff --git a/src/tests/server-notices-consent.js b/src/tests/server-notices-consent.js index 0eb4cd8722..53a318a169 100644 --- a/src/tests/server-notices-consent.js +++ b/src/tests/server-notices-consent.js @@ -16,7 +16,8 @@ limitations under the License. const assert = require('assert'); -module.exports = async function acceptServerNoticesInviteAndConsent(session, name) { +module.exports = async function acceptServerNoticesInviteAndConsent(session, noticesName) { + session.log.step(`accepts "${noticesName}" invite and accepting terms & conditions`); //TODO: brittle selector const invitesHandles = await session.waitAndQueryAll('.mx_RoomTile_name.mx_RoomTile_invite'); const invitesWithText = await Promise.all(invitesHandles.map(async (inviteHandle) => { @@ -24,7 +25,7 @@ module.exports = async function acceptServerNoticesInviteAndConsent(session, nam return {inviteHandle, text}; })); const inviteHandle = invitesWithText.find(({inviteHandle, text}) => { - return text.trim() === name; + return text.trim() === noticesName; }).inviteHandle; await inviteHandle.click(); @@ -40,4 +41,5 @@ module.exports = async function acceptServerNoticesInviteAndConsent(session, nam const acceptButton = await termsPage.$('input[type=submit]'); await acceptButton.click(); await session.delay(500); //TODO yuck, timers -} \ No newline at end of file + session.log.done(); +} \ No newline at end of file diff --git a/src/tests/signup.js b/src/tests/signup.js index db6ad6208a..6b3f06c12c 100644 --- a/src/tests/signup.js +++ b/src/tests/signup.js @@ -18,6 +18,7 @@ const acceptTerms = require('./consent'); const assert = require('assert'); module.exports = async function signup(session, username, password, homeserver) { + session.log.step("signs up"); await session.goto(session.riotUrl('/#/register')); //click 'Custom server' radio button if (homeserver) { @@ -64,4 +65,5 @@ module.exports = async function signup(session, username, password, homeserver) const url = session.page.url(); assert.strictEqual(url, session.riotUrl('/#/home')); + session.log.done(); } diff --git a/start.js b/start.js index 28eba781e5..5e235dd1ef 100644 --- a/start.js +++ b/start.js @@ -16,33 +16,13 @@ limitations under the License. const assert = require('assert'); const RiotSession = require('./src/session'); +const scenario = require('./src/scenario'); -const signup = require('./src/tests/signup'); -const join = require('./src/tests/join'); -const createRoom = require('./src/tests/create-room'); -const acceptServerNoticesInviteAndConsent = require('./src/tests/server-notices-consent'); - -const homeserver = 'http://localhost:8008'; const riotserver = 'http://localhost:5000'; -let sessions = []; - -async function createUser(username, options, riotserver) { - const session = await RiotSession.create(username, options, riotserver); - sessions.push(session); - - session.log.step("signs up"); - await signup(session, session.username, 'testtest'); - session.log.done(); - - const noticesName = "Server Notices"; - session.log.step(`accepts "${noticesName}" invite and accepting terms & conditions`); - await acceptServerNoticesInviteAndConsent(session, noticesName); - session.log.done(); - return session; -} - async function runTests() { + let sessions = []; + console.log("running tests ..."); const options = {}; if (process.env.CHROME_PATH) { @@ -51,43 +31,45 @@ async function runTests() { options.executablePath = path; } - const alice = await createUser("alice", options, riotserver); - const bob = await createUser("bob", options, riotserver); - - const room = 'test'; - alice.log.step(`creates room ${room}`); - await createRoom(alice, room); - alice.log.done(); - - bob.log.step(`joins room ${room}`); - await createRoom(bob, room); - bob.log.done(); - - - await alice.close(); - await bob.close(); -} - -function onSuccess() { - console.log('all tests finished successfully'); -} - -async function onFailure(err) { - console.log('failure: ', err); - for(var i = 0; i < sessions.length; ++i) { - const session = sessions[i]; - documentHtml = await session.page.content(); - console.log(`---------------- START OF ${session.username} LOGS ----------------`); - console.log('---------------- console.log output:'); - console.log(session.consoleLogs()); - console.log('---------------- network requests:'); - console.log(session.networkLogs()); - console.log('---------------- document html:'); - console.log(documentHtml); - console.log(`---------------- END OF ${session.username} LOGS ----------------`); + async function createSession(username) { + const session = await RiotSession.create(username, options, riotserver); + sessions.push(session); + return session; + } + + let failure = false; + try { + await scenario(createSession); + } catch(err) { + console.log('failure: ', err); + for(let i = 0; i < sessions.length; ++i) { + const session = sessions[i]; + documentHtml = await session.page.content(); + console.log(`---------------- START OF ${session.username} LOGS ----------------`); + console.log('---------------- console.log output:'); + console.log(session.consoleLogs()); + console.log('---------------- network requests:'); + console.log(session.networkLogs()); + console.log('---------------- document html:'); + console.log(documentHtml); + console.log(`---------------- END OF ${session.username} LOGS ----------------`); + } + failure = true; + } + + for(let i = 0; i < sessions.length; ++i) { + const session = sessions[i]; + await session.close(); + } + + if (failure) { + process.exit(-1); + } else { + console.log('all tests finished successfully'); } - - process.exit(-1); } -runTests().then(onSuccess, onFailure); \ No newline at end of file +runTests().catch(function(err) { + console.log(err); + process.exit(-1); +}); \ No newline at end of file