diff --git a/packages/gatsby-theme/src/components/presenter-footer.js b/packages/gatsby-theme/src/components/presenter-footer.js index 0369656..5f950f7 100644 --- a/packages/gatsby-theme/src/components/presenter-footer.js +++ b/packages/gatsby-theme/src/components/presenter-footer.js @@ -9,6 +9,7 @@ import { presenterModes } from '../constants' const NormalIcon = () => ( ( const TallIcon = () => ( ( const NotesIcon = () => ( ( const WideIcon = () => ( { +export const getNextPresenterMode = presenterMode => { const index = arrayPresenterModes.findIndex(el => el === presenterMode) const nextIndex = (index + 1) % lengthPresenterModes return arrayPresenterModes[nextIndex] @@ -140,7 +144,7 @@ export default props => { const onSwitchPresenterMode = () => setState({ - presenterMode: getNextItem(presenterMode), + presenterMode: getNextPresenterMode(presenterMode), }) const IconComponent = icons[presenterMode] diff --git a/packages/gatsby-theme/test/presenter-footer.js b/packages/gatsby-theme/test/presenter-footer.js new file mode 100644 index 0000000..5f589ac --- /dev/null +++ b/packages/gatsby-theme/test/presenter-footer.js @@ -0,0 +1,54 @@ +import React from 'react' +import { render, fireEvent, cleanup } from '@testing-library/react' +import PresenterFooter, { + getNextPresenterMode, +} from '../src/components/presenter-footer' +import { presenterModes } from '../src/constants' +import DeckContext from '../src/context' + +describe('present-footer', () => { + afterEach(cleanup) + + describe('getNextPresenterMode', () => { + it.each` + currentPresenterMode | expectedPresenterMode + ${presenterModes.normal} | ${presenterModes.tall} + ${presenterModes.tall} | ${presenterModes.wide} + ${presenterModes.wide} | ${presenterModes.notes} + ${presenterModes.notes} | ${presenterModes.normal} + `( + 'should return $expectedPresenterMode when presenter mode is $currentPresenterMode', + ({ currentPresenterMode, expectedPresenterMode }) => { + const nextPresenterMode = getNextPresenterMode(currentPresenterMode) + expect(nextPresenterMode).toBe(expectedPresenterMode) + } + ) + }) + + describe('', () => { + const PresenterFooterWithContext = ({ context }) => ( + + + + ) + + it('should update the presenter mode when user click on persenter mode icon', () => { + const context = { + index: 0, + length: 2, + presenterMode: presenterModes.normal, + setState: jest.fn(), + } + const { getByTestId } = render( + + ) + + fireEvent.click(getByTestId('normalIcon')) + + expect(context.setState).toBeCalledTimes(1) + expect(context.setState).toBeCalledWith({ + presenterMode: presenterModes.tall, + }) + }) + }) +})