Added cucumber tests (wip)
This commit is contained in:
parent
d798aa2cdf
commit
fb3511b264
11 changed files with 272 additions and 11 deletions
38
cucumber/features/login.feature
Normal file
38
cucumber/features/login.feature
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
Feature: Allow users to login and logout
|
||||
|
||||
As a user
|
||||
I want to login and logout
|
||||
So that I can prove my identity and see personalized data
|
||||
|
||||
Background:
|
||||
Given I am on the home page
|
||||
|
||||
@watch
|
||||
Scenario: A user can login
|
||||
Given I have an account and I logged in
|
||||
When I sign out
|
||||
When I enter my email and password
|
||||
Then I should be logged in
|
||||
And I can edit my profile
|
||||
|
||||
@watch
|
||||
Scenario: A user cannot login with bad information
|
||||
Given I have an account and I logged in
|
||||
When I sign out
|
||||
When I enter incorrect authentication information
|
||||
Then I should see a user not found error
|
||||
|
||||
@watch
|
||||
Scenario: A user can register and login
|
||||
Given I register with some name, password and email
|
||||
Then I should be registered
|
||||
And I should be logged in
|
||||
When I sign out
|
||||
When I enter my email and password
|
||||
Then I should be logged in
|
||||
And I can edit my profile
|
||||
|
||||
@skip
|
||||
Scenario: A user cannot register without accepting service conditions
|
||||
Given I register with some name, password and email but without accept conditions
|
||||
Then I shouldn't be registered
|
||||
30
cucumber/features/steps_definitions/helper.js
Normal file
30
cucumber/features/steps_definitions/helper.js
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
// https://stackoverflow.com/questions/1349404/generate-random-string-characters-in-javascript
|
||||
function makeid(size) {
|
||||
let text = '';
|
||||
const possible = 'abcdefghijklmnopqrstuvwxyz0123456789';
|
||||
for (let i = 0; i < size; i += 1) {
|
||||
text += possible.charAt(Math.floor(Math.random() * possible.length));
|
||||
}
|
||||
return text;
|
||||
}
|
||||
|
||||
export const randomUsername = () => makeid(7);
|
||||
|
||||
export const randomPassword = () => randomUsername();
|
||||
|
||||
export const randomEmail = () => `${randomUsername()}@example.com`;
|
||||
|
||||
export const goHome = (client) => {
|
||||
client.url(process.env.ROOT_URL);
|
||||
client.waitForVisible('#react-root', 10000);
|
||||
expect(client.isVisible('#react-root')).toBe(true);
|
||||
client.waitUntil(() => client.isVisible('.pg-loading-center-middle') === false, 5000);
|
||||
client.waitUntil(() => client.isVisible('.pg-loading-center-middle') === false, 5000);
|
||||
// Close alert
|
||||
if (client.isVisible('.bert-content')) {
|
||||
client.click('.bert-content');
|
||||
}
|
||||
if (client.isVisible('#acceptCookies')) {
|
||||
client.click('#acceptCookies');
|
||||
}
|
||||
};
|
||||
39
cucumber/features/steps_definitions/hooks.js
Normal file
39
cucumber/features/steps_definitions/hooks.js
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
/* global client */
|
||||
|
||||
(function () {
|
||||
module.exports = function () {
|
||||
this.Before(() => {
|
||||
// global.expect = require('@xolvio/jasmine-expect').expect;
|
||||
|
||||
if (!this.initMyCmds) {
|
||||
client.addCommand('waitForClickable', function elementClickable(selector, timeout) {
|
||||
this.waitForVisible(selector, timeout);
|
||||
this.waitForEnabled(selector, timeout);
|
||||
});
|
||||
this.initMyCmds = true;
|
||||
}
|
||||
|
||||
// server.call('fixtures/reset');
|
||||
// server.call('emailStub/reset');
|
||||
// server.call('emailStub/stub');
|
||||
// server.call('fixtures/stubCloudFrontClient');
|
||||
|
||||
// go to the page first so we have access to the Meteor object
|
||||
// console.log('Before all tests...');
|
||||
// client.url(process.env.ROOT_URL);
|
||||
/* client.executeAsync(function (done) {
|
||||
* var customer = {
|
||||
* id: 'randomId',
|
||||
* email: 'me@example.com',
|
||||
* subscriptions: {
|
||||
* data: [{
|
||||
* current_period_start: 1436716844,
|
||||
* current_period_end: 1436716844
|
||||
* }]
|
||||
* }
|
||||
* }; */
|
||||
// this call will stub stripe both on the client and server
|
||||
// Meteor.call('stripeStub/stub', customer, done);
|
||||
});
|
||||
};
|
||||
}());
|
||||
130
cucumber/features/steps_definitions/login.js
Normal file
130
cucumber/features/steps_definitions/login.js
Normal file
|
|
@ -0,0 +1,130 @@
|
|||
/* global module expect require process client */
|
||||
|
||||
const {
|
||||
goHome, randomUsername, randomPassword, randomEmail
|
||||
} = require('./helper.js');
|
||||
|
||||
let firstName;
|
||||
let lastName;
|
||||
let pass;
|
||||
let email;
|
||||
|
||||
const setUserValues = (isEdit) => {
|
||||
client.waitForVisible('input[name="firstName"]', 5000);
|
||||
firstName = randomUsername();
|
||||
lastName = randomUsername();
|
||||
email = randomEmail();
|
||||
client.setValue('input[name="firstName"]', firstName);
|
||||
client.setValue('input[name="lastName"]', lastName);
|
||||
client.setValue('input[name="emailAddress"]', email);
|
||||
if (isEdit) {
|
||||
client.setValue('input[name="currentPassword"]', pass);
|
||||
pass = randomPassword();
|
||||
client.setValue('input[name="newPassword"]', pass);
|
||||
} else {
|
||||
pass = randomPassword();
|
||||
client.setValue('input[name="password"]', pass);
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = function doSteps(notos) {
|
||||
this.Given(/^I am on the home page$/, () => {
|
||||
goHome(client);
|
||||
});
|
||||
|
||||
function register() {
|
||||
if (client.isVisible('#logout')) {
|
||||
client.click('#logout');
|
||||
}
|
||||
client.waitForVisible('#signup', 5000);
|
||||
client.click('#signup');
|
||||
setUserValues();
|
||||
if (!notos) {
|
||||
client.click('input[name="tos"]');
|
||||
}
|
||||
client.click('#signUpSubmit');
|
||||
}
|
||||
|
||||
this.Given(/^I have an account and I logged in$/, () => {
|
||||
register();
|
||||
});
|
||||
|
||||
function checkName() {
|
||||
client.waitForVisible('#profile', 5000);
|
||||
client.waitForText('#profile', firstName);
|
||||
client.waitForText('#profile', lastName);
|
||||
}
|
||||
|
||||
this.Then(/^I should be logged in$/, () => {
|
||||
client.waitUntil(() => client.isVisible('#logout') === true, 10000);
|
||||
});
|
||||
|
||||
/* this.Given(/^I am signed out$/, () => {
|
||||
* client.waitUntil(() => client.isVisible('#logout') === true, 10000);
|
||||
* });
|
||||
*/
|
||||
|
||||
function closeAlert() {
|
||||
client.waitForVisible('.bert-alert', 5000);
|
||||
client.click('.bert-content');
|
||||
client.waitUntil(() => client.isVisible('.bert-alert') === false, 10000);
|
||||
}
|
||||
|
||||
this.When(/^I sign out$/, () => {
|
||||
if (client.isVisible('.bert-alert')) {
|
||||
client.waitUntil(() => client.isVisible('.bert-alert') === false, 10000);
|
||||
}
|
||||
client.waitForVisible('#logout', 5000);
|
||||
client.click('#logout');
|
||||
});
|
||||
|
||||
function login(badpass) {
|
||||
client.waitForVisible('#login', 10000);
|
||||
client.waitUntil(() => client.isVisible('.bert-alert') === false, 10000);
|
||||
client.click('#login');
|
||||
client.waitForVisible('#loginSubmit', 5000);
|
||||
client.setValue('input[name="emailAddress"]', email);
|
||||
client.setValue('input[name="password"]', badpass ? randomPassword() : pass);
|
||||
client.click('#loginSubmit');
|
||||
closeAlert();
|
||||
}
|
||||
|
||||
this.When(/^I enter my email and password$/, () => {
|
||||
login();
|
||||
});
|
||||
|
||||
this.Then(/^I can edit my profile$/, () => {
|
||||
client.waitForVisible('#profile', 5000);
|
||||
client.click('#profile');
|
||||
setUserValues(true);
|
||||
client.click('#profileSubmit');
|
||||
closeAlert();
|
||||
checkName();
|
||||
});
|
||||
|
||||
this.When(/^I enter incorrect authentication information$/, () => {
|
||||
login(true);
|
||||
});
|
||||
|
||||
this.Then(/^I should see a user not found error$/, () => {
|
||||
client.waitForVisible('.alert-danger', 10000, true);
|
||||
});
|
||||
|
||||
this.Given(/^I register with some name, password and email$/, () => {
|
||||
register();
|
||||
});
|
||||
|
||||
this.Then(/^I should be registered$/, () => {
|
||||
client.waitForVisible('.bert-alert', 10000, true);
|
||||
closeAlert();
|
||||
});
|
||||
|
||||
this.Given(/^I register with some name, password and email but without accept conditions$/, () => {
|
||||
register(true);
|
||||
});
|
||||
|
||||
this.Then(/^I shouldn't be registered$/, () => {
|
||||
client.waitForVisible('.bert-alert', 10000, true);
|
||||
client.waitForVisible('#login', 10000, true);
|
||||
});
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue