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

Commit cad360d

Browse files
committedNov 7, 2019
#19 - Use review payload instead of review summation payload
1 parent aa87b47 commit cad360d

File tree

12 files changed

+113
-112
lines changed

12 files changed

+113
-112
lines changed
 

‎README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## Dependencies
44

5-
- nodejs (v10)
5+
- Nodejs (v10)
66
- Mongodb (v4)
77

88
## Configuration
@@ -54,6 +54,7 @@ npm start
5454
```
5555

5656
## Mock API
57+
5758
For verification purpose, we need a mock app for Topcoder Challenge API and Topcoder Member API. You can run command `npm run mock-api` to start the mock app.
5859

5960
## Heroku Deployment

‎config/default.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ module.exports = {
77
PORT: process.env.PORT || 3000,
88

99
MONGODB_URL: process.env.MONGODB_URL || 'mongodb://localhost:27017/leaderboardDB',
10-
CHALLENGE_API_URL: process.env.CHALLENGE_API_URL || 'https://api.topcoder-dev.com/v3/challenges',
10+
CHALLENGE_API_URL: process.env.CHALLENGE_API_URL || 'https://api.topcoder-dev.com/v4/challenges',
1111
MEMBER_API_URL: process.env.MEMBER_API_URL || 'https://api.topcoder-dev.com/v3/users',
1212

1313
GROUP_IDS: process.env.GROUP_IDS || '202343,20000000', // Comma separated string of Group IDs

‎config/test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
*/
44

55
module.exports = {
6-
CHALLENGE_API_URL: 'https://api.topcoder-dev.com/v3/challenges',
6+
CHALLENGE_API_URL: 'https://api.topcoder-dev.com/v4/challenges',
77
MEMBER_API_URL: 'https://api.topcoder-dev.com/v3/users',
88
MOCK_API_PORT: 3001
99
}

‎docs/Leaderboard API.postman_collection.json

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"info": {
3-
"_postman_id": "85361413-4f1c-4fb2-9433-01dc999d7e4b",
3+
"_postman_id": "adfe8d84-410e-4628-9a1c-f74e16e89c83",
44
"name": "Leaderboard API",
55
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
66
},
@@ -180,7 +180,7 @@
180180
],
181181
"body": {
182182
"mode": "raw",
183-
"raw": "{\n\t\"id\": \"161d3655-9c80-4f90-8051-e209e8c21701\",\n \"submissionId\": \"261d3655-9c80-4f90-8051-e209e8c21701\",\n \"metadata\": {\n \"assertions\": {\n \"pending\": 0,\n \"failed\": 1,\n \"total\": 10\n },\n \"tests\": {\n \"total\": 10\n }\n },\n \"aggregateScore\": 90\n}",
183+
"raw": "{\n\t\"id\": \"161d3655-9c80-4f90-8051-e209e8c21701\",\n \"submissionId\": \"261d3655-9c80-4f90-8051-e209e8c21701\",\n \"metadata\": {\n \"assertions\": {\n \"pending\": 0,\n \"failed\": 1,\n \"total\": 10\n },\n \"tests\": {\n \"total\": 10\n }\n },\n \"score\": 90\n}",
184184
"options": {
185185
"raw": {
186186
"language": "json"
@@ -217,7 +217,7 @@
217217
],
218218
"body": {
219219
"mode": "raw",
220-
"raw": "{\n\t\"id\": \"161d3655-9c80-4f90-8051-e209e8c21701\",\n \"submissionId\": \"261d3655-9c80-4f90-8051-e209e8c21701\",\n \"aggregateScore\": 0\n}",
220+
"raw": "{\n\t\"id\": \"161d3655-9c80-4f90-8051-e209e8c21701\",\n \"submissionId\": \"261d3655-9c80-4f90-8051-e209e8c21701\",\n \"score\": 0\n}",
221221
"options": {
222222
"raw": {
223223
"language": "json"
@@ -254,7 +254,7 @@
254254
],
255255
"body": {
256256
"mode": "raw",
257-
"raw": "{\n\t\"id\": \"161d3655-9c80-4f90-8051-e209e8c21701\",\n \"submissionId\": \"261d3655-9c80-4f90-8051-e209e8c21701\",\n \"aggregateScore\": 0\n}",
257+
"raw": "{\n\t\"id\": \"161d3655-9c80-4f90-8051-e209e8c21701\",\n \"submissionId\": \"261d3655-9c80-4f90-8051-e209e8c21701\",\n \"score\": 0\n}",
258258
"options": {
259259
"raw": {
260260
"language": "json"
@@ -296,7 +296,7 @@
296296
],
297297
"body": {
298298
"mode": "raw",
299-
"raw": "{\n\t\"id\": \"161d3655-9c80-4f90-8051-e209e8c21701\",\n \"metadata\": {\n \"assertions\": {\n \"pending\": 0,\n \"failed\": 1,\n \"total\": 5\n },\n \"tests\": {\n \"total\": 5\n }\n },\n \"aggregateScore\": 80\n}"
299+
"raw": "{\n\t\"id\": \"161d3655-9c80-4f90-8051-e209e8c21701\",\n \"metadata\": {\n \"assertions\": {\n \"pending\": 0,\n \"failed\": 1,\n \"total\": 5\n },\n \"tests\": {\n \"total\": 5\n }\n },\n \"score\": 80\n}"
300300
},
301301
"url": {
302302
"raw": "{{URL}}/leaderboard/challenge/30051825/member/8547899",
@@ -327,7 +327,7 @@
327327
],
328328
"body": {
329329
"mode": "raw",
330-
"raw": "{\n\t\"id\": \"161d3655-9c80-4f90-8051-e209e8c21701\",\n \"aggregateScore\": 80\n}"
330+
"raw": "{\n\t\"id\": \"161d3655-9c80-4f90-8051-e209e8c21701\",\n \"score\": 80\n}"
331331
},
332332
"url": {
333333
"raw": "{{URL}}/leaderboard/challenge/30051825/member/5547899",
@@ -388,13 +388,13 @@
388388
"method": "DELETE",
389389
"header": [],
390390
"url": {
391-
"raw": "{{URL}}/leaderboard/reviewSummation/661d3655-9c80-4f90-8051-e209e8c21704",
391+
"raw": "{{URL}}/leaderboard/review/661d3655-9c80-4f90-8051-e209e8c21704",
392392
"host": [
393393
"{{URL}}"
394394
],
395395
"path": [
396396
"leaderboard",
397-
"reviewSummation",
397+
"review",
398398
"661d3655-9c80-4f90-8051-e209e8c21704"
399399
]
400400
}
@@ -407,13 +407,13 @@
407407
"method": "DELETE",
408408
"header": [],
409409
"url": {
410-
"raw": "{{URL}}/leaderboard/reviewSummation/231d3655-9c80-4f90-8051-e209e8c21704",
410+
"raw": "{{URL}}/leaderboard/review/231d3655-9c80-4f90-8051-e209e8c21704",
411411
"host": [
412412
"{{URL}}"
413413
],
414414
"path": [
415415
"leaderboard",
416-
"reviewSummation",
416+
"review",
417417
"231d3655-9c80-4f90-8051-e209e8c21704"
418418
]
419419
}

‎package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
"mock-api": "NODE_ENV=test node test/common/mock.js",
1111
"lint": "standard",
1212
"lint:fix": "standard --fix",
13-
"test": "nyc --reporter=html --reporter=text mocha test/unit/test.js --require test/common/prepare.js --exit",
14-
"e2e": "nyc --reporter=html --reporter=text mocha test/e2e/test.js --require test/common/prepare.js --exit"
13+
"test": "nyc --reporter=html --reporter=text mocha test/unit/test.js --timeout=20000 --require test/common/prepare.js --exit",
14+
"e2e": "nyc --reporter=html --reporter=text mocha test/e2e/test.js --timeout=20000 --require test/common/prepare.js --exit"
1515
},
1616
"author": "TCSCODER",
1717
"license": "none",

‎src/controllers/LeaderboardController.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@ async function updateLeaderboard (req, res) {
2828
}
2929

3030
/**
31-
* Delete leaderboard detail by review summation id
31+
* Delete leaderboard detail by review id
3232
* @param req the request
3333
* @param res the response
3434
*/
3535
async function deleteLeaderboard (req, res) {
36-
await LeaderboardService.deleteLeaderboard(req.params.reviewSummationId)
36+
await LeaderboardService.deleteLeaderboard(req.params.reviewId)
3737
res.status(204).end()
3838
}
3939

‎src/models/Leaderboard.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
const Schema = require('mongoose').Schema
66

77
const LeaderboardSchema = new Schema({
8-
reviewSummationId: { type: String },
8+
reviewId: { type: String },
99
submissionId: { type: String },
1010
challengeId: { type: String },
1111
memberId: { type: String },

‎src/routes.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ module.exports = {
1919
method: 'updateLeaderboard'
2020
}
2121
},
22-
'/leaderboard/reviewSummation/:reviewSummationId': {
22+
'/leaderboard/review/:reviewId': {
2323
delete: {
2424
controller: 'LeaderboardController',
2525
method: 'deleteLeaderboard'

‎src/services/LeaderboardService.js

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ async function getLeaderboard (challengeId, memberId) {
2828
* @returns {Number} the test passed number
2929
*/
3030
function getTestsPassed (metadata) {
31-
const tests = metadata.tests || { total: 0, pending: 0, failed: 0}
31+
const tests = metadata.tests || { total: 0, pending: 0, failed: 0 }
3232

3333
let testsPassed = tests.total - tests.pending - tests.failed
3434

@@ -42,35 +42,35 @@ function getTestsPassed (metadata) {
4242
/**
4343
* Calculate test passed number and total test cases
4444
*
45-
* @param {Object} reviewSummation the review summation
45+
* @param {Object} review the review
4646
* @return {Object} testsPassed and totalTestCases
4747
*/
48-
function calculateResult (reviewSummation) {
48+
function calculateResult (review) {
4949
let testsPassed = 0
5050
let totalTestCases = 0
5151

52-
if (reviewSummation.metadata) {
53-
testsPassed = getTestsPassed(reviewSummation.metadata)
54-
totalTestCases = _.get(reviewSummation, 'metadata.tests.total', 0)
52+
if (review.metadata) {
53+
testsPassed = getTestsPassed(review.metadata)
54+
totalTestCases = _.get(review, 'metadata.tests.total', 0)
5555
}
5656
return { testsPassed, totalTestCases }
5757
}
5858

5959
/**
60-
* Create leaderboard using review summation data
60+
* Create leaderboard using review data
6161
*
6262
* @param {String} challengeId the challenge id
6363
* @param {String} memberId the member id
64-
* @param {Object} reviewSummation the review summation data
64+
* @param {Object} review the review data
6565
* @returns {Object} the created leaderboard
6666
*/
67-
async function createLeaderboard (challengeId, memberId, reviewSummation) {
67+
async function createLeaderboard (challengeId, memberId, review) {
6868
const existRecords = await getLeaderboard(challengeId, memberId)
6969
if (existRecords.length > 0) {
7070
throw new errors.ConflictError(`Leaderboard record with challenge # ${challengeId} and member # ${memberId} already exists.`)
7171
}
7272

73-
const { testsPassed, totalTestCases } = calculateResult(reviewSummation)
73+
const { testsPassed, totalTestCases } = calculateResult(review)
7474

7575
const challengeDetailRes = await helper.reqToAPI(
7676
`${config.CHALLENGE_API_URL}?filter=id=${challengeId}`)
@@ -94,12 +94,12 @@ async function createLeaderboard (challengeId, memberId, reviewSummation) {
9494

9595
// Record to be written into MongoDB
9696
const record = {
97-
reviewSummationId: reviewSummation.id,
98-
submissionId: reviewSummation.submissionId,
97+
reviewId: review.id,
98+
submissionId: review.submissionId,
9999
memberId,
100100
challengeId,
101101
handle: member.handle,
102-
aggregateScore: reviewSummation.aggregateScore,
102+
aggregateScore: review.score, // For TCO scenario, we will only have 1 review - per member and per challenge
103103
testsPassed,
104104
totalTestCases,
105105
groupIds: _.map(groupIds, e => String(e))
@@ -111,40 +111,40 @@ async function createLeaderboard (challengeId, memberId, reviewSummation) {
111111
createLeaderboard.schema = {
112112
challengeId: joi.string().required(),
113113
memberId: joi.string().required(),
114-
reviewSummation: joi.object().keys({
114+
review: joi.object().keys({
115115
id: joi.string().required(),
116116
submissionId: joi.string().required(),
117-
aggregateScore: joi.number().required()
117+
score: joi.number().required()
118118
}).unknown(true).required()
119119
}
120120

121121
/**
122-
* Update leaderboard detail using review summation data
122+
* Update leaderboard detail using review data
123123
*
124124
* @param {String} challengeId the challenge id
125125
* @param {String} memberId the member id
126-
* @param {Object} reviewSummation the review summation data
126+
* @param {Object} review the review data
127127
* @returns the updated leaderboard detail
128128
*/
129-
async function updateLeaderboard (challengeId, memberId, reviewSummation) {
129+
async function updateLeaderboard (challengeId, memberId, review) {
130130
const existRecords = await getLeaderboard(challengeId, memberId)
131131
if (existRecords.length === 0) {
132132
throw new errors.NotFoundError(`Leaderboard record with challenge # ${challengeId} and member # ${memberId} doesn't exist`)
133133
}
134134

135135
let scoreLevel = 'na'
136136

137-
const { testsPassed, totalTestCases } = calculateResult(reviewSummation)
137+
const { testsPassed, totalTestCases } = calculateResult(review)
138138

139-
if (existRecords[0].aggregateScore > reviewSummation.aggregateScore) {
140-
scoreLevel = 'down';
141-
} else if (existRecords[0].aggregateScore < reviewSummation.aggregateScore) {
142-
scoreLevel = 'up';
139+
if (existRecords[0].aggregateScore > review.score) {
140+
scoreLevel = 'down'
141+
} else if (existRecords[0].aggregateScore < review.score) {
142+
scoreLevel = 'up'
143143
}
144144

145145
_.assignIn(existRecords[0], {
146-
aggregateScore: reviewSummation.aggregateScore,
147-
reviewSummationId: reviewSummation.id,
146+
aggregateScore: review.score,
147+
reviewId: review.id,
148148
testsPassed,
149149
totalTestCases,
150150
scoreLevel
@@ -156,9 +156,9 @@ async function updateLeaderboard (challengeId, memberId, reviewSummation) {
156156
updateLeaderboard.schema = {
157157
challengeId: joi.string().required(),
158158
memberId: joi.string().required(),
159-
reviewSummation: joi.object().keys({
159+
review: joi.object().keys({
160160
id: joi.string().required(),
161-
aggregateScore: joi.number().required()
161+
score: joi.number().required()
162162
}).unknown(true).required()
163163
}
164164

@@ -222,20 +222,20 @@ searchLeaderboards.schema = {
222222
}
223223

224224
/**
225-
* Delete leaderboard by review summation id.
225+
* Delete leaderboard by review id.
226226
*
227-
* @param {String} reviewSummationId the review summation id
227+
* @param {String} reviewId the review id
228228
*/
229-
async function deleteLeaderboard (reviewSummationId) {
230-
const entity = await Leaderboard.findOne({ reviewSummationId })
229+
async function deleteLeaderboard (reviewId) {
230+
const entity = await Leaderboard.findOne({ reviewId })
231231
if (!entity) {
232-
throw new errors.NotFoundError(`Leaderboard record with reviewSummation ID: ${reviewSummationId} doesn't exist`)
232+
throw new errors.NotFoundError(`Leaderboard record with review id: ${reviewId} doesn't exist`)
233233
}
234234
await entity.remove()
235235
}
236236

237237
deleteLeaderboard.schema = {
238-
reviewSummationId: joi.string().required()
238+
reviewId: joi.string().required()
239239
}
240240

241241
module.exports = {

‎src/test-data.js

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,78 +7,78 @@ const logger = require('./common/logger')
77

88
const insertData = async () => {
99
await Leaderboard.create({
10-
reviewSummationId: '661d3655-9c80-4f90-8051-e209e8c21704',
10+
reviewId: '661d3655-9c80-4f90-8051-e209e8c21704',
1111
submissionId: '2b5e54b9-f03c-418b-92f3-5f072b0f3bf4',
1212
challengeId: '30104644',
1313
memberId: '123456',
1414
handle: 'user1',
15-
aggregateScore: 100,
15+
score: 100,
1616
testsPassed: 10,
1717
totalTestCases: 10,
1818
groupIds: ['100', '200']
1919
})
2020
await Leaderboard.create({
21-
reviewSummationId: '661d3655-9c80-4f90-8051-e209e8c21705',
21+
reviewId: '661d3655-9c80-4f90-8051-e209e8c21705',
2222
submissionId: '2b5e54b9-f03c-418b-92f3-5f072b0f3bf5',
2323
challengeId: '30104644',
2424
memberId: '123457',
2525
handle: 'user2',
26-
aggregateScore: 90,
26+
score: 90,
2727
testsPassed: 9,
2828
totalTestCases: 10,
2929
groupIds: ['100', '200']
3030
})
3131
await Leaderboard.create({
32-
reviewSummationId: '661d3655-9c80-4f90-8051-e209e8c21706',
32+
reviewId: '661d3655-9c80-4f90-8051-e209e8c21706',
3333
submissionId: '2b5e54b9-f03c-418b-92f3-5f072b0f3bf6',
3434
challengeId: '30104644',
3535
memberId: '123458',
3636
handle: 'user3',
37-
aggregateScore: 80,
37+
score: 80,
3838
testsPassed: 8,
3939
totalTestCases: 10,
4040
groupIds: ['100', '200']
4141
})
4242
await Leaderboard.create({
43-
reviewSummationId: '661d3655-9c80-4f90-8051-e209e8c21701',
43+
reviewId: '661d3655-9c80-4f90-8051-e209e8c21701',
4444
submissionId: '2b5e54b9-f03c-418b-92f3-5f072b0f3bf1',
4545
challengeId: '30104645',
4646
memberId: '123456',
4747
handle: 'user1',
48-
aggregateScore: 40,
48+
score: 40,
4949
testsPassed: 8,
5050
totalTestCases: 20,
5151
groupIds: ['100', '200']
5252
})
5353
await Leaderboard.create({
54-
reviewSummationId: '661d3655-9c80-4f90-8051-e209e8c21702',
54+
reviewId: '661d3655-9c80-4f90-8051-e209e8c21702',
5555
submissionId: '2b5e54b9-f03c-418b-92f3-5f072b0f3bf2',
5656
challengeId: '30104645',
5757
memberId: '123457',
5858
handle: 'user2',
59-
aggregateScore: 50,
59+
score: 50,
6060
testsPassed: 10,
6161
totalTestCases: 20,
6262
groupIds: ['100', '200']
6363
})
6464
await Leaderboard.create({
65-
reviewSummationId: '661d3655-9c80-4f90-8051-e209e8c21703',
65+
reviewId: '661d3655-9c80-4f90-8051-e209e8c21703',
6666
submissionId: '2b5e54b9-f03c-418b-92f3-5f072b0f3bf3',
6767
challengeId: '30104646',
6868
memberId: '123456',
6969
handle: 'user1',
70-
aggregateScore: 190,
70+
score: 190,
7171
testsPassed: 4,
7272
totalTestCases: 6,
7373
groupIds: ['100']
7474
})
7575
await Leaderboard.create({
76-
reviewSummationId: '661d3655-9c80-4f90-8051-e209e8c21709',
76+
reviewId: '661d3655-9c80-4f90-8051-e209e8c21709',
7777
submissionId: '2b5e54b9-f03c-418b-92f3-5f072b0f3bf9',
7878
challengeId: '30104646',
7979
memberId: '123458',
8080
handle: 'user3',
81-
aggregateScore: 200,
81+
score: 200,
8282
testsPassed: 5,
8383
totalTestCases: 6,
8484
groupIds: ['100']

‎test/e2e/test.js

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ describe('Topcoder - Leaderboard API E2E Tests', () => {
8787
const result = res.body
8888
expect(result.length).to.equal(1)
8989
expect(result[0]).to.deep.equal({
90-
reviewSummationId: '661d3655-9c80-4f90-8051-e209e8c21706',
90+
reviewId: '661d3655-9c80-4f90-8051-e209e8c21706',
9191
submissionId: '2b5e54b9-f03c-418b-92f3-5f072b0f3bf6',
9292
challengeId: '30104644',
9393
memberId: '123458',
@@ -173,13 +173,13 @@ describe('Topcoder - Leaderboard API E2E Tests', () => {
173173
.send({
174174
id: '161d3655-9c80-4f90-8051-e209e8c21701',
175175
submissionId: '261d3655-9c80-4f90-8051-e209e8c21701',
176-
aggregateScore: 0
176+
score: 0
177177
})
178178

179179
expect(res.status).to.equal(200)
180180
expect(res.body).to.deep.equal({
181181
groupIds: [ '20000000' ],
182-
reviewSummationId: '161d3655-9c80-4f90-8051-e209e8c21701',
182+
reviewId: '161d3655-9c80-4f90-8051-e209e8c21701',
183183
submissionId: '261d3655-9c80-4f90-8051-e209e8c21701',
184184
memberId: '8547899',
185185
challengeId: '30051825',
@@ -206,13 +206,13 @@ describe('Topcoder - Leaderboard API E2E Tests', () => {
206206
total: 10
207207
}
208208
},
209-
aggregateScore: 90
209+
score: 90
210210
})
211211

212212
expect(res.status).to.equal(200)
213213
expect(res.body).to.deep.equal({
214214
groupIds: [ '202343', '20000000' ],
215-
reviewSummationId: '161d3655-9c80-4f90-8051-e209e8c21702',
215+
reviewId: '161d3655-9c80-4f90-8051-e209e8c21702',
216216
submissionId: '261d3655-9c80-4f90-8051-e209e8c21702',
217217
memberId: '8547899',
218218
challengeId: '30051826',
@@ -235,13 +235,13 @@ describe('Topcoder - Leaderboard API E2E Tests', () => {
235235
failed: 1
236236
}
237237
},
238-
aggregateScore: 0
238+
score: 0
239239
})
240240

241241
expect(res.status).to.equal(200)
242242
expect(res.body).to.deep.equal({
243243
groupIds: [ '20000000' ],
244-
reviewSummationId: '161d3655-9c80-4f90-8051-e209e8c21703',
244+
reviewId: '161d3655-9c80-4f90-8051-e209e8c21703',
245245
submissionId: '261d3655-9c80-4f90-8051-e209e8c21703',
246246
memberId: '22688726',
247247
challengeId: '30051825',
@@ -259,13 +259,13 @@ describe('Topcoder - Leaderboard API E2E Tests', () => {
259259
id: '161d3655-9c80-4f90-8051-e209e8c21704',
260260
submissionId: '261d3655-9c80-4f90-8051-e209e8c21704',
261261
metadata: { },
262-
aggregateScore: 0
262+
score: 0
263263
})
264264

265265
expect(res.status).to.equal(200)
266266
expect(res.body).to.deep.equal({
267267
groupIds: [ '202343', '20000000' ],
268-
reviewSummationId: '161d3655-9c80-4f90-8051-e209e8c21704',
268+
reviewId: '161d3655-9c80-4f90-8051-e209e8c21704',
269269
submissionId: '261d3655-9c80-4f90-8051-e209e8c21704',
270270
memberId: '22688726',
271271
challengeId: '30051826',
@@ -282,7 +282,7 @@ describe('Topcoder - Leaderboard API E2E Tests', () => {
282282
.send({
283283
id: '161d3655-9c80-4f90-8051-e209e8c21705',
284284
submissionId: '261d3655-9c80-4f90-8051-e209e8c21705',
285-
aggregateScore: 50
285+
score: 50
286286
})
287287

288288
expect(res.status).to.equal(400)
@@ -295,7 +295,7 @@ describe('Topcoder - Leaderboard API E2E Tests', () => {
295295
.send({
296296
id: '161d3655-9c80-4f90-8051-e209e8c21706',
297297
submissionId: '261d3655-9c80-4f90-8051-e209e8c21706',
298-
aggregateScore: 50
298+
score: 50
299299
})
300300

301301
expect(res.status).to.equal(400)
@@ -308,7 +308,7 @@ describe('Topcoder - Leaderboard API E2E Tests', () => {
308308
.send({
309309
id: '161d3655-9c80-4f90-8051-e209e8c21701',
310310
submissionId: '261d3655-9c80-4f90-8051-e209e8c21701',
311-
aggregateScore: 0
311+
score: 0
312312
})
313313

314314
expect(res.status).to.equal(409)
@@ -348,7 +348,7 @@ describe('Topcoder - Leaderboard API E2E Tests', () => {
348348
})
349349

350350
expect(res.status).to.equal(400)
351-
expect(res.body.message).to.equal('"aggregateScore" is required')
351+
expect(res.body.message).to.equal('"score" is required')
352352
})
353353

354354
it('ignore - create leaderboard with ignored challenge', async () => {
@@ -357,7 +357,7 @@ describe('Topcoder - Leaderboard API E2E Tests', () => {
357357
.send({
358358
id: '161d3655-9c80-4f90-8051-e209e8c21707',
359359
submissionId: '261d3655-9c80-4f90-8051-e209e8c21707',
360-
aggregateScore: 50
360+
score: 50
361361
})
362362
expect(res.status).to.equal(204)
363363
expect(debugLogs[3]).to.equal('Group ID of Challenge # 31000000 is not configured for processing!')
@@ -380,13 +380,13 @@ describe('Topcoder - Leaderboard API E2E Tests', () => {
380380
total: 5
381381
}
382382
},
383-
aggregateScore: 80
383+
score: 80
384384
})
385385

386386
expect(res.status).to.equal(200)
387387
expect(res.body).to.deep.equal({
388388
groupIds: [ '20000000' ],
389-
reviewSummationId: '361d3655-9c80-4f90-8051-e209e8c21701',
389+
reviewId: '361d3655-9c80-4f90-8051-e209e8c21701',
390390
submissionId: '261d3655-9c80-4f90-8051-e209e8c21701',
391391
memberId: '8547899',
392392
challengeId: '30051825',
@@ -402,7 +402,7 @@ describe('Topcoder - Leaderboard API E2E Tests', () => {
402402
.patch('/v5/leaderboard/challenge/30051825/member/5547899')
403403
.send({
404404
id: '361d3655-9c80-4f90-8051-e209e8c21701',
405-
aggregateScore: 80
405+
score: 80
406406
})
407407

408408
expect(res.status).to.equal(404)
@@ -428,7 +428,7 @@ describe('Topcoder - Leaderboard API E2E Tests', () => {
428428
})
429429

430430
expect(res.status).to.equal(400)
431-
expect(res.body.message).to.equal('"aggregateScore" is required')
431+
expect(res.body.message).to.equal('"score" is required')
432432
})
433433
})
434434

@@ -437,19 +437,19 @@ describe('Topcoder - Leaderboard API E2E Tests', () => {
437437

438438
it('delete leaderboard success', async () => {
439439
const res = await chai.request(expressApp)
440-
.delete(`/v5/leaderboard/reviewSummation/${id}`)
440+
.delete(`/v5/leaderboard/review/${id}`)
441441

442442
expect(res.status).to.equal(204)
443-
const result = await Leaderboard.find({ reviewSummationId: id })
443+
const result = await Leaderboard.find({ reviewId: id })
444444
expect(result.length).to.equal(0)
445445
})
446446

447447
it('failure - delete leaderboard not found', async () => {
448448
const res = await chai.request(expressApp)
449-
.delete(`/v5/leaderboard/reviewSummation/${id}`)
449+
.delete(`/v5/leaderboard/review/${id}`)
450450

451451
expect(res.status).to.equal(404)
452-
expect(res.body.message).to.equal(`Leaderboard record with reviewSummation ID: ${id} doesn't exist`)
452+
expect(res.body.message).to.equal(`Leaderboard record with review id: ${id} doesn't exist`)
453453
})
454454
})
455455
})

‎test/unit/test.js

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ describe('Topcoder - Leaderboard API Unit Tests', () => {
5959
const result = await service.searchLeaderboards({ challengeId: '30104644', page: 2, perPage: 2 })
6060
expect(result.length).to.equal(1)
6161
expect(_.omit(result[0]._doc, ['__v', '_id'])).to.deep.equal({
62-
reviewSummationId: '661d3655-9c80-4f90-8051-e209e8c21706',
62+
reviewId: '661d3655-9c80-4f90-8051-e209e8c21706',
6363
submissionId: '2b5e54b9-f03c-418b-92f3-5f072b0f3bf6',
6464
challengeId: '30104644',
6565
memberId: '123458',
@@ -137,11 +137,11 @@ describe('Topcoder - Leaderboard API Unit Tests', () => {
137137
const result = await service.createLeaderboard('30051825', '8547899', {
138138
id: '161d3655-9c80-4f90-8051-e209e8c21701',
139139
submissionId: '261d3655-9c80-4f90-8051-e209e8c21701',
140-
aggregateScore: 0
140+
score: 0
141141
})
142142
expect(_.omit(result._doc, ['__v', '_id'])).to.deep.equal({
143143
groupIds: [ '20000000' ],
144-
reviewSummationId: '161d3655-9c80-4f90-8051-e209e8c21701',
144+
reviewId: '161d3655-9c80-4f90-8051-e209e8c21701',
145145
submissionId: '261d3655-9c80-4f90-8051-e209e8c21701',
146146
memberId: '8547899',
147147
challengeId: '30051825',
@@ -166,12 +166,12 @@ describe('Topcoder - Leaderboard API Unit Tests', () => {
166166
total: 10
167167
}
168168
},
169-
aggregateScore: 90
169+
score: 90
170170
})
171171

172172
expect(_.omit(result._doc, ['__v', '_id'])).to.deep.equal({
173173
groupIds: [ '202343', '20000000' ],
174-
reviewSummationId: '161d3655-9c80-4f90-8051-e209e8c21702',
174+
reviewId: '161d3655-9c80-4f90-8051-e209e8c21702',
175175
submissionId: '261d3655-9c80-4f90-8051-e209e8c21702',
176176
memberId: '8547899',
177177
challengeId: '30051826',
@@ -192,12 +192,12 @@ describe('Topcoder - Leaderboard API Unit Tests', () => {
192192
failed: 1
193193
}
194194
},
195-
aggregateScore: 0
195+
score: 0
196196
})
197197

198198
expect(_.omit(result._doc, ['__v', '_id'])).to.deep.equal({
199199
groupIds: [ '20000000' ],
200-
reviewSummationId: '161d3655-9c80-4f90-8051-e209e8c21703',
200+
reviewId: '161d3655-9c80-4f90-8051-e209e8c21703',
201201
submissionId: '261d3655-9c80-4f90-8051-e209e8c21703',
202202
memberId: '22688726',
203203
challengeId: '30051825',
@@ -213,12 +213,12 @@ describe('Topcoder - Leaderboard API Unit Tests', () => {
213213
id: '161d3655-9c80-4f90-8051-e209e8c21704',
214214
submissionId: '261d3655-9c80-4f90-8051-e209e8c21704',
215215
metadata: { },
216-
aggregateScore: 0
216+
score: 0
217217
})
218218

219219
expect(_.omit(result._doc, ['__v', '_id'])).to.deep.equal({
220220
groupIds: [ '202343', '20000000' ],
221-
reviewSummationId: '161d3655-9c80-4f90-8051-e209e8c21704',
221+
reviewId: '161d3655-9c80-4f90-8051-e209e8c21704',
222222
submissionId: '261d3655-9c80-4f90-8051-e209e8c21704',
223223
memberId: '22688726',
224224
challengeId: '30051826',
@@ -234,7 +234,7 @@ describe('Topcoder - Leaderboard API Unit Tests', () => {
234234
await service.createLeaderboard('30000001', '8547899', {
235235
id: '161d3655-9c80-4f90-8051-e209e8c21705',
236236
submissionId: '261d3655-9c80-4f90-8051-e209e8c21705',
237-
aggregateScore: 50
237+
score: 50
238238
})
239239
throw new Error('should not throw error here')
240240
} catch (err) {
@@ -247,7 +247,7 @@ describe('Topcoder - Leaderboard API Unit Tests', () => {
247247
await service.createLeaderboard('30051826', '10000', {
248248
id: '161d3655-9c80-4f90-8051-e209e8c21706',
249249
submissionId: '261d3655-9c80-4f90-8051-e209e8c21706',
250-
aggregateScore: 50
250+
score: 50
251251
})
252252
throw new Error('should not throw error here')
253253
} catch (err) {
@@ -260,7 +260,7 @@ describe('Topcoder - Leaderboard API Unit Tests', () => {
260260
await service.createLeaderboard('30051825', '8547899', {
261261
id: '161d3655-9c80-4f90-8051-e209e8c21701',
262262
submissionId: '261d3655-9c80-4f90-8051-e209e8c21701',
263-
aggregateScore: 0
263+
score: 0
264264
})
265265
throw new Error('should not throw error here')
266266
} catch (err) {
@@ -272,7 +272,7 @@ describe('Topcoder - Leaderboard API Unit Tests', () => {
272272
try {
273273
await service.createLeaderboard('30051825', '8547899', {
274274
submissionId: '261d3655-9c80-4f90-8051-e209e8c21701',
275-
aggregateScore: 0
275+
score: 0
276276
})
277277
throw new Error('should not throw error here')
278278
} catch (err) {
@@ -284,7 +284,7 @@ describe('Topcoder - Leaderboard API Unit Tests', () => {
284284
try {
285285
await service.createLeaderboard('30051825', '8547899', {
286286
id: '161d3655-9c80-4f90-8051-e209e8c21707',
287-
aggregateScore: 0
287+
score: 0
288288
})
289289
throw new Error('should not throw error here')
290290
} catch (err) {
@@ -300,15 +300,15 @@ describe('Topcoder - Leaderboard API Unit Tests', () => {
300300
})
301301
throw new Error('should not throw error here')
302302
} catch (err) {
303-
assertValidationError(err, '"aggregateScore" is required')
303+
assertValidationError(err, '"score" is required')
304304
}
305305
})
306306

307307
it('ignore - create leaderboard with ignored challenge', async () => {
308308
await service.createLeaderboard('31000000', '22688726', {
309309
id: '161d3655-9c80-4f90-8051-e209e8c21707',
310310
submissionId: '261d3655-9c80-4f90-8051-e209e8c21707',
311-
aggregateScore: 50
311+
score: 50
312312
})
313313
expect(debugLogs[3]).to.equal('Group ID of Challenge # 31000000 is not configured for processing!')
314314
})
@@ -328,11 +328,11 @@ describe('Topcoder - Leaderboard API Unit Tests', () => {
328328
total: 5
329329
}
330330
},
331-
aggregateScore: 80
331+
score: 80
332332
})
333333
expect(_.omit(result._doc, ['__v', '_id'])).to.deep.equal({
334334
groupIds: [ '20000000' ],
335-
reviewSummationId: '361d3655-9c80-4f90-8051-e209e8c21701',
335+
reviewId: '361d3655-9c80-4f90-8051-e209e8c21701',
336336
submissionId: '261d3655-9c80-4f90-8051-e209e8c21701',
337337
memberId: '8547899',
338338
challengeId: '30051825',
@@ -347,7 +347,7 @@ describe('Topcoder - Leaderboard API Unit Tests', () => {
347347
try {
348348
await service.updateLeaderboard('30051825', '5547899', {
349349
id: '361d3655-9c80-4f90-8051-e209e8c21701',
350-
aggregateScore: 80
350+
score: 80
351351
})
352352
throw new Error('should not throw error here')
353353
} catch (err) {
@@ -358,7 +358,7 @@ describe('Topcoder - Leaderboard API Unit Tests', () => {
358358
it('failure - update leaderboard with invalid parameter 1', async () => {
359359
try {
360360
await service.updateLeaderboard('30051825', '8547899', {
361-
aggregateScore: 0
361+
score: 0
362362
})
363363
throw new Error('should not throw error here')
364364
} catch (err) {
@@ -373,7 +373,7 @@ describe('Topcoder - Leaderboard API Unit Tests', () => {
373373
})
374374
throw new Error('should not throw error here')
375375
} catch (err) {
376-
assertValidationError(err, '"aggregateScore" is required')
376+
assertValidationError(err, '"score" is required')
377377
}
378378
})
379379
})
@@ -383,7 +383,7 @@ describe('Topcoder - Leaderboard API Unit Tests', () => {
383383

384384
it('delete leaderboard success', async () => {
385385
await service.deleteLeaderboard(id)
386-
const result = await Leaderboard.find({ reviewSummationId: id })
386+
const result = await Leaderboard.find({ reviewId: id })
387387
expect(result.length).to.equal(0)
388388
})
389389

@@ -392,7 +392,7 @@ describe('Topcoder - Leaderboard API Unit Tests', () => {
392392
await service.deleteLeaderboard(id)
393393
throw new Error('should not throw error here')
394394
} catch (err) {
395-
expect(err.message).to.equal(`Leaderboard record with reviewSummation ID: ${id} doesn't exist`)
395+
expect(err.message).to.equal(`Leaderboard record with review id: ${id} doesn't exist`)
396396
}
397397
})
398398

@@ -401,7 +401,7 @@ describe('Topcoder - Leaderboard API Unit Tests', () => {
401401
await service.deleteLeaderboard()
402402
throw new Error('should not throw error here')
403403
} catch (err) {
404-
assertValidationError(err, '"reviewSummationId" is required')
404+
assertValidationError(err, '"reviewId" is required')
405405
}
406406
})
407407
})

0 commit comments

Comments
 (0)
This repository has been archived.