Files
iNaturalistReactNative/tests/unit/components/Settings/LanguageSetting.test.js
Ryan Stelly b78be9243d lint rule & autofix for "trailing comma" (#3299)
* (lint) MOB-1063 enforce trailing commas

* autofix trailing commas

* manually fix newly introduced maxlen violations

* add trailing comma convention to i18n build
2025-12-22 20:17:13 -06:00

53 lines
1.8 KiB
JavaScript

import { fireEvent, screen } from "@testing-library/react-native";
import LanguageSetting from "components/Settings/LanguageSetting";
import i18n from "i18next";
import inatjs from "inaturalistjs";
import React from "react";
import useStore from "stores/useStore";
import { makeResponse } from "tests/factory";
import { renderComponent } from "tests/helpers/render";
const initialStoreState = useStore.getState( );
beforeAll( async ( ) => {
useStore.setState( initialStoreState, true );
// userEvent recommends fake timers
jest.useFakeTimers( );
} );
beforeEach( ( ) => {
// reset the picker for each test
i18n.changeLanguage( "en" );
} );
describe( "LanguageSetting", ( ) => {
it( "should display and allow user to change locales from web list", async ( ) => {
inatjs.translations.locales.mockResolvedValue( makeResponse( [{
language_in_locale: "Slovenský",
locale: "sk",
}, {
language_in_locale: "Español (Colombia)",
locale: "es-CO",
}] ) );
renderComponent( <LanguageSetting onChange={jest.fn( )} /> );
expect( i18n.language ).toEqual( "en" );
const changeLanguageButton = await screen.findByText( /CHANGE APP LANGUAGE/ );
expect( changeLanguageButton ).toBeVisible( );
fireEvent.press( changeLanguageButton );
const picker = await screen.findByTestId( "ReactNativePicker" );
expect( picker ).toBeVisible( );
expect( picker.props.selectedIndex ).toStrictEqual( 0 );
// trigger a change to the UI, selecting the second element
fireEvent( picker, "onValueChange", "es-CO" );
expect( picker.props.selectedIndex ).toStrictEqual( 1 );
const confirmText = await screen.findByText( "CONFIRM" );
expect( confirmText ).toBeVisible( );
fireEvent.press( confirmText );
expect( i18n.language ).toEqual( "es-CO" );
} );
} );