Files
iNaturalistReactNative/tests/integration/MyObservationsLocalization.test.js
Ken-ichi 8dbbca04d9 Fail upload when network request failed (#1651)
* Fixed cancel upload button
* Uploads will timeout after 15s
* Moved MyObs tests unrelated to unsynced into the synced block
2024-06-04 18:23:59 -07:00

94 lines
3.4 KiB
JavaScript

import { screen, waitFor } from "@testing-library/react-native";
import MyObservationsContainer from "components/MyObservations/MyObservationsContainer";
import inatjs from "inaturalistjs";
import React from "react";
import factory, { makeResponse } from "tests/factory";
import faker from "tests/helpers/faker";
import { renderAppWithComponent } from "tests/helpers/render";
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"
} );
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( <MyObservationsContainer /> );
await waitFor( ( ) => {
expect( screen.getByText( /Welcome back/ ) ).toBeTruthy( );
} );
expect( screen.queryByText( /Welcome-user/ ) ).toBeFalsy( );
} );
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( <MyObservationsContainer /> );
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( <MyObservationsContainer /> );
// 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( );
}
);
} );
} );