jive-sdk
Version:
Node.js SDK for Jive Software to assist with the development of add-ons
316 lines (298 loc) • 14.4 kB
JavaScript
var assert = require('assert');
var q = require('q');
var express = require('express');
var http = require('http');
var qiofs = require('q-io/fs');
var sinon = require("sinon");
describe('jive', function () {
describe('extension', function () {
it('prepare', function (done) {
var jive = this['jive'];
var testUtils = this['testUtils'];
testUtils.createTempDir().then( function(dir) {
var extensionRoot = dir + '/extension';
return qiofs.copyTree(testUtils.getResourceFilePath('/services/extension_full'),
extensionRoot ).then( function() {
return testUtils.setupService(jive,{
'svcRootDir' : extensionRoot,
'persistence' : 'memory',
'logLevel' : 'FATAL',
'skipCreateExtension' : true,
'clientUrl' : testUtils.createFakeURL(),
'role' : 'worker'
});
}).then( function(service) {
return jive.service.extensions().prepare(extensionRoot,
extensionRoot + '/tiles',
extensionRoot + '/apps',
extensionRoot + '/cartridges',
extensionRoot + '/storages',
extensionRoot + '/services'
).then( function() {
return service.stop();
}).then( function() {
return extensionRoot;
});
});
}).then( function(extensionRoot) {
// validate that extension.zip exists
jive.util.fsexists( extensionRoot + '/extension.zip').then( function( exists ) {
assert.ok(exists);
return jive.util.fsexists( extensionRoot + '/extension_src');
}).then( function(exists) {
assert.ok(exists);
return jive.util.fsexists( extensionRoot + '/extension_src/definition.json');
}).then( function(exists) {
assert.ok(exists);
return jive.util.fsexists( extensionRoot + '/extension_src/meta.json');
}).then( function(exists) {
assert.ok(exists);
return jive.util.fsreadJson( extensionRoot + '/extension_src/definition.json' );
}).then( function(definitionJson) {
assert.ok( definitionJson );
assert.ok( definitionJson['tiles'] );
assert.equal( definitionJson['tiles'].length, 2 );
assert.ok( definitionJson['templates'] );
assert.equal( definitionJson['templates'].length, 1 );
assert.ok( definitionJson['osapps'] );
assert.equal( definitionJson['osapps'].length, 1 );
assert.ok( definitionJson['storageDefinitions'] );
assert.equal( definitionJson['storageDefinitions'].length, 1 );
assert.ok( definitionJson['jabCartridges'] === undefined );
}).then( function() {
done();
});
});
});
function stubJiveLogger(jive, logs){
function stubTemplate(log){
function stringLog(m){
return m ? typeof m === "object" ? JSON.stringify(m) : m : "";
}
sinon.stub(jive.logger, log, function(a,b){
logs[log].push(stringLog(a)+ stringLog(b));
});
}
for(var log in logs){
stubTemplate(log);
}
return function(){
for(var log in logs){
jive.logger[log].restore();
}
}
}
function testForCartridgeZips(jive, extensionRoot, numberOfZips){
return jive.util.fsreaddir(extensionRoot + '/extension_src/data').then(function (items) {
var zips = items.filter(function (item) {
return item.indexOf(".zip") >= 0; // assume that this is a cartridge
});
assert.equal(zips.length, numberOfZips);
});
}
it('prepare - cartridge is present and configured', function (done) {
var jive = this['jive'];
var testUtils = this['testUtils'];
var warnings = [];
var restore = stubJiveLogger(jive, {warn:warnings});
testUtils.createTempDir().then( function(dir) {
var extensionRoot = dir + '/extension';
return qiofs.copyTree(testUtils.getResourceFilePath('/services/extension_cartridge'),
extensionRoot ).then( function() {
return testUtils.setupService(jive,{
'svcRootDir' : extensionRoot,
'persistence' : 'memory',
'logLevel' : 'FATAL',
'skipCreateExtension' : true,
'clientUrl' : testUtils.createFakeURL(),
'role' : 'worker',
'extensionInfo':{
"type": "jab-cartridges-app"
}
});
}).then( function(service) {
return jive.service.extensions().prepare(extensionRoot,
extensionRoot + '/tiles',
extensionRoot + '/apps',
extensionRoot + '/cartridges',
extensionRoot + '/storages',
extensionRoot + '/services'
).then( function() {
return service.stop();
}).then( function() {
return extensionRoot;
});
})
}).then( function(extensionRoot) {
// validate that extension.zip exists
return jive.util.fsreadJson(extensionRoot + '/extension_src/definition.json')
.then(function (definitionJson) {
assert.ok(definitionJson);
assert.ok(definitionJson['jabCartridges']);
assert.equal(definitionJson['jabCartridges'].length, 4);
loggedAWarningForCartridge(warnings, false);
}).then(function () {
return testForCartridgeZips(jive, extensionRoot, 4);
});
}).then( function() {
restore();
done();
}).catch(function (error) {
restore();
throw error;
});
});
function loggedAWarningForCartridge(warnings, flag) {
assert.equal(warnings.indexOf('***********************\n' +
'This add-on contains cartridges, ' +
'but it is not configured to package them. '+
'To enable this, add "type": "jab-cartridges-app" ' +
'to the extensionInfo field of jiveclientconfiguration.json\n' +
'**********************') >= 0, flag);
}
it('prepare - ignore cartridge if it is not configured', function (done) {
var jive = this['jive'];
var testUtils = this['testUtils'];
var warnings = [];
var restore = stubJiveLogger(jive, {warn:warnings});
testUtils.createTempDir().then( function(dir) {
var extensionRoot = dir + '/extension';
return qiofs.copyTree(testUtils.getResourceFilePath('/services/extension_cartridge'),
extensionRoot ).then( function() {
return testUtils.setupService(jive,{
'svcRootDir' : extensionRoot,
'persistence' : 'memory',
'logLevel' : 'FATAL',
'skipCreateExtension' : true,
'clientUrl' : testUtils.createFakeURL(),
'role' : 'worker'
});
}).then( function(service) {
return jive.service.extensions().prepare(extensionRoot,
extensionRoot + '/tiles',
extensionRoot + '/apps',
extensionRoot + '/cartridges',
extensionRoot + '/storages',
extensionRoot + '/services'
).then( function() {
return service.stop();
}).then( function() {
return extensionRoot;
});
})
}).then( function(extensionRoot) {
// validate that extension.zip exists
return jive.util.fsreadJson( extensionRoot + '/extension_src/definition.json' )
.then( function(definitionJson) {
assert.ok(definitionJson);
assert.ok( definitionJson['jabCartridges'] === undefined );
loggedAWarningForCartridge(warnings, true);
}).then(function () {
return testForCartridgeZips(jive, extensionRoot, 0);
});
}).then( function() {
restore();
done();
}).catch(function (error) {
restore();
console.log(error);
throw error;
});
});
it('prepare - no cartridge and not configured', function (done) {
var jive = this['jive'];
var testUtils = this['testUtils'];
var warnings = [];
var restore = stubJiveLogger(jive, {warn:warnings});
testUtils.createTempDir().then( function(dir) {
var extensionRoot = dir + '/extension';
return testUtils.setupService(jive, {
'svcRootDir': extensionRoot,
'persistence': 'memory',
'logLevel': 'FATAL',
'skipCreateExtension': true,
'clientUrl': testUtils.createFakeURL(),
'role': 'worker'
})
.then(function (service) {
return jive.service.extensions().prepare(extensionRoot,
extensionRoot + '/tiles',
extensionRoot + '/apps',
extensionRoot + '/cartridges',
extensionRoot + '/storages',
extensionRoot + '/services'
).then(function () {
return service.stop();
}).then(function () {
return extensionRoot;
});
})
}).then( function(extensionRoot) {
// validate that extension.zip exists
return jive.util.fsreadJson( extensionRoot + '/extension_src/definition.json' )
.then( function(definitionJson) {
assert.ok( definitionJson );
assert.ok( definitionJson['jabCartridges'] === undefined );
loggedAWarningForCartridge(warnings, false);
}).then(function () {
return testForCartridgeZips(jive, extensionRoot, 0);
})
}).then( function() {
restore();
done();
}).catch(function (error) {
restore();
throw error;
});
});
it('prepare - no cartridge and configured', function (done) {
var jive = this['jive'];
var testUtils = this['testUtils'];
var warnings = [];
var restore = stubJiveLogger(jive, {warn:warnings});
testUtils.createTempDir().then( function(dir) {
var extensionRoot = dir + '/extension';
return testUtils.setupService(jive, {
'svcRootDir': extensionRoot,
'persistence': 'memory',
'logLevel': 'FATAL',
'skipCreateExtension': true,
'clientUrl': testUtils.createFakeURL(),
'role': 'worker',
'extensionInfo':{
"type": "jab-cartridges-app"
}
})
.then(function (service) {
return jive.service.extensions().prepare(extensionRoot,
extensionRoot + '/tiles',
extensionRoot + '/apps',
extensionRoot + '/cartridges',
extensionRoot + '/storages',
extensionRoot + '/services'
).then(function () {
return service.stop();
}).then(function () {
return extensionRoot;
});
})
}).then( function(extensionRoot) {
// validate that extension.zip exists
return jive.util.fsreadJson( extensionRoot + '/extension_src/definition.json' )
.then( function(definitionJson) {
assert.ok( definitionJson );
assert.ok( definitionJson['jabCartridges'] === undefined );
loggedAWarningForCartridge(warnings, false);
}).then(function () {
return testForCartridgeZips(jive, extensionRoot, 0);
})
}).then( function() {
restore();
done();
}).catch(function (error) {
restore();
throw error;
});
});
});
});