import React from 'react'; import { render } from '@testing-library/react-native'; import CarouselPageIndicator from '../CarouselPageIndicator'; import { ReactTestRendererJSON } from 'react-test-renderer'; import { DEFAULT_CAROUSEL_INDICATOR_ACTIVE_STYLE, DEFAULT_CAROUSEL_INDICATOR_INACTIVE_STYLE, } from '../constants'; describe('CarouselPageIndicator', () => { it('renders with multiple items', () => { const { toJSON } = render( ); expect(toJSON()).toMatchSnapshot(); const { children } = toJSON() as ReactTestRendererJSON; expect(children).toHaveLength(3); }); it('renders with just one item', () => { const { toJSON } = render( ); expect(toJSON()).toMatchSnapshot(); const { children } = toJSON() as ReactTestRendererJSON; expect(children).toHaveLength(1); }); it('handles null numberOfItems value', () => { // Ideally, this should not happen but, if it does, we should be able to handle gracefully const { toJSON } = render( ); expect(toJSON()).toMatchSnapshot(); }); it('renders indicator styles based on current index', () => { const { toJSON } = render( ); const { children } = toJSON() as ReactTestRendererJSON; expect(toJSON()).toMatchSnapshot(); expect((children?.[0] as ReactTestRendererJSON).props.style).toStrictEqual([ DEFAULT_CAROUSEL_INDICATOR_INACTIVE_STYLE, undefined, ]); expect((children?.[1] as ReactTestRendererJSON).props.style).toStrictEqual([ DEFAULT_CAROUSEL_INDICATOR_ACTIVE_STYLE, undefined, ]); expect((children?.[2] as ReactTestRendererJSON).props.style).toStrictEqual([ DEFAULT_CAROUSEL_INDICATOR_INACTIVE_STYLE, undefined, ]); }); it('handles null index value', () => { // Ideally, this should not happen but, if it does, we should be able to handle gracefully const { toJSON } = render( ); expect(toJSON()).toMatchSnapshot(); }); });