import { act, renderHook } from '@testing-library/react-native'
import CleverTap from 'clevertap-react-native'
import React from 'react'
import { Linking } from 'react-native'
import { Provider } from 'react-redux'
import { useDeepLinks } from 'src/app/useDeepLinks'
import { createMockStore } from 'test/utils'
describe('useDeepLinks', () => {
let cleverTapListenerCallback: Function
let linkingListenerCallback: Function
beforeEach(() => {
jest.clearAllMocks()
jest.mocked(CleverTap.addListener).mockImplementation((event, callback) => {
if (event === 'CleverTapPushNotificationClicked') {
cleverTapListenerCallback = callback
}
})
jest.mocked(Linking.addEventListener).mockImplementation((event, callback) => {
if (event === 'url') {
linkingListenerCallback = callback
}
return {
remove: jest.fn(),
} as any
})
})
it('should handle clevertap push notifications with deep links', async () => {
const store = createMockStore()
renderHook(() => useDeepLinks(), {
wrapper: (component) => (
{component?.children ? component.children : component}
),
})
await act(() => {
cleverTapListenerCallback({ wzrk_dl: 'some-link' })
})
expect(store.getActions()).toEqual([
{
deepLink: 'some-link',
isSecureOrigin: true,
type: 'APP/OPEN_DEEP_LINK',
},
])
})
it('should not open deeplink if clevertap event does not have a deep link', async () => {
const store = createMockStore()
renderHook(() => useDeepLinks(), {
wrapper: (component) => (
{component?.children ? component.children : component}
),
})
await act(() => {
cleverTapListenerCallback({})
})
expect(store.getActions()).toEqual([])
})
it('should handle linking events with deep links', async () => {
const store = createMockStore()
renderHook(() => useDeepLinks(), {
wrapper: (component) => (
{component?.children ? component.children : component}
),
})
await act(() => {
linkingListenerCallback({ url: 'some-link' })
})
expect(store.getActions()).toEqual([
{
deepLink: 'some-link',
isSecureOrigin: false,
type: 'APP/OPEN_DEEP_LINK',
},
])
})
})