diff --git a/hotel-management/.gitignore b/hotel-management/.gitignore index ba9bc79..36e326e 100644 --- a/hotel-management/.gitignore +++ b/hotel-management/.gitignore @@ -13,6 +13,7 @@ dist-ssr coverage *.local .vscode +coverage .jest # Editor directories and files diff --git a/hotel-management/src/App.tsx b/hotel-management/src/App.tsx index cb03a8b..96ae698 100644 --- a/hotel-management/src/App.tsx +++ b/hotel-management/src/App.tsx @@ -18,7 +18,9 @@ import { initialState, reducer, } from '@context/UserRoomAvailableContext'; -import { useEffect, useReducer } from 'react'; +import { useEffect, useMemo, useReducer } from 'react'; + +// Services import { getUserNotBooked } from '@service/userServices'; import { getRoomsAvailable } from '@service/roomServices'; @@ -55,16 +57,21 @@ function App() { load(); }, []); + const store = useMemo(() => { + return { roomsAvailable, usersAvailable, dispatch }; + }, [roomsAvailable, usersAvailable]); + return ( - + }> - } /> + } + /> } /> } /> } /> diff --git a/hotel-management/src/commons/styles/Button.ts b/hotel-management/src/commons/styles/Button.ts index 7305ea0..2324d3a 100644 --- a/hotel-management/src/commons/styles/Button.ts +++ b/hotel-management/src/commons/styles/Button.ts @@ -16,10 +16,10 @@ const variations: IVariations = { background-color: var(--danger-btn-color); color: var(--light-text); `, -}; +} as const; interface IButtonStyle { - variations?: keyof IVariations; + variations?: keyof typeof variations; } const Button = styled.button` diff --git a/hotel-management/src/components/AppLayout/AppLayout.test.tsx b/hotel-management/src/components/AppLayout/AppLayout.test.tsx index ec05bc0..471cd48 100644 --- a/hotel-management/src/components/AppLayout/AppLayout.test.tsx +++ b/hotel-management/src/components/AppLayout/AppLayout.test.tsx @@ -4,14 +4,14 @@ import { BrowserRouter } from 'react-router-dom'; // Components import AppLayout from '.'; -describe('AppLayout testing snapshot', () => { +describe('AppLayout', () => { const wrapper = renderer.create( ); - test('render', () => { + test('Should render correctly', () => { expect(wrapper).toMatchSnapshot(); }); }); diff --git a/hotel-management/src/components/AppLayout/__snapshots__/AppLayout.test.tsx.snap b/hotel-management/src/components/AppLayout/__snapshots__/AppLayout.test.tsx.snap index abfd039..6d48dfc 100644 --- a/hotel-management/src/components/AppLayout/__snapshots__/AppLayout.test.tsx.snap +++ b/hotel-management/src/components/AppLayout/__snapshots__/AppLayout.test.tsx.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`AppLayout testing snapshot render 1`] = ` +exports[`AppLayout Should render correctly 1`] = `
diff --git a/hotel-management/src/components/ButtonIcon/ButtonIcon.test.tsx b/hotel-management/src/components/ButtonIcon/ButtonIcon.test.tsx index 7bbc7e5..d656e68 100644 --- a/hotel-management/src/components/ButtonIcon/ButtonIcon.test.tsx +++ b/hotel-management/src/components/ButtonIcon/ButtonIcon.test.tsx @@ -1,17 +1,19 @@ -import renderer from 'react-test-renderer' +import renderer from 'react-test-renderer'; // Components -import ButtonIcon from '.' -import { HiOutlineLogout } from 'react-icons/hi' +import ButtonIcon from '.'; +import { HiOutlineLogout } from 'react-icons/hi'; -describe('ButtonIcon testing snapshot', () => { - const wrapper = renderer.create(} - iconStyle={{ size: '23px' }} - />) +describe('ButtonIcon', () => { + const wrapper = renderer.create( + } + iconStyle={{ size: '23px' }} + /> + ); - test('render', () => { - expect(wrapper).toMatchSnapshot() - }) -}) + test('Should render correctly', () => { + expect(wrapper).toMatchSnapshot(); + }); +}); diff --git a/hotel-management/src/components/ButtonIcon/__snapshots__/ButtonIcon.test.tsx.snap b/hotel-management/src/components/ButtonIcon/__snapshots__/ButtonIcon.test.tsx.snap index 804f5bd..c125584 100644 --- a/hotel-management/src/components/ButtonIcon/__snapshots__/ButtonIcon.test.tsx.snap +++ b/hotel-management/src/components/ButtonIcon/__snapshots__/ButtonIcon.test.tsx.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`ButtonIcon testing snapshot render 1`] = ` +exports[`ButtonIcon Should render correctly 1`] = `
+
+ +
+ +
+
+
+ + +
+ +`; diff --git a/hotel-management/src/pages/Room/__tests__/__snapshots__/RoomRow.test.tsx.snap b/hotel-management/src/pages/Room/__tests__/__snapshots__/RoomRow.test.tsx.snap new file mode 100644 index 0000000..228a2f7 --- /dev/null +++ b/hotel-management/src/pages/Room/__tests__/__snapshots__/RoomRow.test.tsx.snap @@ -0,0 +1,53 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`RoomRow Should render correctly 1`] = ` +
+
+ 1 +
+
+ Temp Room +
+
+ $250.00 +
+
+ Unavailable +
+
+
+ +
+
+
+`; diff --git a/hotel-management/src/pages/Room/__tests__/__snapshots__/RoomTable.test.tsx.snap b/hotel-management/src/pages/Room/__tests__/__snapshots__/RoomTable.test.tsx.snap new file mode 100644 index 0000000..86243e4 --- /dev/null +++ b/hotel-management/src/pages/Room/__tests__/__snapshots__/RoomTable.test.tsx.snap @@ -0,0 +1,63 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`RoomTable Should render correctly 1`] = ` +
+
+
+ + +
+ + +
+
+
+`; diff --git a/hotel-management/src/pages/Room/__tests__/__snapshots__/index.test.tsx.snap b/hotel-management/src/pages/Room/__tests__/__snapshots__/index.test.tsx.snap new file mode 100644 index 0000000..6fb4c8d --- /dev/null +++ b/hotel-management/src/pages/Room/__tests__/__snapshots__/index.test.tsx.snap @@ -0,0 +1,84 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Room Should render correctly 1`] = ` +
+
+

+ List Room +

+ +
+
+
+
+ + +
+ + +
+
+
+
+`; diff --git a/hotel-management/src/pages/Room/__tests__/index.test.tsx b/hotel-management/src/pages/Room/__tests__/index.test.tsx new file mode 100644 index 0000000..64fba84 --- /dev/null +++ b/hotel-management/src/pages/Room/__tests__/index.test.tsx @@ -0,0 +1,22 @@ +import Room from '..'; +import { BrowserRouter } from 'react-router-dom'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; + +// Components +import renderer from 'react-test-renderer'; + +describe('Room', () => { + const queryClient = new QueryClient(); + + const wrapper = renderer.create( + + + + + + ); + + test('Should render correctly', () => { + expect(wrapper).toMatchSnapshot(); + }); +}); diff --git a/hotel-management/src/pages/Room/index.tsx b/hotel-management/src/pages/Room/index.tsx index 3704ca8..d2cbde3 100644 --- a/hotel-management/src/pages/Room/index.tsx +++ b/hotel-management/src/pages/Room/index.tsx @@ -1,5 +1,5 @@ // Components -import RoomTable from './RomTable'; +import RoomTable from './RoomTable'; import RoomForm from './RoomForm'; import Modal from '@component/Modal'; diff --git a/hotel-management/src/pages/User/__tests__/UserForm.test.tsx b/hotel-management/src/pages/User/__tests__/UserForm.test.tsx new file mode 100644 index 0000000..0313107 --- /dev/null +++ b/hotel-management/src/pages/User/__tests__/UserForm.test.tsx @@ -0,0 +1,22 @@ +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { BrowserRouter } from 'react-router-dom'; +import renderer from 'react-test-renderer'; + +// Components +import UserForm from '../UserForm'; + +describe('UserForm', () => { + const queryClient = new QueryClient(); + + const wrapper = renderer.create( + + + + + + ); + + test('Should render correctly', () => { + expect(wrapper).toMatchSnapshot(); + }); +}); diff --git a/hotel-management/src/pages/User/__tests__/UserRow.test.tsx b/hotel-management/src/pages/User/__tests__/UserRow.test.tsx new file mode 100644 index 0000000..21dce06 --- /dev/null +++ b/hotel-management/src/pages/User/__tests__/UserRow.test.tsx @@ -0,0 +1,27 @@ +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import renderer from 'react-test-renderer'; + +// Types +import { IUser } from '@type/users'; + +// Components +import UserRow from '../UserRow'; + +describe('UserRow', () => { + const tempUser: IUser = { + id: 1, + name: 'Temp Room', + phone: '0324421232', + isBooked: false, + }; + const queryClient = new QueryClient(); + const wrapper = renderer.create( + + + + ); + + test('Should render correctly', () => { + expect(wrapper).toMatchSnapshot(); + }); +}); diff --git a/hotel-management/src/pages/User/__tests__/UserTable.test.tsx b/hotel-management/src/pages/User/__tests__/UserTable.test.tsx new file mode 100644 index 0000000..242f648 --- /dev/null +++ b/hotel-management/src/pages/User/__tests__/UserTable.test.tsx @@ -0,0 +1,22 @@ +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { BrowserRouter } from 'react-router-dom'; +import renderer from 'react-test-renderer'; + +// Components +import RoomTable from '@page/Room/RoomTable'; + +describe('UserTable', () => { + const queryClient = new QueryClient(); + + const wrapper = renderer.create( + + + + + + ); + + test('Should render correctly', () => { + expect(wrapper).toMatchSnapshot(); + }); +}); diff --git a/hotel-management/src/pages/User/__tests__/__snapshots__/UserForm.test.tsx.snap b/hotel-management/src/pages/User/__tests__/__snapshots__/UserForm.test.tsx.snap new file mode 100644 index 0000000..edcd103 --- /dev/null +++ b/hotel-management/src/pages/User/__tests__/__snapshots__/UserForm.test.tsx.snap @@ -0,0 +1,67 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`UserForm Should render correctly 1`] = ` +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ + +
+
+`; diff --git a/hotel-management/src/pages/User/__tests__/__snapshots__/UserRow.test.tsx.snap b/hotel-management/src/pages/User/__tests__/__snapshots__/UserRow.test.tsx.snap new file mode 100644 index 0000000..c6b759a --- /dev/null +++ b/hotel-management/src/pages/User/__tests__/__snapshots__/UserRow.test.tsx.snap @@ -0,0 +1,53 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`UserRow Should render correctly 1`] = ` +
+
+ 1 +
+
+ Temp Room +
+
+ 0324421232 +
+
+ No +
+
+
+ +
+
+
+`; diff --git a/hotel-management/src/pages/User/__tests__/__snapshots__/UserTable.test.tsx.snap b/hotel-management/src/pages/User/__tests__/__snapshots__/UserTable.test.tsx.snap new file mode 100644 index 0000000..faf6c5b --- /dev/null +++ b/hotel-management/src/pages/User/__tests__/__snapshots__/UserTable.test.tsx.snap @@ -0,0 +1,63 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`UserTable Should render correctly 1`] = ` +
+
+
+ + +
+ + +
+
+
+`; diff --git a/hotel-management/src/pages/User/__tests__/__snapshots__/index.test.tsx.snap b/hotel-management/src/pages/User/__tests__/__snapshots__/index.test.tsx.snap new file mode 100644 index 0000000..1f7ea38 --- /dev/null +++ b/hotel-management/src/pages/User/__tests__/__snapshots__/index.test.tsx.snap @@ -0,0 +1,84 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`User Should render correctly 1`] = ` +
+
+

+ List User +

+ +
+
+
+
+ + +
+ + +
+
+
+
+`; diff --git a/hotel-management/src/pages/User/__tests__/index.test.tsx b/hotel-management/src/pages/User/__tests__/index.test.tsx new file mode 100644 index 0000000..f8461f9 --- /dev/null +++ b/hotel-management/src/pages/User/__tests__/index.test.tsx @@ -0,0 +1,22 @@ +import renderer from 'react-test-renderer'; +import { BrowserRouter } from 'react-router-dom'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; + +// Components +import User from '..'; + +describe('User', () => { + const queryClient = new QueryClient(); + + const wrapper = renderer.create( + + + + + + ); + + test('Should render correctly', () => { + expect(wrapper).toMatchSnapshot(); + }); +}); diff --git a/hotel-management/src/services/roomServices.ts b/hotel-management/src/services/roomServices.ts index fa96d94..ed0a843 100644 --- a/hotel-management/src/services/roomServices.ts +++ b/hotel-management/src/services/roomServices.ts @@ -1,9 +1,9 @@ // Types import { IRoom } from '@type/rooms'; +import { IDataState } from '@type/common'; // Services import supabase from './supabaseService'; -import { IDataState } from '@type/common'; // Constants const ROOMS_TABLE = 'rooms'; @@ -25,7 +25,7 @@ const getAllRooms = async ( .from(ROOMS_TABLE) .select('*') .order(sortBy, { ascending: orderBy === 'asc' }) - .like('name', `%${roomName}%`); + .ilike('name', `%${roomName}%`); if (error) { console.error(error.message); diff --git a/hotel-management/src/services/supabaseService.ts b/hotel-management/src/services/supabaseService.ts index bfdcbea..27b485a 100644 --- a/hotel-management/src/services/supabaseService.ts +++ b/hotel-management/src/services/supabaseService.ts @@ -1,8 +1,10 @@ -import { createClient } from "@supabase/supabase-js"; -import { Database } from "@type/supabase"; +import { createClient } from '@supabase/supabase-js'; + +// Types +import { Database } from '@type/supabase'; // Constants -import { supabaseKey, supabaseUrl } from "@constant/config"; +import { supabaseKey, supabaseUrl } from '@constant/config'; const supabase = createClient(supabaseUrl, supabaseKey!); diff --git a/hotel-management/src/services/userServices.ts b/hotel-management/src/services/userServices.ts index 6578517..62d2fc9 100644 --- a/hotel-management/src/services/userServices.ts +++ b/hotel-management/src/services/userServices.ts @@ -1,9 +1,9 @@ // Types import { IUser } from '@type/users'; +import { IDataState } from '@type/common'; // Services import supabase from './supabaseService'; -import { IDataState } from '@type/common'; const USERS_TABLE = 'users'; const ERROR_FETCHING = "Users can't be loaded!"; @@ -65,7 +65,7 @@ const getAllUsers = async ( .from(USERS_TABLE) .select('*') .order(sortBy, { ascending: orderBy === 'asc' }) - .like('phone', `%${phoneSearch}%`); + .ilike('phone', `%${phoneSearch}%`); if (error) { console.error(error.message);