Skip to content

Commit 2e01bf4

Browse files
committed
Initial tests
1 parent 20cc82a commit 2e01bf4

File tree

4 files changed

+128
-69
lines changed

4 files changed

+128
-69
lines changed

.travis.yml

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,6 @@
11
language: node_js
2-
sudo: true
2+
sudo: false
33

44
node_js:
5-
- "5"
65
- "4"
7-
8-
env:
9-
- CXX=g++-4.8
10-
addons:
11-
apt:
12-
sources:
13-
- ubuntu-toolchain-r-test
14-
packages:
15-
- g++-4.8
16-
17-
cache:
18-
directories:
19-
- node_modules
20-
21-
after_script:
22-
- npm run lint
23-
- npm run coverage
24-
- npm run publish-coverage
6+
- "5"

lib/github.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ module.exports = function (options) {
1515

1616
opts = extend(opts, options)
1717
opts.cache = seneca.make$('github')
18+
opts.cache.load$()
1819

1920
seneca.add('role:github,cmd:get', cmdGet)
2021
seneca.add('role:info,req:part', aliasGet)
@@ -32,7 +33,7 @@ function cmdGet (msg, done) {
3233
if (err) return done(err)
3334

3435
if (github && !msg.update) {
35-
return done(null, github)
36+
return done(null, github.data$(github))
3637
}
3738

3839
Request.get({url: registry, gzip: true}, (err, res, body) => {
@@ -66,7 +67,7 @@ function aliasGet (msg, done) {
6667

6768
payload.data = data
6869
seneca.act('role:info,res:part,part:github', payload)
69-
done()
70+
done(null, {ok: true})
7071
})
7172
}
7273

@@ -106,9 +107,9 @@ function queryGithub (msg, done) {
106107
cached: Date.now()
107108
}
108109

109-
function complete (err) {
110+
function complete (err, data) {
110111
if (err) return done(err)
111-
else done(null, data)
112+
else done(null, data.data$(data))
112113
}
113114

114115
cache.load$(msg.name, (err, cached) => {

package.json

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
"scripts": {
66
"start": "node srv/start.js",
77
"isolated": "GITHUB_ISOLATED=true node srv/start.js",
8-
"lint": "lab test -dL"
8+
"lint": "lab -P test -dL",
9+
"test": "lab -t 84 -v -P test",
10+
"cov": "lab -s -P test -r lcov | coveralls"
911
},
1012
"main": "lib/github.js",
1113
"keywords": [
@@ -33,7 +35,7 @@
3335
"license": "MIT",
3436
"dependencies": {
3537
"github4": "0.5.4",
36-
"request": "2.69.0",
38+
"request": "2.70.0",
3739
"seneca": "2.0.0",
3840
"seneca-balance-client": "0.4.0",
3941
"seneca-entity": "0.0.1",
@@ -45,10 +47,11 @@
4547
"toolbag-plugin-udp-reporter": "1.0.0"
4648
},
4749
"devDependencies": {
48-
"code": "2.1.0",
50+
"code": "2.2.0",
51+
"coveralls": "2.11.9",
4952
"eslint-config-seneca": "1.1.2",
5053
"eslint-plugin-hapi": "4.0.0",
51-
"eslint-plugin-standard": "1.3.1",
52-
"lab": "8.2.0"
54+
"eslint-plugin-standard": "1.3.2",
55+
"lab": "10.3.1"
5356
}
5457
}

test/github.test.js

Lines changed: 113 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -2,66 +2,139 @@
22

33
var Lab = require('lab')
44
var Code = require('code')
5-
var Seneca = require('seneca')
65

76
var lab = exports.lab = Lab.script()
8-
97
var describe = lab.describe
108
var it = lab.it
119
var expect = Code.expect
1210

11+
var Seneca = require('seneca')
1312
var Github = require('..')
1413

15-
/*
16-
* Notice: For travis/CI, tests have been configured with a token provided by
17-
* https://github.com/thekemkid. However, This is a read only token which will
18-
* only be able to read from public repos. You can create a similar token in
19-
* your github settings > personal access tokens > generate new token. You do
20-
* not have to enable any special permissions for this token.
21-
*/
22-
23-
describe('nodezoo-github', function () {
24-
it('Fired the get pattern', function (done) {
25-
var seneca = Seneca({ log: 'silent' })
26-
seneca.use(Github, { token: process.env.GITHUB_TOKEN })
27-
28-
seneca.ready(function () {
29-
seneca.act({ role: 'github', cmd: 'get', name: 'nodejs/node.git', giturl: 'git@github.com:nodejs/node.git' }, function (err, res) {
30-
expect(err).to.not.exist()
31-
expect(res.user).to.equal('nodejs')
32-
expect(res.repo).to.equal('node')
33-
expect(res.id).to.equal('nodejs/node.git')
34-
done()
35-
})
14+
function createInstance () {
15+
var params = {
16+
log: 'silent',
17+
errhandler: (err) => {
18+
if (err.at) console.log(err.msg)
19+
}
20+
}
21+
22+
return Seneca(params)
23+
.use('entity')
24+
.use(Github, {token: process.env.GITHUB_TOKEN})
25+
}
26+
27+
describe('A valid "role:github,cmd:get" call', () => {
28+
it('has no error', (done) => {
29+
var seneca = createInstance()
30+
var payload = {name: 'seneca'}
31+
32+
seneca.act(`role:github,cmd:get`, payload, (err, reply) => {
33+
expect(err).to.not.exist()
34+
done()
3635
})
3736
})
3837

39-
it('Fired the query pattern', function (done) {
40-
var seneca = Seneca({ log: 'silent' })
41-
seneca.use(Github, { token: process.env.GITHUB_TOKEN })
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) => {
43+
expect(reply).to.exist()
44+
done()
45+
})
46+
})
4247

43-
seneca.ready(function () {
44-
seneca.act({ role: 'github', cmd: 'query', name: 'nodejs/node.git', user: 'nodejs', repo: 'node' }, function (err, res) {
45-
expect(err).to.not.exist()
46-
expect(res.user).to.equal('nodejs')
47-
expect(res.repo).to.equal('node')
48-
expect(res.id).to.equal('nodejs/node.git')
48+
it('returns cached data', (done) => {
49+
var seneca = createInstance()
50+
var payload = {name: 'seneca'}
51+
52+
seneca.act(`role:github,cmd:get`, payload, (err, reply) => {
53+
var cachedOne = reply.cached
54+
55+
seneca.act(`role:github,cmd:get`, payload, (err, reply) => {
56+
var cachedTwo = reply.cached
57+
58+
expect(cachedOne).to.equal(cachedTwo)
4959
done()
5060
})
5161
})
5262
})
5363

54-
it('Fired the parse pattern', function (done) {
55-
var seneca = Seneca({ log: 'silent' })
56-
seneca.use(Github, { token: process.env.GITHUB_TOKEN })
64+
it('can return non-cached data', (done) => {
65+
var seneca = createInstance()
66+
var payload = {name: 'seneca'}
67+
68+
seneca.act(`role:github,cmd:get`, payload, (err, reply) => {
69+
expect(err).to.not.exist()
70+
71+
var cachedOne = reply.cached
72+
payload.update = true
5773

58-
seneca.ready(function () {
59-
seneca.act({ role: 'github', cmd: 'parse', giturl: 'git@github.com:nodejs/node.git' }, function (err, res) {
60-
expect(err).to.not.exist()
61-
expect(res.user).to.equal('nodejs')
62-
expect(res.repo).to.equal('node')
74+
seneca.act(`role:github,cmd:get`, payload, (err, reply) => {
75+
var cachedTwo = reply.cached
76+
77+
expect(cachedOne).to.be.below(cachedTwo)
6378
done()
6479
})
6580
})
6681
})
6782
})
83+
84+
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()
97+
var payload = {name: 'shooobydoobydooboop'}
98+
99+
seneca.act(`role:github,cmd:get`, payload, (err, reply) => {
100+
expect(reply).to.not.exist()
101+
done()
102+
})
103+
})
104+
})
105+
106+
describe('A valid "role:info,req:part" call', () => {
107+
it('has no error', (done) => {
108+
var seneca = createInstance()
109+
var payload = {name: 'seneca'}
110+
111+
seneca.act(`role:info,req:part`, payload, (err, reply) => {
112+
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) => {
122+
expect(reply).to.exist()
123+
done()
124+
})
125+
})
126+
127+
128+
it('responds via "role:info,res:part"', (done) => {
129+
var seneca = createInstance()
130+
var payload = {name: 'seneca'}
131+
132+
seneca.add(`role:info,res:part`, (msg, cb) => {
133+
expect(msg).to.exist()
134+
cb()
135+
done()
136+
})
137+
138+
seneca.act(`role:info,req:part`, payload)
139+
})
140+
})

0 commit comments

Comments
 (0)