mirror of
https://github.com/Nezumi-2711/react-training.git
synced 2026-09-22 20:01:59 +00:00
Add test case for user, room hooks
This commit is contained in:
@@ -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 };
|
||||||
|
|||||||
Reference in New Issue
Block a user