import { render, screen } from '@testing-library/react'; import { FormattedDateTime } from './FormattedDateTime'; import userEvent from '@testing-library/user-event'; describe('FormatttedDateTime', () => { it('should display the date in the expected format', () => { //S render( , ); //V expect(screen.getByText('2022-10-01')).toBeInTheDocument(); }); it('should display the date time second in the expected format', () => { //S render( , ); //V expect(screen.getByText('2022-10-01 00:00:00')).toBeInTheDocument(); }); it('should display the date time in the expected format', () => { //S render( , ); //V expect(screen.getByText('2022-10-01 00:00')).toBeInTheDocument(); }); it('should display the time second in the expected format', () => { //S render( , ); //V expect(screen.getByText('00:00:00')).toBeInTheDocument(); }); it('should display the time in the expected format', () => { //S render( , ); //V expect(screen.getByText('00:00')).toBeInTheDocument(); }); it('should display a relative date with the right format when the date occured few seconds before', async () => { //S const today = new Date('2022-10-10T12:00:00Z'); jest.useFakeTimers('modern'); jest.setSystemTime(today); render( , ); //V expect(screen.getByText('few seconds ago')).toBeInTheDocument(); //E await userEvent.hover(screen.getByText('few seconds ago')); //V expect(screen.getByText('2022-10-10 11:59:37')).toBeInTheDocument(); }); it('should display a relative date with the right format when the date occured 1 minute before', async () => { //S const today = new Date('2022-10-10T12:00:00Z'); jest.useFakeTimers('modern'); jest.setSystemTime(today); render( , ); //V expect(screen.getByText('1 minute ago')).toBeInTheDocument(); //E await userEvent.hover(screen.getByText('1 minute ago')); //V expect(screen.getByText('2022-10-10 11:59:00')).toBeInTheDocument(); }); it('should display a relative date with the right format when the date occured 2 minutes before', async () => { //S const today = new Date('2022-10-10T12:00:00Z'); jest.useFakeTimers('modern'); jest.setSystemTime(today); render( , ); //V expect(screen.getByText('2 minutes ago')).toBeInTheDocument(); //E await userEvent.hover(screen.getByText('2 minutes ago')); //V expect(screen.getByText('2022-10-10 11:57:26')).toBeInTheDocument(); }); it('should display a relative date with the right format when the date occured 1 day before', async () => { //S const today = new Date('2022-10-10T12:00:00Z'); jest.useFakeTimers('modern'); jest.setSystemTime(today); render( , ); //V expect(screen.getByText('1 day ago')).toBeInTheDocument(); //E await userEvent.hover(screen.getByText('1 day ago')); //V expect(screen.getByText('2022-10-09 11:57:26')).toBeInTheDocument(); }); it('should display a relative date with the right format when the date occured 2 days before', async () => { //S const today = new Date('2022-10-10T12:00:00Z'); jest.useFakeTimers('modern'); jest.setSystemTime(today); render( , ); //V expect(screen.getByText('2 days ago')).toBeInTheDocument(); //E await userEvent.hover(screen.getByText('2 days ago')); //V expect(screen.getByText('2022-10-08 11:57:26')).toBeInTheDocument(); }); it('should display a relative date with the right format when the date occured 1 month before', async () => { //S const today = new Date('2022-10-10T12:00:00Z'); jest.useFakeTimers('modern'); jest.setSystemTime(today); render( , ); //V expect(screen.getByText('32 days ago')).toBeInTheDocument(); //E await userEvent.hover(screen.getByText('32 days ago')); //V expect(screen.getByText('2022-09-08 11:57:26')).toBeInTheDocument(); }); it('should display a relative date with the right format when the date occured 2 months before', async () => { //S const today = new Date('2022-10-10T12:00:00Z'); jest.useFakeTimers('modern'); jest.setSystemTime(today); render( , ); //V expect(screen.getByText('63 days ago')).toBeInTheDocument(); //E await userEvent.hover(screen.getByText('63 days ago')); //V expect(screen.getByText('2022-08-08 11:57:26')).toBeInTheDocument(); }); it('should display a relative date with the right format when the date occured 2 months after', async () => { //S const today = new Date('2022-10-10T12:00:00Z'); jest.useFakeTimers('modern'); jest.setSystemTime(today); render( , ); //V expect(screen.getByText('in 63 days')).toBeInTheDocument(); //E await userEvent.hover(screen.getByText('in 63 days')); //V expect(screen.getByText('2022-12-12 11:57:26')).toBeInTheDocument(); }); it('should display the date in the expected format of the xaxis tick in the chart', () => { //S render( , ); //V expect(screen.getByText('06 Oct 18:33')).toBeInTheDocument(); }); it('should display the date in the expected format of date in the chart', () => { //S render( , ); //V expect(screen.getByText('06 Oct 18:33:00')).toBeInTheDocument(); }); it('should display 3 letter month for September date', () => { //S render( <> , ); //V expect(screen.getByText(/06 Sep 18:33/)).toBeInTheDocument(); expect(screen.getByText(/06 Sep 18:33:00/)).toBeInTheDocument(); expect(screen.getByText(/Tue06Sep/)).toBeInTheDocument(); expect(screen.queryByText(/Sept/)).not.toBeInTheDocument(); }); });