Skip to content

Latest commit

 

History

History
768 lines (669 loc) · 25.5 KB

File metadata and controls

768 lines (669 loc) · 25.5 KB

TOC

Signup

Signup page

When logged in

Accessing signup page

should redirect to /profile.

return connectedRequest.get('/signup').expect(302).end(function(err, res) {
  should.not.exist(err);
  res.header.location.should.equal('/profile');
  return done();
});

When logged out

Accessing signup page

should return 200.

return request(new App()).get('/signup').expect(200).end(done);

Submitting signup information

User not already registered

should redirect to /signupConfirmation when signup is successfull.

return request(new App()).post('/signup').send({
  email: 'new@email.com',
  password: 'password'
}).expect(302).end(function(err, res) {
  should.not.exist(err);
  res.header['location'].should.include('/signupConfirmation');
  return done();
});

should render /signup with error "×Form has errors" if email is missing.

return request(new App()).post('/signup').send({
  password: 'password'
}).expect(200).end(function(err, res) {
  var $body;
  should.not.exist(err);
  $body = $(res.text);
  $body.find('.alert.alert-danger').text().should.equal('×Form has errors');
  return done();
});

User already registered

should render /signup with error "×Email already exists.".

return request(new App()).post('/signup').send({
  email: userData.email,
  password: 'password'
}).expect(200).end(function(err, res) {
  var $body;
  should.not.exist(err);
  $body = $(res.text);
  $body.find('.alert.alert-danger').text().should.equal('×Email already exists.');
  return done();
});

Signup confirmation page

When logged in

Accessing signup confirmation page

should return 200.

return connectedRequest.get('/signupConfirmation').expect(200).end(done);

When logged out

Accessing signup confirmation page

should return 200.

return request(new App()).get('/signupConfirmation').expect(200).end(done);

Validate account

When logged in

Trying validate account

should return 200.

return connectedRequest.get('/signup/validation').expect(302).end(function(err, res) {
  should.not.exist(err);
  res.header['location'].should.include('/profile');
  return done();
});

When logged out

Query to validate account

should redirect to homepage if no user has this key.

var url;
url = '/signup/validation?key=not-existing-key';
return request(new App()).get(url).expect(302).end(function(err, res) {
  should.not.exist(err);
  res.header['location'].should.include('/');
  return done();
});

should redirect to /signupValidation if key is correct.

var url;
url = '/signup/validation?key=' + fixturesData.testUser.User.fakeUserNotValidated.validationKey;
return request(new App()).get(url).expect(302).end(function(err, res) {
  should.not.exist(err);
  res.header['location'].should.include('/signupValidation');
  return done();
});

Signup validation page

When logged in

Accessing signup validation page

should return 200.

return connectedRequest.get('/signupValidation').expect(200).end(done);

When logged out

Accessing signup validation page

should return 200.

return request(new App()).get('/signupValidation').expect(200).end(done);

Login

When logged in

Accessing login page

should redirect to /profile.

return requestTest.get('/login').expect(302).end(function(err, res) {
  should.not.exist(err);
  res.header.location.should.equal('/profile');
  return done();
});

When logged out

Accessing login page

should return 200.

return request(new App()).get('/login').expect(200).end(function(err, res) {
  should.not.exist(err);
  return done();
});

Submitting login and password

User is validated

should redirect to /profile when authentication is successfull.

return request(new App()).post('/login').send({
  email: userData.email,
  password: 'plop'
}).expect(302).end(function(err, res) {
  should.not.exist(err);
  res.header['location'].should.include('/profile');
  return done();
});

should redirect to /login when authentication is wrong.

return request(new App()).post('/login').send({
  email: userData.email,
  password: 'badpassword'
}).expect(302).end(function(err, res) {
  should.not.exist(err);
  res.header['location'].should.include('/login');
  return done();
});

User is not validated

should redirect to /login even if password is correct.

return request(new App()).post('/login').send({
  email: userData.email,
  password: 'plip'
}).expect(302).end(function(err, res) {
  should.not.exist(err);
  res.header['location'].should.include('/login');
  return done();
});

Locale

By default inspect Accept-Language in http header

Study case when using req.locale (signing up)

with Accept-Language fr-FR should register language "fr" to user.

return requestTest.post('/signup').set('Accept-Language', 'fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4').send({
  email: email,
  password: 'password'
}).expect(302).end(function(err, res) {
  should.not.exist(err);
  return User.findOne({
    email: email
  }, function(err, user) {
    should.exist(user);
    user.language.should.equal = 'fr';
    return done();
  });
});

with Accept-Language fr should register language "fr" to user.

return requestTest.post('/signup').set('Accept-Language', 'fr;q=0.8,en-US;q=0.6,en;q=0.4').send({
  email: email,
  password: 'password'
}).expect(302).end(function(err, res) {
  should.not.exist(err);
  return User.findOne({
    email: email
  }, function(err, user) {
    should.exist(user);
    user.language.should.equal = 'fr';
    return done();
  });
});

with Accept-Language en-US should register language "en" to user.

return requestTest.post('/signup').set('Accept-Language', 'en-US;q=0.6,en;q=0.4').send({
  email: email,
  password: 'password'
}).expect(302).end(function(err, res) {
  should.not.exist(err);
  return User.findOne({
    email: email
  }, function(err, user) {
    should.exist(user);
    user.language.should.equal = 'en';
    return done();
  });
});

with Accept-Language en should register language "en" to user.

return requestTest.post('/signup').set('Accept-Language', 'en;q=0.6,en;q=0.4').send({
  email: email,
  password: 'password'
}).expect(302).end(function(err, res) {
  should.not.exist(err);
  return User.findOne({
    email: email
  }, function(err, user) {
    should.exist(user);
    user.language.should.equal = 'en';
    return done();
  });
});

Next priority goes to req.user.language

Study case when going to homepage with user connected (language = "fr")

with Accept-Language en-US should display in french.

return requestConnected.get('/').set('Accept-Language', 'en;q=0.6,en;q=0.4').expect(200).end(function(err, res) {
  var $body;
  should.not.exist(err);
  $body = $(res.text);
  assert.equal('Profil', $body.find('a[href="/profile"]:eq(0)').text());
  return done();
});

Next priority goes to query ?lang=

Study case when ?lang=fr

with Accept-Language en-US and connected user language "en" should display in french.

return requestConnected.get('/?lang=fr').set('Accept-Language', 'en;q=0.6,en;q=0.4').expect(200).end(function(err, res) {
  var $body;
  should.not.exist(err);
  $body = $(res.text);
  assert.equal('Profil', $body.find('a[href="/profile"]:eq(0)').text());
  return done();
});

Profile

Profile page

When logged in

Accessing profile page

should return 200.

return connectedRequest.get('/profile').expect(200).end(function(err, res) {
  should.not.exist(err);
  return done();
});

Submitting profile information

should not delete already saved params.

var newFirstName;
newFirstName = 'Titi';
return connectedRequest.post('/profile').send({
  firstName: newFirstName
}).expect(302).end(function(err, res) {
  should.not.exist(err);
  res.header['location'].should.include('/profile');
  return User.findOne({
    firstName: newFirstName
  }, function(err, modifiedUser) {
    should.not.exist(err);
    assert.equal(fakeUser.lastName, modifiedUser.lastName);
    return done();
  });
});

When logged out

Accessing profile page

should redirect to /login.

return request(new App()).get('/profile').expect(302).end(function(err, res) {
  should.not.exist(err);
  res.header['location'].should.include('/login');
  return done();
});

Forgot password page

When logged in

Accessing forgot password page

should return 200.

return connectedRequest.get('/request/reset/password').expect(200).end(done);

Submitting email

should return 200 with warning "×Email was not found" if email not found.

return connectedRequest.post('/request/reset/password').send({
  email: 'not@known.email'
}).expect(200).end(function(err, res) {
  var $body;
  should.not.exist(err);
  $body = $(res.text);
  $body.find('.alert.alert-warning').length.should.equal(1);
  should.exist($body.find('.alert.alert-warning').text());
  return done();
});

should redirect to / if email is found.

return connectedRequest.post('/request/reset/password').send({
  email: fixturesData.testUser.User.fakeUser.email
}).expect(302).end(function(err, res) {
  should.not.exist(err);
  res.header['location'].should.include('/');
  return done();
});

When logged out

Accessing forgot password page

should return 200.

return request(new App()).get('/request/reset/password').expect(200).end(done);

Submitting email

should return 200 with warning "×Email was not found" if email not found.

return request(new App()).post('/request/reset/password').send({
  email: 'not@known.email'
}).expect(200).end(function(err, res) {
  var $body;
  should.not.exist(err);
  $body = $(res.text);
  $body.find('.alert.alert-warning').text().should.equal('×Email was not found');
  return done();
});

should redirect to / if email is found.

return request(new App()).post('/request/reset/password').send({
  email: fixturesData.testUser.User.fakeUser.email
}).expect(302).end(function(err, res) {
  should.not.exist(err);
  res.header['location'].should.include('/');
  return done();
});

Reset password page

When logged in

Accessing reset password page

should redirect to /profile.

return connectedRequest.get('/reset/password').expect(302).end(function(err, res) {
  should.not.exist(err);
  res.header['location'].should.include('/profile');
  return done();
});

Trying submitting by http post call

should redirect to /profile.

return connectedRequest.post('/reset/password').expect(302).end(function(err, res) {
  should.not.exist(err);
  res.header['location'].should.include('/profile');
  return done();
});

When logged out

Accessing reset password page

should redirect to homepage if not key in query.

return request(new App()).get('/reset/password').expect(302).end(function(err, res) {
  should.not.exist(err);
  res.header['location'].should.include('/');
  return done();
});

should redirect to homepage if key in query but no value.

return request(new App()).get('/reset/password?key=').expect(302).end(function(err, res) {
  should.not.exist(err);
  res.header['location'].should.include('/');
  return done();
});

should redirect to homepage if regeneratePasswordKey is not found.

return request(new App()).get('/reset/password?key=not-found-regenerate-password-key').expect(302).end(function(err, res) {
  should.not.exist(err);
  res.header['location'].should.include('/');
  return done();
});

should redirect to homepage if regeneratePasswordKey is found but account is not validated.

var url;
url = '/reset/password?key=' + fixturesData.testUser.User.fakeUserNotValidated.regeneratePasswordKey;
return request(new App()).get(url).expect(302).end(function(err, res) {
  should.not.exist(err);
  res.header['location'].should.include('/');
  return done();
});

should return 200 if regeneratePasswordKey is found and account is validated.

var url;
url = '/reset/password?key=' + fixturesData.testUser.User.fakeUser.regeneratePasswordKey;
return request(new App()).get(url).expect(200).end(done);

Submitting new password

should redirect to homepage if regeneratePasswordKey is not found.

return request(new App()).post('/reset/password').send({
  regeneratePasswordKey: 'not-found-regenerate-password-key'
}).expect(302).end(function(err, res) {
  should.not.exist(err);
  res.header['location'].should.include('/');
  return done();
});

should redirect to homepage if regeneratePasswordKey is found but account is not validated.

return request(new App()).post('/reset/password').send({
  regeneratePasswordKey: fixturesData.testUser.User.fakeUserNotValidated.regeneratePasswordKey
}).expect(302).end(function(err, res) {
  should.not.exist(err);
  res.header['location'].should.include('/');
  return done();
});

should return 200 with error "×You must provide a password" if password not defined.

return request(new App()).post('/reset/password').send({
  regeneratePasswordKey: fixturesData.testUser.User.fakeUser.regeneratePasswordKey
}).expect(200).end(function(err, res) {
  var $body;
  should.not.exist(err);
  $body = $(res.text);
  $body.find('.alert.alert-danger').text().should.equal('×You must provide a password');
  return done();
});

should return 200 with error "×You must provide a password" if password empty string.

return request(new App()).post('/reset/password').send({
  regeneratePasswordKey: fixturesData.testUser.User.fakeUser.regeneratePasswordKey,
  password: ''
}).expect(200).end(function(err, res) {
  var $body;
  should.not.exist(err);
  $body = $(res.text);
  $body.find('.alert.alert-danger').text().should.equal('×You must provide a password');
  return done();
});

should return 200 with error "×You must provide a password more complicated" if password too simple.

return request(new App()).post('/reset/password').send({
  regeneratePasswordKey: fixturesData.testUser.User.fakeUser.regeneratePasswordKey,
  password: 'yo'
}).expect(200).end(function(err, res) {
  var $body;
  should.not.exist(err);
  $body = $(res.text);
  $body.find('.alert.alert-danger').text().should.equal('×You must provide a password more complicated');
  return done();
});

should redirect to /login if email is found and password enough complex.

return request(new App()).post('/reset/password').send({
  regeneratePasswordKey: fixturesData.testUser.User.fakeUser.regeneratePasswordKey,
  password: 'enough complex'
}).expect(302).end(function(err, res) {
  should.not.exist(err);
  res.header['location'].should.include('/login');
  return done();
});

Contact

Contact page

When logged in

Accessing page

should return 200.

return connectedRequest.get('/contact').expect(200).end(done);

should not display captcha.

return connectedRequest.get('/contact').expect(200).end(function(err, res) {
  var $body;
  should.not.exist(err);
  $body = $(res.text);
  $body.find('[for="recaptcha_challenge_field"]').length.should.equal(0);
  return done();
});

Submitting information

When logged out

Accessing page

should return 200.

return request(new App()).get('/contact').expect(200).end(done);

should display captcha.

return request(new App()).get('/contact').expect(200).end(function(err, res) {
  var $body;
  should.not.exist(err);
  $body = $(res.text);
  $body.find('[for="recaptcha_challenge_field"]').length.should.equal(1);
  return done();
});

Submitting information