Skip to content

Commit

Permalink
Merge pull request #1327 from LiskHQ/1311-e2e-for-registration
Browse files Browse the repository at this point in the history
E2E for registration - Closes #1311
  • Loading branch information
Efefefef committed Oct 10, 2018
2 parents 7914917 + 6d87a1f commit 69cd070
Show file tree
Hide file tree
Showing 3 changed files with 159 additions and 34 deletions.
54 changes: 20 additions & 34 deletions test/cypress/e2e/login.spec.js
@@ -1,7 +1,8 @@
import numeral from 'numeral';
import { fromRawLsk } from '../../../src/utils/lsk';
import accounts from '../../constants/accounts';
import networks from '../../constants/networks';
import { fromRawLsk } from '../../../src/utils/lsk';
import chooseNetwork from './utils/chooseNetwork';

const ss = {
newAccountBtn: '.new-account-button',
Expand All @@ -10,37 +11,12 @@ const ss = {
networkDropdown: '.network',
headerAddress: '.copy-title',
headerBalance: '.balance span',
networkStatus: '.network-status',
nodeAddress: '.peer',
networkStatus: '.network-status',
errorPopup: '.toast',
};

const loginUI = (passphrase, network) => {
cy.visit('/');
switch (network) {
case 'default':
break;
case 'mainnet':
cy.get(ss.networkDropdown).click();
cy.get('ul li').eq(1).click();
break;
case 'testnet':
cy.get(ss.networkDropdown).click();
cy.get('ul li').eq(2).click();
break;
case 'devnet':
cy.get(ss.networkDropdown).click();
cy.get('ul li').eq(3).click();
cy.get('.address input').type(networks.devnet.node);
break;
case 'invalid':
cy.get(ss.networkDropdown).click();
cy.get('ul li').eq(3).click();
cy.get('.address input').type('http://silk.road');
break;
default:
throw new Error(`Network should be one of : default, main , test, dev, invalid . Was: , ${network}`);
}
const loginUI = (passphrase) => {
cy.get(ss.passphraseInput).click();
cy.get(ss.passphraseInput).each(($el, index) => {
const passphraseWordsArray = passphrase.split(' ');
Expand All @@ -60,39 +36,47 @@ describe('Login Page', () => {
});

it('Log in to Mainnet by default ("Switch Network" is not set)', () => {
loginUI(accounts.genesis.passphrase, 'default');
cy.visit('/');
loginUI(accounts.genesis.passphrase);
cy.get(ss.headerAddress).should('have.text', accounts.genesis.address);
cy.get(ss.headerBalance).should('have.text', castNumberToBalanceString(0));
cy.get(ss.networkStatus).should('not.exist');
});

it('Log in to Mainnet by default ("Switch Network" is false)', () => {
cy.addLocalStorage('settings', 'showNetwork', false);
loginUI(accounts.genesis.passphrase, 'default');
cy.visit('/');
loginUI(accounts.genesis.passphrase);
cy.get(ss.headerAddress).should('have.text', accounts.genesis.address);
cy.get(ss.headerBalance).should('have.text', castNumberToBalanceString(0));
cy.get(ss.networkStatus).should('not.exist');
});

it('Log in to Mainnet (Selected network)', () => {
cy.addLocalStorage('settings', 'showNetwork', true);
loginUI(accounts.genesis.passphrase, 'mainnet');
cy.visit('/');
chooseNetwork('main');
loginUI(accounts.genesis.passphrase);
cy.get(ss.networkStatus).contains('Connected to mainnet');
cy.get(ss.headerAddress).should('have.text', accounts.genesis.address);
cy.get(ss.headerBalance).should('have.text', castNumberToBalanceString(0));
});

it('Log in to Testnet', () => {
cy.addLocalStorage('settings', 'showNetwork', true);
loginUI(accounts['testnet guy'].passphrase, 'testnet');
cy.visit('/');
chooseNetwork('test');
loginUI(accounts['testnet guy'].passphrase);
cy.get(ss.networkStatus).contains('Connected to testnet');
cy.get(ss.headerAddress).should('have.text', accounts['testnet guy'].address);
cy.get(ss.headerBalance).should('have.text', castNumberToBalanceString(accounts['testnet guy'].balance));
});

it('Log in to Devnet', () => {
cy.addLocalStorage('settings', 'showNetwork', true);
loginUI(accounts.genesis.passphrase, 'devnet');
cy.visit('/');
chooseNetwork('dev');
loginUI(accounts.genesis.passphrase);
cy.get(ss.networkStatus).contains('Connected to devnet');
cy.get(ss.headerAddress).should('have.text', accounts.genesis.address);
cy.get(ss.headerBalance).should('contain', castNumberToBalanceString(accounts.genesis.balance).substring(0, 6));
Expand All @@ -106,7 +90,9 @@ describe('Login Page', () => {

it('Log in to invalid address', () => {
cy.addLocalStorage('settings', 'showNetwork', true);
loginUI(accounts.genesis.passphrase, 'invalid');
cy.visit('/');
chooseNetwork('invalid');
loginUI(accounts.genesis.passphrase);
cy.get(ss.errorPopup).contains('Unable to connect to the node');
});
});
109 changes: 109 additions & 0 deletions test/cypress/e2e/registration.spec.js
@@ -0,0 +1,109 @@
import networks from '../../constants/networks';
import chooseNetwork from './utils/chooseNetwork';

const ss = {
networkStatus: '.network-status',
newAccountBtn: '.new-account-button',
nodeAddress: '.peer',
errorPopup: '.toast',
getPassphraseButton: '.get-passphrase-button',
iUnderstandCheckbox: '.i-understand-checkbox',
revealCheckbox: '.reveal-checkbox',
passphraseTextarea: 'textarea.passphrase',
itsSafeBtn: '.yes-its-safe-button',
passphraseWordHolder: '.passphrase-holder label',
getToDashboardBtn: '.get-to-your-dashboard-button',
backButton: '.multistep-back',
};

const registerUrl = '/register';

/**
* Generates a sequence of random pairs of x,y coordinates on the screen that simulates
* the movement of mouse to produce a pass phrase.
*/
const moveMouseRandomly = () => {
for (let i = 0; i < 70; i += 1) {
cy.get('main').first().trigger('mousemove', {
which: 1,
pageX: 500 + (Math.floor((((i % 2) * 2) - 1) * (249 + (Math.random() * 250)))),
pageY: 500 + (Math.floor((((i % 2) * 2) - 1) * (249 + (Math.random() * 250)))),
});
}
};

const registerUI = function () {
moveMouseRandomly();
cy.get(ss.getPassphraseButton).click();
cy.get(ss.iUnderstandCheckbox).click();
cy.get(ss.revealCheckbox)
.trigger('mousedown')
.trigger('mousemove', { which: 1, pageX: 100, pageY: 0 })
.trigger('mouseup');
cy.get(ss.passphraseTextarea).invoke('text').as('passphrase');
cy.get(ss.itsSafeBtn).click();
cy.get(ss.passphraseWordHolder).each(($el) => {
if (this.passphrase.includes($el[0].textContent)) cy.wrap($el).click();
});
cy.get(ss.getToDashboardBtn).click();
};

describe('Registration', () => {
it(`Opens by url ${registerUrl}`, () => {
cy.visit(registerUrl);
cy.url().should('contain', 'register');
cy.get(ss.backButton);
});

it('Create Lisk ID for Mainnet by default ("Switch Network" is not set)', function () {
cy.visit(registerUrl);
registerUI.call(this);
cy.get(ss.networkStatus).should('not.exist');
});

it('Create Lisk ID for Mainnet ("Switch Network" is false)', function () {
cy.addLocalStorage('settings', 'showNetwork', false);
cy.visit(registerUrl);
registerUI.call(this);
cy.get(ss.networkStatus).should('not.exist');
});

it('Create Lisk ID for Mainnet (Selected network)', function () {
cy.addLocalStorage('settings', 'showNetwork', true);
cy.visit('/');
chooseNetwork('main');
cy.get(ss.newAccountBtn).click();
registerUI.call(this);
cy.get(ss.networkStatus).should('not.exist');
});

it('Create Lisk ID for Testnet', function () {
cy.addLocalStorage('settings', 'showNetwork', true);
cy.visit('/');
chooseNetwork('test');
cy.get(ss.newAccountBtn).click();
registerUI.call(this);
cy.get(ss.networkStatus).contains('Connected to testnet');
});

// TODO: unskip after #1326 fixed
it.skip('Create Lisk ID for Devnet', function () {
cy.addLocalStorage('settings', 'showNetwork', true);
cy.visit('/');
chooseNetwork('dev');
cy.get(ss.newAccountBtn).click();
registerUI.call(this);
cy.get(ss.networkStatus).contains('Connected to devnet');
cy.get(ss.nodeAddress).contains(networks.devnet.node);
});

// TODO: unskip after #1326 fixed
it.skip('Create Lisk ID for invalid address', function () {
cy.addLocalStorage('settings', 'showNetwork', true);
cy.visit('/');
chooseNetwork('invalid');
cy.get(ss.newAccountBtn).click();
registerUI.call(this);
cy.get(ss.errorPopup).contains('Unable to connect to the node');
});
});
30 changes: 30 additions & 0 deletions test/cypress/e2e/utils/chooseNetwork.js
@@ -0,0 +1,30 @@
import networks from '../../../constants/networks';

const ss = {
networkDropdown: '.network',
};

export default function chooseNetwork(network) {
switch (network) {
case 'main':
cy.get(ss.networkDropdown).click();
cy.get('ul li').eq(1).click();
break;
case 'test':
cy.get(ss.networkDropdown).click();
cy.get('ul li').eq(2).click();
break;
case 'dev':
cy.get(ss.networkDropdown).click();
cy.get('ul li').eq(3).click();
cy.get('.address input').type(networks.devnet.node);
break;
case 'invalid':
cy.get(ss.networkDropdown).click();
cy.get('ul li').eq(3).click();
cy.get('.address input').type('http://silk.road');
break;
default:
throw new Error(`Network should be one of : main , test, dev, invalid . Was: ${network}`);
}
}

0 comments on commit 69cd070

Please sign in to comment.