diff --git a/package.json b/package.json index 257c89822..a57b9861b 100644 --- a/package.json +++ b/package.json @@ -71,6 +71,7 @@ "devDependencies": { "apidoc": "*", "bootstrap-sass": "^3.3.3", + "deep-extend": "^0.4.1", "del": "^1.1.1", "expect.js": "*", "gulp": "^3.8.11", diff --git a/src/test/updatechecker-test.js b/src/test/updatechecker-test.js index 37299f578..d6b212841 100644 --- a/src/test/updatechecker-test.js +++ b/src/test/updatechecker-test.js @@ -10,6 +10,7 @@ var appdb = require('../appdb.js'), async = require('async'), config = require('../config.js'), database = require('../database.js'), + deepExtend = require('deep-extend'), expect = require('expect.js'), fs = require('fs'), nock = require('nock'), @@ -17,23 +18,47 @@ var appdb = require('../appdb.js'), updatechecker = require('../updatechecker.js'), _ = require('underscore'); -var RELEASE = { - "0.7.0": { - "sourceTarballUrl": "https://dev-cloudron-releases.s3.amazonaws.com/box-3314658ce81f328462508e14b6d388acf36ca81c.tar.gz", - "imageId": 15436849, - "imageName": "box-dev-2c7a52b-2016-01-22-150657", - "changelog": [ - ], - "upgrade": true, - "date": "2016-01-23T23:53:01.566Z", - "author": "Girish Ramakrishnan ", - "next": null - } +var RELEASE_1 = { + "sourceTarballUrl": "https://dev-cloudron-releases.s3.amazonaws.com/box-3314658ce81f328462508e14b6d388acf36ca81c.tar.gz", + "imageId": 100, + "imageName": "box-dev-2c7a52b-2016-01-22-150657", + "changelog": [ ], + "date": "2016-01-23T23:53:01.566Z", + "author": "Girish Ramakrishnan ", + "next": "2.0.0-1" }; -describe('updatechecker', function () { +var RELEASE_2_PRERELEASE = { + "sourceTarballUrl": "https://dev-cloudron-releases.s3.amazonaws.com/box-3314658ce81f328462508e14b6d388acf36ca81c.tar.gz", + "imageId": 2001, + "imageName": "box-dev-2c7a52b-2016-01-22-150657", + "changelog": [ ], + "upgrade": false, + "date": "2016-01-23T23:53:01.566Z", + "author": "Girish Ramakrishnan ", + "next": "2.0.0" +}; + +var RELEASE_2 = { + "sourceTarballUrl": "https://dev-cloudron-releases.s3.amazonaws.com/box-3314658ce81f328462508e14b6d388acf36ca81c.tar.gz", + "imageId": 200, + "imageName": "box-dev-2c7a52b-2016-01-22-150657", + "changelog": [ ], + "upgrade": false, + "date": "2016-01-23T23:53:01.566Z", + "author": "Girish Ramakrishnan ", + "next": null +}; + +var RELEASES = { + "1.0.0": RELEASE_1, + "2.0.0-1": RELEASE_2_PRERELEASE, + "2.0.0": RELEASE_2 +}; + +describe('updatechecker - checkBoxUpdates', function () { before(function (done) { - config.set('version', '0.5.0'); + config.set('version', '1.0.0'); config.set('boxVersionsUrl', 'http://localhost:4444/release.json') async.series([ database.initialize, @@ -45,19 +70,107 @@ describe('updatechecker', function () { database._clear(done); }); - it('checkBoxUpdates - no updates', function (done) { + it('no updates', function (done) { nock.cleanAll(); + var releaseCopy = deepExtend({}, RELEASES); + releaseCopy['1.0.0'].next = null; + var scope = nock('http://localhost:4444') .get('/release.json') - .reply(200, RELEASE); + .reply(200, releaseCopy); updatechecker.checkBoxUpdates(function (error) { expect(!error).to.be.ok(); + expect(updatechecker.getUpdateInfo().box).to.be(null); + done(); + }); + }); - expect(updatechecker.getUpdateInfo().box.version).to.be('0.7.0'); + it('new version', function (done) { + nock.cleanAll(); + + var releaseCopy = deepExtend({}, RELEASES); + delete releaseCopy['2.0.0-1']; + releaseCopy['1.0.0'].next = '2.0.0'; + + var scope = nock('http://localhost:4444') + .get('/release.json') + .reply(200, releaseCopy); + + updatechecker.checkBoxUpdates(function (error) { + expect(!error).to.be.ok(); + expect(updatechecker.getUpdateInfo().box.version).to.be('2.0.0'); + done(); + }); + }); + + it('existing version missing offers latest version', function (done) { + nock.cleanAll(); + + var releaseCopy = deepExtend({}, RELEASES); + delete releaseCopy['1.0.0']; + + var scope = nock('http://localhost:4444') + .get('/release.json') + .reply(200, releaseCopy); + + updatechecker.checkBoxUpdates(function (error) { + expect(!error).to.be.ok(); + expect(updatechecker.getUpdateInfo().box.version).to.be('2.0.0'); + done(); + }); + }); + + it('does not offer prerelease', function (done) { + nock.cleanAll(); + + var releaseCopy = deepExtend({}, RELEASES); + + var scope = nock('http://localhost:4444') + .get('/release.json') + .reply(200, releaseCopy); + + updatechecker.checkBoxUpdates(function (error) { + expect(!error).to.be.ok(); + expect(updatechecker.getUpdateInfo().box).to.be(null); + done(); + }); + }); + + it('offers prerelease', function (done) { + nock.cleanAll(); + + settings.setUpdateConfig({ prerelease: true }, function (error) { + if (error) return done(error); + + var releaseCopy = deepExtend({}, RELEASES); + + var scope = nock('http://localhost:4444') + .get('/release.json') + .reply(200, releaseCopy); + + updatechecker.checkBoxUpdates(function (error) { + expect(!error).to.be.ok(); + expect(updatechecker.getUpdateInfo().box.version).to.be('2.0.0-1'); + done(); + }); + }); + }); + + it('bad response offers nothing', function (done) { + nock.cleanAll(); + + var releaseCopy = _.extend({}, RELEASES); + + var scope = nock('http://localhost:4444') + .get('/release.json') + .reply(404, releaseCopy); + + updatechecker.checkBoxUpdates(function (error) { + expect(error).to.be.ok(); + expect(updatechecker.getUpdateInfo().box).to.be(null); done(); }); }); }); -