diff --git a/src/test/user.js b/src/test/user.js index 67b9d186230e80828f88c85a6fbc53489f5e4acf..04ab8e9e58a521ff2b555c891fa53a919066c2d9 100644 --- a/src/test/user.js +++ b/src/test/user.js @@ -27,6 +27,367 @@ const mongoose = require('../libs/db/mongoose'); 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(() => { @@ -56,24 +417,24 @@ describe('Authenticates a user', () => { } }).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(); - }); + .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) => { @@ -97,21 +458,21 @@ describe('Authenticates a user', () => { } }).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(); - }); + .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) => { @@ -135,21 +496,21 @@ describe('Authenticates a user', () => { } }).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(); - }); + .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) => { @@ -173,20 +534,20 @@ describe('Authenticates a user', () => { } }).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(); - }); + .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) => { @@ -210,19 +571,56 @@ describe('Authenticates a user', () => { } }).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(); - }); + .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(); + }); + }); }); });