Files
2026-03-20 10:40:07 -05:00

99 lines
3.2 KiB
JavaScript

import { useRoute } from "@react-navigation/native";
import { render, screen } from "@testing-library/react-native";
import ProjectListContainer from "components/ProjectList/ProjectListContainer";
import React from "react";
import factory from "tests/factory";
const mockProjects = [
factory( "RemoteProject", {
title: "project_1",
} ),
factory( "RemoteProject", {
title: "project_2",
} ),
];
const mockNonTraditionalProjects = [
factory( "RemoteProject", {
title: "non_traditional_project_1",
} ),
factory( "RemoteProject", {
title: "non_traditional_project_2",
} ),
];
const mockObservationUuid = "00000000-0000-0000-0000-000000000001";
jest.mock( "sharedHooks/useRemoteObservation", ( ) => ( {
__esModule: true,
default: ( ) => ( {
remoteObservation: {
project_observations: mockProjects.map( project => ( { project } ) ),
non_traditional_projects: mockNonTraditionalProjects.map( project => ( { project } ) ),
},
refetchRemoteObservation: jest.fn( ),
isRefetching: false,
fetchRemoteObservationError: null,
} ),
} ) );
const mockUseAuthenticatedQuery = jest.fn( ( ) => ( { data: null } ) );
jest.mock( "sharedHooks/useAuthenticatedQuery", ( ) => ( {
__esModule: true,
default: ( ...args ) => mockUseAuthenticatedQuery( ...args ),
} ) );
describe( "ProjectListContainer", () => {
describe( "observationUuid path", () => {
beforeAll( ( ) => {
useRoute.mockImplementation( ( ) => ( {
params: {
observationUuid: mockObservationUuid,
},
} ) );
} );
it( "should display a list with all project titles", async () => {
render( <ProjectListContainer /> );
const firstProjectTitle = await screen.findByText( mockProjects[0].title );
expect( firstProjectTitle ).toBeVisible( );
const secondProjectTitle = await screen.findByText( mockProjects[1].title );
expect( secondProjectTitle ).toBeVisible( );
const firstTitle = await screen.findByText( mockNonTraditionalProjects[0].title );
expect( firstTitle ).toBeVisible( );
const secondTitle = await screen.findByText( mockNonTraditionalProjects[1].title );
expect( secondTitle ).toBeVisible( );
} );
} );
describe( "userId path", () => {
const mockUserId = 123;
beforeAll( ( ) => {
useRoute.mockImplementation( ( ) => ( {
params: {
userId: mockUserId,
},
} ) );
mockUseAuthenticatedQuery.mockReturnValue( { data: mockProjects } );
} );
it( "should display a list with all project titles from user projects", async () => {
render( <ProjectListContainer /> );
const firstProjectTitle = await screen.findByText( mockProjects[0].title );
expect( firstProjectTitle ).toBeVisible( );
const secondProjectTitle = await screen.findByText( mockProjects[1].title );
expect( secondProjectTitle ).toBeVisible( );
} );
it( "should call useAuthenticatedQuery with the correct query key", ( ) => {
render( <ProjectListContainer /> );
expect( mockUseAuthenticatedQuery ).toHaveBeenCalledWith(
["fetchUserProjects", mockUserId],
expect.any( Function ),
expect.objectContaining( { enabled: true } ),
);
} );
} );
} );