UNPKG

guvnor

Version:

A node process manager that isn't spanners all the way down

314 lines (250 loc) 7.76 kB
var expect = require('chai').expect, sinon = require('sinon'), path = require('path'), Apps = require('../../../lib/cli/Apps') require('colors') describe('Apps', function () { var apps, guvnor, info, error beforeEach(function () { info = console.info error = console.error apps = new Apps() apps._config = { guvnor: {} } apps._logger = { info: sinon.stub(), warn: sinon.stub(), error: sinon.stub(), debug: sinon.stub() } apps._user = {} apps._connectOrStart = sinon.stub() apps._processes = { start: sinon.stub() } guvnor = { disconnect: sinon.stub(), on: sinon.stub() } apps._connectOrStart.callsArgWith(0, undefined, guvnor) }) afterEach(function () { console.info = info console.error = error }) it('should install an application', function () { var name = 'name' var url = 'url' var options = {} guvnor.deployApplication = sinon.stub() guvnor.deployApplication.callsArg(5) apps.installApplication(url, name, options) expect(guvnor.disconnect.called).to.be.true }) it('should relay stdout when installing an application', function (done) { var name = 'name' var url = 'url' var options = {} guvnor.deployApplication = function (name, url, user, info, error, complete) { info('foo') complete() } console.info = function (data) { expect(data).to.equal('foo') done() } apps.installApplication(url, name, options) }) it('should relay stderr when installing an application', function (done) { var name = 'name' var url = 'url' var options = {} guvnor.deployApplication = function (name, url, user, info, error, complete) { error('foo') complete() } console.error = function (data) { expect(data).to.contain('foo') done() } apps.installApplication(url, name, options) }) it('should fail to install application', function () { var name = 'name' var url = 'url' var options = {} guvnor.deployApplication = sinon.stub() apps._connectOrStart.callsArgWith(0, undefined, guvnor) guvnor.deployApplication.callsArgWith(5, new Error('urk!')) try { apps.installApplication(url, name, options) } catch (e) { if (e.message != 'urk!') throw e } }) it('should list installed applications', function (done) { var options = {} var applications = [{ name: 'foo', user: 'bar', url: 'baz' }] guvnor.listApplications = sinon.stub() guvnor.listApplications.callsArgWith(0, undefined, applications) var invocations = 1 console.info = function (data) { if (invocations == 2) { // first invocation is table header.. expect(data).to.contain('foo') done() } invocations++ } apps.listApplications(options) }) it('should fail to list installed applications', function () { var options = {} guvnor.listApplications = sinon.stub() guvnor.listApplications.callsArgWith(0, new Error('urk!')) try { apps.listApplications(options) } catch (e) { if (e.message != 'urk!') throw e } }) it('should remove an application', function () { var name = 'foo' var options = {} guvnor.removeApplication = sinon.stub() guvnor.removeApplication.withArgs(name, sinon.match.func).callsArgWith(1, undefined) apps.removeApplication(name, options) expect(guvnor.disconnect.called).to.be.true }) it('should fail to remove an application', function () { var name = 'foo' var options = {} guvnor.removeApplication = sinon.stub() guvnor.removeApplication.callsArgWith(1, new Error('urk!')) try { apps.removeApplication(name, options) } catch (e) { if (e.message != 'urk!') throw e } }) it('should run an application', function () { var name = 'foo' var ref = 'bar' var options = {} var info = { path: 'path' } guvnor.switchApplicationRef = sinon.stub() guvnor.switchApplicationRef.withArgs(name, ref, sinon.match.func).callsArgWith(4, undefined, info) apps.runApplication(name, ref, options) expect(apps._processes.start.called).to.be.true }) it('should fail to run an application', function () { var name = 'foo' var ref = 'bar' var options = {} guvnor.switchApplicationRef = sinon.stub() guvnor.switchApplicationRef.withArgs(name, ref, sinon.match.func).callsArgWith(4, new Error('urk!')) try { apps.runApplication(name, ref, options) } catch (e) { if (e.message != 'urk!') throw e } }) it('should relay stdout when running an application', function (done) { console.info = function (data) { expect(data).to.equal('foo') done() } var name = 'foo' var ref = 'bar' var options = {} guvnor.switchApplicationRef = sinon.stub() guvnor.switchApplicationRef.withArgs(name, ref, sinon.match.func, sinon.match.func, sinon.match.func).callsArgWith(2, 'foo') apps.runApplication(name, ref, options) }) it('should relay stderr when running an application', function (done) { console.error = function (data) { expect(data).to.equal('foo') done() } var name = 'foo' var ref = 'bar' var options = {} guvnor.switchApplicationRef = sinon.stub() guvnor.switchApplicationRef.withArgs(name, ref, sinon.match.func, sinon.match.func, sinon.match.func).callsArgWith(3, 'foo') apps.runApplication(name, ref, options) }) it('should default to master ref', function () { var name = 'foo' var options = {} guvnor.switchApplicationRef = sinon.stub() apps.runApplication(name, undefined, options) expect(guvnor.switchApplicationRef.withArgs(name, 'master', sinon.match.func, sinon.match.func, sinon.match.func).called).to.be.true }) it('should list application refs', function (done) { var app = 'foo' var options = {} var refs = [{ name: 'bar', commit: 'baz' }] guvnor.listApplicationRefs = sinon.stub() guvnor.listApplicationRefs.withArgs(app, sinon.match.func).callsArgWith(1, undefined, refs) var invocations = 1 console.info = function (data) { if (invocations == 2) { // first invocation is table header.. expect(data).to.contain('bar') done() } invocations++ } apps.listRefs(app, options) }) it('should fail to list application refs', function () { var app = 'foo' var options = {} guvnor.listApplicationRefs = sinon.stub() guvnor.listApplicationRefs.withArgs(app, sinon.match.func).callsArgWith(1, new Error('urk!')) try { apps.listRefs(app, options) } catch (e) { if (e.message != 'urk!') throw e } }) it('should update application refs', function () { var app = 'foo' var options = {} var refs = [{ name: 'bar', commit: 'baz' }] guvnor.updateApplicationRefs = sinon.stub() guvnor.updateApplicationRefs.withArgs(app, sinon.match.func, sinon.match.func, sinon.match.func).callsArgWith(3, undefined, refs) apps.updateRefs(app, options) expect(guvnor.disconnect.called).to.be.true }) it('should fail to update application refs', function () { var app = 'foo' var options = {} guvnor.updateApplicationRefs = sinon.stub() guvnor.updateApplicationRefs.withArgs(app, sinon.match.func, sinon.match.func, sinon.match.func).callsArgWith(3, new Error('urk!')) try { apps.updateRefs(app, options) } catch (e) { if (e.message != 'urk!') throw e } }) })