import { act, render, screen, waitFor } from '@testing-library/react'; import React from 'react'; import { LoadingState } from '@grafana/data'; import { setupMockedDataSource } from '../__mocks__/CloudWatchDataSource'; import { RequestMock } from '../__mocks__/Request'; import { validLogsQuery } from '../__mocks__/queries'; import { CloudWatchLogsQuery } from '../types'; import { CloudWatchLink } from './CloudWatchLink'; describe('CloudWatchLink', () => { it('generates a link with log group names', async () => { const ds = setupMockedDataSource(); const { rerender } = render( ); await waitFor(() => { expect(screen.getByText('CloudWatch Logs Insights').closest('a')).toHaveAttribute('href', ''); }); await act(async () => { rerender( ); }); await waitFor(() => { expect(screen.getByText('CloudWatch Logs Insights').closest('a')).toHaveAttribute( 'href', "https://us-east-2.console.aws.amazon.com/cloudwatch/home?region=us-east-2#logs-insights:queryDetail=~(end~'2016-12-31T16*3a00*3a00.000Z~start~'2016-12-31T15*3a00*3a00.000Z~timeType~'ABSOLUTE~tz~'UTC~editorString~'fields*20*40timestamp*2c*20*40message*20*7c*20sort*20*40timestamp*20desc*20*7c*20limit*2025~isLiveTail~false~source~(~'group-A~'group-B))" ); }); }); it('generates a link with log group names', async () => { const ds = setupMockedDataSource(); const query: CloudWatchLogsQuery = { ...validLogsQuery, logGroupNames: undefined, logGroups: [ { arn: 'arn:aws:logs:us-east-1:111111111111:log-group:/aws/lambda/test1', name: '/aws/lambda/test1' }, { arn: 'arn:aws:logs:us-east-1:111111111111:log-group:/aws/lambda/test2', name: '/aws/lambda/test2' }, ], }; const { rerender } = render(); await waitFor(() => { expect(screen.getByText('CloudWatch Logs Insights').closest('a')).toHaveAttribute('href', ''); }); await act(async () => { rerender( ); }); await waitFor(() => { expect(screen.getByText('CloudWatch Logs Insights').closest('a')).toHaveAttribute( 'href', "https://us-east-2.console.aws.amazon.com/cloudwatch/home?region=us-east-2#logs-insights:queryDetail=~(end~'2016-12-31T16*3a00*3a00.000Z~start~'2016-12-31T15*3a00*3a00.000Z~timeType~'ABSOLUTE~tz~'UTC~editorString~'fields*20*40timestamp*2c*20*40message*20*7c*20sort*20*40timestamp*20desc*20*7c*20limit*2025~isLiveTail~false~source~(~'arn*3aaws*3alogs*3aus-east-1*3a111111111111*3alog-group*3a*2faws*2flambda*2ftest1~'arn*3aaws*3alogs*3aus-east-1*3a111111111111*3alog-group*3a*2faws*2flambda*2ftest2))" ); }); }); });