mirror of https://github.com/grafana/grafana
DashboardLinks: Fixes crash when link has no title (#31008)
* DashboardLinks: Fixes crash when link misses title * Chore: updates after PR commentsuse-local-field-min-max
parent
f43d834a59
commit
297ff9a168
@ -0,0 +1,104 @@ |
|||||||
|
import React from 'react'; |
||||||
|
import { render, screen } from '@testing-library/react'; |
||||||
|
import { DataLinksListItem, DataLinksListItemProps } from './DataLinksListItem'; |
||||||
|
|
||||||
|
const baseLink = { |
||||||
|
url: '', |
||||||
|
title: '', |
||||||
|
onBuildUrl: jest.fn(), |
||||||
|
onClick: jest.fn(), |
||||||
|
}; |
||||||
|
|
||||||
|
function setupTestContext(options: Partial<DataLinksListItemProps>) { |
||||||
|
const defaults: DataLinksListItemProps = { |
||||||
|
index: 0, |
||||||
|
link: baseLink, |
||||||
|
data: [], |
||||||
|
onChange: jest.fn(), |
||||||
|
onEdit: jest.fn(), |
||||||
|
onRemove: jest.fn(), |
||||||
|
suggestions: [], |
||||||
|
}; |
||||||
|
|
||||||
|
const props = { ...defaults, ...options }; |
||||||
|
const { rerender } = render(<DataLinksListItem {...props} />); |
||||||
|
|
||||||
|
return { rerender, props }; |
||||||
|
} |
||||||
|
|
||||||
|
describe('DataLinksListItem', () => { |
||||||
|
describe('when link has title', () => { |
||||||
|
it('then the link title should be visible', () => { |
||||||
|
const link = { |
||||||
|
...baseLink, |
||||||
|
title: 'Some Data Link Title', |
||||||
|
}; |
||||||
|
setupTestContext({ link }); |
||||||
|
|
||||||
|
expect(screen.getByText(/some data link title/i)).toBeInTheDocument(); |
||||||
|
}); |
||||||
|
}); |
||||||
|
|
||||||
|
describe('when link has url', () => { |
||||||
|
it('then the link url should be visible', () => { |
||||||
|
const link = { |
||||||
|
...baseLink, |
||||||
|
url: 'http://localhost:3000', |
||||||
|
}; |
||||||
|
setupTestContext({ link }); |
||||||
|
|
||||||
|
expect(screen.getByText(/http:\/\/localhost\:3000/i)).toBeInTheDocument(); |
||||||
|
expect(screen.getByTitle(/http:\/\/localhost\:3000/i)).toBeInTheDocument(); |
||||||
|
}); |
||||||
|
}); |
||||||
|
|
||||||
|
describe('when link is missing title', () => { |
||||||
|
it('then the link title should be replaced by [Data link title not provided]', () => { |
||||||
|
const link = { |
||||||
|
...baseLink, |
||||||
|
title: (undefined as unknown) as string, |
||||||
|
}; |
||||||
|
setupTestContext({ link }); |
||||||
|
|
||||||
|
expect(screen.getByText(/data link title not provided/i)).toBeInTheDocument(); |
||||||
|
}); |
||||||
|
}); |
||||||
|
|
||||||
|
describe('when link is missing url', () => { |
||||||
|
it('then the link url should be replaced by [Data link url not provided]', () => { |
||||||
|
const link = { |
||||||
|
...baseLink, |
||||||
|
url: (undefined as unknown) as string, |
||||||
|
}; |
||||||
|
setupTestContext({ link }); |
||||||
|
|
||||||
|
expect(screen.getByText(/data link url not provided/i)).toBeInTheDocument(); |
||||||
|
expect(screen.getByTitle('')).toBeInTheDocument(); |
||||||
|
}); |
||||||
|
}); |
||||||
|
|
||||||
|
describe('when link title is empty', () => { |
||||||
|
it('then the link title should be replaced by [Data link title not provided]', () => { |
||||||
|
const link = { |
||||||
|
...baseLink, |
||||||
|
title: ' ', |
||||||
|
}; |
||||||
|
setupTestContext({ link }); |
||||||
|
|
||||||
|
expect(screen.getByText(/data link title not provided/i)).toBeInTheDocument(); |
||||||
|
}); |
||||||
|
}); |
||||||
|
|
||||||
|
describe('when link url is empty', () => { |
||||||
|
it('then the link url should be replaced by [Data link url not provided]', () => { |
||||||
|
const link = { |
||||||
|
...baseLink, |
||||||
|
url: ' ', |
||||||
|
}; |
||||||
|
setupTestContext({ link }); |
||||||
|
|
||||||
|
expect(screen.getByText(/data link url not provided/i)).toBeInTheDocument(); |
||||||
|
expect(screen.getByTitle('')).toBeInTheDocument(); |
||||||
|
}); |
||||||
|
}); |
||||||
|
}); |
Loading…
Reference in new issue