mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 01:38:56 -04:00
added test
This commit is contained in:
parent
f4dac7fd22
commit
433bcaeef8
14 changed files with 130 additions and 29 deletions
|
@ -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
|
||||
*
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
});
|
||||
|
|
|
@ -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'));
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -2,6 +2,7 @@ require.config({
|
|||
baseUrl: './kibana',
|
||||
paths: {
|
||||
kibana: './index',
|
||||
config_file: '../config',
|
||||
|
||||
// special utils
|
||||
routes: 'utils/routes/index',
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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') {
|
||||
|
|
|
@ -104,5 +104,6 @@ define(function (require) {
|
|||
});
|
||||
|
||||
require('./work_queue')();
|
||||
require('./wrap_route_with_prep')();
|
||||
});
|
||||
});
|
|
@ -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
|
||||
}));
|
||||
});
|
||||
};
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue