grafana/public/app/features/explore/LogsNavigationPages.test.tsx
Matias Chomicki 931ae02f26
Logs Navigation: Scroll to first log when using pagination (#66214)
* Logs: add reference to the start of the logs

* Logs: Improve pagination by scrolling to the first log

* Logs: move first log ref

* Logs navigation: reset scroll on page changes

* Update tests

* Logs navigation: unify reference to start of logs for scrolling to top

* Chore: update test title

* Move scrolling reference a bit more to the top
2023-04-11 16:26:50 +02:00

55 lines
1.9 KiB
TypeScript

import { render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import React, { ComponentProps } from 'react';
import { LogsNavigationPages } from './LogsNavigationPages';
type LogsNavigationPagesProps = ComponentProps<typeof LogsNavigationPages>;
const setup = (propOverrides?: Partial<LogsNavigationPagesProps>) => {
const props: LogsNavigationPagesProps = {
pages: [
{
logsRange: { from: 1619081941000, to: 1619081945930 },
queryRange: { from: 1619081645930, to: 1619081945930 },
},
{
logsRange: { from: 1619081951000, to: 1619081955930 },
queryRange: { from: 1619081655930, to: 1619081955930 },
},
],
currentPageIndex: 0,
oldestLogsFirst: false,
timeZone: 'local',
loading: false,
onClick: jest.fn(),
...propOverrides,
};
return render(<LogsNavigationPages {...props} />);
};
describe('LogsNavigationPages', () => {
it('should render logs navigation pages', () => {
setup();
expect(screen.getByTestId('logsNavigationPages')).toBeInTheDocument();
});
it('should render logs pages with correct range if normal order', () => {
setup();
expect(screen.getByText(/02:59:05 — 02:59:01/i)).toBeInTheDocument();
expect(screen.getByText(/02:59:15 — 02:59:11/i)).toBeInTheDocument();
});
it('should render logs pages with correct range if flipped order', () => {
setup({ oldestLogsFirst: true });
expect(screen.getByText(/02:59:11 — 02:59:15/i)).toBeInTheDocument();
expect(screen.getByText(/02:59:01 — 02:59:05/i)).toBeInTheDocument();
});
it('should invoke the callback when clicked', async () => {
const onPageClicked = jest.fn();
setup({ onClick: onPageClicked });
expect(onPageClicked).not.toHaveBeenCalled();
await userEvent.click(screen.getByText(/02:59:05 — 02:59:01/i));
expect(onPageClicked).toHaveBeenCalled();
});
});