Add test case for user, room hooks

This commit is contained in:
2023-11-23 17:45:26 +07:00
parent bc6f8675ff
commit e3db60b2dd
4 changed files with 128 additions and 105 deletions
@@ -8,16 +8,13 @@ import { act, renderHook, waitFor } from '@testing-library/react';
import { IRoom } from '@type/rooms'; import { IRoom } from '@type/rooms';
import { ReactNode } from 'react'; import { ReactNode } from 'react';
import { MemoryRouter } from 'react-router-dom'; import { MemoryRouter } from 'react-router-dom';
import { useUpdateRoom } from '@hook/rooms/useUpdateRoom';
import { useDeleteRoom } from '@hook/rooms/useDeleteRoom';
const mockUseRooms = jest.fn(useRooms); const mockUseRooms = jest.fn(useRooms);
const mockUseCreateRoom = jest.fn(useCreateRoom); const mockUseCreateRoom = jest.fn(useCreateRoom);
// const mockUseUpdateRoom = useUpdateRoom; const mockUseUpdateRoom = jest.fn(useUpdateRoom);
// const mockUseDeleteRoom = useDeleteRoom; const mockUseDeleteRoom = jest.fn(useDeleteRoom);
jest.mock('@hook/rooms/useRooms');
jest.mock('@hook/rooms/useUpdateRoom');
jest.mock('@hook/rooms/useDeleteRoom');
interface IWrapper { interface IWrapper {
children: ReactNode; children: ReactNode;
} }
@@ -86,46 +83,39 @@ describe('CRUD Room testing', () => {
expect(result.current.isSuccess).toBeTruthy(); expect(result.current.isSuccess).toBeTruthy();
}); });
test('Create failed room', async () => { test('Edit room', async () => {
mockUseCreateRoom.mockImplementation(() => ({ mockUseUpdateRoom.mockImplementation(() => ({
createRoom: () => {sampleData}, updateRoom: () => {sampleData},
isCreating: false, isUpdating: false,
isSuccess: false isSuccess: true
})); }));
const { result } = renderHook(() => mockUseCreateRoom(), { wrapper }); const { result } = renderHook(() => mockUseUpdateRoom(), { wrapper });
act(() => { act(() => {
result.current.createRoom(sampleData); const testMethod = async () => {
result.current.updateRoom(sampleData);
await waitFor(() => expect(result.current.isSuccess).toBeTruthy());
};
testMethod();
});
}); });
await waitFor(() => result.current.isSuccess); test('Delete room', async () => {
mockUseDeleteRoom.mockImplementation(() => ({
deleteRoom: () => {sampleData.id},
isDeleting: false,
isSuccess: true
}));
const { result } = renderHook(() => mockUseDeleteRoom(), { wrapper });
expect(result.current.isSuccess).toBeFalsy(); act(() => {
const testMethod = async () => {
result.current.deleteRoom(sampleData.id);
await waitFor(() => expect(result.current.isSuccess).toBeTruthy());
};
testMethod();
});
}); });
// test('Edit room', async () => {
// const { result } = renderHook(() => useUpdateRoom(), { wrapper });
// act(() => {
// const testMethod = async () => {
// result.current.updateRoom(sampleData);
// await waitFor(() => expect(result.current.isSuccess).toBeTruthy());
// };
// testMethod();
// });
// });
// test('Delete room', async () => {
// const { result } = renderHook(() => useDeleteRoom(), { wrapper });
// act(() => {
// const testMethod = async () => {
// result.current.deleteRoom(sampleData.id);
// await waitFor(() => expect(result.current.isSuccess).toBeTruthy());
// };
// testMethod();
// });
// });
}); });
@@ -1,70 +1,101 @@
// import { useCreateUser } from '@hook/users/useCreateUser'; import { useCreateUser } from '@hook/users/useCreateUser';
// import { useUpdateUser } from '@hook/users/useUpdateUser'; import { useUpdateUser } from '@hook/users/useUpdateUser';
// import { useUsers } from '@hook/users/useUsers'; import { useUsers } from '@hook/users/useUsers';
// import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
// import { renderHook, waitFor } from '@testing-library/react'; import { renderHook, waitFor } from '@testing-library/react';
// import { IUser } from '@type/users'; import { IUser } from '@type/users';
// import { ReactNode } from 'react'; import { ReactNode } from 'react';
// import { MemoryRouter } from 'react-router-dom'; import { MemoryRouter } from 'react-router-dom';
// import { act } from 'react-test-renderer'; import { act } from 'react-test-renderer';
// interface IWrapper { const mockUseUsers = jest.fn(useUsers);
// children: ReactNode; const mockUseCreateUser = jest.fn(useCreateUser);
// } const mockUseUpdateUser = jest.fn(useUpdateUser);
// const sampleData: IUser = { interface IWrapper {
// id: 999, children: ReactNode;
// name: 'User name test', }
// phone: '123456789',
// isBooked: true,
// };
// const queryClient = new QueryClient({
// defaultOptions: {
// queries: {
// retry: false,
// },
// },
// });
// const wrapper = ({ children }: IWrapper) => {
// return (
// <QueryClientProvider client={queryClient}>
// <MemoryRouter>{children}</MemoryRouter>
// </QueryClientProvider>
// );
// };
// describe('CRUD User testing', () => { const sampleData: IUser = {
// test('Fetch user data', async () => { id: 999,
// const { result } = renderHook(() => useUsers(), { wrapper }); name: 'User name test',
phone: '123456789',
isBooked: true,
};
const queryClient = new QueryClient({
defaultOptions: {
queries: {
retry: false,
},
},
});
const wrapper = ({ children }: IWrapper) => {
return (
<QueryClientProvider client={queryClient}>
<MemoryRouter>{children}</MemoryRouter>
</QueryClientProvider>
);
};
// await waitFor(() => describe('CRUD User testing', () => {
// expect(result.current.users?.length).toBeGreaterThan(0) test('Fetch user data', async () => {
// ); mockUseUsers.mockImplementation(() => ({
// }); users: [
{
id: 1,
name: 'Nezumi',
phone: '0123456678',
isBooked: true,
},
{
id: 2,
name: 'Loi Phan',
phone: '0123456678',
isBooked: false,
},
],
isLoading: false,
}))
const { result } = renderHook(() => mockUseUsers(), { wrapper });
// test('Create user', async () => { await waitFor(() =>
// const { result } = renderHook(() => useCreateUser(), { wrapper }); expect(result.current.users?.length).toEqual(2)
);
});
// act(() => { test('Create user', async () => {
// const testMethod = async () => { mockUseCreateUser.mockImplementation(() => ({
// result.current.createUser(sampleData); createUser: () => {sampleData},
// await waitFor(() => expect(result.current.isSuccess).toBeTruthy()); isCreating: false,
// }; isSuccess: true,
}));
const { result } = renderHook(() => mockUseCreateUser(), { wrapper });
// testMethod(); act(() => {
// }); const testMethod = async () => {
// }); result.current.createUser(sampleData);
await waitFor(() => expect(result.current.isSuccess).toBeTruthy());
};
// test('Update user', async () => { testMethod();
// const { result } = renderHook(() => useUpdateUser(), { wrapper }); });
});
// act(() => { test('Update user', async () => {
// const testMethod = async () => { mockUseUpdateUser.mockImplementation(() => ({
// result.current.updateUser(sampleData); updateUser: () => {sampleData},
// await waitFor(() => expect(result.current.isSuccess).toBeTruthy()); isUpdating: false,
// }; isSuccess: true,
}));
const { result } = renderHook(() => mockUseUpdateUser(), { wrapper });
// testMethod(); act(() => {
// }); const testMethod = async () => {
// }); result.current.updateUser(sampleData);
// }); await waitFor(() => expect(result.current.isSuccess).toBeTruthy());
};
testMethod();
});
});
});
@@ -17,6 +17,7 @@ const useDeleteRoom = () => {
const { const {
isPending: isDeleting, isPending: isDeleting,
mutate: deleteRoom, mutate: deleteRoom,
isSuccess
} = useMutation({ } = useMutation({
mutationFn: deleteRoomFn, mutationFn: deleteRoomFn,
onSuccess: () => { onSuccess: () => {
@@ -28,7 +29,7 @@ const useDeleteRoom = () => {
onError: (err) => toast.error(err.message), onError: (err) => toast.error(err.message),
}); });
return { isDeleting, deleteRoom }; return { isDeleting, deleteRoom, isSuccess };
}; };
export { useDeleteRoom }; export { useDeleteRoom };
@@ -18,7 +18,8 @@ const useUpdateRoom = () => {
const { const {
mutate: updateRoom, mutate: updateRoom,
isPending: isUpdating isPending: isUpdating,
isSuccess
} = useMutation({ } = useMutation({
mutationFn: updateRoomFn, mutationFn: updateRoomFn,
onSuccess: (room) => { onSuccess: (room) => {
@@ -26,7 +27,7 @@ const useUpdateRoom = () => {
queryClient.invalidateQueries({ queryKey: ['rooms'] }); queryClient.invalidateQueries({ queryKey: ['rooms'] });
// Update name room in global state // Update name room in global state
dispatch!({ dispatch?.({
type: 'updateRoomName', type: 'updateRoomName',
payload: [{ id: room.id, name: room.name }], payload: [{ id: room.id, name: room.name }],
}); });
@@ -34,7 +35,7 @@ const useUpdateRoom = () => {
onError: (err) => toast.error(err.message), onError: (err) => toast.error(err.message),
}); });
return { isUpdating, updateRoom }; return { isUpdating, updateRoom, isSuccess };
}; };
export { useUpdateRoom }; export { useUpdateRoom };