added test

This commit is contained in:
Spencer Alger 2014-07-11 11:59:13 -07:00
parent f4dac7fd22
commit 433bcaeef8
14 changed files with 130 additions and 29 deletions

View file

@ -1,15 +1,14 @@
/** @scratch /configuration/config.js/1
* == Configuration
* config.js is where you will find the core Kibana configuration. This file contains parameter that
* must be set before kibana is run for the first time.
*/
/** @scratch /configuration/config.js/2
* === Parameters
*/
define(function () {
/** @scratch /configuration/config.js/1
* == Configuration
* config.js is where you will find the core Kibana configuration. This file contains parameter that
* must be set before kibana is run for the first time.
*/
/** @scratch /configuration/config.js/2
* === Parameters
*/
return {
/** @scratch /configuration/config.js/5
* ==== elasticsearch
*

View file

@ -31,7 +31,7 @@ define(function (require) {
require('routes')
.when('/discover/:id?', {
templateUrl: 'kibana/apps/discover/index.html',
template: require('text!apps/discover/index.html'),
reloadOnSearch: false,
resolve: {
indexList: function (courier) {

View file

@ -3,7 +3,7 @@ define(function (require) {
'kibana/notify'
]);
var configFile = window.kbnConfigFile;
var configFile = require('config_file');
// allow the rest of the app to get the configFile easily
module.constant('configFile', configFile);

View file

@ -13,7 +13,7 @@ define(function (require) {
*/
var searchLooper = new Looper(null, function () {
// fatal if refreshes take longer then the refresh interval
if (_activeAutoSearch) Promise.rejected(new errors.HastyRefresh());
if (_activeAutoSearch) Promise.reject(new errors.HastyRefresh());
return _activeAutoSearch = fetch.searches().finally(function (res) {
_activeAutoSearch = null;
});

View file

@ -4,7 +4,7 @@ define(function (require) {
require('components/notify/notify');
require('modules').get('kibana/services')
require('modules').get('kibana/services', ['kibana', 'kibana/notify', 'kibana/config'])
.service('kbnSetup', function (Private, Promise, Notifier, es, configFile) {
// setup steps
var checkForEs = Private(require('components/setup/steps/check_for_es'));

View file

@ -11,7 +11,7 @@ define(function (require) {
require('angular-route');
require('angular-bindonce');
var configFile = window.kbnConfigFile = require('../config');
var configFile = require('config_file');
var kibana = angular.module('kibana', [
// list external requirements here

View file

@ -2,6 +2,7 @@ require.config({
baseUrl: './kibana',
paths: {
kibana: './index',
config_file: '../config',
// special utils
routes: 'utils/routes/index',

View file

@ -3,7 +3,7 @@ define(function (require) {
var es; // share the client amoungst all apps
require('modules')
.get('kibana/services', ['elasticsearch'])
.get('kibana/services', ['elasticsearch', 'kibana/config'])
.service('es', function (esFactory, configFile, $q) {
if (es) return es;

View file

@ -38,7 +38,7 @@ define(function (require) {
// Provides a tiny subset of the excelent API from
// bluebird, reimplemented using the $q service
module.service('Promise', function ($q) {
module.service('Promise', function ($q, $timeout) {
function Promise(fn) {
var defer = $q.defer();
try {
@ -55,13 +55,16 @@ define(function (require) {
defer.resolve(val);
return defer.promise;
};
Promise.rejected = function (reason) {
Promise.reject = function (reason) {
var defer = $q.defer();
defer.reject(reason);
return defer.promise;
};
Promise.cast = $q.when;
Promise.defer = $q.defer;
Promise.delay = function (ms) {
return $timeout(_.noop, ms);
};
Promise.nodeify = function (promise, cb) {
promise.then(function (val) {
cb(void 0, val);

View file

@ -13,7 +13,7 @@ define(function (require) {
return privPath.map(name).join(' -> ');
};
var module = require('modules').get('kibana/utils');
var module = require('modules').get('kibana/services');
module.service('Private', function ($injector) {
return function Private(construct) {
if (typeof construct !== 'function') {

View file

@ -104,5 +104,6 @@ define(function (require) {
});
require('./work_queue')();
require('./wrap_route_with_prep')();
});
});

View file

@ -1,21 +1,118 @@
define(function (require) {
var sinon = require('test_utils/auto_release_sinon');
var _ = require('lodash');
var RouteManager = require('routes').RouteManager;
var routes;
require('utils/private');
return function () {
describe('wrap user work with prep work', function () {
describe('#push', function () {
it('adds to the interval queue');
describe('wrap route with prep work', function () {
beforeEach(function () {
routes = new RouteManager();
});
describe('#resolveWhenFull', function () {
it('resolves requests waiting for the queue to fill when appropriate');
it('creates resolves if none existed', function () {
var exec = 0;
routes.when('/jones', { template: '<picketfence color="white"></picketfence>' });
routes.config({
when: function (path, route) {
exec += 1;
expect(path).to.eql('/jones');
expect(route).to.have.property('resolve');
expect(route.resolve).to.be.an('object');
}
});
expect(exec).to.be(1);
});
describe('#doWork', function () {
it('flushes the queue and resolves all promises');
it('adds a __prep__ property to the resolve object', function () {
var exec = 0;
routes.when('/butter', { resolve: { toast: 'burnThatBread' } });
routes.config({
when: function (path, route) {
exec += 1;
expect(route.resolve).to.have.property('__prep__');
}
});
expect(exec).to.be(1);
});
describe('#empty()', function () {
it('empties the internal queue');
});
var SchedulingTest = function (opts) {
opts = opts || {};
var delaySetup = opts.delayUserWork ? 0 : 50;
var delayUserWork = opts.delayUserWork ? 50: 0;
return function () {
module('kibana/services', 'kibana/notify');
var setupComplete = false;
var userWorkComplete = false;
var route;
var Private;
var Promise;
var $injector;
var $scope;
inject(function ($rootScope, _Private_, _Promise_, _$injector_) {
Private = _Private_;
Promise = _Promise_;
$injector = _$injector_;
$scope = $rootScope.$new();
});
sinon.stub(
Private(require('utils/routes/_setup')),
'routeSetupWork',
function () {
return new Promise(function (resolve, reject) {
setTimeout(function () {
setupComplete = true;
resolve();
$scope.$apply();
}, 50);
});
}
);
routes
.when('/', {
resolve: {
test: function () {
expect(setupComplete).to.be(true);
userWorkComplete = true;
}
}
})
.config({
when: function (p, _r) { route = _r; }
});
return new Promise(function (resolve, reject) {
setTimeout(function () {
Promise.all(_.map(route.resolve, function (fn) {
return $injector.invoke(fn);
}))
.then(function () {
expect(setupComplete).to.be(true);
expect(userWorkComplete).to.be(true);
})
.then(resolve, reject);
$scope.$apply();
}, delayUserWork);
});
};
};
it('always waits for setup to complete before calling user work', new SchedulingTest());
it('does not call user work when setup fails', new SchedulingTest({ failSetup: true }));
it('calls all user work even if it is not initialized until after setup is complete', new SchedulingTest({
delayUserWork: false
}));
});
};
});