import { act, fireEvent, render } from '@testing-library/react-native'
import { FetchMock } from 'jest-fetch-mock/types'
import React from 'react'
import { Text } from 'react-native'
import * as Keychain from 'react-native-keychain'
import { Provider } from 'react-redux'
import { phoneNumberRevoked } from 'src/app/actions'
import Touchable from 'src/components/Touchable'
import { useRevokeCurrentPhoneNumber } from 'src/verify/hooks'
import networkConfig from 'src/web3/networkConfig'
import { createMockStore } from 'test/utils'
const mockFetch = fetch as FetchMock
const mockedKeychain = jest.mocked(Keychain)
mockedKeychain.getGenericPassword.mockResolvedValue({
username: 'some username',
password: 'someSignedMessage',
service: 'some service',
storage: 'some string',
})
function TestComponent() {
const revokePhoneNumber = useRevokeCurrentPhoneNumber()
return (
Revoke
)
}
describe('useRevokeCurrentPhoneNumber', () => {
it('revokes the phone number', async () => {
const store = createMockStore({})
const { getByText } = render(
)
mockFetch.mockResponseOnce(JSON.stringify({ message: 'OK' }), {
status: 200,
})
await act(async () => {
fireEvent.press(getByText('Revoke'))
})
expect(mockFetch).toHaveBeenNthCalledWith(1, `${networkConfig.revokePhoneNumberUrl}`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
authorization: `${networkConfig.authHeaderIssuer} 0x0000000000000000000000000000000000007e57:someSignedMessage`,
},
body: '{"phoneNumber":"+14155556666","clientPlatform":"android","clientVersion":"0.0.1"}',
})
expect(store.getActions()).toEqual([phoneNumberRevoked('+14155556666')])
})
it('shows an error when the request fails', async () => {
const store = createMockStore({})
const { getByText } = render(
)
mockFetch.mockResponseOnce(JSON.stringify({ message: 'something went wrong' }), {
status: 500,
})
await act(async () => {
fireEvent.press(getByText('Revoke'))
})
expect(mockFetch).toHaveBeenNthCalledWith(1, `${networkConfig.revokePhoneNumberUrl}`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
authorization: `${networkConfig.authHeaderIssuer} 0x0000000000000000000000000000000000007e57:someSignedMessage`,
},
body: '{"phoneNumber":"+14155556666","clientPlatform":"android","clientVersion":"0.0.1"}',
})
expect(store.getActions()).toEqual([])
})
})