diff --git a/package.json b/package.json index 24aaf5f6d..b9c59716a 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "babel-plugin-transform-runtime": "^6.1.18", "babel-preset-es2015": "^6.0.15", "babel-runtime": "^5.8.34", + "chai": "^3.4.1", "concurrently": "^1.0.0", "eslint-config-standard": "^4.4.0", "eslint-plugin-standard": "^1.3.1", diff --git a/src/api/dht.js b/src/api/dht.js index df168be6e..129873763 100644 --- a/src/api/dht.js +++ b/src/api/dht.js @@ -24,7 +24,8 @@ module.exports = send => { if (res.Type === 5) { cb(null, res.Extra) } else { - cb(res) + let error = new Error('key was not found (type 6)') + cb(error) } }) }, diff --git a/test/.eslintrc b/test/.eslintrc index 479d6aec2..79947b1e8 100644 --- a/test/.eslintrc +++ b/test/.eslintrc @@ -5,6 +5,6 @@ "globals": { "apiClients": true, "isNode": true, - "assert": true + "expect": true } } diff --git a/test/api/add.spec.js b/test/api/add.spec.js index eb266791b..6b49bb488 100644 --- a/test/api/add.spec.js +++ b/test/api/add.spec.js @@ -34,11 +34,11 @@ describe('.add', () => { }) apiClients['a'].add(file, (err, res) => { - if (err) throw err + expect(err).to.not.exist const added = res[0] != null ? res[0] : res - assert.equal(added.Hash, 'Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP') - assert.equal(added.Name, path.basename(testfilePath)) + expect(added).to.have.property('Hash', 'Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP') + expect(added).to.have.property('Name', path.basename(testfilePath)) done() }) }) @@ -46,11 +46,9 @@ describe('.add', () => { it('add buffer', done => { let buf = new Buffer(testfile) apiClients['a'].add(buf, (err, res) => { - if (err) throw err - - assert.equal(res.length, 1) - const added = res[0] - assert.equal(added.Hash, 'Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP') + expect(err).to.not.exist + expect(res).to.have.length(1) + expect(res[0]).to.have.property('Hash', 'Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP') done() }) }) @@ -61,11 +59,9 @@ describe('.add', () => { } apiClients['a'].add(testfileBig, (err, res) => { - if (err) throw err - - assert.equal(res.length, 1) - const added = res[0] - assert.equal(added.Hash, 'Qme79tX2bViL26vNjPsF3DP1R9rMKMvnPYJiKTTKPrXJjq') + expect(err).to.not.exist + expect(res).to.have.length(1) + expect(res[0]).to.have.a.property('Hash', 'Qme79tX2bViL26vNjPsF3DP1R9rMKMvnPYJiKTTKPrXJjq') done() }) }) @@ -76,10 +72,10 @@ describe('.add', () => { } apiClients['a'].add(testfilePath, (err, res) => { - if (err) throw err + expect(err).to.not.exist const added = res[0] != null ? res[0] : res - assert.equal(added.Hash, 'Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP') + expect(added).to.have.property('Hash', 'Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP') done() }) }) @@ -87,13 +83,13 @@ describe('.add', () => { it('add a nested dir', done => { apiClients['a'].add(__dirname + '/../test-folder', { recursive: true }, (err, res) => { if (isNode) { - if (err) throw err + expect(err).to.not.exist const added = res[res.length - 1] - assert.equal(added.Hash, 'QmSzLpCVbWnEm3XoTWnv6DT6Ju5BsVoLhzvxKXZeQ2cmdg') + expect(added).to.have.property('Hash', 'QmSzLpCVbWnEm3XoTWnv6DT6Ju5BsVoLhzvxKXZeQ2cmdg') done() } else { - assert.equal(err.message, 'Recursive uploads are not supported in the browser') + expect(err.message).to.be.equal('Recursive uploads are not supported in the browser') done() } }) @@ -104,10 +100,10 @@ describe('.add', () => { stream.push('Hello world') stream.push(null) apiClients['a'].add(stream, (err, res) => { - if (err) throw err + expect(err).to.not.exist const added = res[0] != null ? res[0] : res - assert.equal(added.Hash, 'QmNRCQWfgze6AbBCaT1rkrkV5tJ2aP4oTNPb5JZcXYywve') + expect(added).to.have.a.property('Hash', 'QmNRCQWfgze6AbBCaT1rkrkV5tJ2aP4oTNPb5JZcXYywve') done() }) }) @@ -115,10 +111,10 @@ describe('.add', () => { it('add url', done => { const url = 'https://raw.githubusercontent.com/ipfs/js-ipfs-api/2a9cc63d7427353f2145af6b1a768a69e67c0588/README.md' apiClients['a'].add(url, (err, res) => { - if (err) throw err + expect(err).to.not.exist const added = res[0] != null ? res[0] : res - assert.equal(added.Hash, 'QmZmHgEX9baxUn3qMjsEXQzG6DyNcrVnwieQQTrpDdrFvt') + expect(added).to.have.a.property('Hash', 'QmZmHgEX9baxUn3qMjsEXQzG6DyNcrVnwieQQTrpDdrFvt') done() }) }) diff --git a/test/api/block.spec.js b/test/api/block.spec.js index 2bf98211c..e12e8ec66 100644 --- a/test/api/block.spec.js +++ b/test/api/block.spec.js @@ -6,22 +6,21 @@ describe('.block', () => { it('block.put', done => { apiClients['a'].block.put(blorb, (err, res) => { - if (err) throw err - const store = res.Key - assert.equal(store, 'QmPv52ekjS75L4JmHpXVeuJ5uX2ecSfSZo88NSyxwA3rAQ') + expect(err).to.not.exist + expect(res).to.have.a.property('Key', 'QmPv52ekjS75L4JmHpXVeuJ5uX2ecSfSZo88NSyxwA3rAQ') done() }) }) it('block.get', done => { apiClients['a'].block.get(blorbKey, (err, res) => { - if (err) throw err + expect(err).to.not.exist let buf = '' res .on('data', function (data) { buf += data }) .on('end', function () { - assert.equal(buf, 'blorb') + expect(buf).to.be.equal('blorb') done() }) }) diff --git a/test/api/cat.spec.js b/test/api/cat.spec.js index 135f10d5f..492df0b8e 100644 --- a/test/api/cat.spec.js +++ b/test/api/cat.spec.js @@ -15,16 +15,14 @@ if (isNode) { describe('.cat', () => { it('cat', done => { apiClients['a'].cat('Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP', (err, res) => { - if (err) { - throw err - } + expect(err).to.not.exist let buf = '' res .on('error', err => { throw err }) .on('data', data => buf += data) .on('end', () => { - assert.equal(buf, testfile) + expect(buf).to.be.equal(testfile.toString()) done() }) }) @@ -36,16 +34,14 @@ describe('.cat', () => { } apiClients['a'].cat('Qme79tX2bViL26vNjPsF3DP1R9rMKMvnPYJiKTTKPrXJjq', (err, res) => { - if (err) { - throw err - } + expect(err).to.not.exist testfileBig = require('fs').createReadStream(__dirname + '/../15mb.random', { bufferSize: 128 }) // Do not blow out the memory of nodejs :) streamEqual(res, testfileBig, (err, equal) => { - if (err) throw err - assert(equal) + expect(err).to.not.exist + expect(equal).to.be.true done() }) }) diff --git a/test/api/commands.spec.js b/test/api/commands.spec.js index a7bdbfa24..7ec3ac712 100644 --- a/test/api/commands.spec.js +++ b/test/api/commands.spec.js @@ -3,10 +3,8 @@ describe('.commands', () => { it('lists commands', done => { apiClients['a'].commands((err, res) => { - if (err) { - throw err - } - assert(res) + expect(err).to.not.exist + expect(res).to.exist done() }) }) diff --git a/test/api/config.spec.js b/test/api/config.spec.js index 46b3bdd1f..773ac7cbe 100644 --- a/test/api/config.spec.js +++ b/test/api/config.spec.js @@ -6,10 +6,10 @@ describe('.config', () => { const confVal = 'arbitraryVal' apiClients['a'].config.set(confKey, confVal, (err, res) => { - if (err) throw err + expect(err).to.not.exist apiClients['a'].config.get(confKey, (err, res) => { - if (err) throw err - assert.equal(res.Value, confVal) + expect(err).to.not.exist + expect(res).to.have.a.property('Value', confVal) done() }) }) @@ -17,11 +17,8 @@ describe('.config', () => { it('.config.show', done => { apiClients['c'].config.show((err, res) => { - if (err) { - throw err - } - - assert(res) + expect(err).to.not.exist + expect(res).to.exist done() }) }) @@ -32,11 +29,8 @@ describe('.config', () => { } apiClients['c'].config.replace(__dirname + '/../r-config.json', (err, res) => { - if (err) { - throw err - } - - assert.equal(res, null) + expect(err).to.not.exist + expect(res).to.be.equal(null) done() }) }) diff --git a/test/api/dht.spec.js b/test/api/dht.spec.js index 3428198af..25bae8fec 100644 --- a/test/api/dht.spec.js +++ b/test/api/dht.spec.js @@ -4,29 +4,25 @@ describe('.dht', () => { it('returns an error when getting a non-existent key from the DHT', done => { apiClients['a'].dht.get('non-existent', {timeout: '100ms'}, (err, value) => { - assert(err) + expect(err).to.be.an.instanceof(Error) done() }) }) it('puts and gets a key value pair in the DHT', done => { apiClients['a'].dht.put('scope', 'interplanetary', (err, res) => { - if (err) { - throw err - } + expect(err).to.not.exist - assert.equal(typeof res, 'object') + expect(res).to.be.an('array') - return done() + done() // non ipns or pk hashes fail to fetch, known bug // bug: https://github.com/ipfs/go-ipfs/issues/1923#issuecomment-152932234 // apiClients['a'].dht.get('scope', (err, value) => { // console.log('->>', err, value) - // if (err) { - // throw err - // } - // assert.equal(value, 'interplanetary') + // expect(err).to.not.exist + // expect(value).to.be.equal('interplanetary') // done() // }) }) @@ -34,12 +30,9 @@ describe('.dht', () => { it('.dht.findprovs', done => { apiClients['a'].dht.findprovs('Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP', (err, res) => { - if (err) { - throw err - } + expect(err).to.not.exist - assert.equal(typeof res, 'object') - assert(res) + expect(res).to.be.an('array') done() }) }) diff --git a/test/api/diag.spec.js b/test/api/diag.spec.js index 6476744e6..71518401c 100644 --- a/test/api/diag.spec.js +++ b/test/api/diag.spec.js @@ -3,22 +3,18 @@ describe('.diag', () => { it('.diag.net', done => { apiClients['a'].diag.net((err, res) => { - if (err) { - throw err - } - assert(res) + expect(err).to.not.exist + expect(res).to.exist done() }) }) it('.diag.sys', done => { apiClients['a'].diag.sys((err, res) => { - if (err) { - throw err - } - assert(res) - assert(res.memory) - assert(res.diskinfo) + expect(err).to.not.exist + expect(res).to.exist + expect(res).to.have.a.property('memory') + expect(res).to.have.a.property('diskinfo') done() }) }) diff --git a/test/api/id.spec.js b/test/api/id.spec.js index 04874e694..50d55f0fc 100644 --- a/test/api/id.spec.js +++ b/test/api/id.spec.js @@ -3,10 +3,9 @@ describe('.id', () => { it('id', done => { apiClients['a'].id((err, res) => { - if (err) throw err - const id = res - assert(id.ID) - assert(id.PublicKey) + expect(err).to.not.exist + expect(res).to.have.a.property('ID') + expect(res).to.have.a.property('PublicKey') done() }) }) diff --git a/test/api/index.spec.js b/test/api/index.spec.js index f9d3ba598..69c012942 100644 --- a/test/api/index.spec.js +++ b/test/api/index.spec.js @@ -2,7 +2,7 @@ describe('API', () => { it('has the api object', () => { - assert(apiClients['a']) - assert(apiClients['a'].id) + expect(apiClients['a']).to.exist + expect(apiClients['a']).to.have.a.property('id') }) }) diff --git a/test/api/log.spec.js b/test/api/log.spec.js index a87e5c98f..ed1d32a2f 100644 --- a/test/api/log.spec.js +++ b/test/api/log.spec.js @@ -3,12 +3,10 @@ describe('.log', () => { it('.log.tail', done => { apiClients['a'].log.tail((err, res) => { - if (err) { - throw err - } + expect(err).to.not.exist + res.once('data', obj => { - assert(obj) - assert.equal(typeof obj, 'object') + expect(obj).to.be.an('object') done() }) }) diff --git a/test/api/name.spec.js b/test/api/name.spec.js index 2f0d21f77..2950ee6b1 100644 --- a/test/api/name.spec.js +++ b/test/api/name.spec.js @@ -5,23 +5,20 @@ describe('.name', () => { it('.name.publish', done => { apiClients['a'].name.publish('Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP', (err, res) => { - if (err) { - throw err - } - assert(res) + expect(err).to.not.exist name = res + expect(name).to.exist done() }) }) it('.name.resolve', done => { apiClients['a'].name.resolve(name.Name, (err, res) => { - if (err) { - throw err - } - - assert(res) - assert.deepEqual(res, { Path: '/ipfs/' + name.Value }) + expect(err).to.not.exist + expect(res).to.exist + expect(res).to.be.eql({ + Path: '/ipfs/' + name.Value + }) done() }) }) diff --git a/test/api/object.spec.js b/test/api/object.spec.js index 18d3e7e57..e5870cea1 100644 --- a/test/api/object.spec.js +++ b/test/api/object.spec.js @@ -8,36 +8,32 @@ describe('.object', () => { it('object.put', done => { apiClients['a'].object.put(testObject, 'json', (err, res) => { - if (err) throw err - const obj = res - assert.equal(obj.Hash, testObjectHash) - assert.equal(obj.Links.length, 0) + expect(err).to.not.exist + expect(res).to.have.a.property('Hash', testObjectHash) + expect(res.Links).to.be.empty done() }) }) it('object.get', done => { apiClients['a'].object.get(testObjectHash, (err, res) => { - if (err) { - throw err - } - const obj = res - assert.equal(obj.Data, 'testdata') - assert.equal(obj.Links.length, 0) + expect(err).to.not.exist + expect(res).to.have.a.property('Data', 'testdata') + expect(res.Links).to.be.empty done() }) }) it('object.data', done => { apiClients['a'].object.data(testObjectHash, (err, res) => { - if (err) throw err + expect(err).to.not.exist let buf = '' res .on('error', err => { throw err }) .on('data', data => buf += data) .on('end', () => { - assert.equal(buf, 'testdata') + expect(buf).to.equal('testdata') done() }) }) @@ -45,10 +41,8 @@ describe('.object', () => { it('object.stat', done => { apiClients['a'].object.stat(testObjectHash, (err, res) => { - if (err) { - throw err - } - assert.deepEqual(res, { + expect(err).to.not.exist + expect(res).to.be.eql({ Hash: 'QmPTkMuuL6PD8L2SwTwbcs1NPg14U8mRzerB1ZrrBrkSDD', NumLinks: 0, BlockSize: 10, @@ -62,11 +56,9 @@ describe('.object', () => { it('object.links', done => { apiClients['a'].object.links(testObjectHash, (err, res) => { - if (err) { - throw err - } + expect(err).to.not.exist - assert.deepEqual(res, { + expect(res).to.be.eql({ Hash: 'QmPTkMuuL6PD8L2SwTwbcs1NPg14U8mRzerB1ZrrBrkSDD', Links: [] }) @@ -76,23 +68,16 @@ describe('.object', () => { it('object.patch', done => { apiClients['a'].object.put(testPatchObject, 'json', (err, res) => { - if (err) { - throw err - } + expect(err).to.not.exist apiClients['a'].object.patch(testObjectHash, ['add-link', 'next', testPatchObjectHash], (err, res) => { - if (err) { - throw err - } - - assert.deepEqual(res, { + expect(err).to.not.exist + expect(res).to.be.eql({ Hash: 'QmZFdJ3CQsY4kkyQtjoUo8oAzsEs5BNguxBhp8sjQMpgkd', Links: null }) apiClients['a'].object.get(res.Hash, (err, res2) => { - if (err) { - throw err - } - assert.deepEqual(res2, { + expect(err).to.not.exist + expect(res2).to.be.eql({ Data: 'testdata', Links: [{ Name: 'next', diff --git a/test/api/pin.spec.js b/test/api/pin.spec.js index 8ddf64c3a..85652f33d 100644 --- a/test/api/pin.spec.js +++ b/test/api/pin.spec.js @@ -3,36 +3,28 @@ describe('.pin', () => { it('.pin.add', done => { apiClients['b'].pin.add('Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP', {recursive: false}, (err, res) => { - if (err) { - throw err - } - assert.equal(res.Pinned[0], 'Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP') + expect(err).to.not.exist + expect(res.Pinned[0]).to.be.equal('Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP') done() }) }) it('.pin.list', done => { apiClients['b'].pin.list((err, res) => { - if (err) { - throw err - } - assert(res) + expect(err).to.not.exist + expect(res).to.exist done() }) }) it('.pin.remove', done => { apiClients['b'].pin.remove('Qma4hjFTnCasJ8PVp3mZbZK5g2vGDT4LByLJ7m8ciyRFZP', {recursive: false}, (err, res) => { - if (err) { - throw err - } - assert(res) + expect(err).to.not.exist + expect(res).to.exist apiClients['b'].pin.list('direct', (err, res) => { - if (err) { - throw err - } - assert(res) - assert.equal(Object.keys(res.Keys).length, 0) + expect(err).to.not.exist + expect(res).to.exist + expect(res.Keys).to.be.empty done() }) }) diff --git a/test/api/ping.spec.js b/test/api/ping.spec.js index 21f886be3..f2aa8e0e8 100644 --- a/test/api/ping.spec.js +++ b/test/api/ping.spec.js @@ -8,17 +8,11 @@ describe('.ping', () => { } apiClients['b'].id((err, id) => { - if (err) { - throw err - } + expect(err).to.not.exist apiClients['a'].ping(id.ID, (err, res) => { - if (err) { - throw err - } - - assert(res) - assert(res.Success) + expect(err).to.not.exist + expect(res).to.have.a.property('Success') done() }) }) diff --git a/test/api/refs.spec.js b/test/api/refs.spec.js index 66840342a..9bbcb0d41 100644 --- a/test/api/refs.spec.js +++ b/test/api/refs.spec.js @@ -9,9 +9,7 @@ describe('.refs', () => { } apiClients['a'].refs(folder, {'format': ' '}, (err, objs) => { - if (err) { - throw err - } + expect(err).to.not.exist const result = [{ Ref: 'QmSzLpCVbWnEm3XoTWnv6DT6Ju5BsVoLhzvxKXZeQ2cmdg QmcUYKmQxmTcFom4R4UZP7FWeQzgJkwcFn51XrvsMy7PE9 add.js', @@ -35,7 +33,7 @@ describe('.refs', () => { Ref: 'QmSzLpCVbWnEm3XoTWnv6DT6Ju5BsVoLhzvxKXZeQ2cmdg QmbkMNB6rwfYAxRvnG9CWJ6cKKHEdq2ZKTozyF5FQ7H8Rs version.js', Err: '' }] - assert.deepEqual(objs, result) + expect(objs).to.eql(result) done() }) diff --git a/test/api/swarm.spec.js b/test/api/swarm.spec.js index a085e80da..198f82ef6 100644 --- a/test/api/swarm.spec.js +++ b/test/api/swarm.spec.js @@ -3,11 +3,9 @@ describe('.swarm', () => { it('.swarm.peers', done => { apiClients['a'].swarm.peers((err, res) => { - if (err) { - throw err - } + expect(err).to.not.exist - assert(res.Strings.length >= 2) + expect(res.Strings).to.have.length.above(1) done() }) }) diff --git a/test/api/version.spec.js b/test/api/version.spec.js index a2fb146ef..18f3b04c4 100644 --- a/test/api/version.spec.js +++ b/test/api/version.spec.js @@ -3,11 +3,8 @@ describe('.version', () => { it('checks the version', done => { apiClients['a'].version((err, res) => { - if (err) { - throw err - } - assert(res) - assert(res.Version) + expect(err).to.not.exist + expect(res).to.have.a.property('Version') console.log(' - running against version', res.Version) done() }) diff --git a/test/constructor.spec.js b/test/constructor.spec.js index 8b6a11df7..823c7b6f4 100644 --- a/test/constructor.spec.js +++ b/test/constructor.spec.js @@ -1,7 +1,6 @@ 'use strict' const ipfsAPI = require('../src/index.js') -const assert = require('assert') describe('ipfsAPI constructor tests', () => { describe('parameter permuations', () => { @@ -9,11 +8,11 @@ describe('ipfsAPI constructor tests', () => { const apiAddr = apiAddrs.a.split('/') function clientWorks (client, done) { - client.id((err, res) => { - if (err) throw err - const id = res - assert(id.ID) - assert(id.PublicKey) + client.id((err, id) => { + expect(err).to.not.exist + + expect(id).to.have.a.property('ID') + expect(id).to.have.a.property('PublicKey') done() }) } diff --git a/test/setup.js b/test/setup.js index 9abab3b6a..81ad12929 100644 --- a/test/setup.js +++ b/test/setup.js @@ -3,7 +3,7 @@ const ipfsAPI = require('../src/index.js') const apiAddrs = require('./tmp-disposable-nodes-addrs.json') -global.assert = require('assert') +global.expect = require('chai').expect global.apiClients = {} // a, b, c global.isNode = !global.window