import { render, screen } from '@testing-library/react'
import { userEvent } from '@testing-library/user-event'
import React from 'react'
import { Provider } from 'react-redux'
import * as challengeActions from 'store/challenge/challenge.slice'
import { createMockEcolyoStore } from 'tests/__mocks__/store'
import { userChallengeData } from 'tests/__mocks__/userChallengeData.mock'
import ActionDone from './ActionDone'

const mockUpdateUserChallenge = jest.fn()
jest.mock('services/challenge.service', () => {
  return jest.fn(() => ({
    updateUserChallenge: mockUpdateUserChallenge,
  }))
})

describe('ActionDone component', () => {
  const store = createMockEcolyoStore()
  it('should be rendered correctly', () => {
    const { container } = render(
      <Provider store={store}>
        <ActionDone currentChallenge={userChallengeData[1]} />
      </Provider>
    )
    expect(container).toMatchSnapshot()
  })
  it('should click on button and update action to done', async () => {
    const updateChallengeSpy = jest.spyOn(
      challengeActions,
      'updateUserChallengeList'
    )
    mockUpdateUserChallenge.mockResolvedValueOnce(userChallengeData[1])
    render(
      <Provider store={store}>
        <ActionDone currentChallenge={userChallengeData[1]} />
      </Provider>
    )
    await userEvent.click(screen.getByText('action.ok'))
    expect(updateChallengeSpy).toHaveBeenCalledTimes(1)
  })
})