mirror of
https://github.com/ascribe/onion.git
synced 2024-12-22 09:23:13 +01:00
Add whitelabel visual test suite
Currently just checks landing page and some pages accessible to unauthorized users.
This commit is contained in:
parent
f9c70e2beb
commit
cf0a66ef2e
116
.gemini.yml
116
.gemini.yml
@ -15,3 +15,119 @@ browsers:
|
||||
windowSize: 600x1056
|
||||
desiredCapabilities:
|
||||
browserName: phantomjs
|
||||
|
||||
CcDesktop:
|
||||
rootUrl: http://cc.localhost.com:3000/
|
||||
screenshotsDir: './gemini-screens/cc-desktop'
|
||||
windowSize: 1900x1080
|
||||
desiredCapabilities:
|
||||
browserName: phantomjs
|
||||
|
||||
CcMobile:
|
||||
rootUrl: http://cc.localhost.com:3000/
|
||||
screenshotsDir: './gemini-screens/cc-mobile'
|
||||
windowSize: 600x1056
|
||||
desiredCapabilities:
|
||||
browserName: phantomjs
|
||||
|
||||
CylandDesktop:
|
||||
rootUrl: http://cyland.localhost.com:3000/
|
||||
screenshotsDir: './gemini-screens/cyland-desktop'
|
||||
windowSize: 1900x1080
|
||||
desiredCapabilities:
|
||||
browserName: phantomjs
|
||||
|
||||
CylandMobile:
|
||||
rootUrl: http://cyland.localhost.com:3000/
|
||||
screenshotsDir: './gemini-screens/cyland-mobile'
|
||||
windowSize: 600x1056
|
||||
desiredCapabilities:
|
||||
browserName: phantomjs
|
||||
|
||||
IkonotvDesktop:
|
||||
rootUrl: http://ikonotv.localhost.com:3000/
|
||||
screenshotsDir: './gemini-screens/ikonotv-desktop'
|
||||
windowSize: 1900x1080
|
||||
desiredCapabilities:
|
||||
browserName: phantomjs
|
||||
|
||||
IkonotvMobile:
|
||||
rootUrl: http://ikonotv.localhost.com:3000/
|
||||
screenshotsDir: './gemini-screens/ikonotv-mobile'
|
||||
windowSize: 600x1056
|
||||
desiredCapabilities:
|
||||
browserName: phantomjs
|
||||
|
||||
LumenusDesktop:
|
||||
rootUrl: http://lumenus.localhost.com:3000/
|
||||
screenshotsDir: './gemini-screens/lumenus-desktop'
|
||||
windowSize: 1900x1080
|
||||
desiredCapabilities:
|
||||
browserName: phantomjs
|
||||
|
||||
LumenusMobile:
|
||||
rootUrl: http://lumenus.localhost.com:3000/
|
||||
screenshotsDir: './gemini-screens/lumenus-mobile'
|
||||
windowSize: 600x1056
|
||||
desiredCapabilities:
|
||||
browserName: phantomjs
|
||||
|
||||
23viviDesktop:
|
||||
rootUrl: http://23vivi.localhost.com:3000/
|
||||
screenshotsDir: './gemini-screens/23vivi-desktop'
|
||||
windowSize: 1900x1080
|
||||
desiredCapabilities:
|
||||
browserName: phantomjs
|
||||
|
||||
23viviMobile:
|
||||
rootUrl: http://23vivi.localhost.com:3000/
|
||||
screenshotsDir: './gemini-screens/23vivi-mobile'
|
||||
windowSize: 600x1056
|
||||
desiredCapabilities:
|
||||
browserName: phantomjs
|
||||
|
||||
sets:
|
||||
main:
|
||||
files:
|
||||
- gemini/main
|
||||
browsers:
|
||||
- MainDesktop
|
||||
- MainMobile
|
||||
cc:
|
||||
files:
|
||||
- gemini/whitelabel/shared
|
||||
browsers:
|
||||
- CcDesktop
|
||||
- CcMobile
|
||||
|
||||
cyland:
|
||||
files:
|
||||
- gemini/whitelabel/shared
|
||||
- gemini/whitelabel/cyland
|
||||
browsers:
|
||||
- CylandDesktop
|
||||
- CylandMobile
|
||||
|
||||
ikonotv:
|
||||
files:
|
||||
- gemini/whitelabel/shared
|
||||
- gemini/whitelabel/ikonotv
|
||||
browsers:
|
||||
- IkonotvDesktop
|
||||
- IkonotvMobile
|
||||
|
||||
lumenus:
|
||||
files:
|
||||
- gemini/whitelabel/shared
|
||||
- gemini/whitelabel/lumenus
|
||||
browsers:
|
||||
- LumenusDesktop
|
||||
- LumenusMobile
|
||||
|
||||
23vivi:
|
||||
files:
|
||||
- gemini/whitelabel/shared
|
||||
- gemini/whitelabel/23vivi
|
||||
browsers:
|
||||
- 23viviDesktop
|
||||
- 23viviMobile
|
||||
|
27
gemini/whitelabel/23vivi/23vivi.js
Normal file
27
gemini/whitelabel/23vivi/23vivi.js
Normal file
@ -0,0 +1,27 @@
|
||||
'use strict';
|
||||
|
||||
const gemini = require('gemini');
|
||||
|
||||
/**
|
||||
* Suite of tests against 23vivi specific routes
|
||||
*/
|
||||
gemini.suite('23vivi', (suite) => {
|
||||
suite
|
||||
//TODO: maybe this should be changed to .ascribe-body once the PR that does this is merged
|
||||
.setCaptureElements('.ascribe-wallet-app')
|
||||
.before((actions, find) => {
|
||||
// This will be called before every nested suite begins
|
||||
actions.waitForElementToShow('.ascribe-wallet-app', 5000);
|
||||
});
|
||||
|
||||
gemini.suite('Landing', (landingSuite) => {
|
||||
landingSuite
|
||||
.setUrl('/')
|
||||
.capture('landing', (actions, find) => {
|
||||
// Wait for the logo to appear
|
||||
actions.waitForElementToShow('.vivi23-landing--header-logo', 10000);
|
||||
});
|
||||
});
|
||||
|
||||
// TODO: add more tests for market specific pages after authentication
|
||||
});
|
28
gemini/whitelabel/cyland/cyland.js
Normal file
28
gemini/whitelabel/cyland/cyland.js
Normal file
@ -0,0 +1,28 @@
|
||||
'use strict';
|
||||
|
||||
const gemini = require('gemini');
|
||||
|
||||
/**
|
||||
* Suite of tests against Cyland specific routes
|
||||
*/
|
||||
gemini.suite('Cyland', (suite) => {
|
||||
suite
|
||||
//TODO: maybe this should be changed to .ascribe-body once the PR that does this is merged
|
||||
.setCaptureElements('.ascribe-wallet-app')
|
||||
.before((actions, find) => {
|
||||
// This will be called before every nested suite begins
|
||||
actions.waitForElementToShow('.ascribe-wallet-app', 5000);
|
||||
});
|
||||
|
||||
gemini.suite('Landing', (landingSuite) => {
|
||||
landingSuite
|
||||
.setUrl('/')
|
||||
// Ignore Cyland's logo as it's a gif
|
||||
.ignoreElements('.cyland-landing img')
|
||||
.capture('landing', (actions, find) => {
|
||||
actions.waitForElementToShow('.cyland-landing img', 10000);
|
||||
});
|
||||
});
|
||||
|
||||
// TODO: add more tests for cyland specific pages after authentication
|
||||
});
|
95
gemini/whitelabel/ikonotv/ikonotv.js
Normal file
95
gemini/whitelabel/ikonotv/ikonotv.js
Normal file
@ -0,0 +1,95 @@
|
||||
'use strict';
|
||||
|
||||
const gemini = require('gemini');
|
||||
|
||||
/**
|
||||
* Suite of tests against Cyland specific routes
|
||||
*/
|
||||
gemini.suite('Ikonotv', (suite) => {
|
||||
suite
|
||||
//TODO: maybe this should be changed to .ascribe-body once the PR that does this is merged
|
||||
.setCaptureElements('.ascribe-wallet-app')
|
||||
.before((actions, find) => {
|
||||
// This will be called before every nested suite begins
|
||||
actions.waitForElementToShow('.ascribe-wallet-app', 5000);
|
||||
});
|
||||
|
||||
gemini.suite('Landing', (landingSuite) => {
|
||||
landingSuite
|
||||
.setUrl('/')
|
||||
// Gemini complains if we try to capture the entire app for Ikonotv's landing page for some reason
|
||||
.setCaptureElements('.ikonotv-landing')
|
||||
.setTolerance(5)
|
||||
.capture('landing', (actions, find) => {
|
||||
// Stop background animation
|
||||
actions.executeJS(function (window) {
|
||||
var landingBackground = window.document.querySelector('.client--ikonotv .route--landing');
|
||||
landingBackground.style.animation = 'none';
|
||||
landingBackground.style.webkitAnimation = 'none';
|
||||
});
|
||||
|
||||
// Wait for logo to appear
|
||||
actions.waitForElementToShow('.ikonotv-landing header img', 10000);
|
||||
});
|
||||
});
|
||||
|
||||
// Ikono needs its own set of tests for some pre-authorization pages to wait for
|
||||
// its logo to appear
|
||||
gemini.suite('Ikonotv basic', (suite) => {
|
||||
suite
|
||||
.setCaptureElements('.ascribe-wallet-app')
|
||||
.before((actions, find) => {
|
||||
// This will be called before every nested suite begins unless that suite
|
||||
// also defines a `.before()`
|
||||
// FIXME: use a more generic class for this, like just '.app',
|
||||
// when we can use this file with the whitelabels
|
||||
actions.waitForElementToShow('.ascribe-wallet-app', 5000);
|
||||
|
||||
// Wait for the forms to appear
|
||||
actions.waitForElementToShow('.ascribe-form', 5000);
|
||||
|
||||
// Just use a dumb wait because the logo is set as a background image
|
||||
actions.wait(3000);
|
||||
});
|
||||
|
||||
gemini.suite('Login', (loginSuite) => {
|
||||
loginSuite
|
||||
.setUrl('/login')
|
||||
.capture('login')
|
||||
.capture('hover on login submit', (actions, find) => {
|
||||
actions.mouseMove(find('.ascribe-form button[type=submit]'));
|
||||
})
|
||||
.capture('hover on sign up link', (actions, find) => {
|
||||
actions.mouseMove(find('.ascribe-login-text a[href="/signup"]'));
|
||||
})
|
||||
.capture('login form filled with focus', (actions, find) => {
|
||||
const emailInput = find('.ascribe-form input[name=email]');
|
||||
|
||||
// Remove hover from sign up link
|
||||
actions.click(emailInput);
|
||||
|
||||
actions.sendKeys(emailInput, 'dimi@mailinator.com');
|
||||
actions.sendKeys(find('.ascribe-form input[name=password]'), '0000000000');
|
||||
})
|
||||
.capture('login form filled', (actions, find) => {
|
||||
actions.click(find('.ascribe-form-header'));
|
||||
});
|
||||
});
|
||||
|
||||
gemini.suite('Sign up', (signUpSuite) => {
|
||||
signUpSuite
|
||||
.setUrl('/signup')
|
||||
.capture('sign up')
|
||||
.capture('sign up form filled with focus', (actions, find) => {
|
||||
actions.sendKeys(find('.ascribe-form input[name=email]'), 'dimi@mailinator.com');
|
||||
actions.sendKeys(find('.ascribe-form input[name=password]'), '0000000000');
|
||||
actions.sendKeys(find('.ascribe-form input[name=password_confirm]'), '0000000000');
|
||||
})
|
||||
.capture('sign up form filled with check', (actions, find) => {
|
||||
actions.click(find('.ascribe-form input[type="checkbox"] ~ .checkbox'));
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// TODO: add more tests for ikonotv specific pages after authentication
|
||||
});
|
27
gemini/whitelabel/lumenus/lumenus.js
Normal file
27
gemini/whitelabel/lumenus/lumenus.js
Normal file
@ -0,0 +1,27 @@
|
||||
'use strict';
|
||||
|
||||
const gemini = require('gemini');
|
||||
|
||||
/**
|
||||
* Suite of tests against lumenus specific routes
|
||||
*/
|
||||
gemini.suite('Lumenus', (suite) => {
|
||||
suite
|
||||
//TODO: maybe this should be changed to .ascribe-body once the PR that does this is merged
|
||||
.setCaptureElements('.ascribe-wallet-app')
|
||||
.before((actions, find) => {
|
||||
// This will be called before every nested suite begins
|
||||
actions.waitForElementToShow('.ascribe-wallet-app', 5000);
|
||||
});
|
||||
|
||||
gemini.suite('Landing', (landingSuite) => {
|
||||
landingSuite
|
||||
.setUrl('/')
|
||||
.capture('landing', (actions, find) => {
|
||||
// Wait for the logo to appear
|
||||
actions.waitForElementToShow('.wp-landing-wrapper img', 10000);
|
||||
});
|
||||
});
|
||||
|
||||
// TODO: add more tests for market specific pages after authentication
|
||||
});
|
112
gemini/whitelabel/shared/whitelabel_basic.js
Normal file
112
gemini/whitelabel/shared/whitelabel_basic.js
Normal file
@ -0,0 +1,112 @@
|
||||
'use strict';
|
||||
|
||||
const gemini = require('gemini');
|
||||
|
||||
/**
|
||||
* Basic suite of tests against whitelabel routes that do not require authentication.
|
||||
*/
|
||||
gemini.suite('Whitelabel basic', (suite) => {
|
||||
suite
|
||||
.setCaptureElements('.ascribe-wallet-app > .container')
|
||||
.before((actions, find) => {
|
||||
// This will be called before every nested suite begins unless that suite
|
||||
// also defines a `.before()`
|
||||
// FIXME: use a more generic class for this, like just '.ascribe-app'
|
||||
actions.waitForElementToShow('.ascribe-wallet-app', 5000);
|
||||
|
||||
// Use a dumb wait in case we're still waiting for other assets, like fonts, to load
|
||||
actions.wait(1000);
|
||||
});
|
||||
|
||||
gemini.suite('Login', (loginSuite) => {
|
||||
loginSuite
|
||||
.setUrl('/login')
|
||||
// See Ikono
|
||||
.skip(/Ikono/)
|
||||
.capture('login', (actions, find) => {
|
||||
actions.waitForElementToShow('.ascribe-form', 5000);
|
||||
// For some reason, the screenshots seem to keep catching the whitelabel login form
|
||||
// on a refresh and without fonts loaded (maybe because they're the first tests run
|
||||
// and the cache isn't hot yet?).
|
||||
// Let's wait a bit and hope they load.
|
||||
actions.wait(3000);
|
||||
})
|
||||
.capture('hover on login submit', (actions, find) => {
|
||||
actions.mouseMove(find('.ascribe-form button[type=submit]'));
|
||||
})
|
||||
.capture('hover on sign up link', (actions, find) => {
|
||||
actions.mouseMove(find('.ascribe-login-text a[href="/signup"]'));
|
||||
})
|
||||
.capture('login form filled with focus', (actions, find) => {
|
||||
const emailInput = find('.ascribe-form input[name=email]');
|
||||
|
||||
// Remove hover from sign up link
|
||||
actions.click(emailInput);
|
||||
|
||||
actions.sendKeys(emailInput, 'dimi@mailinator.com');
|
||||
actions.sendKeys(find('.ascribe-form input[name=password]'), '0000000000');
|
||||
})
|
||||
.capture('login form filled', (actions, find) => {
|
||||
actions.click(find('.ascribe-form-header'));
|
||||
});
|
||||
});
|
||||
|
||||
gemini.suite('Sign up', (signUpSuite) => {
|
||||
signUpSuite
|
||||
.setUrl('/signup')
|
||||
// See Ikono
|
||||
.skip(/Ikono/)
|
||||
.capture('sign up', (actions, find) => {
|
||||
actions.waitForElementToShow('.ascribe-form', 5000);
|
||||
// Wait in case the form reloads due to other assets loading
|
||||
actions.wait(500);
|
||||
})
|
||||
.capture('sign up form filled with focus', (actions, find) => {
|
||||
actions.sendKeys(find('.ascribe-form input[name=email]'), 'dimi@mailinator.com');
|
||||
actions.sendKeys(find('.ascribe-form input[name=password]'), '0000000000');
|
||||
actions.sendKeys(find('.ascribe-form input[name=password_confirm]'), '0000000000');
|
||||
})
|
||||
.capture('sign up form filled with check', (actions, find) => {
|
||||
actions.click(find('.ascribe-form input[type="checkbox"] ~ .checkbox'));
|
||||
});
|
||||
});
|
||||
|
||||
gemini.suite('Password reset', (passwordResetSuite) => {
|
||||
passwordResetSuite
|
||||
.setUrl('/password_reset')
|
||||
.capture('password reset', (actions, find) => {
|
||||
actions.waitForElementToShow('.ascribe-form', 5000);
|
||||
// Wait in case the form reloads due to other assets loading
|
||||
actions.wait(500);
|
||||
})
|
||||
.capture('password reset form filled with focus', (actions, find) => {
|
||||
actions.sendKeys(find('.ascribe-form input[name="email"]'), 'dimi@mailinator.com');
|
||||
})
|
||||
.capture('password reset form filled', (actions, find) => {
|
||||
actions.click(find('.ascribe-form-header'));
|
||||
});
|
||||
});
|
||||
|
||||
gemini.suite('Coa verify', (coaVerifySuite) => {
|
||||
coaVerifySuite
|
||||
.setUrl('/coa_verify')
|
||||
.capture('coa verify', (actions, find) => {
|
||||
actions.waitForElementToShow('.ascribe-form', 5000);
|
||||
// Wait in case the form reloads due to other assets loading
|
||||
actions.wait(500);
|
||||
})
|
||||
.capture('coa verify form filled with focus', (actions, find) => {
|
||||
actions.sendKeys(find('.ascribe-form input[name="message"]'), 'sample text');
|
||||
actions.sendKeys(find('.ascribe-form .ascribe-property-wrapper:nth-of-type(2) textarea'), 'sample signature');
|
||||
})
|
||||
.capture('coa verify form filled', (actions, find) => {
|
||||
actions.click(find('.ascribe-login-header'));
|
||||
});
|
||||
});
|
||||
|
||||
gemini.suite('Not found', (notFoundSuite) => {
|
||||
notFoundSuite
|
||||
.setUrl('/not_found_page')
|
||||
.capture('not found page');
|
||||
});
|
||||
});
|
Loading…
Reference in New Issue
Block a user