-
Vytor Calixto authoredVytor Calixto authored
user.js 21.55 KiB
process.env.NODE_ENV = 'test';
const chai = require('chai');
const dirtyChai = require('dirty-chai');
chai.use(dirtyChai);
const chaiXml = require('chai-xml');
chai.use(chaiXml);
const chaiHttp = require('chai-http');
const assert = chai.assert;
const expect = chai.expect;
const should = chai.should(); // actually call the function
const libs = `${process.cwd()}/libs`;
const server = require(`${libs}/app`);
const mongoose = require('../libs/db/mongoose');
//const Simulation = require('../libs/models/simulation');
const User = require('../libs/models/user');
chai.use(chaiHttp);
describe('Saves a user', () => {
beforeEach(() => {
User.remove({}, (err) => {
console.log('Test collection purged')
});
});
it('should save a user', (done) => {
let newUser = {};
newUser.email = 'lorem@ipsum.com';
newUser.password = '123mudar';
newUser.name = 'Gute';
newUser.cpf = '08236017907';
newUser.schooling = 'Doutorado';
newUser.course = 'Ciência da Computação';
newUser.segment = 'Comunidade acadêmica';
newUser.role = 'Pesquisador';
newUser.institution_name = 'UFPR';
newUser.state = 'PR';
newUser.city = 'Curitiba';
chai.request(server)
.post('/api/v1/user/')
.set('content-type', 'application/x-www-form-urlencoded')
.set('x-apicache-bypass', 'true')
.send(newUser)
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('success');
res.body.success.should.equal(true);
res.body.should.have.property('msg');
res.body.msg.should.be.equal('Usuário cadastrado com sucesso!');
done();
});
});
it('should not save a user without email', (done) => {
let newUser = {};
newUser.email = null;
newUser.password = '123mudar';
newUser.name = 'Gute';
newUser.cpf = '08236017907';
newUser.schooling = 'Doutorado';
newUser.course = 'Ciência da Computação';
newUser.segment = 'Comunidade acadêmica';
newUser.role = 'Pesquisador';
newUser.institution_name = 'UFPR';
newUser.state = 'PR';
newUser.city = 'Curitiba';
chai.request(server)
.post('/api/v1/user/')
.set('content-type', 'application/x-www-form-urlencoded')
.set('x-apicache-bypass', 'true')
.send(newUser)
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('success');
res.body.success.should.equal(false);
res.body.should.have.property('msg');
res.body.msg.should.be.equal('O campo Email é obrigatório.');
done();
});
});
it('should not save a user without password', (done) => {
let newUser = {};
newUser.email = 'lorem@ipsum.com';
newUser.name = 'Gute';
newUser.cpf = '08236017907';
newUser.schooling = 'Doutorado';
newUser.course = 'Ciência da Computação';
newUser.segment = 'Comunidade acadêmica';
newUser.role = 'Pesquisador';
newUser.institution_name = 'UFPR';
newUser.state = 'PR';
newUser.city = 'Curitiba';
chai.request(server)
.post('/api/v1/user/')
.set('content-type', 'application/x-www-form-urlencoded')
.set('x-apicache-bypass', 'true')
.send(newUser)
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('success');
res.body.success.should.equal(false);
res.body.should.have.property('msg');
res.body.msg.should.be.equal('O campo Senha é obrigatório.');
done();
});
});
it('should not save a user with invalid email', (done) => {
let newUser = {};
newUser.email = 'invalid email';
newUser.password = '123mudar';
newUser.name = 'Gute';
newUser.cpf = '08236017907';
newUser.schooling = 'Doutorado';
newUser.course = 'Ciência da Computação';
newUser.segment = 'Comunidade acadêmica';
newUser.role = 'Pesquisador';
newUser.institution_name = 'UFPR';
newUser.state = 'PR';
newUser.city = 'Curitiba';
chai.request(server)
.post('/api/v1/user/')
.set('content-type', 'application/x-www-form-urlencoded')
.set('x-apicache-bypass', 'true')
.send(newUser)
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('success');
res.body.success.should.equal(false);
res.body.should.have.property('msg');
res.body.msg.should.be.equal('O email informado é inválido.');
done();
});
});
it('should not save a user without a name', (done) => {
let newUser = {};
newUser.email = 'lorem@ipsum.com';
newUser.password = '123mudar';
newUser.cpf = '08236017907';
newUser.schooling = 'Doutorado';
newUser.course = 'Ciência da Computação';
newUser.segment = 'Comunidade acadêmica';
newUser.role = 'Pesquisador';
newUser.institution_name = 'UFPR';
newUser.state = 'PR';
newUser.city = 'Curitiba';
chai.request(server)
.post('/api/v1/user/')
.set('content-type', 'application/x-www-form-urlencoded')
.set('x-apicache-bypass', 'true')
.send(newUser)
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('success');
res.body.success.should.equal(false);
res.body.should.have.property('msg');
res.body.msg.should.be.equal('O campo Nome é obrigatório.');
done();
});
});
it('should not save a user without CPF', (done) => {
let newUser = {};
newUser.email = 'lorem@ipsum.com';
newUser.password = '123mudar';
newUser.name = 'Gute';
newUser.schooling = 'Doutorado';
newUser.course = 'Ciência da Computação';
newUser.segment = 'Comunidade acadêmica';
newUser.role = 'Pesquisador';
newUser.institution_name = 'UFPR';
newUser.state = 'PR';
newUser.city = 'Curitiba';
chai.request(server)
.post('/api/v1/user/')
.set('content-type', 'application/x-www-form-urlencoded')
.set('x-apicache-bypass', 'true')
.send(newUser)
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('success');
res.body.success.should.equal(false);
res.body.should.have.property('msg');
res.body.msg.should.be.equal('O campo CPF é obrigatório.');
done();
});
});
it('should not save a user without schooling', (done) => {
let newUser = {};
newUser.email = 'lorem@ipsum.com';
newUser.password = '123mudar';
newUser.name = 'Gute';
newUser.cpf = '08236017907';
newUser.course = 'Ciência da Computação';
newUser.segment = 'Comunidade acadêmica';
newUser.role = 'Pesquisador';
newUser.institution_name = 'UFPR';
newUser.state = 'PR';
newUser.city = 'Curitiba';
chai.request(server)
.post('/api/v1/user/')
.set('content-type', 'application/x-www-form-urlencoded')
.set('x-apicache-bypass', 'true')
.send(newUser)
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('success');
res.body.success.should.equal(false);
res.body.should.have.property('msg');
res.body.msg.should.be.equal('O campo Escolaridade é obrigatório.');
done();
});
});
it('should not save a user without segment', (done) => {
let newUser = {};
newUser.email = 'lorem@ipsum.com';
newUser.password = '123mudar';
newUser.name = 'Gute';
newUser.cpf = '08236017907';
newUser.schooling = 'Doutorado';
newUser.course = 'Ciência da Computação';
newUser.role = 'Pesquisador';
newUser.institution_name = 'UFPR';
newUser.state = 'PR';
newUser.city = 'Curitiba';
chai.request(server)
.post('/api/v1/user/')
.set('content-type', 'application/x-www-form-urlencoded')
.set('x-apicache-bypass', 'true')
.send(newUser)
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('success');
res.body.success.should.equal(false);
res.body.should.have.property('msg');
res.body.msg.should.be.equal('O campo Segmento é obrigatório.');
done();
});
});
it('should not save a user without role', (done) => {
let newUser = {};
newUser.email = 'lorem@ipsum.com';
newUser.password = '123mudar';
newUser.name = 'Gute';
newUser.cpf = '08236017907';
newUser.schooling = 'Doutorado';
newUser.course = 'Ciência da Computação';
newUser.segment = 'Comunidade acadêmica';
newUser.institution_name = 'UFPR';
newUser.state = 'PR';
newUser.city = 'Curitiba';
chai.request(server)
.post('/api/v1/user/')
.set('content-type', 'application/x-www-form-urlencoded')
.set('x-apicache-bypass', 'true')
.send(newUser)
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('success');
res.body.success.should.equal(false);
res.body.should.have.property('msg');
res.body.msg.should.be.equal('O campo Função é obrigatório.');
done();
});
});
it('should not save a user without institution_name', (done) => {
let newUser = {};
newUser.email = 'lorem@ipsum.com';
newUser.password = '123mudar';
newUser.name = 'Gute';
newUser.cpf = '08236017907';
newUser.schooling = 'Doutorado';
newUser.course = 'Ciência da Computação';
newUser.segment = 'Comunidade acadêmica';
newUser.role = 'Pesquisador';
newUser.state = 'PR';
newUser.city = 'Curitiba';
chai.request(server)
.post('/api/v1/user/')
.set('content-type', 'application/x-www-form-urlencoded')
.set('x-apicache-bypass', 'true')
.send(newUser)
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('success');
res.body.success.should.equal(false);
res.body.should.have.property('msg');
res.body.msg.should.be.equal('O campo Instituição em que trabalha é obrigatório.');
done();
});
});
it('should not save a user without state', (done) => {
let newUser = {};
newUser.email = 'lorem@ipsum.com';
newUser.password = '123mudar';
newUser.name = 'Gute';
newUser.cpf = '08236017907';
newUser.schooling = 'Doutorado';
newUser.course = 'Ciência da Computação';
newUser.segment = 'Comunidade acadêmica';
newUser.role = 'Pesquisador';
newUser.institution_name = 'UFPR';
newUser.city = 'Curitiba';
chai.request(server)
.post('/api/v1/user/')
.set('content-type', 'application/x-www-form-urlencoded')
.set('x-apicache-bypass', 'true')
.send(newUser)
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('success');
res.body.success.should.equal(false);
res.body.should.have.property('msg');
res.body.msg.should.be.equal('O campo Estado é obrigatório.');
done();
});
});
it('should not save a user without city', (done) => {
let newUser = {};
newUser.email = 'lorem@ipsum.com';
newUser.password = '123mudar';
newUser.name = 'Gute';
newUser.cpf = '08236017907';
newUser.schooling = 'Doutorado';
newUser.course = 'Ciência da Computação';
newUser.segment = 'Comunidade acadêmica';
newUser.role = 'Pesquisador';
newUser.institution_name = 'UFPR';
newUser.state = 'Paraná';
chai.request(server)
.post('/api/v1/user/')
.set('content-type', 'application/x-www-form-urlencoded')
.set('x-apicache-bypass', 'true')
.send(newUser)
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('success');
res.body.success.should.equal(false);
res.body.should.have.property('msg');
res.body.msg.should.be.equal('O campo Cidade é obrigatório.');
done();
});
});
})
describe('Authenticates a user', () => {
beforeEach(() => {
User.remove({}, (err) => {
console.log('Test collection purged');
});
});
it('should authenticate a user', (done) => {
let newUser = new User();
newUser.email = 'lorem@ipsum.com';
newUser.password = '123mudar';
newUser.name = 'Gute';
newUser.cpf = '08236017907';
newUser.schooling = 'Doutorado';
newUser.course = 'Ciência da Computação';
newUser.segment = 'Comunidade acadêmica';
newUser.role = 'Pesquisador';
newUser.institution_name = 'UFPR';
newUser.state = 'PR';
newUser.city = 'Curitiba';
newUser.save((err) => {
if (err) {
console.log('MongoDB error:' + err);
}
}).then(function(newuser){
chai.request(server)
.post('/api/v1/user/authenticate')
.set('content-type', 'application/x-www-form-urlencoded')
.set('x-apicache-bypass', 'true')
.send({email: 'lorem@ipsum.com',
password: '123mudar'})
.end((err, res) => {
let token;
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('success');
res.body.success.should.equal(true);
res.body.should.have.property('token');
token = res.body.token;
token.substr(0, 3).should.equal('JWT');
done();
});
});
});
it('should not authenticate a user with wrong password', (done) => {
let newUser = new User();
newUser.email = 'lorem@ipsum.com';
newUser.password = '123mudar';
newUser.name = 'Gute';
newUser.cpf = '08236017907';
newUser.schooling = 'Doutorado';
newUser.course = 'Ciência da Computação';
newUser.segment = 'Comunidade acadêmica';
newUser.role = 'Pesquisador';
newUser.institution_name = 'UFPR';
newUser.state = 'PR';
newUser.city = 'Curitiba';
newUser.save((err) => {
if (err) {
console.log('MongoDB error:' + err);
}
}).then(function(newuser){
chai.request(server)
.post('/api/v1/user/authenticate')
.set('content-type', 'application/x-www-form-urlencoded')
.set('x-apicache-bypass', 'true')
.send({email: 'lorem@ipsum.com',
password: 'umasenhaerrada'})
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('success');
res.body.success.should.equal(false);
res.body.should.have.property('msg');
res.body.msg.should.equal('A Senha informada é inválida.')
done();
});
});
});
it('should not authenticate a user with wrong email', (done) => {
let newUser = new User();
newUser.email = 'lorem@ipsum.com';
newUser.password = '123mudar';
newUser.name = 'Gute';
newUser.cpf = '08236017907';
newUser.schooling = 'Doutorado';
newUser.course = 'Ciência da Computação';
newUser.segment = 'Comunidade acadêmica';
newUser.role = 'Pesquisador';
newUser.institution_name = 'UFPR';
newUser.state = 'PR';
newUser.city = 'Curitiba';
newUser.save((err) => {
if (err) {
console.log('MongoDB error:' + err);
}
}).then(function(newuser){
chai.request(server)
.post('/api/v1/user/authenticate')
.set('content-type', 'application/x-www-form-urlencoded')
.set('x-apicache-bypass', 'true')
.send({email: 'dolor@ipsum.com',
password: '123mudar'})
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('success');
res.body.success.should.equal(false);
res.body.should.have.property('msg');
res.body.msg.should.equal('O Email informado não está cadastrado.')
done();
});
});
});
it('should not authenticate a user with missing email', (done) => {
let newUser = new User();
newUser.email = 'lorem@ipsum.com';
newUser.password = '123mudar';
newUser.name = 'Gute';
newUser.cpf = '08236017907';
newUser.schooling = 'Doutorado';
newUser.course = 'Ciência da Computação';
newUser.segment = 'Comunidade acadêmica';
newUser.role = 'Pesquisador';
newUser.institution_name = 'UFPR';
newUser.state = 'PR';
newUser.city = 'Curitiba';
newUser.save((err) => {
if (err) {
console.log('MongoDB error:' + err);
}
}).then(function(newuser){
chai.request(server)
.post('/api/v1/user/authenticate')
.set('content-type', 'application/x-www-form-urlencoded')
.set('x-apicache-bypass', 'true')
.send({password: '123mudar'})
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('success');
res.body.success.should.equal(false);
res.body.should.have.property('msg');
res.body.msg.should.equal('O campo Email é obrigatório.')
done();
});
});
});
it('should not authenticate a user with missing password', (done) => {
let newUser = new User();
newUser.email = 'lorem@ipsum.com';
newUser.password = '123mudar';
newUser.name = 'Gute';
newUser.cpf = '08236017907';
newUser.schooling = 'Doutorado';
newUser.course = 'Ciência da Computação';
newUser.segment = 'Comunidade acadêmica';
newUser.role = 'Pesquisador';
newUser.institution_name = 'UFPR';
newUser.state = 'PR';
newUser.city = 'Curitiba';
newUser.save((err) => {
if (err) {
console.log('MongoDB error:' + err);
}
}).then(function(newuser){
chai.request(server)
.post('/api/v1/user/authenticate')
.set('content-type', 'application/x-www-form-urlencoded')
.set('x-apicache-bypass', 'true')
.send({email:'lorem@ipsum.com'})
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('success');
res.body.success.should.equal(false);
res.body.should.have.property('msg');
res.body.msg.should.equal('O campo Senha é obrigatório.')
done();
});
});
});
it('should not authenticate a user with wrong password', (done) => {
let newUser = new User();
newUser.email = 'lorem@ipsum.com';
newUser.password = '123mudar';
newUser.name = 'Gute';
newUser.cpf = '08236017907';
newUser.schooling = 'Doutorado';
newUser.course = 'Ciência da Computação';
newUser.segment = 'Comunidade acadêmica';
newUser.role = 'Pesquisador';
newUser.institution_name = 'UFPR';
newUser.state = 'PR';
newUser.city = 'Curitiba';
newUser.save((err) => {
if (err) {
console.log('MongoDB error:' + err);
}
}).then(function(newuser){
chai.request(server)
.post('/api/v1/user/authenticate')
.set('content-type', 'application/x-www-form-urlencoded')
.set('x-apicache-bypass', 'true')
.send({email:'lorem@ipsum.com', password: '123'})
.end((err, res) => {
res.should.have.status(200);
res.should.be.json;
res.body.should.have.property('success');
res.body.success.should.equal(false);
res.body.should.have.property('msg');
res.body.msg.should.equal('A Senha informada é inválida.')
done();
});
});
});
});