From 4730be88427ce81a7a1a35ed1220ffe7dbe5c704 Mon Sep 17 00:00:00 2001 From: Andreas Christou Date: Fri, 9 Dec 2022 12:50:01 +0000 Subject: [PATCH] AzureMonitor: Add error indicating potential configuration issue on Resource Picker (#60041) * Add error indicating potential configuration issue - Update test * Update error - Lint update --- .../ResourcePicker/ResourcePicker.test.tsx | 43 ++++++++++++++----- .../resourcePicker/resourcePickerData.ts | 6 +++ 2 files changed, 39 insertions(+), 10 deletions(-) diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/components/ResourcePicker/ResourcePicker.test.tsx b/public/app/plugins/datasource/grafana-azure-monitor-datasource/components/ResourcePicker/ResourcePicker.test.tsx index 75e9f90b142..4e2922b4568 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/components/ResourcePicker/ResourcePicker.test.tsx +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/components/ResourcePicker/ResourcePicker.test.tsx @@ -1,5 +1,6 @@ import { act, render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; +import { omit } from 'lodash'; import React from 'react'; import createMockDatasource from '../../__mocks__/datasource'; @@ -23,23 +24,26 @@ const singleResourceSelectionURI = '/subscriptions/def-456/resourceGroups/dev-3/providers/Microsoft.Compute/virtualMachines/db-server'; const noop: any = () => {}; -function createMockResourcePickerData() { +function createMockResourcePickerData(preserveImplementation?: string[]) { const mockDatasource = createMockDatasource(); const mockResourcePicker = new ResourcePickerData( createMockInstanceSetttings(), mockDatasource.azureMonitorDatasource ); - mockResourcePicker.getSubscriptions = jest.fn().mockResolvedValue(createMockSubscriptions()); - mockResourcePicker.getResourceGroupsBySubscriptionId = jest - .fn() - .mockResolvedValue(createMockResourceGroupsBySubscription()); - mockResourcePicker.getResourcesForResourceGroup = jest.fn().mockResolvedValue(mockResourcesByResourceGroup()); - mockResourcePicker.getResourceURIFromWorkspace = jest.fn().mockReturnValue(''); - mockResourcePicker.getResourceURIDisplayProperties = jest.fn().mockResolvedValue({}); - mockResourcePicker.search = jest.fn().mockResolvedValue(mockSearchResults()); + const mockFunctions = omit( + { + getSubscriptions: jest.fn().mockResolvedValue(createMockSubscriptions()), + getResourceGroupsBySubscriptionId: jest.fn().mockResolvedValue(createMockResourceGroupsBySubscription()), + getResourcesForResourceGroup: jest.fn().mockResolvedValue(mockResourcesByResourceGroup()), + getResourceURIFromWorkspace: jest.fn().mockReturnValue(''), + getResourceURIDisplayProperties: jest.fn().mockResolvedValue({}), + search: jest.fn().mockResolvedValue(mockSearchResults()), + }, + preserveImplementation || [] + ); - return mockResourcePicker; + return Object.assign(mockResourcePicker, mockFunctions); } const queryType: ResourcePickerQueryType = 'logs'; @@ -284,6 +288,25 @@ describe('AzureMonitor ResourcePicker', () => { expect(subscriptionCheckboxAfterClear).toBeInTheDocument(); }); + it('should throw an error if no namespaces are found', async () => { + const resourcePickerData = createMockResourcePickerData(['getResourceGroupsBySubscriptionId']); + render( + + ); + const subscriptionExpand = await screen.findByLabelText('Expand Primary Subscription'); + await subscriptionExpand.click(); + const error = await screen.findByRole('alert'); + expect(error).toHaveTextContent('An error occurred while requesting resources from Azure Monitor'); + expect(error).toHaveTextContent( + 'Unable to resolve a list of valid metric namespaces. Validate the datasource configuration is correct and required permissions have been granted for all subscriptions. Grafana requires at least the Reader role to be assigned.' + ); + }); + describe('when rendering resource picker without any selectable entry types', () => { it('renders no checkboxes', async () => { await act(async () => { diff --git a/public/app/plugins/datasource/grafana-azure-monitor-datasource/resourcePicker/resourcePickerData.ts b/public/app/plugins/datasource/grafana-azure-monitor-datasource/resourcePicker/resourcePickerData.ts index 94fbb907dde..0dd259b7143 100644 --- a/public/app/plugins/datasource/grafana-azure-monitor-datasource/resourcePicker/resourcePickerData.ts +++ b/public/app/plugins/datasource/grafana-azure-monitor-datasource/resourcePicker/resourcePickerData.ts @@ -364,6 +364,12 @@ export default class ResourcePickerData extends DataSourceWithBackend