diff --git a/app/scenes/RootScreen/index.js b/app/scenes/RootScreen/index.js index 963caae..1351e91 100644 --- a/app/scenes/RootScreen/index.js +++ b/app/scenes/RootScreen/index.js @@ -1,30 +1,23 @@ -import React, { Component } from 'react'; import { connect } from 'react-redux'; import { PropTypes } from 'prop-types'; -import NavigationService from '@services/NavigationService'; import AppNavigator from '@navigators/AppNavigator'; import Container from '@atoms/Container'; - +import React, { useEffect } from 'react'; +import { setRefForTopLevelNavigtor } from '@app/services/NavigationService'; import { rootScreenActions } from './reducer'; -export class RootScreen extends Component { - componentDidMount() { - // Run the startup saga when the application is starting - this.props.startup(); - } - - setRefForTopLevelNavigtor = navigatorRef => { - NavigationService.setTopLevelNavigator(navigatorRef); - }; +const RootScreen = props => { + useEffect(() => { + // Run the startup function when the component mounts + props.startup(); + }, []); - render() { - return ( - - - - ); - } -} + return ( + + + + ); +}; RootScreen.propTypes = { startup: PropTypes.func @@ -33,5 +26,5 @@ RootScreen.propTypes = { const mapDispatchToProps = dispatch => ({ startup: () => dispatch(rootScreenActions.startup()) }); - export default connect(null, mapDispatchToProps)(RootScreen); +export { RootScreen as RootScreenTest }; diff --git a/app/scenes/RootScreen/saga.js b/app/scenes/RootScreen/saga.js index 0eadf9b..e9fa3e9 100644 --- a/app/scenes/RootScreen/saga.js +++ b/app/scenes/RootScreen/saga.js @@ -1,12 +1,12 @@ import { takeLatest } from 'redux-saga/effects'; -import NavigationService from '@app/services/NavigationService'; +import { navigateAndReset } from '@app/services/NavigationService'; import { rootScreenTypes } from './reducer'; /** * The startup saga is the place to define behavior to execute when the application starts. */ export function* startup() { - setTimeout(() => NavigationService.navigateAndReset('MainScreen'), 1000); + setTimeout(() => navigateAndReset('MainScreen'), 1000); } export default function* startUpSaga() { diff --git a/app/scenes/RootScreen/tests/index.test.js b/app/scenes/RootScreen/tests/index.test.js index d363424..a93ddc6 100644 --- a/app/scenes/RootScreen/tests/index.test.js +++ b/app/scenes/RootScreen/tests/index.test.js @@ -6,26 +6,23 @@ import React from 'react'; import { renderWithIntl } from 'app/utils/testUtils'; -import { RootScreen as RootScreenTest } from '../index'; - +import { RootScreenTest } from '../index'; +export const setupJest = () => ({ submitSpy: jest.fn() }); describe(' container', () => { - let submitSpy; - - beforeAll(() => { - submitSpy = jest.fn(); - }); - it('should render and match the snapshot', () => { + const { submitSpy } = setupJest(); const baseElement = renderWithIntl(); expect(baseElement).toMatchSnapshot(); }); it('should call the startup prop on mount', () => { + const { submitSpy } = setupJest(); renderWithIntl(); expect(submitSpy).toHaveBeenCalled(); }); it('should not render rootSceen Container', () => { + const { submitSpy } = setupJest(); const { getByTestId } = renderWithIntl( ); diff --git a/app/scenes/RootScreen/tests/reducer.test.js b/app/scenes/RootScreen/tests/reducer.test.js index 40243db..90666cb 100644 --- a/app/scenes/RootScreen/tests/reducer.test.js +++ b/app/scenes/RootScreen/tests/reducer.test.js @@ -6,16 +6,15 @@ import { /* eslint-disable default-case, no-param-reassign */ describe('Tests for RootScreen reducers', () => { - let state; - beforeEach(() => { - state = initialState; - }); + const setupTests = () => ({ state: initialState }); it('should return the initial state', () => { + const { state } = setupTests(); expect(rootContainerReducer(undefined, {})).toEqual(state); }); it('should return the initial state when an action of type STARTUP is dispatched', () => { + const { state } = setupTests(); // since startup is called to initiate screen navigation the store should remain intact expect( rootContainerReducer(state, { @@ -23,4 +22,14 @@ describe('Tests for RootScreen reducers', () => { }) ).toEqual(state); }); + + it('should return the initial state when an action of type NONEXIST is dispatched', () => { + const { state } = setupTests(); + // since startup is called to initiate screen navigation the store should remain intact + expect( + rootContainerReducer(state, { + type: rootScreenTypes.NONEXIST + }) + ).toEqual(state); + }); });