Files
cloudron-box/src/test/updatechecker-test.js

150 lines
5.9 KiB
JavaScript
Raw Normal View History

2016-01-23 15:57:56 -08:00
/* global it:false */
/* global describe:false */
/* global before:false */
/* global after:false */
'use strict';
2021-06-03 12:20:44 -07:00
const common = require('./common.js'),
2017-01-27 09:40:46 -08:00
constants = require('../constants.js'),
2016-01-23 15:57:56 -08:00
expect = require('expect.js'),
nock = require('nock'),
2017-02-06 16:33:55 -08:00
paths = require('../paths.js'),
safe = require('safetydance'),
semver = require('semver'),
2016-01-23 15:57:56 -08:00
settings = require('../settings.js'),
2021-06-03 12:20:44 -07:00
updatechecker = require('../updatechecker.js');
2016-01-23 15:57:56 -08:00
2021-06-03 12:20:44 -07:00
const { APP, APPSTORE_TOKEN, MOCK_API_SERVER_ORIGIN } = common;
2016-05-01 20:01:34 -07:00
const UPDATE_VERSION = semver.inc(constants.VERSION, 'major');
2021-06-03 12:20:44 -07:00
describe('updatechecker', function () {
before(common.setup);
after(common.cleanup);
2021-06-03 12:20:44 -07:00
describe('box', function () {
before(function (done) {
safe.fs.unlinkSync(paths.UPDATE_CHECKER_FILE);
2016-01-23 15:57:56 -08:00
2021-06-03 12:20:44 -07:00
settings.setAutoupdatePattern(constants.AUTOUPDATE_PATTERN_NEVER, done);
2016-01-24 00:06:32 -08:00
});
2021-06-03 12:20:44 -07:00
it('no updates', function (done) {
nock.cleanAll();
2021-06-03 12:20:44 -07:00
var scope = nock(MOCK_API_SERVER_ORIGIN)
.get('/api/v1/boxupdate')
.query({ boxVersion: constants.VERSION, accessToken: APPSTORE_TOKEN, automatic: false })
.reply(204, { } );
2016-04-12 13:15:40 -07:00
2021-06-03 12:20:44 -07:00
updatechecker.checkForUpdates({ automatic: false }, function (error) {
expect(!error).to.be.ok();
expect(updatechecker.getUpdateInfo().box).to.not.be.ok();
expect(scope.isDone()).to.be.ok();
done();
});
2016-01-24 00:06:32 -08:00
});
2021-06-03 12:20:44 -07:00
it('new version', function (done) {
nock.cleanAll();
var scope = nock(MOCK_API_SERVER_ORIGIN)
.get('/api/v1/boxupdate')
.query({ boxVersion: constants.VERSION, accessToken: APPSTORE_TOKEN, automatic: false })
.reply(200, { version: UPDATE_VERSION, changelog: [''], sourceTarballUrl: 'box.tar.gz', sourceTarballSigUrl: 'box.tar.gz.sig', boxVersionsUrl: 'box.versions', boxVersionsSigUrl: 'box.versions.sig' } );
updatechecker.checkForUpdates({ automatic: false }, function (error) {
expect(!error).to.be.ok();
expect(updatechecker.getUpdateInfo().box.version).to.be(UPDATE_VERSION);
expect(updatechecker.getUpdateInfo().box.sourceTarballUrl).to.be('box.tar.gz');
expect(scope.isDone()).to.be.ok();
done();
});
});
2021-06-03 12:20:44 -07:00
it('bad response offers whatever was last valid', function (done) {
nock.cleanAll();
var scope = nock(MOCK_API_SERVER_ORIGIN)
.get('/api/v1/boxupdate')
.query({ boxVersion: constants.VERSION, accessToken: APPSTORE_TOKEN, automatic: false })
.reply(404, { version: '2.0.0-pre.0', changelog: [''], sourceTarballUrl: 'box-pre.tar.gz' } );
updatechecker.checkForUpdates({ automatic: false }, function (error) {
expect(error).to.be.ok();
expect(updatechecker.getUpdateInfo().box.version).to.be(UPDATE_VERSION);
expect(updatechecker.getUpdateInfo().box.sourceTarballUrl).to.be('box.tar.gz');
expect(scope.isDone()).to.be.ok();
done();
});
});
2016-01-24 00:44:46 -08:00
});
2021-06-03 12:20:44 -07:00
describe('app', function () {
before(function (done) {
safe.fs.unlinkSync(paths.UPDATE_CHECKER_FILE);
2016-01-24 00:44:46 -08:00
2021-06-03 12:20:44 -07:00
settings.setAutoupdatePattern(constants.AUTOUPDATE_PATTERN_NEVER, done);
});
2016-01-24 00:44:46 -08:00
2021-06-03 12:20:44 -07:00
it('no updates', function (done) {
nock.cleanAll();
2016-01-24 00:44:46 -08:00
2021-06-03 12:20:44 -07:00
var scope = nock(MOCK_API_SERVER_ORIGIN)
.get('/api/v1/appupdate')
.query({ boxVersion: constants.VERSION, accessToken: APPSTORE_TOKEN, appId: APP.appStoreId, appVersion: APP.manifest.version, automatic: false })
.reply(204, { } );
2017-01-27 09:40:46 -08:00
2021-06-03 12:20:44 -07:00
updatechecker._checkAppUpdates({ automatic: false }, function (error) {
expect(!error).to.be.ok();
expect(updatechecker.getUpdateInfo()).to.eql({});
expect(scope.isDone()).to.be.ok();
done();
});
2016-01-24 00:44:46 -08:00
});
2021-06-03 12:20:44 -07:00
it('bad response', function (done) {
nock.cleanAll();
2016-01-24 00:44:46 -08:00
2021-06-03 12:20:44 -07:00
var scope = nock(MOCK_API_SERVER_ORIGIN)
.get('/api/v1/appupdate')
.query({ boxVersion: constants.VERSION, accessToken: APPSTORE_TOKEN, appId: APP.appStoreId, appVersion: APP.manifest.version, automatic: false })
.reply(500, { update: { manifest: { version: '1.0.0', changelog: '* some changes' } } } );
2017-01-27 09:40:46 -08:00
2021-06-03 12:20:44 -07:00
updatechecker._checkAppUpdates({ automatic: false }, function (error) {
expect(!error).to.be.ok();
expect(updatechecker.getUpdateInfo()).to.eql({});
expect(scope.isDone()).to.be.ok();
done();
});
2016-01-24 00:44:46 -08:00
});
2021-06-03 12:20:44 -07:00
it('offers new version', function (done) {
nock.cleanAll();
2016-01-24 00:44:46 -08:00
2021-06-03 12:20:44 -07:00
var scope = nock(MOCK_API_SERVER_ORIGIN)
.get('/api/v1/appupdate')
.query({ boxVersion: constants.VERSION, accessToken: APPSTORE_TOKEN, appId: APP.appStoreId, appVersion: APP.manifest.version, automatic: false })
.reply(200, { manifest: { version: '2.0.0', changelog: '* some changes' } } );
2017-01-27 09:40:46 -08:00
2021-06-03 12:20:44 -07:00
updatechecker._checkAppUpdates({ automatic: false }, function (error) {
expect(!error).to.be.ok();
expect(updatechecker.getUpdateInfo()).to.eql({ 'appid': { manifest: { version: '2.0.0', changelog: '* some changes' }, unstable: false } });
expect(scope.isDone()).to.be.ok();
done();
});
2016-01-24 00:44:46 -08:00
});
2021-06-03 12:20:44 -07:00
it('does not offer old version', function (done) {
nock.cleanAll();
2016-01-24 00:44:46 -08:00
2021-06-03 12:20:44 -07:00
updatechecker._checkAppUpdates({ automatic: false }, function (error) {
expect(!error).to.be.ok();
expect(updatechecker.getUpdateInfo()).to.eql({ });
done();
});
2016-01-24 00:44:46 -08:00
});
});
});