Skip to content
This repository was archived by the owner on Mar 4, 2025. It is now read-only.

Commit 6f09448

Browse files
committed
Merge pull request #14 from gfzabarino/automaticSwaggerTesting
Added automatic Swagger testing for GET endpoints
2 parents ddfda7d + 387e538 commit 6f09448

File tree

9 files changed

+385
-58
lines changed

9 files changed

+385
-58
lines changed

api/swagger/swagger.yaml

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
swagger: 2.0
1+
swagger: "2.0"
22
info:
33
version: "0.2.1"
44
title: Serenity Challenge API
@@ -1423,6 +1423,10 @@ definitions:
14231423
updatedBy:
14241424
type: string
14251425
description: The handle of the user
1426+
challengeId:
1427+
type: integer
1428+
format: int64
1429+
description: The Challenge id for the scorecard
14261430
ScorecardItemResource:
14271431
required:
14281432
- requirementId
@@ -1449,7 +1453,7 @@ definitions:
14491453
createdAt:
14501454
type: string
14511455
format: date-time
1452-
updateAt:
1456+
updatedAt:
14531457
type: string
14541458
format: date-time
14551459
createdBy:
@@ -1566,7 +1570,7 @@ definitions:
15661570
required:
15671571
- challengeId
15681572
properties:
1569-
Id:
1573+
id:
15701574
type: integer
15711575
format: int64
15721576
description: postgres primary key
@@ -1577,6 +1581,12 @@ definitions:
15771581
type: integer
15781582
format: int64
15791583
description: The id of the challenge
1584+
createdAt:
1585+
type: string
1586+
format: date-time
1587+
updatedAt:
1588+
type: string
1589+
format: date-time
15801590
ChallengesResponse:
15811591
required:
15821592
- success

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@
4646
"should": "^4.0.4",
4747
"mocha": "1.21.4",
4848
"supertest": "^0.13.0",
49-
"grunt-mocha-test": "^0.12.0"
49+
"grunt-mocha-test": "^0.12.0",
50+
"swagger-parser": "1.0.1"
5051
},
5152
"scripts": {
5253
"start": "grunt",

test/controllers/challenges.js

Lines changed: 120 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ var should = require('should');
1717
var assert = require('assert');
1818
var request = require('supertest');
1919
var async = require('async');
20+
var _ = require('lodash');
2021
var config = require('config');
22+
var sampleData = require('./../sampledata');
2123

2224
var datasource = require('./../../datasource');
2325
datasource.init(config);
@@ -39,14 +41,7 @@ describe('Challenges Controller', function() {
3941
describe('Challenges API', function() {
4042
var challengeId;
4143
beforeEach(function(done) {
42-
reqData = {
43-
title: 'Serenity Challenge',
44-
status: 'SUBMISSION',
45-
account: 'account',
46-
accountId: '12ASD',
47-
prizes: [500.00, 250.00],
48-
regStartAt: '2014-10-09'
49-
};
44+
reqData = _.clone(sampleData.challengeData, true);
5045
done();
5146
});
5247

@@ -149,6 +144,120 @@ describe('Challenges Controller', function() {
149144
});
150145
});
151146

147+
it('should return fields respecting the Swagger documentation file', function (done) {
148+
var challengeId;
149+
var challengeFileId;
150+
var participantId;
151+
var requirementId;
152+
var scorecardId;
153+
var scorecardItemId;
154+
var submissionId;
155+
var submissionFileId;
156+
async.series([function (callback) {
157+
// create challenge
158+
request(url)
159+
.post('/challenges')
160+
.send(sampleData.challengeData)
161+
.end(function(err, res) {
162+
// verify response
163+
should.not.exist(err);
164+
challengeId = res.body.id;
165+
callback();
166+
});
167+
}, function (callback) {
168+
// add file to challenge
169+
request(url)
170+
.post('/challenges/'+challengeId+'/files')
171+
.send(sampleData.challengeFileData)
172+
.end(function(err, res) {
173+
// verify response
174+
should.not.exist(err);
175+
challengeFileId = res.body.id;
176+
callback();
177+
});
178+
}, function (callback) {
179+
// add participant
180+
request(url)
181+
.post('/challenges/'+challengeId+'/participants')
182+
.send(sampleData.participantData)
183+
.end(function(err, res) {
184+
// verify response
185+
should.not.exist(err);
186+
participantId = res.body.id;
187+
callback();
188+
});
189+
}, function (callback) {
190+
// add requirement
191+
request(url)
192+
.post('/challenges/'+challengeId+'/requirements')
193+
.send(sampleData.requirementData)
194+
.end(function(err, res) {
195+
// verify response
196+
should.not.exist(err);
197+
requirementId = res.body.id;
198+
callback();
199+
});
200+
}, function (callback) {
201+
// add scorecard
202+
request(url)
203+
.post('/challenges/'+challengeId+'/scorecards/')
204+
.send(sampleData.scorecardData)
205+
.end(function(err, res) {
206+
// verify response
207+
should.not.exist(err);
208+
scorecardId = res.body.id;
209+
callback();
210+
});
211+
}, function (callback) {
212+
// add scorecard item
213+
request(url)
214+
.post('/challenges/'+challengeId+'/scorecards/'+scorecardId+'/scorecardItems')
215+
.send(sampleData.scorecardItemData)
216+
.end(function(err, res) {
217+
// verify response
218+
should.not.exist(err);
219+
scorecardItemId = res.body.id;
220+
callback();
221+
});
222+
}, function (callback) {
223+
// add submission
224+
request(url)
225+
.post('/challenges/'+challengeId+'/submissions')
226+
.send(sampleData.submissionData)
227+
.end(function(err, res) {
228+
// verify response
229+
should.not.exist(err);
230+
submissionId = res.body.id;
231+
callback();
232+
});
233+
}, function (callback) {
234+
// add file to submission
235+
request(url)
236+
.post('/challenges/'+challengeId+'/submissions/'+submissionId+'/files')
237+
.send(sampleData.challengeFileData)
238+
.end(function(err, res) {
239+
// verify response
240+
should.not.exist(err);
241+
submissionFileId = res.body.id;
242+
callback();
243+
});
244+
}], function () {
245+
var replacementMap = {
246+
challengeId: challengeId,
247+
fileId: {
248+
'/challenges/{challengeId}/files/': challengeFileId,
249+
'/challenges/{challengeId}/submissions/{submissionId}/files/': submissionFileId
250+
},
251+
participantId: participantId,
252+
requirementId: requirementId,
253+
scorecardId: scorecardId,
254+
scorecardItemId: scorecardItemId,
255+
submissionId: submissionId
256+
};
257+
require('./../swaggerTestHelper').validateGetRequests(url, __dirname + '/../../api/swagger/swagger.yaml', replacementMap, done);
258+
});
259+
});
260+
152261
});
153262

154263

@@ -417,14 +526,7 @@ describe('Challenges Controller', function() {
417526
describe('Files API', function() {
418527
var fileId;
419528
beforeEach(function(done) {
420-
reqData = {
421-
title: 'File Title',
422-
filePath: '/uploads',
423-
size: 123,
424-
fileName: 'my-submission.zip',
425-
storageLocation: 'local',
426-
challengeId: 111
427-
};
529+
reqData = _.clone(sampleData.challengeFileData, true);
428530
done();
429531
});
430532

@@ -532,11 +634,7 @@ describe('Challenges Controller', function() {
532634
describe('Participants API', function() {
533635
var participantId;
534636
beforeEach(function(done) {
535-
reqData = {
536-
role: 'submitter',
537-
challengeId: 111,
538-
userId: 222
539-
};
637+
reqData = _.clone(sampleData.participantData, true);
540638
done();
541639
});
542640

@@ -643,10 +741,7 @@ describe('Challenges Controller', function() {
643741
describe('Submissions API', function() {
644742
var submissionId;
645743
beforeEach(function(done) {
646-
reqData = {
647-
challengeId: 111,
648-
submitterId: 222
649-
};
744+
reqData = _.clone(sampleData.submissionData, true);
650745
done();
651746
});
652747

test/controllers/files.js

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ var assert = require('assert');
1818
var request = require('supertest');
1919
var async = require('async');
2020
var config = require('config');
21+
var _ = require('lodash');
22+
var sampleData = require('./../sampledata');
2123

2224
var datasource = require('./../../datasource');
2325
datasource.init(config);
@@ -59,13 +61,7 @@ describe('Files Controller', function() {
5961
describe('Files API', function() {
6062
var fileId;
6163
beforeEach(function(done) {
62-
reqData = {
63-
title: 'File Title',
64-
filePath: '/uploads',
65-
size: 123,
66-
fileName: 'my-submission.zip',
67-
storageLocation: 'local'
68-
};
64+
reqData = _.clone(sampleData.submissionFileData, true);
6965
done();
7066
});
7167

test/controllers/requirements.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ var assert = require('assert');
1818
var request = require('supertest');
1919
var async = require('async');
2020
var config = require('config');
21+
var _ = require('lodash');
22+
var sampleData = require('./../sampledata');
2123

2224
var datasource = require('./../../datasource');
2325
datasource.init(config);
@@ -50,10 +52,8 @@ describe('Requirements Controller', function() {
5052
describe('Requirements API', function() {
5153
var requirementId;
5254
beforeEach(function(done) {
53-
reqData = {
54-
requirementText: 'Need deployment guide',
55-
challengeId: challenge.id,
56-
};
55+
reqData = _.clone(sampleData.requirementData, true);
56+
reqData.challengeId = challenge.id;
5757
done();
5858
});
5959

test/controllers/scorecardItems.js

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ var assert = require('assert');
1818
var request = require('supertest');
1919
var async = require('async');
2020
var config = require('config');
21+
var _ = require('lodash');
22+
var sampleData = require('./../sampledata');
2123

2224
var datasource = require('./../../datasource');
2325
datasource.init(config);
@@ -64,12 +66,7 @@ describe('ScorecardItems Controller', function() {
6466
describe('ScorecardItems API', function() {
6567
var scorecardItemId;
6668
beforeEach(function(done) {
67-
reqData = {
68-
score: 98,
69-
scorecardId: 111,
70-
requirementId: 222,
71-
comment: 'excellent job'
72-
};
69+
reqData = _.clone(sampleData.scorecardItemData, true);
7370
done();
7471
});
7572

test/controllers/scorecards.js

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ var assert = require('assert');
1818
var request = require('supertest');
1919
var async = require('async');
2020
var config = require('config');
21+
var _ = require('lodash');
22+
var sampleData = require('./../sampledata');
2123

2224
var datasource = require('./../../datasource');
2325
datasource.init(config);
@@ -50,18 +52,7 @@ describe('Scorecards Controller', function() {
5052
describe('Scorecards API', function() {
5153
var scorecardId;
5254
beforeEach(function(done) {
53-
reqData = {
54-
scoreSum: 97,
55-
scorePercent: 96.5,
56-
scoreMax: 99.9,
57-
status: 'VALID',
58-
pay: false,
59-
place: 1,
60-
prize: 1500,
61-
challengeId: 111,
62-
reviewerId: 222,
63-
submissionId: 333
64-
};
55+
reqData = _.clone(sampleData.scorecardData, true);
6556
done();
6657
});
6758

0 commit comments

Comments
 (0)