import { DataloadState, FluidType } from 'enums'
import { mount } from 'enzyme'
import toJson from 'enzyme-to-json'
import { Dataload } from 'models'
import React from 'react'
import { baseDataLoad } from 'tests/__mocks__/chartData.mock'
import DataloadNoValue from './DataloadNoValue'

const mockSetActive = jest.fn()

describe('DataloadNoValue component', () => {
  const mockDataload: Dataload = baseDataLoad

  it('should render correctly', () => {
    const wrapper = mount(
      <DataloadNoValue
        dataload={mockDataload}
        fluidType={FluidType.ELECTRICITY}
        setActive={mockSetActive}
      />
    )
    expect(toJson(wrapper)).toMatchSnapshot()
  })

  describe('should render correctly no data', () => {
    it('case state EMPTY', () => {
      const _mockdataLoad = { ...mockDataload, state: DataloadState.EMPTY }
      const wrapper = mount(
        <DataloadNoValue
          dataload={_mockdataLoad}
          fluidType={FluidType.ELECTRICITY}
          setActive={mockSetActive}
        />
      )
      expect(wrapper.find('.dataloadvisualizer-value').text()).toBe(
        'consumption_visualizer.no_data'
      )
    })
    it('case state HOLE', () => {
      const _mockdataLoad = { ...mockDataload, state: DataloadState.HOLE }
      const wrapper = mount(
        <DataloadNoValue
          dataload={_mockdataLoad}
          fluidType={FluidType.ELECTRICITY}
          setActive={mockSetActive}
        />
      )
      expect(wrapper.find('.dataloadvisualizer-value').text()).toBe(
        'consumption_visualizer.no_data'
      )
    })
    it('case state AGGREGATED_EMPTY', () => {
      const _mockdataLoad = {
        ...mockDataload,
        state: DataloadState.AGGREGATED_EMPTY,
      }
      const wrapper = mount(
        <DataloadNoValue
          dataload={_mockdataLoad}
          fluidType={FluidType.MULTIFLUID}
          setActive={mockSetActive}
        />
      )
      expect(wrapper.find('.dataloadvisualizer-value').text()).toBe(
        'consumption_visualizer.no_data'
      )
    })
  })

  describe('should render correctly missing data', () => {
    it('case state MISSING', () => {
      const _mockdataLoad = { ...mockDataload, state: DataloadState.MISSING }
      const wrapper = mount(
        <DataloadNoValue
          dataload={_mockdataLoad}
          fluidType={FluidType.ELECTRICITY}
          setActive={mockSetActive}
        />
      )
      expect(wrapper.find('.dataloadvisualizer-content').text()).toBe(
        'consumption_visualizer.missing_data'
      )
    })
    it('case state AGGREGATED_HOLE_OR_MISSING', () => {
      const _mockdataLoad = {
        ...mockDataload,
        state: DataloadState.AGGREGATED_HOLE_OR_MISSING,
      }
      const wrapper = mount(
        <DataloadNoValue
          dataload={_mockdataLoad}
          fluidType={FluidType.MULTIFLUID}
          setActive={mockSetActive}
        />
      )
      expect(wrapper.find('.dataloadvisualizer-content').text()).toBe(
        'consumption_visualizer.missing_data'
      )
    })
  })

  it('should call setActive when missing message is clicked', () => {
    const _mockdataLoad = { ...mockDataload, state: DataloadState.MISSING }
    const wrapper = mount(
      <DataloadNoValue
        dataload={_mockdataLoad}
        fluidType={FluidType.ELECTRICITY}
        setActive={mockSetActive}
      />
    )
    wrapper.find('.dataloadvisualizer-content').simulate('click')
    expect(mockSetActive).toHaveBeenCalledWith(true)
  })
})