Skip to content

Commit

Permalink
Migrated top nav plugin test to the new platform
Browse files Browse the repository at this point in the history
  • Loading branch information
VladLasitsa committed Mar 13, 2020
1 parent ce1836b commit ff259b9
Show file tree
Hide file tree
Showing 7 changed files with 203 additions and 0 deletions.
9 changes: 9 additions & 0 deletions test/plugin_functional/plugins/kbn_top_nav/kibana.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"id": "kbn_top_nav",
"version": "0.0.1",
"kibanaVersion": "kibana",
"configPath": ["kbn_top_nav"],
"server": false,
"ui": true,
"requiredPlugins": ["navigation"]
}
18 changes: 18 additions & 0 deletions test/plugin_functional/plugins/kbn_top_nav/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"name": "kbn_top_nav",
"version": "1.0.0",
"main": "target/test/plugin_functional/plugins/kbn_top_nav",
"kibana": {
"version": "kibana",
"templateVersion": "1.0.0"
},
"license": "Apache-2.0",
"scripts": {
"kbn": "node ../../../../scripts/kbn.js",
"build": "rm -rf './target' && tsc"
},
"devDependencies": {
"typescript": "3.7.2"
}
}

47 changes: 47 additions & 0 deletions test/plugin_functional/plugins/kbn_top_nav/public/application.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
/*
* 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 React from 'react';
import { render, unmountComponentAtNode } from 'react-dom';
import { AppMountParameters } from 'kibana/public';
import { AppPluginDependencies } from './types';

export const renderApp = (
depsStart: AppPluginDependencies,
{ appBasePath, element }: AppMountParameters
) => {
const { TopNavMenu } = depsStart.navigation.ui;
const config = [
{
id: 'new',
label: 'New Button',
description: 'New Demo',
run() {},
testId: 'demoNewButton',
},
];
render(
<TopNavMenu appName="demo-app" config={config}>
Hey
</TopNavMenu>,
element
);

return () => unmountComponentAtNode(element);
};
24 changes: 24 additions & 0 deletions test/plugin_functional/plugins/kbn_top_nav/public/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
/*
* 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 { PluginInitializer } from 'kibana/public';
import { TopNavTestPlugin, TopNavTestPluginSetup, TopNavTestPluginStart } from './plugin';

export const plugin: PluginInitializer<TopNavTestPluginSetup, TopNavTestPluginStart> = () =>
new TopNavTestPlugin();
66 changes: 66 additions & 0 deletions test/plugin_functional/plugins/kbn_top_nav/public/plugin.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
/*
* 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 { CoreSetup, Plugin } from 'kibana/public';
import { AppMountParameters } from 'kibana/public';
import { NavigationPublicPluginSetup } from '../../../../../src/plugins/navigation/public';
import { AppPluginDependencies } from './types';

export class TopNavTestPlugin implements Plugin<TopNavTestPluginSetup, TopNavTestPluginStart> {
public setup(core: CoreSetup, { navigation }: { navigation: NavigationPublicPluginSetup }) {
const customExtension = {
id: 'registered-prop',
label: 'Registered Button',
description: 'Registered Demo',
run() {},
testId: 'demoRegisteredNewButton',
};

navigation.registerMenuItem(customExtension);

const customDiscoverExtension = {
id: 'registered-discover-prop',
label: 'Registered Discover Button',
description: 'Registered Discover Demo',
run() {},
testId: 'demoDiscoverRegisteredNewButton',
appName: 'discover',
};

navigation.registerMenuItem(customDiscoverExtension);

core.application.register({
id: 'topNavMenu',
title: 'Top nav menu example',
async mount(params: AppMountParameters) {
const { renderApp } = await import('./application');
const services = await core.getStartServices();
return renderApp(services[1] as AppPluginDependencies, params);
},
});

return {};
}

public start() {}
public stop() {}
}

export type TopNavTestPluginSetup = ReturnType<TopNavTestPlugin['setup']>;
export type TopNavTestPluginStart = ReturnType<TopNavTestPlugin['start']>;
24 changes: 24 additions & 0 deletions test/plugin_functional/plugins/kbn_top_nav/public/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
/*
* 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 { NavigationPublicPluginStart } from '../../../../../src/plugins/navigation/public';

export interface AppPluginDependencies {
navigation: NavigationPublicPluginStart;
}
15 changes: 15 additions & 0 deletions test/plugin_functional/plugins/kbn_top_nav/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"extends": "../../../../tsconfig.json",
"compilerOptions": {
"outDir": "./target",
"skipLibCheck": true
},
"include": [
"index.ts",
"public/**/*.ts",
"public/**/*.tsx",
"server/**/*.ts",
"../../../../typings/**/*",
],
"exclude": []
}

0 comments on commit ff259b9

Please sign in to comment.