import { screen, waitFor } from "@testing-library/react-native"; import MyObservationsContainer from "components/MyObservations/MyObservationsContainer"; // import inatjs from "inaturalistjs"; import React from "react"; import factory from "tests/factory"; // import factory, { makeResponse } from "tests/factory"; import faker from "tests/helpers/faker"; import { renderAppWithComponent } from "tests/helpers/render"; import setStoreStateLayout from "tests/helpers/setStoreStateLayout"; import setupUniqueRealm from "tests/helpers/uniqueRealm"; import { signIn, signOut } from "tests/helpers/user"; // UNIQUE REALM SETUP const mockRealmIdentifier = __filename; const { mockRealmModelsIndex, uniqueRealmBeforeAll, uniqueRealmAfterAll } = setupUniqueRealm( mockRealmIdentifier, ); jest.mock( "realmModels/index", ( ) => mockRealmModelsIndex ); jest.mock( "providers/contexts", ( ) => { const originalModule = jest.requireActual( "providers/contexts" ); return { __esModule: true, ...originalModule, RealmContext: { ...originalModule.RealmContext, useRealm: ( ) => global.mockRealms[mockRealmIdentifier], useQuery: ( ) => [], }, }; } ); beforeAll( uniqueRealmBeforeAll ); afterAll( uniqueRealmAfterAll ); // /UNIQUE REALM SETUP const mockUser = factory( "LocalUser", { login: faker.internet.userName( ), iconUrl: faker.image.url( ), locale: "en", } ); // const mockSpanishUser = factory( "LocalUser", { // login: faker.internet.userName( ), // iconUrl: faker.image.url( ), // locale: "es" // } ); beforeEach( ( ) => { setStoreStateLayout( { isDefaultMode: false, isAllAddObsOptionsMode: true, } ); } ); describe( "MyObservations", ( ) => { describe( "localization for current user", ( ) => { afterEach( async ( ) => { signOut( { realm: global.mockRealms[__filename] } ); } ); it( "should be English by default", async ( ) => { expect( mockUser.locale ).toEqual( "en" ); await signIn( mockUser, { realm: global.mockRealms[__filename] } ); renderAppWithComponent( ); await waitFor( ( ) => { // since we haven't loaded any observations in here, user will see the empty screen // after logging in expect( screen.getByText( /Use iNaturalist to identify any living thing/ ) ).toBeTruthy( ); } ); } ); // 20240730 - amanda - hiding these since we're not soft launching with internationalization // it( "should be Spanish if signed in user's locale is Spanish", async ( ) => { // expect( mockSpanishUser.locale ).toEqual( "es" ); // await signIn( mockSpanishUser, { realm: global.mockRealms[__filename] } ); // renderAppWithComponent( ); // await waitFor( ( ) => { // expect( screen.getByText( /Bienvenido a iNaturalist/ ) ).toBeTruthy(); // } ); // expect( screen.queryByText( /Welcome/ ) ).toBeFalsy( ); // } ); // it( // "should change to es when local user locale is en but remote user locale is es", // async ( ) => { // expect( mockUser.locale ).toEqual( "en" ); // await signIn( mockUser, { realm: global.mockRealms[__filename] } ); // const mockSpanishUser2 = factory( "LocalUser", { // locale: "es" // } ); // inatjs.users.me.mockResolvedValue( makeResponse( [mockSpanishUser2] ) ); // renderAppWithComponent( ); // // I'd prefer to wait for the Spanish text to appear, but that never // // seems to wait long enough. This waits for the relevant API call to // // have been made // await waitFor( ( ) => { // expect( inatjs.users.me ).toHaveBeenCalled( ); // } ); // expect( screen.getByText( /Bienvenido a iNaturalist/ ) ).toBeTruthy( ); // expect( screen.queryByText( /Welcome/ ) ).toBeFalsy( ); // } // ); } ); } );