import { fireEvent, render } from '@testing-library/react-native'
import React from 'react'
import { Provider } from 'react-redux'
import AppAnalytics from 'src/analytics/AppAnalytics'
import { EarnEvents } from 'src/analytics/Events'
import EarnEntrypoint from 'src/earn/EarnEntrypoint'
import { EarnTabType } from 'src/earn/types'
import { navigate } from 'src/navigator/NavigationService'
import { Screens } from 'src/navigator/Screens'
import { getFeatureGate } from 'src/statsig'
import { StatsigFeatureGates } from 'src/statsig/types'
import { createMockStore } from 'test/utils'
import { mockEarnPositions } from 'test/values'
jest.mock('src/statsig')
function getStore({ hasSuppliedPools = false }: { hasSuppliedPools?: boolean } = {}) {
return createMockStore({
positions: {
positions: [{ ...mockEarnPositions[0], balance: hasSuppliedPools ? '10' : '0' }],
earnPositionIds: ['arbitrum-sepolia:0x460b97bd498e1157530aeb3086301d5225b91216'],
},
})
}
describe('EarnEntrypoint', () => {
beforeEach(() => {
jest.clearAllMocks()
jest
.mocked(getFeatureGate)
.mockImplementation(
(featureGateName) => featureGateName === StatsigFeatureGates.SHOW_POSITIONS
)
})
it('renders nothing for UK compliant variant', () => {
jest
.mocked(getFeatureGate)
.mockImplementation((gate) => gate === StatsigFeatureGates.SHOW_UK_COMPLIANT_VARIANT)
const { toJSON } = render(
)
expect(toJSON()).toBeNull()
})
it('renders correctly when no pools supplied', () => {
const { getByText } = render(
)
expect(getByText('earnFlow.entrypoint.title')).toBeTruthy()
expect(getByText('earnFlow.entrypoint.description')).toBeTruthy()
})
it('navigates to EarnInfoScreen when pressed when no pools supplied', async () => {
const { getByTestId } = render(
)
fireEvent.press(getByTestId('EarnEntrypoint'))
expect(navigate).toHaveBeenCalledWith(Screens.EarnInfoScreen)
expect(AppAnalytics.track).toHaveBeenCalledWith(EarnEvents.earn_entrypoint_press, {
hasSuppliedPools: false,
})
})
it('renders total supplied when has pools supplied', () => {
const { getByTestId, getByText } = render(
)
expect(getByText('earnFlow.entrypoint.title')).toBeTruthy()
expect(getByText('earnFlow.entrypoint.totalDepositAndEarnings')).toBeTruthy()
expect(getByTestId('EarnEntrypoint/TotalSupplied')).toContainElement(getByText('₱15.96'))
})
it('navigates to correct tab on touchable press when has pools supplied', () => {
const { getByTestId } = render(
)
fireEvent.press(getByTestId('EarnEntrypoint'))
expect(AppAnalytics.track).toHaveBeenCalledWith(EarnEvents.earn_entrypoint_press, {
hasSuppliedPools: true,
})
expect(navigate).toHaveBeenCalledWith(Screens.EarnHome, { activeEarnTab: EarnTabType.MyPools })
})
})