mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Plugins: Never disable add new data source for core plugins (#81774)
This commit is contained in:
parent
d9f7eda284
commit
ed62aefeb0
@ -0,0 +1,79 @@
|
||||
import { render, screen } from '@testing-library/react';
|
||||
import React from 'react';
|
||||
import { TestProvider } from 'test/helpers/TestProvider';
|
||||
|
||||
import { PluginSignatureStatus } from '@grafana/data';
|
||||
import { config } from '@grafana/runtime';
|
||||
import { ContextSrv, setContextSrv } from 'app/core/services/context_srv';
|
||||
import { AccessControlAction } from 'app/types';
|
||||
|
||||
import { CatalogPlugin } from '../../types';
|
||||
|
||||
import { GetStartedWithDataSource } from './GetStartedWithDataSource';
|
||||
|
||||
const plugin: CatalogPlugin = {
|
||||
description: 'The test plugin',
|
||||
downloads: 5,
|
||||
id: 'test-plugin',
|
||||
info: {
|
||||
logos: { small: '', large: '' },
|
||||
},
|
||||
name: 'Testing Plugin',
|
||||
orgName: 'Test',
|
||||
popularity: 0,
|
||||
signature: PluginSignatureStatus.valid,
|
||||
publishedAt: '2020-09-01',
|
||||
updatedAt: '2021-06-28',
|
||||
hasUpdate: false,
|
||||
isInstalled: false,
|
||||
isCore: false,
|
||||
isDev: false,
|
||||
isEnterprise: false,
|
||||
isDisabled: false,
|
||||
isDeprecated: false,
|
||||
isPublished: true,
|
||||
};
|
||||
|
||||
describe('GetStartedWithDataSource', () => {
|
||||
const oldFeatureTogglesManagedPluginsInstall = config.featureToggles.managedPluginsInstall;
|
||||
const oldPluginAdminExternalManageEnabled = config.pluginAdminExternalManageEnabled;
|
||||
|
||||
config.featureToggles.managedPluginsInstall = true;
|
||||
config.pluginAdminExternalManageEnabled = true;
|
||||
|
||||
const contextSrv = new ContextSrv();
|
||||
contextSrv.user.permissions = {
|
||||
[AccessControlAction.DataSourcesCreate]: true,
|
||||
[AccessControlAction.DataSourcesWrite]: true,
|
||||
};
|
||||
setContextSrv(contextSrv);
|
||||
|
||||
afterAll(() => {
|
||||
config.featureToggles.managedPluginsInstall = oldFeatureTogglesManagedPluginsInstall;
|
||||
config.pluginAdminExternalManageEnabled = oldPluginAdminExternalManageEnabled;
|
||||
});
|
||||
|
||||
it('should disable button when managedPluginsInstall and pluginAdminExternalManaged are enabled, but plugin.isFullyInstalled is false', () => {
|
||||
render(
|
||||
<TestProvider>
|
||||
<GetStartedWithDataSource plugin={{ ...plugin, isFullyInstalled: false }} />
|
||||
</TestProvider>
|
||||
);
|
||||
|
||||
const el = screen.getByRole('button', { hidden: true });
|
||||
expect(el).toHaveTextContent(/Add new data source/i);
|
||||
expect(el).toBeDisabled();
|
||||
});
|
||||
|
||||
it('should disable button when managedPluginsInstall and pluginAdminExternalManaged are enabled, but plugin.isFullyInstalled is true', () => {
|
||||
render(
|
||||
<TestProvider>
|
||||
<GetStartedWithDataSource plugin={{ ...plugin, isFullyInstalled: true }} />
|
||||
</TestProvider>
|
||||
);
|
||||
|
||||
const el = screen.getByRole('button', { hidden: true });
|
||||
expect(el).toHaveTextContent(/Add new data source/i);
|
||||
expect(el).toBeEnabled();
|
||||
});
|
||||
});
|
@ -3,7 +3,6 @@ import React, { useCallback } from 'react';
|
||||
import { DataSourcePluginMeta } from '@grafana/data';
|
||||
import { config } from '@grafana/runtime';
|
||||
import { Button } from '@grafana/ui';
|
||||
import configCore from 'app/core/config';
|
||||
import { useDataSourcesRoutes, addDataSource } from 'app/features/datasources/state';
|
||||
import { useDispatch } from 'app/types';
|
||||
|
||||
@ -31,9 +30,7 @@ export function GetStartedWithDataSource({ plugin }: Props): React.ReactElement
|
||||
}
|
||||
|
||||
const disabledButton =
|
||||
configCore.featureToggles.managedPluginsInstall &&
|
||||
config.pluginAdminExternalManageEnabled &&
|
||||
!plugin.isFullyInstalled;
|
||||
config.featureToggles.managedPluginsInstall && config.pluginAdminExternalManageEnabled && !plugin.isFullyInstalled;
|
||||
|
||||
return (
|
||||
<Button
|
||||
|
@ -88,6 +88,30 @@ describe('Plugins/Helpers', () => {
|
||||
expect(findMerged('plugin-5')).not.toBeUndefined();
|
||||
expect(findMerged('plugin-5')?.isDeprecated).toBe(true);
|
||||
});
|
||||
|
||||
test('core plugins should be fullyInstalled in cloud', () => {
|
||||
const corePluginId = 'plugin-core';
|
||||
|
||||
const oldFeatureTogglesManagedPluginsInstall = config.featureToggles.managedPluginsInstall;
|
||||
const oldPluginAdminExternalManageEnabled = config.pluginAdminExternalManageEnabled;
|
||||
|
||||
config.featureToggles.managedPluginsInstall = true;
|
||||
config.pluginAdminExternalManageEnabled = true;
|
||||
|
||||
const merged = mergeLocalsAndRemotes({
|
||||
local: [...localPlugins, getLocalPluginMock({ id: corePluginId, signature: PluginSignatureStatus.internal })],
|
||||
remote: [...remotePlugins, getRemotePluginMock({ slug: corePluginId })],
|
||||
});
|
||||
const findMerged = (mergedId: string) => merged.find(({ id }) => id === mergedId);
|
||||
|
||||
expect(merged).toHaveLength(5);
|
||||
expect(findMerged(corePluginId)).not.toBeUndefined();
|
||||
expect(findMerged(corePluginId)?.isCore).toBe(true);
|
||||
expect(findMerged(corePluginId)?.isFullyInstalled).toBe(true);
|
||||
|
||||
config.featureToggles.managedPluginsInstall = oldFeatureTogglesManagedPluginsInstall;
|
||||
config.pluginAdminExternalManageEnabled = oldPluginAdminExternalManageEnabled;
|
||||
});
|
||||
});
|
||||
|
||||
describe('mergeLocalAndRemote()', () => {
|
||||
|
@ -47,7 +47,9 @@ export function mergeLocalsAndRemotes({
|
||||
|
||||
// for managed instances, check if plugin is installed, but not yet present in the current instance
|
||||
if (configCore.featureToggles.managedPluginsInstall && config.pluginAdminExternalManageEnabled) {
|
||||
catalogPlugin.isFullyInstalled = instancesSet.has(remotePlugin.slug) && catalogPlugin.isInstalled;
|
||||
catalogPlugin.isFullyInstalled = catalogPlugin.isCore
|
||||
? true
|
||||
: instancesSet.has(remotePlugin.slug) && catalogPlugin.isInstalled;
|
||||
catalogPlugin.isInstalled = instancesSet.has(remotePlugin.slug) || catalogPlugin.isInstalled;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user