mirror of
https://github.com/ascribe/onion.git
synced 2024-12-22 09:23:13 +01:00
Add environment config file for visual regression tests
Wayyyyy better than hard coding diminator everywhere.
This commit is contained in:
parent
a785fbc220
commit
f5a341b37e
@ -1,62 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
var liveEnv = 'https://www.ascribe.io/app/login';
|
||||
// Note that if you are trying to access staging, you will need to use
|
||||
// the --ignore-ssl-errors=true flag on phantomjs
|
||||
var stagingEnv = 'https://www.ascribe.ninja/app/login';
|
||||
var localEnv = 'http://localhost.com:3000/login';
|
||||
|
||||
var page = require('webpage').create();
|
||||
page.open(localEnv, function(status) {
|
||||
var attemptedToLogIn;
|
||||
var loginCheckInterval;
|
||||
|
||||
console.log('Status: ' + status);
|
||||
|
||||
if (status === 'success') {
|
||||
console.log('Attempting to log in...');
|
||||
|
||||
attemptedToLogIn = page.evaluate(function () {
|
||||
try {
|
||||
var inputForm = document.querySelector('.ascribe-login-wrapper');
|
||||
var email = inputForm.querySelector('input[type=email]');
|
||||
var password = inputForm.querySelector('input[type=password]');
|
||||
var submitBtn = inputForm.querySelector('button[type=submit]');
|
||||
|
||||
email.value = 'dimi@mailinator.com';
|
||||
password.value = '0000000000';
|
||||
submitBtn.click();
|
||||
|
||||
return true;
|
||||
} catch (ex) {
|
||||
console.log('Error while trying to find login elements, not logging in.');
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
if (attemptedToLogIn) {
|
||||
loginCheckInterval = setInterval(function () {
|
||||
var loggedIn = page.evaluate(function () {
|
||||
// When they log in, they are taken to the collections page.
|
||||
// When the piece list is loaded, the accordion list is either available or
|
||||
// shows a placeholder, so let's check for these elements to determine
|
||||
// when login is finished
|
||||
return !!(document.querySelector('.ascribe-accordion-list:not(.ascribe-loading-position)') ||
|
||||
document.querySelector('.ascribe-accordion-list-placeholder'));
|
||||
});
|
||||
|
||||
if (loggedIn) {
|
||||
clearInterval(loginCheckInterval);
|
||||
console.log('Successfully logged in.');
|
||||
}
|
||||
}, 1000);
|
||||
} else {
|
||||
console.log('Something happened while trying to log in, aborting...');
|
||||
phantom.exit();
|
||||
}
|
||||
|
||||
} else {
|
||||
console.log('Failed to load page, exiing...');
|
||||
phantom.exit();
|
||||
}
|
||||
});
|
@ -122,9 +122,12 @@ See [the docs](https://github.com/gemini-testing/gemini/blob/master/doc/tests.md
|
||||
actions](https://github.com/gemini-testing/gemini/blob/master/doc/tests.md#available-actions) for what scripted actions
|
||||
are available.
|
||||
|
||||
Our tests are located in `onion/test/gemini/tests/`.
|
||||
Our tests are located in `onion/test/gemini/tests/`. For now, the tests use the environment defined in
|
||||
`onion/test/gemini/tests/environment.js` for which user, piece, and edition to run tests against. In the future, it'd be
|
||||
nice if we had some db scripts that we could use to populate a test db for these regression tests.
|
||||
|
||||
**It would be nice if we kept the whitelabels up to date.**
|
||||
**It would also be nice if we kept the whitelabels up to date, so if you add one, please also test (at least) its landing
|
||||
page.**
|
||||
|
||||
Some useful tips:
|
||||
* The `find()` method in the callbacks is equivalent to `document.querySelector`; it will only return the first
|
||||
@ -193,7 +196,7 @@ change the environment to run against.
|
||||
|
||||
```bash
|
||||
# In root /onion folder
|
||||
phantomjs phantomjs/launch_app_and_login.js
|
||||
phantomjs test/phantomjs/launch_app_and_login.js
|
||||
```
|
||||
|
||||
|
||||
|
22
test/gemini/tests/environment.js
Normal file
22
test/gemini/tests/environment.js
Normal file
@ -0,0 +1,22 @@
|
||||
'use strict';
|
||||
|
||||
const mainUser = {
|
||||
email: 'dimi@mailinator.com',
|
||||
password: '0000000000'
|
||||
};
|
||||
const mainPieceId = '12374';
|
||||
const mainEditionId = '14gw9x3VA9oJaxp4cHaAuK2bvJzvEj4Xvc';
|
||||
|
||||
console.log('================== Test environment ==================\n');
|
||||
console.log('Main user:');
|
||||
console.log(` Email: ${mainUser.email}`);
|
||||
console.log(` Password: ${mainUser.password}\n`);
|
||||
console.log(`Main piece: ${mainPieceId}`);
|
||||
console.log(`Main edition: ${mainEditionId}\n`);
|
||||
console.log('========================================================\n');
|
||||
|
||||
module.exports = {
|
||||
mainUser,
|
||||
mainPieceId,
|
||||
mainEditionId
|
||||
};
|
@ -1,6 +1,7 @@
|
||||
'use strict';
|
||||
|
||||
const gemini = require('gemini');
|
||||
const environment = require('../environment');
|
||||
|
||||
/**
|
||||
* Suite of tests against routes that require the user to be authenticated.
|
||||
@ -25,8 +26,8 @@ gemini.suite('Authenticated', (suite) => {
|
||||
.capture('logged in', (actions, find) => {
|
||||
actions.waitForElementToShow('.ascribe-form', 5000);
|
||||
|
||||
actions.sendKeys(find('.ascribe-login-wrapper input[name=email]'), 'dimi@mailinator.com');
|
||||
actions.sendKeys(find('.ascribe-login-wrapper input[name=password]'), '0000000000');
|
||||
actions.sendKeys(find('.ascribe-login-wrapper input[name=email]'), environment.mainUser.email);
|
||||
actions.sendKeys(find('.ascribe-login-wrapper input[name=password]'), environment.mainUser.password);
|
||||
actions.click(find('.ascribe-login-wrapper button[type=submit]'));
|
||||
|
||||
actions.waitForElementToShow('.ascribe-accordion-list:not(.ascribe-loading-position)', 5000);
|
||||
|
@ -1,6 +1,7 @@
|
||||
'use strict';
|
||||
|
||||
const gemini = require('gemini');
|
||||
const environment = require('../environment');
|
||||
|
||||
/**
|
||||
* Basic suite of tests against routes that do not require the user to be authenticated.
|
||||
@ -84,8 +85,8 @@ gemini.suite('Basic', (suite) => {
|
||||
// Remove hover from sign up link
|
||||
actions.click(emailInput);
|
||||
|
||||
actions.sendKeys(emailInput, 'dimi@mailinator.com');
|
||||
actions.sendKeys(find('.ascribe-form input[name=password]'), '0000000000');
|
||||
actions.sendKeys(emailInput, environment.mainUser.email);
|
||||
actions.sendKeys(find('.ascribe-form input[name=password]'), environment.mainUser.password);
|
||||
})
|
||||
.capture('login form filled', (actions, find) => {
|
||||
actions.click(find('.ascribe-form-header'));
|
||||
@ -99,9 +100,9 @@ gemini.suite('Basic', (suite) => {
|
||||
actions.waitForElementToShow('.ascribe-form', 5000);
|
||||
})
|
||||
.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');
|
||||
actions.sendKeys(find('.ascribe-form input[name=email]'), environment.mainUser.email);
|
||||
actions.sendKeys(find('.ascribe-form input[name=password]'), environment.mainUser.password);
|
||||
actions.sendKeys(find('.ascribe-form input[name=password_confirm]'), environment.mainUser.password);
|
||||
})
|
||||
.capture('sign up form filled with check', (actions, find) => {
|
||||
actions.click(find('.ascribe-form input[type="checkbox"] ~ .checkbox'));
|
||||
@ -115,7 +116,7 @@ gemini.suite('Basic', (suite) => {
|
||||
actions.waitForElementToShow('.ascribe-form', 5000);
|
||||
})
|
||||
.capture('password reset form filled with focus', (actions, find) => {
|
||||
actions.sendKeys(find('.ascribe-form input[name="email"]'), 'dimi@mailinator.com');
|
||||
actions.sendKeys(find('.ascribe-form input[name="email"]'), environment.mainUser.email);
|
||||
})
|
||||
.capture('password reset form filled', (actions, find) => {
|
||||
actions.click(find('.ascribe-form-header'));
|
||||
|
@ -1,8 +1,9 @@
|
||||
'use strict';
|
||||
|
||||
const gemini = require('gemini');
|
||||
const pieceUrl = '/pieces/12374';
|
||||
const editionUrl = '/editions/14gw9x3VA9oJaxp4cHaAuK2bvJzvEj4Xvc';
|
||||
const environment = require('../environment');
|
||||
const pieceUrl = `/pieces/${environment.mainPieceId}`;
|
||||
const editionUrl = `/editions/${environment.mainEditionId}`;
|
||||
|
||||
/**
|
||||
* Suite of tests against the piece and edition routes.
|
||||
@ -57,8 +58,8 @@ gemini.suite('Work detail', (suite) => {
|
||||
actions.waitForElementToShow('.ascribe-default-app', 5000);
|
||||
})
|
||||
.capture('logged in', (actions, find) => {
|
||||
actions.sendKeys(find('.ascribe-login-wrapper input[name=email]'), 'dimi@mailinator.com');
|
||||
actions.sendKeys(find('.ascribe-login-wrapper input[name=password]'), '0000000000');
|
||||
actions.sendKeys(find('.ascribe-login-wrapper input[name=email]'), environment.mainUser.email);
|
||||
actions.sendKeys(find('.ascribe-login-wrapper input[name=password]'), environment.mainUser.password);
|
||||
actions.click(find('.ascribe-login-wrapper button[type=submit]'));
|
||||
|
||||
actions.waitForElementToShow('.ascribe-accordion-list:not(.ascribe-loading-position)', 5000);
|
||||
|
@ -1,6 +1,7 @@
|
||||
'use strict';
|
||||
|
||||
const gemini = require('gemini');
|
||||
const environment = require('../environment');
|
||||
|
||||
/**
|
||||
* Suite of tests against Cyland specific routes
|
||||
@ -68,8 +69,8 @@ gemini.suite('Ikonotv', (suite) => {
|
||||
// Remove hover from sign up link
|
||||
actions.click(emailInput);
|
||||
|
||||
actions.sendKeys(emailInput, 'dimi@mailinator.com');
|
||||
actions.sendKeys(find('.ascribe-form input[name=password]'), '0000000000');
|
||||
actions.sendKeys(emailInput, environment.mainUser.email);
|
||||
actions.sendKeys(find('.ascribe-form input[name=password]'), environment.mainUser.password);
|
||||
})
|
||||
.capture('login form filled', (actions, find) => {
|
||||
actions.click(find('.ascribe-form-header'));
|
||||
@ -81,9 +82,9 @@ gemini.suite('Ikonotv', (suite) => {
|
||||
.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');
|
||||
actions.sendKeys(find('.ascribe-form input[name=email]'), environment.mainUser.email);
|
||||
actions.sendKeys(find('.ascribe-form input[name=password]'), environment.mainUser.password);
|
||||
actions.sendKeys(find('.ascribe-form input[name=password_confirm]'), environment.mainUser.password);
|
||||
})
|
||||
.capture('sign up form filled with check', (actions, find) => {
|
||||
actions.click(find('.ascribe-form input[type="checkbox"] ~ .checkbox'));
|
||||
|
@ -1,6 +1,7 @@
|
||||
'use strict';
|
||||
|
||||
const gemini = require('gemini');
|
||||
const environment = require('../environment');
|
||||
|
||||
/**
|
||||
* Basic suite of tests against whitelabel routes that do not require authentication.
|
||||
@ -43,8 +44,8 @@ gemini.suite('Whitelabel basic', (suite) => {
|
||||
// Remove hover from sign up link
|
||||
actions.click(emailInput);
|
||||
|
||||
actions.sendKeys(emailInput, 'dimi@mailinator.com');
|
||||
actions.sendKeys(find('.ascribe-form input[name=password]'), '0000000000');
|
||||
actions.sendKeys(emailInput, environment.mainUser.email);
|
||||
actions.sendKeys(find('.ascribe-form input[name=password]'), environment.mainUser.password);
|
||||
})
|
||||
.capture('login form filled', (actions, find) => {
|
||||
actions.click(find('.ascribe-form-header'));
|
||||
@ -62,9 +63,9 @@ gemini.suite('Whitelabel basic', (suite) => {
|
||||
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');
|
||||
actions.sendKeys(find('.ascribe-form input[name=email]'), environment.mainUser.email);
|
||||
actions.sendKeys(find('.ascribe-form input[name=password]'), environment.mainUser.password);
|
||||
actions.sendKeys(find('.ascribe-form input[name=password_confirm]'), environment.mainUser.password);
|
||||
})
|
||||
.capture('sign up form filled with check', (actions, find) => {
|
||||
actions.click(find('.ascribe-form input[type="checkbox"] ~ .checkbox'));
|
||||
@ -80,7 +81,7 @@ gemini.suite('Whitelabel basic', (suite) => {
|
||||
actions.wait(500);
|
||||
})
|
||||
.capture('password reset form filled with focus', (actions, find) => {
|
||||
actions.sendKeys(find('.ascribe-form input[name="email"]'), 'dimi@mailinator.com');
|
||||
actions.sendKeys(find('.ascribe-form input[name="email"]'), environment.mainUser.email);
|
||||
})
|
||||
.capture('password reset form filled', (actions, find) => {
|
||||
actions.click(find('.ascribe-form-header'));
|
||||
|
71
test/phantomjs/launch_app_and_login.js
Normal file
71
test/phantomjs/launch_app_and_login.js
Normal file
@ -0,0 +1,71 @@
|
||||
'use strict';
|
||||
|
||||
var liveEnv = 'https://www.ascribe.io/app/login';
|
||||
// Note that if you are trying to access staging, you will need to use
|
||||
// the --ignore-ssl-errors=true flag on phantomjs
|
||||
var stagingEnv = 'https://www.ascribe.ninja/app/login';
|
||||
var localEnv = 'http://localhost.com:3000/login';
|
||||
|
||||
function launchAppAndLogin(env) {
|
||||
console.log('Running test to launch ' + env + ' and log into the app');
|
||||
|
||||
var page = require('webpage').create();
|
||||
page.open(localEnv, function(status) {
|
||||
var attemptedToLogIn;
|
||||
var loginCheckInterval;
|
||||
|
||||
console.log('Load ' + env + ': ' + status);
|
||||
|
||||
if (status === 'success') {
|
||||
console.log('Attempting to log in...');
|
||||
|
||||
attemptedToLogIn = page.evaluate(function () {
|
||||
try {
|
||||
var inputForm = document.querySelector('.ascribe-login-wrapper');
|
||||
var email = inputForm.querySelector('input[name=email]');
|
||||
var password = inputForm.querySelector('input[name=password]');
|
||||
var submitBtn = inputForm.querySelector('button[type=submit]');
|
||||
|
||||
email.value = 'dimi@mailinator.com';
|
||||
password.value = '0000000000';
|
||||
submitBtn.click();
|
||||
|
||||
return true;
|
||||
} catch (ex) {
|
||||
console.log('Error while trying to find login elements, not logging in.');
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
if (attemptedToLogIn) {
|
||||
loginCheckInterval = setInterval(function () {
|
||||
var loggedIn = page.evaluate(function () {
|
||||
// When they log in, they are taken to the collections page.
|
||||
// When the piece list is loaded, the accordion list is either available or
|
||||
// shows a placeholder, so let's check for these elements to determine
|
||||
// when login is finished
|
||||
return !!(document.querySelector('.ascribe-accordion-list:not(.ascribe-loading-position)') ||
|
||||
document.querySelector('.ascribe-accordion-list-placeholder'));
|
||||
});
|
||||
|
||||
if (loggedIn) {
|
||||
clearInterval(loginCheckInterval);
|
||||
console.log('Successfully logged in.');
|
||||
console.log('Edit the onion/test/phantomjs/launch_app_and_login.js file to do further actions after logging in.');
|
||||
console.log('Stopping phantomJS...');
|
||||
phantom.exit();
|
||||
}
|
||||
}, 1000);
|
||||
} else {
|
||||
console.log('Something happened while trying to log in, aborting...');
|
||||
phantom.exit();
|
||||
}
|
||||
|
||||
} else {
|
||||
console.log('Failed to load page, exiing...');
|
||||
phantom.exit();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
launchAppAndLogin(localEnv);
|
Loading…
Reference in New Issue
Block a user