Alerting: Fix "copy link" not including full URL (#88210)

This commit is contained in:
Tom Ratcliffe 2024-05-24 14:02:46 +01:00 committed by GitHub
parent 26a01c42a6
commit 859b3ff78b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 39 additions and 5 deletions

View File

@ -3,7 +3,7 @@ import React from 'react';
import { render, screen, userEvent } from 'test/test-utils';
import { byLabelText } from 'testing-library-selector';
import { setPluginExtensionsHook } from '@grafana/runtime';
import { config, setPluginExtensionsHook } from '@grafana/runtime';
import { contextSrv } from 'app/core/services/context_srv';
import { RuleActionsButtons } from 'app/features/alerting/unified/components/rules/RuleActionsButtons';
import { setupMswServer } from 'app/features/alerting/unified/mockApi';
@ -57,6 +57,12 @@ setPluginExtensionsHook(() => ({
isLoading: false,
}));
const clickCopyLink = async () => {
const user = userEvent.setup();
await user.click(await ui.moreButton.find());
await user.click(await screen.findByText(/copy link/i));
};
describe('RuleActionsButtons', () => {
it('renders correct options for grafana managed rule', async () => {
const user = userEvent.setup();
@ -123,4 +129,34 @@ describe('RuleActionsButtons', () => {
expect(screen.queryByText(/delete/i)).not.toBeInTheDocument();
});
describe('copy link', () => {
beforeEach(() => {
grantAllPermissions();
config.appUrl = 'http://localhost:3000/';
config.appSubUrl = '/sub';
});
it('copies correct URL for grafana managed alert rule', async () => {
const mockRule = getGrafanaRule({ rulerRule: mockGrafanaRulerRule({ uid: 'foo', provenance: 'file' }) });
render(<RuleActionsButtons rule={mockRule} rulesSource="grafana" />);
await clickCopyLink();
expect(await navigator.clipboard.readText()).toBe('http://localhost:3000/sub/alerting/grafana/foo/view');
});
it('copies correct URL for cloud rule', async () => {
const mockRule = getCloudRule();
render(<RuleActionsButtons rule={mockRule} rulesSource="grafana" />);
await clickCopyLink();
expect(await navigator.clipboard.readText()).toBe(
'http://localhost:3000/sub/alerting/Prometheus-2/mockRule/find'
);
});
});
});

View File

@ -61,7 +61,7 @@ export function createShareLink(ruleSource: RulesSource, rule: CombinedRule): st
`/alerting/${encodeURIComponent(ruleSource.name)}/${encodeURIComponent(escapePathSeparators(rule.name))}/find`
);
} else if (isGrafanaRulerRule(rule.rulerRule)) {
return createUrl(`/alerting/grafana/${rule.rulerRule.grafana_alert.uid}/view`);
return createAbsoluteUrl(`/alerting/grafana/${rule.rulerRule.grafana_alert.uid}/view`);
}
return;

View File

@ -15,9 +15,7 @@ export function createAbsoluteUrl(
const searchParamsString = searchParams.toString();
try {
const baseUrl = new URL(config.appSubUrl, config.appUrl);
baseUrl.pathname = path;
const baseUrl = new URL(config.appSubUrl + path, config.appUrl);
return `${baseUrl.href}${searchParamsString ? `?${searchParamsString}` : ''}`;
} catch (err) {
return createUrl(path, queryParams);