Files
iNaturalistReactNative/tests/unit/components/SharedComponents/InlineUser/InlineUser.test.js
Johannes Klein b4516b7b25 Update react native to v0.78.x (#3043)
* Update package.json

* Update package.json

* Updates for native files with upgrade-helpers

* Update .flowconfig

* Update package-lock.json

* Update Podfile.lock

* Add react-dom types

* Update package-lock.json

* Wrong install

* Use types-react-codemod

* Update TaxonSearch.tsx

* Remove react-native-accessibility-engine dependency

This is currently not maintained and not compatible with RN 0.78

* Comment out accessibility tests

* Disable broken snapshot test

* Move broken test

* Move broken test

* Move broken test

* Remove duplicate file

* Move broken tests

* Move broken tests

* Move broken tests

* Move broken tests

* Move broken tests

* Move broken test

* Remove duplicate file

* Move broken tests
2025-08-09 13:47:46 +02:00

104 lines
3.6 KiB
JavaScript

import { fireEvent, render, screen } from "@testing-library/react-native";
import { InlineUser } from "components/SharedComponents";
import React from "react";
import factory from "tests/factory";
const mockNavigate = jest.fn( );
jest.mock( "@react-navigation/native", ( ) => {
const actualNav = jest.requireActual( "@react-navigation/native" );
return {
...actualNav,
useNavigation: ( ) => ( {
navigate: mockNavigate
} )
};
} );
const mockUser = factory( "RemoteUser" );
const mockUserWithoutImage = factory( "RemoteUser", { icon_url: null } );
const snapshotUser = { login: "some_login", icon_url: "some_icon_url" };
const snapshotUserWithoutImage = { login: "some_login", icon_url: null };
jest.mock(
"components/SharedComponents/UserIcon",
() => function MockUserIcon( ) {
const MockName = "mockUserIcon";
return <MockName testID={MockName} />;
}
);
describe( "InlineUser", ( ) => {
it( "should not have accessibility erros", () => {
// const inlineUser = <InlineUser user={mockUser} />;
// Disabled during the update to RN 0.78
// expect( inlineUser ).toBeAccessible();
} );
it( "renders reliably", () => {
// Snapshot test
render( <InlineUser user={snapshotUser} isConnected /> );
expect( screen ).toMatchSnapshot();
} );
it( "displays user handle and image correctly", async ( ) => {
render( <InlineUser user={mockUser} isConnected /> );
// Check for user name text
expect( screen.getByText( `${mockUser.login}` ) ).toBeTruthy( );
// This image appears after useNetInfo returns true
// so we have to use await and findByTestId
const profilePicture = await screen.findByTestId( "mockUserIcon" );
expect( profilePicture ).toBeTruthy( );
expect( screen.queryByTestId( "InlineUser.FallbackPicture" ) ).not.toBeTruthy( );
} );
it( "fires onPress handler", ( ) => {
render( <InlineUser user={mockUser} isConnected /> );
const inlineUserComponent = screen.getByRole( "link" );
fireEvent.press( inlineUserComponent );
expect( mockNavigate )
.toHaveBeenCalledWith( "UserProfile", { userId: mockUser.id } );
} );
describe( "when user has no icon set", () => {
it( "displays user handle and fallback image correctly", async () => {
render( <InlineUser user={mockUserWithoutImage} isConnected /> );
expect( screen.getByText( `${mockUserWithoutImage.login}` ) ).toBeTruthy();
// This icon appears after useNetInfo returns true
// so we have to use await and findByTestId
expect(
await screen.findByTestId( "InlineUser.FallbackPicture" )
).toBeTruthy();
expect( screen.queryByTestId( "mockUserIcon" ) ).not.toBeTruthy();
} );
it( "renders reliably", ( ) => {
// Snapshot test
render( <InlineUser user={snapshotUserWithoutImage} isConnected /> );
expect( screen ).toMatchSnapshot();
} );
} );
describe( "when offline", () => {
it( "displays no internet fallback image correctly", async () => {
render( <InlineUser user={mockUser} isConnected={false} /> );
expect( screen.getByText( `${mockUser.login}` ) ).toBeTruthy();
// This icon appears after useNetInfo returns false
// so we have to use await and findByTestId
expect( await screen.findByTestId( "InlineUser.FallbackPicture" ) ).toBeTruthy();
expect( screen.queryByTestId( "mockUserIcon" ) ).not.toBeTruthy();
} );
it( "renders reliably", ( ) => {
// Snapshot test
render( <InlineUser user={snapshotUser} isConnected={false} /> );
expect( screen ).toMatchSnapshot();
} );
} );
} );