Skip to content

Commit 571ed83

Browse files
authored
Merge pull request #105 from r-spacex/limits
Add limit query string option
2 parents 9234957 + 6fcaa71 commit 571ed83

File tree

12 files changed

+83
-190
lines changed

12 files changed

+83
-190
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
"jest": {
5151
"coverageDirectory": "./coverage/",
5252
"collectCoverage": true,
53+
"setupTestFrameworkScriptFile": "./test/jest.setup.js",
5354
"collectCoverageFrom": [
5455
"src/**",
5556
"!**/node_modules/**",

src/builders/limit-query.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
2+
/**
3+
* Returns number to limit documents in query
4+
* @param {Object} req The Koa context object to access querystrings
5+
* @return {number} Number of documents to limit
6+
*/
7+
8+
module.exports = (req) => {
9+
let limit = null;
10+
11+
if (req.query.limit) {
12+
limit = parseInt(req.query.limit, 10);
13+
} else {
14+
limit = 0;
15+
}
16+
17+
return limit;
18+
};

src/controllers/capsules.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11

2+
const limitQuery = require('../builders/limit-query');
3+
24
module.exports = {
35

46
/**
@@ -9,6 +11,7 @@ module.exports = {
911
.collection('dragon')
1012
.find({})
1113
.project({ _id: 0 })
14+
.limit(limitQuery(ctx.request))
1215
.toArray();
1316
ctx.body = data;
1417
},

src/controllers/history.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11

22
const historySort = require('../builders/history-sort');
33
const historyQuery = require('../builders/history-query');
4+
const limitQuery = require('../builders/limit-query');
45

56
module.exports = {
67

@@ -13,6 +14,7 @@ module.exports = {
1314
.find(historyQuery(ctx.request))
1415
.project({ _id: 0 })
1516
.sort(historySort(ctx.request))
17+
.limit(limitQuery(ctx.request))
1618
.toArray();
1719
ctx.body = data;
1820
},

src/controllers/launches.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
const launchQuery = require('../builders/launch-query');
33
const sortQuery = require('../builders/launch-sort');
44
const projectQuery = require('../builders/project-query');
5+
const limitQuery = require('../builders/limit-query');
56

67
module.exports = {
78

@@ -42,12 +43,14 @@ module.exports = {
4243
.find(launchQuery(ctx.request))
4344
.project(projectQuery(ctx.request))
4445
.sort(sortQuery(ctx.request))
46+
.limit(limitQuery(ctx.request))
4547
.toArray();
4648
const upcoming = await global.db
4749
.collection('upcoming_v2')
4850
.find(launchQuery(ctx.request))
4951
.project(projectQuery(ctx.request))
5052
.sort(sortQuery(ctx.request))
53+
.limit(limitQuery(ctx.request))
5154
.toArray();
5255
const data = past.concat(upcoming);
5356
ctx.body = data;
@@ -62,6 +65,7 @@ module.exports = {
6265
.find(launchQuery(ctx.request))
6366
.project(projectQuery(ctx.request))
6467
.sort(sortQuery(ctx.request))
68+
.limit(limitQuery(ctx.request))
6569
.toArray();
6670
ctx.body = data;
6771
},
@@ -75,6 +79,7 @@ module.exports = {
7579
.find(launchQuery(ctx.request))
7680
.project(projectQuery(ctx.request))
7781
.sort(sortQuery(ctx.request))
82+
.limit(limitQuery(ctx.request))
7883
.toArray();
7984
ctx.body = data;
8085
},

src/controllers/launchpads.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11

2+
const limitQuery = require('../builders/limit-query');
3+
24
module.exports = {
35

46
/**
@@ -9,6 +11,7 @@ module.exports = {
911
.collection('launchpad')
1012
.find({})
1113
.project({ _id: 0 })
14+
.limit(limitQuery(ctx.request))
1215
.toArray();
1316
ctx.body = data;
1417
},

src/controllers/parts.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11

22
const coreQuery = require('../builders/core-query');
33
const capQuery = require('../builders/capsule-query');
4+
const limitQuery = require('../builders/limit-query');
45

56
module.exports = {
67

@@ -13,6 +14,7 @@ module.exports = {
1314
.find(capQuery(ctx.request))
1415
.project({ _id: 0 })
1516
.sort({ original_launch: 1, capsule_serial: 1 })
17+
.limit(limitQuery(ctx.request))
1618
.toArray();
1719
ctx.body = data;
1820
},
@@ -38,6 +40,7 @@ module.exports = {
3840
.find(coreQuery(ctx.request))
3941
.project({ _id: 0 })
4042
.sort({ original_launch: 1, core_serial: 1 })
43+
.limit(limitQuery(ctx.request))
4144
.toArray();
4245
ctx.body = data;
4346
},

src/controllers/rockets.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11

2+
const limitQuery = require('../builders/limit-query');
3+
24
module.exports = {
35

46
/**
@@ -10,6 +12,7 @@ module.exports = {
1012
.find({})
1113
.project({ _id: 0 })
1214
.sort({ first_flight: 1 })
15+
.limit(limitQuery(ctx.request))
1316
.toArray();
1417
ctx.body = data;
1518
},

test/builders/limit-query.test.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
2+
const request = require('supertest');
3+
const app = require('../../src/app');
4+
5+
beforeAll((done) => {
6+
app.on('ready', () => {
7+
done();
8+
});
9+
});
10+
11+
//------------------------------------------------------------
12+
// Limit Query Test
13+
//------------------------------------------------------------
14+
15+
test('It should return all launches with a limit of zero', async () => {
16+
const response = await request(app.callback()).get('/v2/launches?limit=0');
17+
expect(response.statusCode).toBe(200);
18+
expect(response.body.length).toBeGreaterThan(0);
19+
});
20+
21+
test('It should return only the first five launches', async () => {
22+
const response = await request(app.callback()).get('/v2/launches?limit=5');
23+
expect(response.statusCode).toBe(200);
24+
expect(response.body.length).toBe(5);
25+
});

test/jest.setup.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
jest.setTimeout(10000);

0 commit comments

Comments
 (0)