import { render, screen } from '@testing-library/react'; import { PluginSignatureStatus } from '@grafana/data'; import { contextSrv } from 'app/core/core'; import { usePluginConfig } from '../../hooks/usePluginConfig'; import { CatalogPlugin } from '../../types'; import { GetStartedWithApp } from './GetStartedWithApp'; jest.mock('app/core/core', () => ({ contextSrv: { hasPermission: jest.fn(), }, })); jest.mock('../../api', () => ({ updatePluginSettings: jest.fn(), })); jest.mock('../../hooks/usePluginConfig', () => ({ usePluginConfig: jest.fn(), })); const mockPlugin: CatalogPlugin = { id: 'test-plugin', name: 'Test Plugin', description: 'Test Plugin Description', downloads: 0, hasUpdate: false, info: { logos: { large: 'https://grafana.com/assets/img/brand/grafana_icon.svg', small: 'https://grafana.com/assets/img/brand/grafana_icon.svg', }, keywords: [], }, isDev: false, isCore: false, isEnterprise: false, isInstalled: false, isDisabled: false, isDeprecated: false, isManaged: false, isPreinstalled: { found: false, withVersion: false }, isPublished: false, orgName: 'Test Org', signature: PluginSignatureStatus.valid, popularity: 0, publishedAt: '2021-01-01', updatedAt: '2021-01-01', }; describe('GetStartedWithApp', () => { beforeEach(() => { jest.clearAllMocks(); }); it('renders null if pluginConfig is not available', () => { (usePluginConfig as jest.Mock).mockReturnValue({ value: null }); (contextSrv.hasPermission as jest.Mock).mockReturnValue(true); const { container } = render(); expect(container.firstChild).toBeNull(); }); it('renders null if user does not have permission', () => { (usePluginConfig as jest.Mock).mockReturnValue({ value: { meta: {} } }); (contextSrv.hasPermission as jest.Mock).mockReturnValue(false); const { container } = render(); expect(container.firstChild).toBeNull(); }); it('renders enable button if plugin is not enabled', () => { (usePluginConfig as jest.Mock).mockReturnValue({ value: { meta: { enabled: false } } }); (contextSrv.hasPermission as jest.Mock).mockReturnValue(true); render(); expect(screen.getByText('Enable')).toBeInTheDocument(); }); it('renders disable button if plugin is enabled and not autoEnabled', () => { (usePluginConfig as jest.Mock).mockReturnValue({ value: { meta: { enabled: true, autoEnabled: false } } }); (contextSrv.hasPermission as jest.Mock).mockReturnValue(true); render(); expect(screen.getByText('Disable')).toBeInTheDocument(); }); it('does not render disable button if plugin is enabled and autoEnabled', () => { (usePluginConfig as jest.Mock).mockReturnValue({ value: { meta: { enabled: true, autoEnabled: true } } }); (contextSrv.hasPermission as jest.Mock).mockReturnValue(true); render(); expect(screen.queryByText('Disable')).not.toBeInTheDocument(); }); });