Files

89 lines
2.6 KiB
JavaScript

import { useNetInfo } from "@react-native-community/netinfo";
import { renderHook } from "@testing-library/react-native";
import useSyncJoinedProjects from "components/AddToProjects/hooks/useSyncJoinedProjects";
import syncJoinedProjects from "sharedHelpers/syncJoinedProjects";
import { useCurrentUser } from "sharedHooks";
const mockRealm = {};
jest.mock( "providers/contexts", () => ( {
RealmContext: {
useRealm: () => mockRealm,
},
} ) );
jest.mock( "sharedHelpers/syncJoinedProjects", () => ( {
__esModule: true,
default: jest.fn( ),
} ) );
jest.mock( "sharedHooks", () => ( {
__esModule: true,
useCurrentUser: jest.fn( ),
} ) );
const currentUserId = 42;
describe( "useSyncJoinedProjects", () => {
beforeEach( () => {
jest.clearAllMocks();
useCurrentUser.mockReturnValue( { id: currentUserId } );
useNetInfo.mockReturnValue( { isConnected: true } );
} );
it( "syncs joined projects when connected and signed in", () => {
renderHook( () => useSyncJoinedProjects() );
expect( syncJoinedProjects ).toHaveBeenCalledWith( mockRealm, currentUserId );
} );
it( "does not sync when offline", () => {
useNetInfo.mockReturnValue( { isConnected: false } );
renderHook( () => useSyncJoinedProjects() );
expect( syncJoinedProjects ).not.toHaveBeenCalled();
} );
it( "does not sync while connectivity is still undetermined", () => {
useNetInfo.mockReturnValue( { isConnected: null } );
renderHook( () => useSyncJoinedProjects() );
expect( syncJoinedProjects ).not.toHaveBeenCalled();
} );
it( "does not sync when there is no current user", () => {
useCurrentUser.mockReturnValue( null );
renderHook( () => useSyncJoinedProjects() );
expect( syncJoinedProjects ).not.toHaveBeenCalled();
} );
it( "syncs once connectivity is restored", () => {
useNetInfo.mockReturnValue( { isConnected: false } );
const { rerender } = renderHook( () => useSyncJoinedProjects() );
expect( syncJoinedProjects ).not.toHaveBeenCalled();
useNetInfo.mockReturnValue( { isConnected: true } );
rerender();
expect( syncJoinedProjects ).toHaveBeenCalledTimes( 1 );
expect( syncJoinedProjects ).toHaveBeenCalledWith( mockRealm, currentUserId );
} );
it( "does not sync again when connectivity is lost and regained", () => {
const { rerender } = renderHook( () => useSyncJoinedProjects() );
expect( syncJoinedProjects ).toHaveBeenCalledTimes( 1 );
useNetInfo.mockReturnValue( { isConnected: false } );
rerender();
useNetInfo.mockReturnValue( { isConnected: true } );
rerender();
expect( syncJoinedProjects ).toHaveBeenCalledTimes( 1 );
} );
} );