Files
iNaturalistReactNative/tests/unit/components/SharedComponents/ObservationsFlashList/ObsUploadStatus.test.js
Johannes Klein a44f0412f3 Hide observation status for logged out users on simple MyObs (#2710)
* Show simple my obs header only for logged-in users

* ActivityCount TS

* CommentsCount TS

* IdentificationsCount TS

* ObsStatus TS initial pass not looking at errors

* QualityGradeStatus TS

* Update RealmObservation interface

* Update RealmObservation interface

* ObsUploadStatus TS, plain copy, no errors yet

* Update types

* Update type

* IconicTaxonIcon TS

* ObsImage TS

* PhotoCount TS

* ObsImagePreview TS

* Image is only opaque when logged in

* DateDisplay TS

* Remove debug flag from UploadObsStatus

* Update type

* Prop to hide ObsUploadStatus

* Test observations need those otherwise they appear as needing edit

* Update imports
2025-03-04 09:01:21 +01:00

75 lines
2.0 KiB
JavaScript

import {
screen
} from "@testing-library/react-native";
import ObsUploadStatus from "components/ObservationsFlashList/ObsUploadStatus.tsx";
import i18next from "i18next";
import React from "react";
import useStore from "stores/useStore";
import factory from "tests/factory";
import faker from "tests/helpers/faker";
import { renderComponent } from "tests/helpers/render";
const mockUnsyncedObservation = factory( "LocalObservation", {
_synced_at: null
} );
const mockEditedObservation = factory( "LocalObservation", {
_synced_at: faker.date.past( ),
_updated_at: faker.date.future( )
} );
const initialStoreState = useStore.getState( );
beforeAll( ( ) => {
useStore.setState( initialStoreState, true );
} );
describe( "ObsUploadStatus", () => {
it( "displays a pending upload for an unsynced observation", () => {
renderComponent(
<ObsUploadStatus
observation={mockUnsyncedObservation}
progress={0}
/>
);
const icon = screen.getByLabelText( i18next.t( "Start-upload" ) );
expect( icon ).toBeVisible( );
} );
it( "displays a pending upload for a locally edited observation", () => {
renderComponent(
<ObsUploadStatus
observation={mockEditedObservation}
progress={0}
/>
);
const icon = screen.getByLabelText( i18next.t( "Start-upload" ) );
expect( icon ).toBeVisible( );
} );
it( "displays an upload in progress", async ( ) => {
renderComponent(
<ObsUploadStatus
observation={mockUnsyncedObservation}
progress={0.05}
/>
);
const progressIcon = screen.getByLabelText( i18next.t( "Upload-in-progress" ) );
expect( progressIcon ).toBeVisible( );
} );
it( "displays a completed upload", async () => {
renderComponent(
<ObsUploadStatus
observation={mockUnsyncedObservation}
progress={1}
/>
);
const a11yLabel = screen.getByLabelText( i18next.t( "Upload-Complete" ) );
expect( a11yLabel ).toBeVisible( );
} );
} );