Skip to content
Snippets Groups Projects
TemperatureComparison.spec.tsx 2.72 KiB
Newer Older
  • Learn to ignore specific revisions
  • import { render, screen, waitFor } from '@testing-library/react'
    
    import { userEvent } from '@testing-library/user-event'
    import { DateTime } from 'luxon'
    import React from 'react'
    import { Provider } from 'react-redux'
    import { createMockEcolyoStore } from 'tests/__mocks__/store'
    import TemperatureComparison from './TemperatureComparison'
    
    const mockFetchAvgTemperature = jest.fn<Promise<number | null>, []>()
    jest.mock('services/consumption.service', () => {
      return jest.fn(() => ({
        fetchAvgTemperature: mockFetchAvgTemperature,
      }))
    })
    
    jest
      .spyOn(DateTime.prototype, 'toLocaleString')
      .mockReturnValue('novembre 2022')
    
    describe('TemperatureComparison component', () => {
      const store = createMockEcolyoStore()
      afterEach(() => {
        jest.clearAllMocks()
      })
    
    
      it('should render a loader', async () => {
        render(
          <Provider store={store}>
            <TemperatureComparison />
          </Provider>
        )
        await waitFor(() => {
          expect(screen.getByRole('progressbar')).toBeInTheDocument()
        })
      })
    
      it('should be rendered correctly with no data', async () => {
        mockFetchAvgTemperature.mockResolvedValueOnce(null)
        mockFetchAvgTemperature.mockResolvedValueOnce(0)
    
        const { container } = render(
          <Provider store={store}>
            <TemperatureComparison />
          </Provider>
        )
        await waitFor(() => null, { container })
        expect(container).toMatchSnapshot()
      })
    
      it('should be rendered correctly with hot result', async () => {
    
        mockFetchAvgTemperature.mockResolvedValueOnce(1)
    
        mockFetchAvgTemperature.mockResolvedValueOnce(2)
    
        const { container } = render(
          <Provider store={store}>
            <TemperatureComparison />
          </Provider>
        )
        await waitFor(() => null, { container })
        expect(container).toMatchSnapshot()
    
        expect(
          await screen.findByText('analysis.temperature_comparison.unit')
        ).toBeInTheDocument()
    
      it('should be rendered correctly with cold result', async () => {
        mockFetchAvgTemperature.mockResolvedValueOnce(2)
        mockFetchAvgTemperature.mockResolvedValueOnce(1)
    
        const { container } = render(
          <Provider store={store}>
            <TemperatureComparison />
          </Provider>
        )
        await waitFor(() => null, { container })
        expect(container).toMatchSnapshot()
      })
    
      it('should open the modal', async () => {
        mockFetchAvgTemperature.mockResolvedValueOnce(1)
        mockFetchAvgTemperature.mockResolvedValueOnce(2)
        const { container } = render(
          <Provider store={store}>
            <TemperatureComparison />
          </Provider>
        )
        await waitFor(() => container)
    
        await userEvent.click(
          screen.getByLabelText('analysis.temperature_comparison.info_button')
        )
    
        expect(screen.getByRole('dialog')).toBeInTheDocument()
      })
    })