make defaultRoute accessible in NP Config (#52308)

* defaultRoute was not provided to the NP

* improve defaultRoute validation

* add test that defaultRoute is read from config

* update tests
This commit is contained in:
Mikhail Shustov 2019-12-06 10:28:29 +01:00 committed by GitHub
parent 6db76a7e6d
commit ca55402496
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 66 additions and 2 deletions

View file

@ -38,7 +38,15 @@ export const config = {
validate: match(validBasePathRegex, "must start with a slash, don't end with one"),
})
),
defaultRoute: schema.maybe(schema.string()),
defaultRoute: schema.maybe(
schema.string({
validate(value) {
if (!value.startsWith('/')) {
return 'must start with a slash';
}
},
})
),
cors: schema.conditional(
schema.contextRef('dev'),
true,

View file

@ -8,6 +8,7 @@ Object {
"enabled": true,
},
"cors": false,
"defaultRoute": undefined,
"host": "host",
"keepaliveTimeout": 5000,
"maxPayload": 1000,
@ -30,6 +31,7 @@ Object {
"enabled": true,
},
"cors": false,
"defaultRoute": undefined,
"host": "host",
"keepaliveTimeout": 5000,
"maxPayload": 1000,

View file

@ -62,6 +62,7 @@ export class LegacyObjectToConfigAdapter extends ObjectToConfigAdapter {
return {
autoListen: configValue.autoListen,
basePath: configValue.basePath,
defaultRoute: configValue.defaultRoute,
cors: configValue.cors,
host: configValue.host,
maxPayload: configValue.maxPayloadBytes,

View file

@ -0,0 +1,53 @@
/*
* Licensed to Elasticsearch B.V. under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch B.V. licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import * as kbnTestServer from '../../../../test_utils/kbn_server';
// eslint-disable-next-line @kbn/eslint/no-restricted-paths
import { Root } from '../../../../core/server/root';
describe('default route provider', () => {
let root: Root;
afterEach(async () => await root.shutdown());
it('redirects to the configured default route', async function() {
root = kbnTestServer.createRoot({
server: {
defaultRoute: '/app/some/default/route',
},
});
await root.setup();
await root.start();
const kbnServer = kbnTestServer.getKbnServer(root);
kbnServer.server.decorate('request', 'getSavedObjectsClient', function() {
return {
get: (type: string, id: string) => ({ attributes: {} }),
};
});
const { status, header } = await kbnTestServer.request.get(root, '/');
expect(status).toEqual(302);
expect(header).toMatchObject({
location: '/app/some/default/route',
});
});
});

View file

@ -55,7 +55,7 @@ function getImportableAndExportableTypes({ kbnServer, visibleTypes }) {
);
}
export async function savedObjectsMixin(kbnServer, server) {
export function savedObjectsMixin(kbnServer, server) {
const migrator = kbnServer.newPlatform.__internals.kibanaMigrator;
const mappings = migrator.getActiveMappings();
const allTypes = Object.keys(getRootPropertiesObjects(mappings));