Skip to content

Commit c435623

Browse files
Develop (#14)
* * Creating endpoint to list all visits of an area * Changing schema of clients to join area schema * * Create aggregate to return only last visit of clients of area selected * Covering endpoint of last visit by area * * Change version of node in travis.yml file * * Adding version specific of mongo * * Update mongo version in travis.yml * * Addinf public key mongo * * Remove command to add user in mongo
1 parent ba88147 commit c435623

4 files changed

Lines changed: 98 additions & 5 deletions

File tree

.travis.yml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,19 @@
11
language: node_js
22
node_js:
3-
- "4.1"
3+
- "4.4"
4+
before_install:
5+
- sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927
6+
- echo "deb http://repo.mongodb.org/apt/ubuntu precise/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
7+
- sudo apt-get update
8+
- sudo apt-get install -y mongodb-org=3.2.10 mongodb-org-server=3.2.10 mongodb-org-shell=3.2.10 mongodb-org-mongos=3.2.10 mongodb-org-tools=3.2.10
9+
- mongo --version
410

511
services:
612
- mongodb
713

814
before_script:
915
- cd server/
1016
- npm install
11-
- mongo iclient_test --eval 'db.addUser("travis", "test");'
1217

1318
script:
1419
- npm run coverage

server/api/v1/visit.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,5 +89,36 @@ module.exports = function (api) {
8989
};
9090
}));
9191

92+
api.get("/visit/area/:id", verifyJWT, wagner.invoke(function (Visit) {
93+
return function (req, res) {
94+
var query = {'client.area._id' : req.params.id};
95+
Visit.aggregate([
96+
{ $match: query},
97+
{ $sort: {visit_date: -1}},
98+
{ $group: {
99+
_id: "$client.name",
100+
last_visit: {$first: "$visit_date"},
101+
client: {$addToSet : "$client"},
102+
}
103+
},
104+
{ $unwind: "$last_visit"},
105+
],
106+
function (error, visits) {
107+
if (error) {
108+
return res.
109+
status(status.INTERNAL_SERVER_ERROR).
110+
json({ error : error.toString() });
111+
}
112+
if (visits.length <= 0) {
113+
return res.
114+
status(status.NOT_FOUND).
115+
json({ error: "Not Found"});
116+
}
117+
118+
return res.json({ visits : visits});
119+
});
120+
};
121+
}));
122+
92123
return api;
93124
};

server/schemas/client.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
var mongoose = require("mongoose");
2+
var Area = require('./area');
23

34
var clientSchema = {
45
name : {
@@ -20,7 +21,7 @@ var clientSchema = {
2021
required: true
2122
},
2223
area : {
23-
type: String,
24+
type: Area.areaSchema,
2425
required: true
2526
},
2627
frequency : {

server/test/visit_api.js

Lines changed: 58 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,15 +58,15 @@ module.exports = function () {
5858
"name" : "Gabriel",
5959
"address" : "Street 23",
6060
"city" : "London",
61-
"area" : "Center",
61+
"area" : { "_id": "Center", 'parents' : "Center"},
6262
"frequency" : 10,
6363
"ability" : 200
6464
},
6565
{
6666
"name" : "Gonçalves",
6767
"address" : "Street 32",
6868
"city" : "London",
69-
"area" : "Center",
69+
"area" : { "_id": "Center", 'parents': "Center"},
7070
"frequency" : 20,
7171
"ability" : 200
7272
},
@@ -308,6 +308,62 @@ module.exports = function () {
308308
});
309309
});
310310

311+
it("should show all last visits of area selected", function (done) {
312+
var url = URL_ROOT + "/visit/area/Center";
313+
314+
superagent.get(url)
315+
.set("Authorization", token)
316+
.end(function (error, res) {
317+
assert.ifError(error);
318+
assert.equal(res.status, status.OK);
319+
320+
var results;
321+
assert.doesNotThrow(function (){
322+
results = JSON.parse(res.text).visits;
323+
});
324+
325+
assert.equal(results.length, 2);
326+
assert.notEqual(results[0]._id, results[1]._id);
327+
328+
done();
329+
});
330+
});
331+
332+
it("should not return visits of area selected because the area has not any clients visited", function (done) {
333+
var url = URL_ROOT + "/visit/area/North";
334+
335+
superagent.get(url)
336+
.set("Authorization", token)
337+
.end(function (error, res) {
338+
assert.ok(error);
339+
assert.equal(res.status, status.NOT_FOUND);
340+
341+
var results;
342+
assert.doesNotThrow(function (){
343+
results = JSON.parse(res.text).error;
344+
});
345+
assert.equal(results, "Not Found");
346+
done();
347+
});
348+
});
349+
350+
it("should return erro HTTP when has erro in Visit model", function (done) {
351+
var url = URL_ROOT + "/visit/area/Center";
352+
353+
stubVisit = sinon.stub(Visit, 'aggregate', function(obj, callback) {
354+
callback(new Error('An Error Has Occurred'), []);
355+
});
356+
357+
superagent.get(url)
358+
.set("Authorization", token)
359+
.end(function (error, res) {
360+
stubVisit.restore();
361+
assert.ok(error);
362+
assert.equal(res.status, status.INTERNAL_SERVER_ERROR);
363+
done();
364+
});
365+
});
366+
311367
it("can create a Visit", function (done) {
312368
var url = URL_ROOT + "/visit";
313369

0 commit comments

Comments
 (0)