grafana/public/app/features/playlist/PlaylistPage.test.tsx
Kristin Laemmert a33a023629
backend: add PlaylistUIDs to Playlist; remove playlist IDs from API (#49609)
* backend/api: refactor PlaylistId to PlaylistUid
* Add org_id to Get and Update playlist functions
Fix migration - no longer pad the uid; fix mysql syntax

The relevant tests are passing using postgres, mysql and the default sqllite backends, but there are a number of other failing tests when using postgres and myself so I'm not entirely confident with those results.

* fix bad query in GetPlaylistItem and add a test that would have caught the mistake in the first place. Reverted the playlist_uid column addition in playlist_item; it became unnecessary after this PR.

Added default value to the new UID column based on PR feedback.

* break this PRs migration into its own function

* Playlists: Update UI to use the updated API

Co-authored-by: Sofia Papagiannaki <1632407+papagian@users.noreply.github.com>
2022-06-14 15:32:52 -04:00

87 lines
2.7 KiB
TypeScript

import { render, waitFor } from '@testing-library/react';
import React from 'react';
import { locationService } from '../../../../packages/grafana-runtime/src';
import { PlaylistPage, PlaylistPageProps } from './PlaylistPage';
const fnMock = jest.fn();
jest.mock('@grafana/runtime', () => ({
...(jest.requireActual('@grafana/runtime') as unknown as object),
getBackendSrv: () => ({
get: fnMock,
}),
}));
jest.mock('app/core/services/context_srv', () => ({
contextSrv: {
isEditor: true,
},
}));
function getTestContext(propOverrides?: object) {
const props: PlaylistPageProps = {
navModel: {
main: {
text: 'Playlist',
},
node: {
text: 'playlist',
},
},
route: {
path: '/playlists',
component: jest.fn(),
},
queryParams: { state: 'ok' },
match: { params: { name: 'playlist', sourceName: 'test playlist' }, isExact: false, url: 'asdf', path: '' },
history: locationService.getHistory(),
location: { pathname: '', hash: '', search: '', state: '' },
};
Object.assign(props, propOverrides);
return render(<PlaylistPage {...props} />);
}
describe('PlaylistPage', () => {
describe('when mounted without a playlist', () => {
it('page should load', () => {
fnMock.mockResolvedValue([]);
const { getByText } = getTestContext();
expect(getByText(/loading/i)).toBeInTheDocument();
});
it('then show empty list', async () => {
const { getByText } = getTestContext();
await waitFor(() => getByText('There are no playlists created yet'));
});
});
describe('when mounted with a playlist', () => {
it('page should load', () => {
fnMock.mockResolvedValue([
{
id: 0,
name: 'A test playlist',
interval: '10m',
items: [
{ title: 'First item', type: 'dashboard_by_id', order: 1, value: '1' },
{ title: 'Middle item', type: 'dashboard_by_id', order: 2, value: '2' },
{ title: 'Last item', type: 'dashboard_by_tag', order: 2, value: 'Last item' },
],
uid: 'playlist-0',
},
]);
const { getByText } = getTestContext();
expect(getByText(/loading/i)).toBeInTheDocument();
});
it('then playlist title and buttons should appear on the page', async () => {
const { getByRole, getByText } = getTestContext();
await waitFor(() => getByText('A test playlist'));
expect(getByRole('button', { name: /Start playlist/i })).toBeInTheDocument();
expect(getByRole('link', { name: /Edit playlist/i })).toBeInTheDocument();
expect(getByRole('button', { name: /Delete playlist/i })).toBeInTheDocument();
});
});
});