/* eslint-env jest */
/* eslint no-import-assign: 0 */
import React from 'react'
import { renderWithGlobalConfig, act, fireEvent, waitFor } from 'test-utils'
import TokenProjectSignup from './TokenProjectSignup'
import * as mockVerifyExtensionsToken from '../../api/verifyExtensionsToken'
import * as mockSetProjectName from '../../api/setProjectName'
it('should close modal after completing sign up process', async () => {
mockVerifyExtensionsToken.default = jest.fn().mockImplementation(() => {
return {
loading: false,
error: null,
data: { success: true }
}
})
mockSetProjectName.default = jest.fn().mockImplementation(() => {
return {
loading: false,
error: null,
data: { success: true }
}
})
const onCloseCallback = jest.fn()
const { getByTestId } = renderWithGlobalConfig((
<>
>),
{
config: {
project_name: 'Default Project Name'
}
})
// Fill in and submit step 1 of the token flow::
// await act(async () => {
// Input box:
const tokenInputBox = getByTestId('token-input')
fireEvent.change(tokenInputBox, { target: { value: 'test-token-value' } })
expect(tokenInputBox.value).toBe('test-token-value')
// Button click
const tokenSubmitButton = getByTestId('elements-token-submit')
fireEvent.click(tokenSubmitButton)
// Check the API call was fired:
expect(mockVerifyExtensionsToken.default).toHaveBeenCalled()
// Wait for the modal to swap to step 2
await waitFor(() => {
expect(getByTestId('project-name-input')).toBeInTheDocument()
}, {
timeout: 2000
})
// })
// Fill in and submit step 2 of the token flow::
// await act(async () => {
// Input box:
const projectInputBox = getByTestId('project-name-input')
expect(projectInputBox.value).toBe('Default Project Name')
fireEvent.change(projectInputBox, { target: { value: 'My project name' } })
expect(projectInputBox.value).toBe('My project name')
// Button click
const projectSubmitButton = getByTestId('project-name-submit')
fireEvent.click(projectSubmitButton)
// Check the API call was fired:
expect(mockSetProjectName.default).toHaveBeenCalled()
// Wait for the modal to swap to final step
await waitFor(() => {
expect(getByTestId('complete-signup-wizard')).toBeInTheDocument()
}, {
timeout: 2000
})
// })
// Click the final "complete" button
// await act(async () => {
// Input box:
const completeButton = getByTestId('complete-signup-wizard')
fireEvent.click(completeButton)
// Wait for modal to be closed
await waitFor(() => {
act(() => {
expect(onCloseCallback).toHaveBeenCalled()
})
}, {
timeout: 4000
})
// })
})