Skip to content

Commit 0afec01

Browse files
committed
Tests
1 parent 7298797 commit 0afec01

File tree

4 files changed

+173
-48
lines changed

4 files changed

+173
-48
lines changed

lib/github.js

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,18 +39,26 @@ function cmdGet (msg, done) {
3939
Request.get({url: registry, gzip: true}, (err, res, body) => {
4040
if (err) return done(err)
4141

42-
var data = JSON.parse(body)
42+
var data = null
43+
44+
try {data = JSON.parse(body)}
45+
catch (e) {return done(e)}
46+
4347
var distTags = data['dist-tags'] || {}
4448
var latest = ((data.versions || {})[distTags.latest]) || {}
4549
var repository = latest.repository || {}
4650
var url = repository.url || ''
4751

48-
var matches = /[\/:]([^\/:]+?)[\/:]([^\/]+?)(\.git)*$/.exec(url) || []
52+
var matches = /[\/:]([^\/:]+?)[\/:]([^\/]+?)(\.git)*$/.exec(url)
4953
var params = {
5054
name: msg.name,
5155
url: url,
52-
user: matches[1] || '',
53-
repo: matches[2] || ''
56+
user: matches[1] || null,
57+
repo: matches[2] || null
58+
}
59+
60+
if (!params.user || !params.repo) {
61+
return done(new Error('not found on npm'))
5462
}
5563

5664
queryGithub(params, done)

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"start": "node srv/start.js",
77
"isolated": "GITHUB_ISOLATED=true node srv/start.js",
88
"lint": "lab -P test -dL",
9-
"test": "lab -t 84 -v -P test",
9+
"test": "lab -m 5000 -t 75 -v -P test",
1010
"cov": "lab -s -P test -r lcov | coveralls"
1111
},
1212
"main": "lib/github.js",

test/github.test.js

Lines changed: 41 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,37 @@
22

33
var Lab = require('lab')
44
var Code = require('code')
5+
var Proxyquire = require('proxyquire')
6+
var NpmFakeData = require('./npm-data')
57

68
var lab = exports.lab = Lab.script()
79
var describe = lab.describe
810
var it = lab.it
911
var expect = Code.expect
1012

11-
var Seneca = require('seneca')
12-
var Github = require('..')
13+
var NpmProxy = {
14+
request: {
15+
get: (opts, done) => {
16+
if (opts.url.includes('seneca')) {
17+
done(null, {}, JSON.stringify(NpmFakeData))
18+
}
19+
else {
20+
done(new Error('npm error'), null, null)
21+
}
22+
}
23+
}
24+
}
25+
26+
27+
var Seneca = Proxyquire('seneca', {})
28+
var Github = Proxyquire('..', NpmProxy)
1329

14-
function createInstance () {
30+
function createInstance (done) {
1531
var params = {
1632
log: 'silent',
33+
strict: 'false',
1734
errhandler: (err) => {
18-
if (err.at) console.log(err.msg)
35+
if (err.at) done(err)
1936
}
2037
}
2138

@@ -25,34 +42,29 @@ function createInstance () {
2542
}
2643

2744
describe('A valid "role:github,cmd:get" call', () => {
28-
it('has no error', (done) => {
29-
var seneca = createInstance()
45+
it('has data and no error', (done) => {
46+
var seneca = createInstance(done)
3047
var payload = {name: 'seneca'}
3148

3249
seneca.act(`role:github,cmd:get`, payload, (err, reply) => {
3350
expect(err).to.not.exist()
34-
done()
35-
})
36-
})
37-
38-
it('has data', (done) => {
39-
var seneca = createInstance()
40-
var payload = {name: 'seneca'}
41-
42-
seneca.act(`role:github,cmd:get`, payload, (err, reply) => {
4351
expect(reply).to.exist()
4452
done()
4553
})
4654
})
4755

4856
it('returns cached data', (done) => {
49-
var seneca = createInstance()
57+
var seneca = createInstance(done)
5058
var payload = {name: 'seneca'}
5159

5260
seneca.act(`role:github,cmd:get`, payload, (err, reply) => {
61+
expect(err).to.not.exist()
62+
5363
var cachedOne = reply.cached
5464

5565
seneca.act(`role:github,cmd:get`, payload, (err, reply) => {
66+
expect(err).to.not.exist()
67+
5668
var cachedTwo = reply.cached
5769

5870
expect(cachedOne).to.equal(cachedTwo)
@@ -62,7 +74,7 @@ describe('A valid "role:github,cmd:get" call', () => {
6274
})
6375

6476
it('can return non-cached data', (done) => {
65-
var seneca = createInstance()
77+
var seneca = createInstance(done)
6678
var payload = {name: 'seneca'}
6779

6880
seneca.act(`role:github,cmd:get`, payload, (err, reply) => {
@@ -72,6 +84,8 @@ describe('A valid "role:github,cmd:get" call', () => {
7284
payload.update = true
7385

7486
seneca.act(`role:github,cmd:get`, payload, (err, reply) => {
87+
expect(err).to.not.exist()
88+
7589
var cachedTwo = reply.cached
7690

7791
expect(cachedOne).to.be.below(cachedTwo)
@@ -82,51 +96,32 @@ describe('A valid "role:github,cmd:get" call', () => {
8296
})
8397

8498
describe('An invalid "role:github,cmd:get" call', () => {
85-
it('has an error', (done) => {
86-
var seneca = createInstance()
87-
var payload = {name: 'shooobydoobydooboop', fatal$: false}
88-
89-
seneca.act(`role:github,cmd:get`, payload, (err, reply) => {
90-
expect(err).to.exist()
91-
done()
92-
})
93-
})
94-
95-
it('has no data', (done) => {
96-
var seneca = createInstance()
99+
it('has an error and no data', (done) => {
100+
var seneca = createInstance(done)
97101
var payload = {name: 'shooobydoobydooboop'}
98102

99103
seneca.act(`role:github,cmd:get`, payload, (err, reply) => {
104+
expect(err).to.exist()
100105
expect(reply).to.not.exist()
101106
done()
102107
})
103108
})
104109
})
105110

106111
describe('A valid "role:info,req:part" call', () => {
107-
it('has no error', (done) => {
108-
var seneca = createInstance()
112+
it('has no error and has data', (done) => {
113+
var seneca = createInstance(done)
109114
var payload = {name: 'seneca'}
110115

111116
seneca.act(`role:info,req:part`, payload, (err, reply) => {
112117
expect(err).to.not.exist()
113-
done()
114-
})
115-
})
116-
117-
it('has data', (done) => {
118-
var seneca = createInstance()
119-
var payload = {name: 'seneca'}
120-
121-
seneca.act(`role:info,req:part`, payload, (err, reply) => {
122118
expect(reply).to.exist()
123119
done()
124120
})
125121
})
126122

127-
128123
it('responds via "role:info,res:part"', (done) => {
129-
var seneca = createInstance()
124+
var seneca = createInstance(done)
130125
var payload = {name: 'seneca'}
131126

132127
seneca.add(`role:info,res:part`, (msg, cb) => {
@@ -135,6 +130,9 @@ describe('A valid "role:info,req:part" call', () => {
135130
done()
136131
})
137132

138-
seneca.act(`role:info,req:part`, payload)
133+
seneca.act(`role:info,req:part`, payload, (err, reply) => {
134+
expect(err).to.not.exist()
135+
expect(reply).to.exist()
136+
})
139137
})
140138
})

test/npm-data.js

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
module.exports = {
2+
'_id': 'seneca-entity',
3+
'_rev': '3-1a2d436a902cdfaa820f4da8aeeeb4f1',
4+
'name': 'seneca-entity',
5+
'description': 'Entity plugin for seneca',
6+
'dist-tags': {
7+
'latest': '0.0.1'
8+
},
9+
'versions': {
10+
'0.0.1': {
11+
'name': 'seneca-entity',
12+
'description': 'Entity plugin for seneca',
13+
'keywords': [
14+
'seneca',
15+
'plugin'
16+
],
17+
'version': '0.0.1',
18+
'license': 'MIT',
19+
'homepage': 'http://senecajs.org',
20+
'author': {
21+
'name': 'Richard Rodger',
22+
'url': 'http://richardrodger.com/'
23+
},
24+
'dependencies': {
25+
'eraro': '0.4.1',
26+
'jsonic': '0.2.2',
27+
'lodash': '4.0.1'
28+
},
29+
'main': 'entity.js',
30+
'engines': {
31+
'node': '>=0.10.0'
32+
},
33+
'files': [
34+
'LICENSE',
35+
'README.md',
36+
'lib',
37+
'entity.js'
38+
],
39+
'repository': {
40+
'type': 'git',
41+
'url': 'git+https://github.com/senecajs/seneca-entity.git'
42+
},
43+
'scripts': {
44+
'test': 'lab -v -P test -L -t 80',
45+
'test-html': 'lab -v -P test -L -t 80 -r html > testcov.html',
46+
'lint': 'lab -P test -dL'
47+
},
48+
'devDependencies': {
49+
'code': '1.5.0',
50+
'eslint-config-seneca': '1.1.2',
51+
'eslint-plugin-standard': '1.3.1',
52+
'joi': '6.10.x',
53+
'lab': '6.2.x'
54+
},
55+
'gitHead': '61371232af57ee37c573cfc114096088def6f478',
56+
'bugs': {
57+
'url': 'https://github.com/senecajs/seneca-entity/issues'
58+
},
59+
'_id': 'seneca-entity@0.0.1',
60+
'_shasum': '184d2251666938639364256836e6d16db2f8f729',
61+
'_from': '.',
62+
'_npmVersion': '3.3.12',
63+
'_nodeVersion': '5.4.1',
64+
'_npmUser': {
65+
'name': 'wyatt',
66+
'email': 'wpreul@gmail.com'
67+
},
68+
'dist': {
69+
'shasum': '184d2251666938639364256836e6d16db2f8f729',
70+
'tarball': 'https://registry.npmjs.org/seneca-entity/-/seneca-entity-0.0.1.tgz'
71+
},
72+
'maintainers': [
73+
{
74+
'name': 'wyatt',
75+
'email': 'wpreul@gmail.com'
76+
}
77+
],
78+
'_npmOperationalInternal': {
79+
'host': 'packages-5-east.internal.npmjs.com',
80+
'tmp': 'tmp/seneca-entity-0.0.1.tgz_1455650942742_0.4798124579247087'
81+
},
82+
'directories': {}
83+
}
84+
},
85+
'readme': '# seneca-entity\nEntity plugin for seneca\n',
86+
'maintainers': [
87+
{
88+
'name': 'rjrodger',
89+
'email': 'richard.rodger@nearform.com'
90+
},
91+
{
92+
'name': 'wyatt',
93+
'email': 'wpreul@gmail.com'
94+
}
95+
],
96+
'time': {
97+
'modified': '2016-03-07T21:07:05.021Z',
98+
'created': '2016-02-16T18:49:09.329Z',
99+
'0.0.0': '2016-02-16T18:49:09.329Z',
100+
'0.0.1': '2016-02-16T19:29:05.114Z'
101+
},
102+
'homepage': 'http://senecajs.org',
103+
'keywords': [
104+
'seneca',
105+
'plugin'
106+
],
107+
'repository': {
108+
'type': 'git',
109+
'url': 'git+https://github.com/senecajs/seneca-entity.git'
110+
},
111+
'author': {
112+
'name': 'Richard Rodger',
113+
'url': 'http://richardrodger.com/'
114+
},
115+
'bugs': {
116+
'url': 'https://github.com/senecajs/seneca-entity/issues'
117+
},
118+
'license': 'MIT'
119+
}

0 commit comments

Comments
 (0)