@callosum/react-native-google-ad-manager
Version:
Google Ad Manager for react-native
247 lines (188 loc) • 6.4 kB
JavaScript
import React from 'react'
import { RNGAMBanner } from '../RNGAMBanner'
const adSizes = [[250, 300]]
const adId = 'test'
const testDeviceIds = ['test_id']
const orgConsole = global.console
beforeEach(() => {
const mockedConsole = {
warn: jest.fn(),
}
global.console = {
...orgConsole,
...mockedConsole,
}
})
afterAll(() => {
global.console = orgConsole
})
describe('RNGAMBanner', () => {
it('has instance functions & props', () => {
const wrapper = shallow(
<RNGAMBanner
adId={adId}
adSizes={adSizes}
onAdLoaded={jest.fn()}
onAdReady={jest.fn()}
onAdFailedToLoad={jest.fn()}
testDeviceIds={testDeviceIds}
/>
)
const instance = wrapper.instance()
expect(instance.props.adId).toEqual(adId)
expect(instance.props.adSizes).toEqual(adSizes)
expect(instance.props.testDeviceIds).toEqual(testDeviceIds)
expect(instance.addBannerView).toBeInstanceOf(Function)
expect(instance.destroyBanner).toBeInstanceOf(Function)
expect(instance.loadBanner).toBeInstanceOf(Function)
expect(instance.removeBannerView).toBeInstanceOf(Function)
})
describe('calls event handlers', () => {
const event = { nativeEvent: {} }
const onAdLoaded = jest.fn()
const onAdRequest = jest.fn()
const onAdFailedToLoad = jest.fn()
const onPropsSet = jest.fn()
const wrapper = shallow(
<RNGAMBanner
adId={adId}
adSizes={adSizes}
onAdLoaded={onAdLoaded}
onAdRequest={onAdRequest}
onAdFailedToLoad={onAdFailedToLoad}
onPropsSet={onPropsSet}
/>
)
const instance = wrapper.instance()
it('calls onAdLoaded prop', () => {
instance._onAdLoaded(event)
expect(onAdLoaded).toBeCalled()
})
it('calls onAdRequest prop', () => {
instance._onAdRequest(event)
expect(onAdRequest).toBeCalled()
})
it('calls onAdFailedToLoad prop', () => {
instance._onAdFailedToLoad(event)
expect(onAdFailedToLoad).toBeCalled()
})
it('calls onPropsSet prop', () => {
instance._onPropsSet(event)
expect(onPropsSet).toBeCalled()
})
})
describe('calls instance functions', () => {
const event = { nativeEvent: {} }
const createInstance = props => {
const wrapper = shallow(
<RNGAMBanner
adId={adId}
adSizes={adSizes}
testDeviceIds={testDeviceIds}
{...props}
/>
)
return wrapper.instance()
}
it('loads the banner if props are set', () => {
const instance = createInstance()
jest.spyOn(instance, '_loadBanner')
instance._onPropsSet(event)
instance.loadBanner()
expect(instance._loadBanner).toBeCalled()
})
it('loads the banner after props are set', () => {
const instance = createInstance()
jest.spyOn(instance, 'loadBanner')
jest.spyOn(instance, '_loadBanner')
instance.loadBanner()
expect(instance.loadBanner).toBeCalled()
instance._onPropsSet(event)
expect(instance._loadBanner).toBeCalledTimes(1)
})
it('adds the banner view only if it is requested', () => {
const instance = createInstance()
jest.spyOn(instance, '_addBannerView')
instance.addBannerView()
instance._onPropsSet(event)
instance.loadBanner()
instance._onAdRequest(event)
expect(instance._addBannerView).toBeCalledTimes(1)
})
it('does not add the banner if it is already added', () => {
const instance = createInstance()
jest.spyOn(instance, '_addBannerView')
instance._onPropsSet(event)
instance.loadBanner()
instance._onAdRequest(event)
instance.addBannerView()
instance.addBannerView()
expect(instance._addBannerView).toBeCalledTimes(1)
expect(global.console.warn).toBeCalledTimes(1)
})
it('does not destory the banner if it is not requested', () => {
const instance = createInstance()
jest.spyOn(instance, '_destroyBanner')
instance.destroyBanner()
expect(instance._destroyBanner).not.toBeCalled()
})
it('does not destroy the banner if it is already destroyed', () => {
const instance = createInstance()
jest.spyOn(instance, '_destroyBanner')
instance._onPropsSet(event)
instance.loadBanner()
instance._onAdRequest(event)
instance.destroyBanner()
instance.destroyBanner()
expect(instance._destroyBanner).toBeCalledTimes(1)
expect(global.console.warn).toBeCalledTimes(1)
})
it('destroys the banner view if it is requested', () => {
const instance = createInstance()
jest.spyOn(instance, '_destroyBanner')
instance._onPropsSet(event)
instance.loadBanner()
instance._onAdRequest(event)
instance.destroyBanner()
expect(instance._destroyBanner).toBeCalled()
})
it('destroys the banner view if it is added', () => {
const instance = createInstance()
jest.spyOn(instance, '_destroyBanner')
instance._onPropsSet(event)
instance.loadBanner()
instance._onAdRequest(event)
instance.addBannerView()
instance.destroyBanner()
expect(instance._destroyBanner).toBeCalled()
})
it('does not remove the banner if it is not added', () => {
const instance = createInstance()
jest.spyOn(instance, '_removeBannerView')
instance.removeBannerView()
expect(instance._removeBannerView).not.toBeCalled()
})
it('removes the banner view if it is created', () => {
const instance = createInstance()
jest.spyOn(instance, '_removeBannerView')
instance._onPropsSet(event)
instance.loadBanner()
instance._onAdRequest(event)
instance.addBannerView()
instance.removeBannerView()
expect(instance._removeBannerView).toBeCalled()
})
it('does not remove the banner if it is already removed', () => {
const instance = createInstance()
jest.spyOn(instance, '_removeBannerView')
instance._onPropsSet(event)
instance.loadBanner()
instance._onAdRequest(event)
instance.addBannerView()
instance.removeBannerView()
instance.removeBannerView()
expect(instance._removeBannerView).toBeCalledTimes(1)
expect(global.console.warn).toBeCalledTimes(1)
})
})
})