import { fireEvent, render } from '@testing-library/react-native'
import * as React from 'react'
import 'react-native'
import { Provider } from 'react-redux'
import LegalSubmenu from 'src/account/LegalSubmenu'
import AppAnalytics from 'src/analytics/AppAnalytics'
import { SettingsEvents } from 'src/analytics/Events'
import { navigate } from 'src/navigator/NavigationService'
import { Screens } from 'src/navigator/Screens'
import { getDynamicConfigParams } from 'src/statsig'
import { StatsigDynamicConfigs } from 'src/statsig/types'
import { navigateToURI } from 'src/utils/linking'
import MockedNavigator from 'test/MockedNavigator'
import { createMockStore } from 'test/utils'
jest.mock('src/utils/linking')
jest.mock('src/statsig')
const mockTosLink = 'https://example.com/tos'
const mockPrivacyLink = 'https://example.com/privacy'
describe('LegalSubmenu', () => {
beforeEach(() => {
jest.clearAllMocks()
jest.mocked(getDynamicConfigParams).mockImplementation(({ configName }) => {
if (configName === StatsigDynamicConfigs.APP_CONFIG) {
return {
links: {
tos: mockTosLink,
privacy: mockPrivacyLink,
},
}
}
return {} as any
})
})
it('shows the expected menu items', () => {
const store = createMockStore()
const { getByText } = render(
)
expect(getByText('licenses')).toBeTruthy()
expect(getByText('termsOfServiceLink')).toBeTruthy()
expect(getByText('privacyPolicy')).toBeTruthy()
})
it('navigates to licenses', () => {
const store = createMockStore()
const { getByText } = render(
)
fireEvent.press(getByText('licenses'))
expect(navigate).toHaveBeenCalledWith(Screens.Licenses)
expect(AppAnalytics.track).toHaveBeenCalledWith(SettingsEvents.licenses_view)
})
it('navigates to terms', () => {
const store = createMockStore()
const { getByText } = render(
)
fireEvent.press(getByText('termsOfServiceLink'))
expect(navigateToURI).toHaveBeenCalledWith(mockTosLink)
expect(AppAnalytics.track).toHaveBeenCalledWith(SettingsEvents.tos_view)
})
it('navigates to privacy policy', () => {
const store = createMockStore()
const { getByText } = render(
)
fireEvent.press(getByText('privacyPolicy'))
expect(navigateToURI).toHaveBeenCalledWith(mockPrivacyLink)
})
})