mirror of
https://github.com/inaturalist/iNaturalistReactNative.git
synced 2026-09-23 11:46:11 -04:00
MOB-1591: tests
This commit is contained in:
1 parent
d4abf71fba
commit
ff6f76115c
1 file changed
+67
-1
@@ -1,4 +1,5 @@
|
||||
import { useNetInfo } from "@react-native-community/netinfo";
|
||||
import { BottomTabBarHeightContext } from "@react-navigation/bottom-tabs";
|
||||
import {
|
||||
act, fireEvent, screen, userEvent, waitFor,
|
||||
} from "@testing-library/react-native";
|
||||
@@ -6,7 +7,7 @@ import UniversalSearch from "components/Explore/ExploreV2/screens/UniversalSearc
|
||||
import initI18next from "i18n/initI18next";
|
||||
import i18next from "i18next";
|
||||
import React from "react";
|
||||
import { Keyboard } from "react-native";
|
||||
import { Keyboard, StyleSheet } from "react-native";
|
||||
import { renderComponent } from "tests/helpers/render";
|
||||
|
||||
const mockNavigate = jest.fn( );
|
||||
@@ -71,6 +72,12 @@ jest.mock( "sharedHooks/useIconicTaxa", ( ) => ( {
|
||||
} ) );
|
||||
const useIconicTaxa = require( "sharedHooks/useIconicTaxa" ).default;
|
||||
|
||||
jest.mock( "sharedHooks/useKeyboardInfo", ( ) => ( {
|
||||
__esModule: true,
|
||||
default: jest.fn( ),
|
||||
} ) );
|
||||
const useKeyboardInfo = require( "sharedHooks/useKeyboardInfo" ).default;
|
||||
|
||||
const ICONIC_TAXA = [
|
||||
{
|
||||
id: 47126,
|
||||
@@ -160,6 +167,18 @@ const focusLocation = ( ) => {
|
||||
fireEvent( screen.getByTestId( "UniversalSearch.locationInput" ), "focus" );
|
||||
};
|
||||
|
||||
const KEYBOARD_HIDDEN = { keyboardHeight: 0, keyboardShown: false };
|
||||
|
||||
const measureButtonBar = height => {
|
||||
fireEvent( screen.getByTestId( "UniversalSearch.buttonBar" ), "layout", {
|
||||
nativeEvent: { layout: { height } },
|
||||
} );
|
||||
};
|
||||
|
||||
const listPaddingBottom = ( ) => StyleSheet.flatten(
|
||||
screen.getByTestId( "UniversalSearch.results" ).props.contentContainerStyle,
|
||||
)?.paddingBottom;
|
||||
|
||||
beforeAll( async ( ) => {
|
||||
await initI18next( );
|
||||
} );
|
||||
@@ -183,6 +202,7 @@ beforeEach( ( ) => {
|
||||
useIconicTaxa.mockReturnValue( ICONIC_TAXA );
|
||||
useUniversalSearch.mockReturnValue( { results: [], isLoading: false, refetch: jest.fn( ) } );
|
||||
useLocationSearch.mockReturnValue( { results: [], isLoading: false, refetch: jest.fn( ) } );
|
||||
useKeyboardInfo.mockReturnValue( KEYBOARD_HIDDEN );
|
||||
// Default to online; the offline tests override this per-case.
|
||||
useNetInfo.mockReturnValue( { isConnected: true } );
|
||||
} );
|
||||
@@ -625,6 +645,52 @@ describe( "UniversalSearch screen", ( ) => {
|
||||
);
|
||||
} );
|
||||
|
||||
describe( "keeping results clear of the keyboard", ( ) => {
|
||||
it( "adds no padding while the keyboard is dismissed", ( ) => {
|
||||
useKeyboardInfo.mockReturnValue( { keyboardHeight: 300, keyboardShown: false } );
|
||||
renderComponent( <UniversalSearch /> );
|
||||
|
||||
measureButtonBar( 80 );
|
||||
|
||||
expect( listPaddingBottom( ) ).toEqual( 0 );
|
||||
} );
|
||||
|
||||
it( "pads the list by the keyboard height minus the button bar", ( ) => {
|
||||
useKeyboardInfo.mockReturnValue( { keyboardHeight: 300, keyboardShown: true } );
|
||||
renderComponent( <UniversalSearch /> );
|
||||
|
||||
expect( listPaddingBottom( ) ).toEqual( 300 );
|
||||
|
||||
measureButtonBar( 80 );
|
||||
expect( listPaddingBottom( ) ).toEqual( 220 );
|
||||
} );
|
||||
|
||||
it( "also subtracts the tab bar height when the screen has one", ( ) => {
|
||||
useKeyboardInfo.mockReturnValue( { keyboardHeight: 300, keyboardShown: true } );
|
||||
renderComponent(
|
||||
<BottomTabBarHeightContext.Provider value={50}>
|
||||
<UniversalSearch />
|
||||
</BottomTabBarHeightContext.Provider>,
|
||||
);
|
||||
|
||||
measureButtonBar( 80 );
|
||||
expect( listPaddingBottom( ) ).toEqual( 170 );
|
||||
} );
|
||||
|
||||
it( "never pads by a negative amount", ( ) => {
|
||||
useKeyboardInfo.mockReturnValue( { keyboardHeight: 100, keyboardShown: true } );
|
||||
renderComponent(
|
||||
<BottomTabBarHeightContext.Provider value={50}>
|
||||
<UniversalSearch />
|
||||
</BottomTabBarHeightContext.Provider>,
|
||||
);
|
||||
|
||||
measureButtonBar( 80 );
|
||||
|
||||
expect( listPaddingBottom( ) ).toEqual( 0 );
|
||||
} );
|
||||
} );
|
||||
|
||||
it( "navigates to Advanced Search", async ( ) => {
|
||||
renderComponent( <UniversalSearch /> );
|
||||
|
||||
|
||||
Reference in new issue
Block a user