broke _setup out of _wrap* so that it caould be swapped out in testing

This commit is contained in:
Spencer Alger 2014-06-20 13:57:07 -07:00
parent 08ce7446bf
commit c72436b49c
2 changed files with 45 additions and 39 deletions

View file

@ -0,0 +1,41 @@
define(function (require) {
return function routeSetup(Promise, kbnSetup, config, $route, indexPatterns, Notifier) {
var errors = require('errors');
var NoDefaultIndexPattern = errors.NoDefaultIndexPattern;
var NoDefinedIndexPatterns = errors.NoDefinedIndexPatterns;
return {
routeSetupWork: function () {
return Promise.all([
kbnSetup(),
config.init(),
])
.then(function () {
if (!$route.current.$$route.originalPath.match(/settings\/indices/)) {
return indexPatterns.getIds()
.then(function (patterns) {
if (!patterns || patterns.length === 0) {
throw new errors.NoDefinedIndexPatterns();
}
if (!config.get('defaultIndex')) {
throw new NoDefaultIndexPattern();
}
});
}
});
},
handleKnownError: function (err) {
if (err instanceof NoDefaultIndexPattern || err instanceof NoDefinedIndexPatterns) {
// .change short circuits the routes by calling $route.refresh(). We can safely swallow this error
// after reporting it to the user
$route.change('/settings/indices');
(new Notifier()).error(err);
} else {
return Promise.reject(err);
}
}
};
};
});

View file

@ -2,24 +2,8 @@ define(function (require) {
var angular = require('angular');
var _ = require('lodash');
var errors = require('errors');
var NoDefaultIndexPattern = errors.NoDefaultIndexPattern;
var NoDefinedIndexPatterns = errors.NoDefinedIndexPatterns;
var WorkQueue = require('utils/routes/_work_queue');
var oneTimeSetup = function ($q, kbnSetup, config) {
var prom = $q.all([
kbnSetup(),
config.init(),
]);
// override setup to only return the promise
oneTimeSetup = function () { return prom; };
return prom;
};
return function (route) {
if (!route.resolve && route.redirectTo) {
return;
@ -30,23 +14,10 @@ define(function (require) {
userWork.limit = _.keys(route.resolve).length;
var resolve = {
__prep__: function (Promise, $injector, config, $route, Notifier, indexPatterns) {
return $injector.invoke(oneTimeSetup)
.then(function () {
if (!$route.current.$$route.originalPath.match(/settings\/indices/)) {
// always check for existing ids first
return indexPatterns.getIds()
.then(function (patterns) {
if (!patterns || patterns.length === 0) {
throw new errors.NoDefinedIndexPatterns();
}
__prep__: function (Promise, Private, config, kbnSetup) {
var setup = Private(require('utils/routes/_setup'));
if (!config.get('defaultIndex')) {
throw new NoDefaultIndexPattern();
}
});
}
})
return setup.routeSetupWork()
.then(function () {
// wait for the queue to fill up, then do all the work
var defer = Promise.defer();
@ -61,13 +32,7 @@ define(function (require) {
.catch(function (err) {
// discard any remaining user work
userWork.empty();
if (err instanceof NoDefaultIndexPattern || err instanceof NoDefinedIndexPatterns) {
$route.change('/settings/indices');
(new Notifier()).error(err);
} else {
throw err;
}
return setup.handleKnownError(err);
});
}
};