Skip to content
Snippets Groups Projects
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();
            });
        });
    });
});