From 7a50c048852cfe3636eeb44fbb1c5a2498cd1ebf Mon Sep 17 00:00:00 2001 From: BryceLTaylor Date: Wed, 30 Sep 2020 14:30:00 -0400 Subject: [PATCH] Move join integration tests to Jest, add some tests --- .../smoke-testing/test-join.js | 32 ------- test/integration/join.test.js | 91 +++++++++++++++++++ 2 files changed, 91 insertions(+), 32 deletions(-) delete mode 100644 test/integration-legacy/smoke-testing/test-join.js create mode 100644 test/integration/join.test.js diff --git a/test/integration-legacy/smoke-testing/test-join.js b/test/integration-legacy/smoke-testing/test-join.js deleted file mode 100644 index 052853e0b..000000000 --- a/test/integration-legacy/smoke-testing/test-join.js +++ /dev/null @@ -1,32 +0,0 @@ -const SeleniumHelper = require('../selenium-helpers.js'); -const helper = new SeleniumHelper(); - -var tap = require('tap'); -const test = tap.test; - -const driver = helper.buildDriver('www-smoke test-login-failures'); - -const { - clickText, - findByXpath -} = helper; - -var rootUrl = process.env.ROOT_URL || 'https://scratch.ly'; - -tap.plan(1); - -tap.tearDown(function () { - driver.quit(); -}); - -tap.beforeEach(function () { - return driver.get(rootUrl); -}); - -// Skipping this test while launching new join flow. -// TODO: Add new smoke tests for the new Join flow! -test('Clicking Join Scratch opens scratchr2 iframe', {skip: true}, t => { - clickText('Join Scratch') - .then(() => findByXpath('//iframe[contains(@class, "mod-registration")]')) - .then(() => t.end()); -}); diff --git a/test/integration/join.test.js b/test/integration/join.test.js new file mode 100644 index 000000000..c8cd95ea8 --- /dev/null +++ b/test/integration/join.test.js @@ -0,0 +1,91 @@ +const SeleniumHelper = require('./selenium-helpers.js'); + +const { + findByXpath, + clickXpath, + buildDriver +} = new SeleniumHelper(); + +let remote = process.env.SMOKE_REMOTE || false; +let rootUrl = process.env.ROOT_URL || 'https://scratch.ly'; +let takenUsername = process.env.SMOKE_USERNAME; + +if (remote){ + jest.setTimeout(60000); +} else { + jest.setTimeout(10000); +} + +let driver; + +describe('www-integration join flow', () => { + beforeAll(async () => { + driver = await buildDriver('www-integration join flow'); + await driver.get(rootUrl); + }); + + afterAll(async () => await driver.quit()); + + beforeEach(async () => { + driver.get(rootUrl); + await clickXpath('//a[@class="registrationLink"]'); + }); + + test('click Join opens join modal', async () => { + let joinModal = await findByXpath('//div[@class = "join-flow-outer-content"]'); + let modalVisible = await joinModal.isDisplayed(); + await expect(modalVisible).toBe(true); + }); + + test('username validation message appears', async () => { + await clickXpath('//input[contains(@name, "username")]'); + let message = await findByXpath('//div[contains(@class, "validation-message")]'); + let messageText = await message.getText(); + await expect(messageText).toEqual('Don\'t use your real name'); + + }); + + test('password validation message appears', async () => { + await clickXpath('//input[contains(@name, "password")]'); + let message = await findByXpath('//div[contains(@class, "validation-message")]'); + let messageText = await message.getText(); + await expect(messageText).toContain('Write it down so you remember.'); + }); + + test('password validation message appears', async () => { + await clickXpath('//input[contains(@name, "passwordConfirm")]'); + let message = await findByXpath('//div[contains(@class, "validation-message")]'); + let messageText = await message.getText(); + await expect(messageText).toEqual('Type password again'); + }); + + test('username validation: too short', async () => { + let textInput = await findByXpath('//input[contains(@name, "username")]'); + await textInput.click(); + await textInput.sendKeys('ab'); + await clickXpath('//div[@class = "join-flow-outer-content"]'); + let message = await findByXpath('//div[contains(@class, "validation-error")]'); + let messageText = await message.getText(); + await expect(messageText).toContain('Must be 3 letters or longer'); + }); + + test('username validation: username taken', async () => { + let textInput = await findByXpath('//input[contains(@name, "username")]'); + await textInput.click(); + await textInput.sendKeys(takenUsername); + await clickXpath('//div[@class = "join-flow-outer-content"]'); + let message = await findByXpath('//div[contains(@class, "validation-error")]'); + let messageText = await message.getText(); + await expect(messageText).toContain('Username taken.'); + }); + + test('username validation: bad word', async () => { + let textInput = await findByXpath('//input[contains(@name, "username")]'); + await textInput.click(); + await textInput.sendKeys('qnb02mclepghwic9'); + await clickXpath('//div[@class = "join-flow-outer-content"]'); + let message = await findByXpath('//div[contains(@class, "validation-error")]'); + let messageText = await message.getText(); + await expect(messageText).toContain('Username not allowed'); + }); +});