From ff3da334bfd4a811d33cc63a3bdc1be343a2b0fb Mon Sep 17 00:00:00 2001 From: Rudolf Copi Eckelberg <rce16@inf.ufpr.br> Date: Mon, 10 Oct 2016 11:49:51 -0300 Subject: [PATCH] More simulation tests and code cleaning --- src/libs/models/simulation.js | 22 ++++++---- src/test/test.js | 78 +++++++++++++++++++++++++++++++---- 2 files changed, 82 insertions(+), 18 deletions(-) diff --git a/src/libs/models/simulation.js b/src/libs/models/simulation.js index 7d5df97e..aa6589d1 100644 --- a/src/libs/models/simulation.js +++ b/src/libs/models/simulation.js @@ -52,7 +52,12 @@ SimulationSchema.methods.setInclusionGoals = function (g) { return true; }; SimulationSchema.methods.setEnrollments = function (e) { - e = JSON.parse(e); + try{ + e = JSON.parse(e); + } catch (err) { + return false; + } + let success = true; for(let i=0; i<e.length; i++){ if(!(e[i] instanceof Array)){ return false; @@ -60,15 +65,16 @@ SimulationSchema.methods.setEnrollments = function (e) { if(e[i].length !== this.time){ return false; } - for(let n of e[i]) - if(!(n instanceof Number) && (n !== parseInt(n, 10))){ - return false; + e[i].forEach((n, i, array) => { + if(n !== parseInt(n, 10)){ + success = false; } + }); + } - log.debug("rolou"); - this.enrollments = e; + if (success) this.enrollments = e; - return true; + return success; } SimulationSchema.methods.update = function (property, value) { let success = true; @@ -94,8 +100,6 @@ SimulationSchema.methods.update = function (property, value) { case 'name': this.name = value; break; - default: - success = false; } return success; }; diff --git a/src/test/test.js b/src/test/test.js index bcda16e0..ba617e12 100644 --- a/src/test/test.js +++ b/src/test/test.js @@ -424,8 +424,8 @@ describe('Requires a simulation', () => { simulation.should.have.property('name'); simulation.name.should.be.a('string'); simulation.name.should.equal('test_entry'); + done(); }); - done(); }); }); it('should not create a nameless simulation', (done) => { @@ -441,8 +441,8 @@ describe('Requires a simulation', () => { res.body.success.should.equal(false); Simulation.findById(res.body.id, (err, simulation) => { expect(simulation).to.not.exist; + done(); }); - done(); }); }); it('should find an existing simulation', (done) => { @@ -496,8 +496,8 @@ describe('Requires a simulation', () => { simulation.should.have.property('location'); simulation.location.should.be.a('number'); simulation.location.should.equal(5); + done(); }); - done(); }); }); }); @@ -540,8 +540,8 @@ describe('Requires a simulation', () => { simulation.should.have.property('goals_inclusion'); simulation.goals_inclusion.should.be.a('array'); simulation.goals_inclusion.length.should.equal(3); + done(); }); - done(); }); }); }); @@ -578,8 +578,8 @@ describe('Requires a simulation', () => { simulation.should.have.property('time'); simulation.time.should.be.a('number'); simulation.time.should.equal(5); + done(); }); - done(); }); }); }); @@ -644,8 +644,8 @@ describe('Requires a simulation', () => { simulation.should.have.property('time'); simulation.time.should.be.a('number'); simulation.time.should.equal(5); + done(); }); - done(); }); }); }); @@ -663,7 +663,7 @@ describe('Requires a simulation', () => { res.should.have.status(200); res.should.be.json; res.body.should.have.property('success'); - res.body.id.should.equal(false); + res.body.success.should.equal(false); }); done(); }); @@ -683,9 +683,69 @@ describe('Requires a simulation', () => { res.should.have.status(200); res.should.be.json; res.body.should.have.property('success'); - res.body.id.should.equal(false); - }); + res.body.success.should.equal(false); + done(); + }); + }); + }); + it('should not include arrays of non arrays as enrollments', (done) => { + newSimulation = new Simulation(); + newSimulation.name = 'test'; + newSimulation.save((err, sim) => { + let id = sim._id; + chai.request(server) + .post(`/api/v1/simulation/${id}`) + .send({ + time: 5, + enrollments: "[\"Tomato\"]", + }) + .end((err, res) => { + res.should.have.status(200); + res.should.be.json; + res.body.should.have.property('success'); + res.body.success.should.equal(false); + done(); + }); + }); + }); + it('should not accept non array enrollments', (done) => { + newSimulation = new Simulation(); + newSimulation.name = 'test'; + newSimulation.save((err, sim) => { + let id = sim._id; + chai.request(server) + .post(`/api/v1/simulation/${id}`) + .send({ + time: 5, + enrollments: "Am I still wanted here?", + }) + .end((err, res) => { + res.should.have.status(200); + res.should.be.json; + res.body.should.have.property('success'); + res.body.success.should.equal(false); done(); + }); + }); + }); + it('should not accept an enrollment with anything other than a number', (done) => { + newSimulation = new Simulation(); + newSimulation.name = 'test'; + newSimulation.save((err, sim) => { + let id = sim._id; + chai.request(server) + .post(`/api/v1/simulation/${id}`) + .send({ + time: 5, + enrollments: "[[1,2,\"malicious payload\",4,5]]", + }) + .end((err, res) => { + res.should.have.status(200); + res.should.be.json; + res.body.should.have.property('success'); + res.body.success.should.equal(false); + done(); + }); }); }); }); -- GitLab