Skip to content

Commit

Permalink
New test cases and various bugs fixed"
Browse files Browse the repository at this point in the history
  • Loading branch information
JohannC committed Nov 20, 2019
1 parent aa69edf commit 4ffeebf
Show file tree
Hide file tree
Showing 3 changed files with 221 additions and 2 deletions.
3 changes: 1 addition & 2 deletions lib/controllers/UserController.js
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,7 @@ exports.resendConfirmationEmail = async function (req) {
exports.recoverPassword = async function (password, passwordRecoveryToken) {
let notifications = [];
if (password.length < 8) {
notifications.push({ type: "error", message: "The password must contain at least 8 characters!" });
return { notifications: notifications };
throw new WrongPasswordError("The password must contain at least 8 characters!" );
}
if (passwordRecoveryToken) {
const userExists = await User.userExists({ 'passwordRecoveryToken': passwordRecoveryToken })
Expand Down
83 changes: 83 additions & 0 deletions test/integration/ConfirmEmail.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
const AppTester = require('../utils/AppTester');
const jwt = require('jsonwebtoken');
const config = require('../../lib/config')

let appTester;
let request;
let token
let user = {
username: "username",
email: "test@test.com",
password: "password",
firstName: "firstname",
lastName: "lastname",
age: 23,
gender: "Mrs",
receiveNewsletter: true
};

let user2 = {
username: "username2",
email: "test2@test.com",
password: "password",
firstName: "firstname",
lastName: "lastname",
age: 23,
gender: "Mrs",
receiveNewsletter: true
};

beforeAll((done) => {
appTester = new AppTester({
dbConfig: {
userDB: "ConfirmEmailTest"
},
onReady: async () => {
try{
request = appTester.getRequestSender();
await appTester.register(user);
await appTester.register(user2);
res = await appTester.login(user.email, user.password);
token = res.data.login.token;
done();
} catch (err) {
done(err);
}
}
});
}, 40000);

test("Confirm email", async (done) => {
const recoveryEmailQuery = {
query: `query{
sendVerificationEmail{
notifications{
type
message
}
}
}`
}
let res = await request.getGraphQL(recoveryEmailQuery, token);
expect(res.data.sendVerificationEmail.notifications[0].message.includes("You will receive a confirmation link at your email address in a few minutes")).toBeTruthy();



const UserModel = require('../../lib/model/UserModel');
const userRetrieved = await UserModel.getUser({username: user.username}, {verified: true});
res = await request.get("/user/email/confirmation?token="+userRetrieved.verificationToken);
expect(res.statusCode).toBe(200);
expect(res.text.includes("You are now verified")).toBeTruthy();
done();
});

test("wrong verify token", async (done) => {
res = await request.get("/user/email/confirmation?token=" + "WRONGTOKEN");
expect(res.statusCode).toBe(200);
expect(res.text.includes("This link is not valid!")).toBeTruthy();
done();
});

afterAll(async (done) => {
await appTester.close(done);
}, 40000);
137 changes: 137 additions & 0 deletions test/integration/RecoverPassword.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,39 @@ let user = {
receiveNewsletter: true
};

let user2 = {
username: "username2",
email: "test2@test.com",
password: "password2",
firstName: "firstname2",
lastName: "lastname2",
age: 23,
gender: "Mrs",
receiveNewsletter: true
};

let user3 = {
username: "username3",
email: "test3@test.com",
password: "password3",
firstName: "firstname3",
lastName: "lastname3",
age: 23,
gender: "Mrs",
receiveNewsletter: true
};

let user4 = {
username: "username4",
email: "test4@test.com",
password: "password4",
firstName: "firstname4",
lastName: "lastname4",
age: 23,
gender: "Mrs",
receiveNewsletter: true
};

beforeAll((done) => {
appTester = new AppTester({
dbConfig: {
Expand All @@ -25,6 +58,9 @@ beforeAll((done) => {
try{
request = appTester.getRequestSender();
await appTester.register(user);
await appTester.register(user2);
await appTester.register(user3);
await appTester.register(user4);
res = await appTester.login(user.email, user.password);
token = res.data.login.token;
done();
Expand Down Expand Up @@ -107,6 +143,107 @@ test("Change password with recorevy token", async (done) => {

});

test("Wrong token", async (done) => {
const recoveryEmailQuery = {
query: `query{
sendPasswordRecorevyEmail(email: "${user2.email}"){
notifications{
type
message
}
}
}`
}
let res = await request.getGraphQL(recoveryEmailQuery);
expect(res.data.sendPasswordRecorevyEmail.notifications[0].message.includes("If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes")).toBeTruthy();

let newPassword = "newPassword";
const updatePasswordQuery = {
query: `mutation{resetMyPassword(password:"${newPassword}" passwordRecoveryToken:"WRONGTOKEN"){
notifications{
type
message
}
}}`
}

res = await request.postGraphQL(updatePasswordQuery);
expect(res.errors[0].message.includes("Unvalid token!")).toBeTruthy();

res = await appTester.login(user2.email, newPassword);
expect(res.errors[0].message.includes("Wrong credentials")).toBeTruthy();

done();
});

test("Password too short", async (done) => {
const recoveryEmailQuery = {
query: `query{
sendPasswordRecorevyEmail(email: "${user3.email}"){
notifications{
type
message
}
}
}`
}
let res = await request.getGraphQL(recoveryEmailQuery);
expect(res.data.sendPasswordRecorevyEmail.notifications[0].message.includes("If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes")).toBeTruthy();
const UserModel = require('../../lib/model/UserModel');
const userRetrieved = await UserModel.getUser({username: user3.username});
expect(typeof userRetrieved.passwordRecoveryToken === "string").toBeTruthy();
expect(userRetrieved.passwordRecoveryToken.length > 10).toBeTruthy();
const updatePasswordQuery = {
query: `mutation{resetMyPassword(password:"toto" passwordRecoveryToken:"${userRetrieved.passwordRecoveryToken}"){
notifications{
type
message
}
}}`
}

res = await request.postGraphQL(updatePasswordQuery);
expect(res.errors[0].message.includes("The password must contain at least 8 characters")).toBeTruthy();
done();
});


test("Token too old", async (done) => {
const recoveryEmailQuery = {
query: `query{
sendPasswordRecorevyEmail(email: "${user4.email}"){
notifications{
type
message
}
}
}`
}
let res = await request.getGraphQL(recoveryEmailQuery);
expect(res.data.sendPasswordRecorevyEmail.notifications[0].message.includes("If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes")).toBeTruthy();
const UserModel = require('../../lib/model/UserModel');
const userRetrieved = await UserModel.getUser({username: user4.username});
let oldDate = new Date()
oldDate.setHours(oldDate.getHours()-2);
await UserModel.updateUser({email: user4.email}, {"passwordRecoveryRequestDate":oldDate});

expect(typeof userRetrieved.passwordRecoveryToken === "string").toBeTruthy();
expect(userRetrieved.passwordRecoveryToken.length > 10).toBeTruthy();
let newPassword = "newPassword";
const updatePasswordQuery = {
query: `mutation{resetMyPassword(password:"${newPassword}" passwordRecoveryToken:"${userRetrieved.passwordRecoveryToken}"){
notifications{
type
message
}
}}`
}

res = await request.postGraphQL(updatePasswordQuery);
expect(res.errors[0].message.includes("This link has expired, please ask a new one.")).toBeTruthy();
done();
});

afterAll(async (done) => {
await appTester.close(done);
}, 40000);

0 comments on commit 4ffeebf

Please sign in to comment.