E2E: Add support for building test plugins (#91873)

* build test apps with webpack

* add extensions test app

* update e2e tests

* remove non-build test apps using amd

* use @grafana/plugin-configs rather than create-plugin config

* Update e2e/plugin-e2e/plugin-e2e-api-tests/as-admin-user/extensions/usePluginComponents.spec.ts

Co-authored-by: Jack Westbrook <jack.westbrook@gmail.com>

* Update package.json

Co-authored-by: Jack Westbrook <jack.westbrook@gmail.com>

* use run dir variable instead of hardcoded path

* add dummy licence file

* add separate step for building test plugins

* support nested plugins

* remove react-router-dom from the externals array

* remove add_mode dev

* lint starlark

* pass license path as env variable

* fix the path

* chore(e2e-plugins): clean up dependencies to match core versions

* refactor(e2e-plugins): prefer extending webpack plugins-config

* docs(e2e-plugins): add basic info to extensions test plugin readme

* update readme

* change dir name from custom plugins to test plugins

* change root readme

* update lockfile

---------

Co-authored-by: Jack Westbrook <jack.westbrook@gmail.com>
This commit is contained in:
Erik Sundell
2024-08-23 09:00:03 +02:00
committed by GitHub
parent 0af4a20b58
commit d8ec95e9b1
78 changed files with 1143 additions and 722 deletions
@@ -1,5 +1,7 @@
import { test, expect } from '@grafana/plugin-e2e';
import { ensureExtensionRegistryIsPopulated } from './utils';
const testIds = {
container: 'main-app-body',
actions: {
@@ -14,13 +16,18 @@ const testIds = {
},
appB: {
modal: 'b-app-modal',
reusableComponent: 'b-app-configure-extension-component',
},
legacyAPIPage: {
container: 'data-testid pg-two-container',
},
};
const pluginId = 'myorg-extensionpoint-app';
const pluginId = 'grafana-extensionstest-app';
test('should extend the actions menu with a link to a-app plugin', async ({ page }) => {
await page.goto(`/a/${pluginId}/one`);
await page.goto(`/a/${pluginId}/legacy-apis`);
await ensureExtensionRegistryIsPopulated(page);
await page.getByTestId(testIds.actions.button).click();
await page.getByTestId(testIds.container).getByText('Go to A').click();
await page.getByTestId(testIds.modal.open).click();
@@ -28,7 +35,16 @@ test('should extend the actions menu with a link to a-app plugin', async ({ page
});
test('should extend the actions menu with a command triggered from b-app plugin', async ({ page }) => {
await page.goto(`/a/${pluginId}/one`);
await page.goto(`/a/${pluginId}/legacy-apis`);
await ensureExtensionRegistryIsPopulated(page);
await expect(
page.getByTestId(testIds.legacyAPIPage.container).getByTestId(testIds.appB.reusableComponent)
).toHaveText('Hello World!');
});
test('should extend main app with component extension from app B', async ({ page }) => {
await page.goto(`/a/${pluginId}/legacy-apis`);
await ensureExtensionRegistryIsPopulated(page);
await page.getByTestId(testIds.actions.button).click();
await page.getByTestId(testIds.container).getByText('Open from B').click();
await expect(page.getByTestId(testIds.appB.modal)).toBeVisible();