Skip to content

Commit d0bdeda

Browse files
committedSep 11, 2020
update test
1 parent fee7eed commit d0bdeda

File tree

3 files changed

+42
-33
lines changed

3 files changed

+42
-33
lines changed
 

‎lib/plugins/leetcode.js

Lines changed: 34 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,7 @@ plugin.init = function() {
5555
config.app = 'leetcode';
5656
};
5757

58-
plugin.getProblems = function(cb) {
59-
log.debug('running leetcode.getProblems');
58+
plugin.getProblemsWithoutTags = function(cb) {
6059
let problems = [];
6160
const getCategory = function(category, queue, cb) {
6261
plugin.getCategoryProblems(category, function(e, _problems) {
@@ -74,37 +73,40 @@ plugin.getProblems = function(cb) {
7473
const q = new Queue(config.sys.categories, {}, getCategory);
7574
q.run(null, function(e) {
7675
spin.stop();
77-
if (e) return cb(e);
78-
plugin.attachTags(problems, cb);
76+
return cb(e, problems);
7977
});
8078
};
8179

82-
plugin.attachTags = function(problems, cb) {
83-
problems = new Map(problems.map(p => [p.id, p]));
84-
const getTag = function (tag, queue, cb) {
85-
plugin.getTagProblems(tag, function(e, _problems) {
86-
if (e) {
87-
log.debug(tag + ': failed to getTag: ' + e.msg);
88-
} else if (!_problems) {
89-
log.warn(tag + ': retrieve empty tag');
90-
} else {
91-
log.debug(tag + ': getTag got ' + _problems.length + ' problems');
92-
_problems.forEach(function (p) {
93-
let id = parseInt(p.questionId);
94-
if (problems.has(id)) {
95-
problems.get(id).tags.push(tag);
96-
}
97-
})
98-
}
99-
return cb(e);
100-
});
101-
};
102-
spin = h.spin('Downloading tags');
103-
const q = new Queue(config.sys.tags, {}, getTag);
104-
q.run(null, function (e) {
105-
spin.stop();
106-
problems = orderBy(Array.from(problems.values()), [p => p.fid], ['asc']);
107-
return cb(e, problems);
80+
plugin.getProblems = function(cb) {
81+
log.debug('running leetcode.getProblems');
82+
plugin.getProblemsWithoutTags(function(e, problems) {
83+
if (e) return cb(e);
84+
problems = new Map(problems.map(p => [p.id, p]));
85+
const getTag = function (tag, queue, cb) {
86+
plugin.getTagProblems(tag, function(e, _problems) {
87+
if (e) {
88+
log.debug(tag + ': failed to getTag: ' + JSON.stringify(e));
89+
} else if (!_problems) {
90+
log.debug(tag + ': retrieve empty tag');
91+
} else {
92+
log.debug(tag + ': getTag got ' + _problems.length + ' problems');
93+
_problems.forEach(function (p) {
94+
let id = parseInt(p.questionId);
95+
if (problems.has(id)) {
96+
problems.get(id).tags.push(tag);
97+
}
98+
})
99+
}
100+
return cb(e);
101+
});
102+
};
103+
spin = h.spin('Downloading tags');
104+
const q = new Queue(config.sys.tags, {}, getTag);
105+
q.run(null, function (e) {
106+
spin.stop();
107+
problems = orderBy(Array.from(problems.values()), [p => p.fid], ['asc']);
108+
return cb(e, problems);
109+
});
108110
});
109111
}
110112

@@ -129,9 +131,10 @@ plugin.getTagProblems = function(tag, cb) {
129131
operationName: 'getTopicTag'
130132
};
131133
spin.text = 'Downloading tag ' + tag;
132-
request(opts, function(e, resp, body) {
134+
request.post(opts, function(e, resp, body) {
133135
e = plugin.checkError(e, resp, 200);
134136
if (e) return cb(e);
137+
if(!body || !body.data || !body.data.topicTag) return cb('receive invalid response body');
135138
return cb(null, body.data.topicTag.questions);
136139
});
137140
}

‎test/mock/tags.json.20200911

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"data":{"topicTag":{"slug":"array","questions":[{"questionId":"1"},{"questionId":"4"},{"questionId":"11"},{"questionId":"15"},{"questionId":"16"},{"questionId":"18"},{"questionId":"26"},{"questionId":"27"},{"questionId":"31"},{"questionId":"33"},{"questionId":"34"},{"questionId":"35"},{"questionId":"39"},{"questionId":"40"},{"questionId":"41"},{"questionId":"42"},{"questionId":"45"},{"questionId":"48"},{"questionId":"53"},{"questionId":"54"},{"questionId":"55"},{"questionId":"56"},{"questionId":"57"},{"questionId":"59"},{"questionId":"62"},{"questionId":"63"},{"questionId":"64"},{"questionId":"66"},{"questionId":"73"},{"questionId":"74"},{"questionId":"75"},{"questionId":"78"},{"questionId":"79"},{"questionId":"80"},{"questionId":"81"},{"questionId":"84"},{"questionId":"85"},{"questionId":"88"},{"questionId":"90"},{"questionId":"105"},{"questionId":"106"},{"questionId":"118"},{"questionId":"119"},{"questionId":"120"},{"questionId":"121"},{"questionId":"122"},{"questionId":"123"},{"questionId":"126"},{"questionId":"128"},{"questionId":"152"},{"questionId":"153"},{"questionId":"154"},{"questionId":"162"},{"questionId":"163"},{"questionId":"167"},{"questionId":"169"},{"questionId":"189"},{"questionId":"209"},{"questionId":"216"},{"questionId":"217"},{"questionId":"219"},{"questionId":"228"},{"questionId":"229"},{"questionId":"238"},{"questionId":"243"},{"questionId":"245"},{"questionId":"259"},{"questionId":"268"},{"questionId":"277"},{"questionId":"280"},{"questionId":"283"},{"questionId":"287"},{"questionId":"289"},{"questionId":"370"},{"questionId":"380"},{"questionId":"381"},{"questionId":"414"},{"questionId":"442"},{"questionId":"448"},{"questionId":"457"},{"questionId":"485"},{"questionId":"495"},{"questionId":"531"},{"questionId":"532"},{"questionId":"533"},{"questionId":"548"},{"questionId":"560"},{"questionId":"561"},{"questionId":"562"},{"questionId":"565"},{"questionId":"566"},{"questionId":"581"},{"questionId":"605"},{"questionId":"611"},{"questionId":"621"},{"questionId":"624"},{"questionId":"628"},{"questionId":"643"},{"questionId":"644"},{"questionId":"661"},{"questionId":"665"},{"questionId":"667"},{"questionId":"670"},{"questionId":"674"},{"questionId":"689"},{"questionId":"695"},{"questionId":"697"},{"questionId":"713"},{"questionId":"714"},{"questionId":"717"},{"questionId":"718"},{"questionId":"719"},{"questionId":"723"},{"questionId":"724"},{"questionId":"729"},{"questionId":"747"},{"questionId":"748"},{"questionId":"756"},{"questionId":"777"},{"questionId":"779"},{"questionId":"780"},{"questionId":"790"},{"questionId":"798"},{"questionId":"808"},{"questionId":"811"},{"questionId":"852"},{"questionId":"857"},{"questionId":"861"},{"questionId":"864"},{"questionId":"870"},{"questionId":"879"},{"questionId":"898"},{"questionId":"901"},{"questionId":"905"},{"questionId":"924"},{"questionId":"927"},{"questionId":"932"},{"questionId":"936"},{"questionId":"941"},{"questionId":"943"},{"questionId":"950"},{"questionId":"951"},{"questionId":"954"},{"questionId":"958"},{"questionId":"962"},{"questionId":"978"},{"questionId":"982"},{"questionId":"987"},{"questionId":"991"},{"questionId":"1002"},{"questionId":"1009"},{"questionId":"1013"},{"questionId":"1016"},{"questionId":"1019"},{"questionId":"1020"},{"questionId":"1027"},{"questionId":"1031"},{"questionId":"1041"},{"questionId":"1044"},{"questionId":"1049"},{"questionId":"1055"},{"questionId":"1056"},{"questionId":"1062"},{"questionId":"1063"},{"questionId":"1066"},{"questionId":"1071"},{"questionId":"1074"},{"questionId":"1082"},{"questionId":"1083"},{"questionId":"1096"},{"questionId":"1098"},{"questionId":"1102"},{"questionId":"1105"},{"questionId":"1107"},{"questionId":"1108"},{"questionId":"1112"},{"questionId":"1113"},{"questionId":"1137"},{"questionId":"1138"},{"questionId":"1139"},{"questionId":"1145"},{"questionId":"1168"},{"questionId":"1175"},{"questionId":"1206"},{"questionId":"1217"},{"questionId":"1221"},{"questionId":"1227"},{"questionId":"1231"},{"questionId":"1232"},{"questionId":"1241"},{"questionId":"1247"},{"questionId":"1249"},{"questionId":"1253"},{"questionId":"1255"},{"questionId":"1256"},{"questionId":"1262"},{"questionId":"1272"},{"questionId":"1273"},{"questionId":"1280"},{"questionId":"1281"},{"questionId":"1287"},{"questionId":"1289"},{"questionId":"1293"},{"questionId":"1306"},{"questionId":"1308"},{"questionId":"1321"},{"questionId":"1329"},{"questionId":"1342"},{"questionId":"1345"},{"questionId":"1349"},{"questionId":"1350"},{"questionId":"1374"},{"questionId":"1378"},{"questionId":"1386"},{"questionId":"1391"},{"questionId":"1395"},{"questionId":"1396"},{"questionId":"1400"},{"questionId":"1402"},{"questionId":"1413"},{"questionId":"1421"},{"questionId":"1422"},{"questionId":"1426"},{"questionId":"1445"},{"questionId":"1455"},{"questionId":"1463"},{"questionId":"1464"},{"questionId":"1468"},{"questionId":"1476"},{"questionId":"1477"},{"questionId":"1482"},{"questionId":"1483"},{"questionId":"1486"},{"questionId":"1487"},{"questionId":"1491"},{"questionId":"1496"},{"questionId":"1500"},{"questionId":"1505"},{"questionId":"1510"},{"questionId":"1511"},{"questionId":"1514"},{"questionId":"1515"},{"questionId":"1525"},{"questionId":"1528"},{"questionId":"1538"},{"questionId":"1539"},{"questionId":"1548"},{"questionId":"1549"},{"questionId":"1553"},{"questionId":"1556"},{"questionId":"1560"},{"questionId":"1570"},{"questionId":"1572"},{"questionId":"1574"},{"questionId":"1575"},{"questionId":"1580"},{"questionId":"1581"},{"questionId":"1584"},{"questionId":"1586"},{"questionId":"1603"},{"questionId":"1604"},{"questionId":"1605"},{"questionId":"1610"},{"questionId":"1612"},{"questionId":"1615"},{"questionId":"1616"},{"questionId":"1620"},{"questionId":"1622"},{"questionId":"1626"},{"questionId":"1627"},{"questionId":"1631"},{"questionId":"1635"},{"questionId":"1640"},{"questionId":"1646"},{"questionId":"1656"},{"questionId":"1657"},{"questionId":"1675"},{"questionId":"1677"},{"questionId":"1679"},{"questionId":"1682"},{"questionId":"1689"},{"questionId":"1713"}]}}}

‎test/plugins/test_leetcode.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,10 +124,15 @@ describe('plugin:leetcode', function() {
124124
nock('https://leetcode.com')
125125
.get('/api/problems/concurrency/')
126126
.replyWithFile(200, './test/mock/problems.json.20160911');
127-
127+
128+
nock('https://leetcode.com')
129+
.post('/graphql')
130+
.times(config.sys.tags.length)
131+
.replyWithFile(200, './test/mock/tags.json.20200911');
132+
128133
plugin.getProblems(function(e, problems) {
129134
assert.equal(e, null);
130-
assert.equal(problems.length, 377 * 4);
135+
assert.equal(problems.length, 377);
131136
done();
132137
});
133138
});

0 commit comments

Comments
 (0)