Files
iNaturalistReactNative/tests/unit/components/ProjectDetails/ProjectRequirements.test.js
Amanda Bullington ce8cf1b19f Internationalize and format dates displayed in project requirements (#2303)
* Display project months with correct formatting

* Format each type of project date displayed in project requirements

* Rename project start date key to fit fluent formatting
2024-10-25 21:16:10 -07:00

118 lines
3.0 KiB
JavaScript

import { screen } from "@testing-library/react-native";
import ProjectRequirements from "components/ProjectDetails/ProjectRequirements.tsx";
import React from "react";
import { useAuthenticatedQuery } from "sharedHooks";
import factory from "tests/factory";
import faker from "tests/helpers/faker";
import { renderComponent } from "tests/helpers/render";
const mockProject = factory( "RemoteProject", {
title: faker.lorem.sentence( ),
icon: faker.image.url( ),
header_image_url: faker.image.url( ),
description: faker.lorem.paragraph( ),
project_observation_rules: []
} );
const mockProjectWithMonths = factory( "RemoteProject", {
...mockProject,
rule_preferences: [
{
field: "month",
value: "1,5,8"
}
]
} );
const mockProjectWithStartTime = factory( "RemoteProject", {
...mockProject,
rule_preferences: [
{
field: "d1",
value: "2024-02-01"
}
]
} );
const mockProjectWithDateRange = factory( "RemoteProject", {
...mockProject,
rule_preferences: [
{
field: "d1",
value: "2024-03-07 07:42 -06:00"
},
{
field: "d2",
value: "2024-03-14 08:41 -07:00"
}
]
} );
const mockProjectWithObservedOnDate = factory( "RemoteProject", {
...mockProject,
rule_preferences: [
{
field: "observed_on",
value: "2022-08-24"
}
]
} );
jest.mock(
"sharedHooks/useAuthenticatedQuery",
( ) => ( {
__esModule: true,
default: jest.fn( ( ) => ( {
data: null,
isLoading: false,
isError: false
} ) )
} )
);
beforeAll( () => {
jest.useFakeTimers( );
} );
describe( "ProjectRequirements", ( ) => {
test( "displays project rule months with correct formatting", async ( ) => {
useAuthenticatedQuery.mockImplementation( ( ) => ( {
data: mockProjectWithMonths
} ) );
renderComponent( <ProjectRequirements /> );
const months = await screen.findByText( /January, May, August/ );
expect( months ).toBeTruthy( );
} );
test( "displays project rule start time with correct formatting", async ( ) => {
useAuthenticatedQuery.mockImplementation( ( ) => ( {
data: mockProjectWithStartTime
} ) );
renderComponent( <ProjectRequirements /> );
const startTime = await screen.findByText( "Start time: Feb 1, 2024" );
expect( startTime ).toBeTruthy( );
} );
test( "displays project rule date range with correct formatting", async ( ) => {
useAuthenticatedQuery.mockImplementation( ( ) => ( {
data: mockProjectWithDateRange
} ) );
renderComponent( <ProjectRequirements /> );
const dateRange = await screen.findByText( "Mar 7, 2024 - Mar 14, 2024" );
expect( dateRange ).toBeTruthy( );
} );
test( "displays project rule observed on date with correct formatting", async ( ) => {
useAuthenticatedQuery.mockImplementation( ( ) => ( {
data: mockProjectWithObservedOnDate
} ) );
renderComponent( <ProjectRequirements /> );
const observedOnDate = await screen.findByText( "Aug 24, 2022" );
expect( observedOnDate ).toBeTruthy( );
} );
} );