diff --git a/hotel-management/.gitignore b/hotel-management/.gitignore index 43c1272..5bfd2a0 100644 --- a/hotel-management/.gitignore +++ b/hotel-management/.gitignore @@ -12,6 +12,7 @@ dist dist-ssr *.local .vscode +coverage src/db.json diff --git a/hotel-management/jest.config.ts b/hotel-management/jest.config.ts index 4635c4d..1b0d7a0 100644 --- a/hotel-management/jest.config.ts +++ b/hotel-management/jest.config.ts @@ -1,11 +1,20 @@ export default { - testEnvironment: "jsdom", + testEnvironment: 'jsdom', transform: { - "^.+\\.tsx?$": "ts-jest", + '^.+\\.tsx?$': 'ts-jest', }, moduleNameMapper: { - "\\.(gif|ttf|eot|svg|png)$": "/test/__mocks__/fileMock.ts", - "\\.(css|less|sass|scss)$": "identity-obj-proxy", + '\\.(gif|ttf|eot|svg|png)$': '/test/__mocks__/fileMock.ts', + '\\.(css|less|sass|scss)$': 'identity-obj-proxy', + '@service/(.*)': ['/src/services/$1'], + '@constant/(.*)': ['/src/constants/$1'], + '@hook/(.*)': ['/src/hooks/$1'], + '@helper/(.*)': ['/src/helpers/$1'], + '@context/(.*)': ['/src/contexts/$1'], + '@component/(.*)': ['/src/components/$1'], + '@commonStyle/(.*)': ['/src/commons/styles/$1'], + '@type/(.*)': ['/src/types/$1'], + '@page/(.*)': ['/src/pages/$1'], }, setupFilesAfterEnv: ['/jest.setup.ts'], }; diff --git a/hotel-management/package.json b/hotel-management/package.json index 119663e..7fd900c 100644 --- a/hotel-management/package.json +++ b/hotel-management/package.json @@ -10,16 +10,21 @@ "preview": "vite preview", "test": "jest" }, + "coverageReporters": [ + "html" + ], "dependencies": { "@emotion/is-prop-valid": "^1.2.1", "@supabase/supabase-js": "^2.38.4", "@tanstack/react-query": "^5.8.4", + "@types/react-test-renderer": "^18.0.6", "react": "^18.2.0", "react-dom": "^18.2.0", "react-hook-form": "^7.47.0", "react-hot-toast": "^2.4.1", "react-icons": "^4.11.0", "react-router-dom": "^6.17.0", + "react-test-renderer": "^18.2.0", "styled-components": "^6.1.0" }, "devDependencies": { diff --git a/hotel-management/pnpm-lock.yaml b/hotel-management/pnpm-lock.yaml index 3e27e43..68ff571 100644 --- a/hotel-management/pnpm-lock.yaml +++ b/hotel-management/pnpm-lock.yaml @@ -14,6 +14,9 @@ dependencies: '@tanstack/react-query': specifier: ^5.8.4 version: 5.8.4(react-dom@18.2.0)(react@18.2.0) + '@types/react-test-renderer': + specifier: ^18.0.6 + version: 18.0.6 react: specifier: ^18.2.0 version: 18.2.0 @@ -32,6 +35,9 @@ dependencies: react-router-dom: specifier: ^6.17.0 version: 6.17.0(react-dom@18.2.0)(react@18.2.0) + react-test-renderer: + specifier: ^18.2.0 + version: 18.2.0(react@18.2.0) styled-components: specifier: ^6.1.0 version: 6.1.0(react-dom@18.2.0)(react@18.2.0) @@ -1313,7 +1319,6 @@ packages: /@types/prop-types@15.7.9: resolution: {integrity: sha512-n1yyPsugYNSmHgxDFjicaI2+gCNjsBck8UX9kuofAKlc0h1bL+20oSF72KeNaW2DUlesbEVCFgyV2dPGTiY42g==} - dev: true /@types/react-dom@18.2.14: resolution: {integrity: sha512-V835xgdSVmyQmI1KLV2BEIUgqEuinxp9O4G6g3FqO/SqLac049E53aysv0oEFD2kHfejeKU+ZqL2bcFWj9gLAQ==} @@ -1321,17 +1326,21 @@ packages: '@types/react': 18.2.29 dev: true + /@types/react-test-renderer@18.0.6: + resolution: {integrity: sha512-O2JT1J3/v/NaYHYmPf2DXBSqUGmp6iwhFPicES6Pc1Y90B9Qgu99mmaBGqfZFpVuXLzF/pNJB4K9ySL3iqFeXA==} + dependencies: + '@types/react': 18.2.29 + dev: false + /@types/react@18.2.29: resolution: {integrity: sha512-Z+ZrIRocWtdD70j45izShRwDuiB4JZqDegqMFW/I8aG5DxxLKOzVNoq62UIO82v9bdgi+DO1jvsb9sTEZUSm+Q==} dependencies: '@types/prop-types': 15.7.9 '@types/scheduler': 0.16.5 csstype: 3.1.2 - dev: true /@types/scheduler@0.16.5: resolution: {integrity: sha512-s/FPdYRmZR8SjLWGMCuax7r3qCWQw9QKHzXVukAuuIJkXkDRwp+Pu5LMIVFi0Fxbav35WURicYr8u1QsoybnQw==} - dev: true /@types/semver@7.5.3: resolution: {integrity: sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==} @@ -3706,6 +3715,11 @@ packages: resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} dev: true + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: false + /object-inspect@1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} dev: true @@ -3968,7 +3982,6 @@ packages: /react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - dev: true /react-refresh@0.14.0: resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} @@ -3998,6 +4011,27 @@ packages: react: 18.2.0 dev: false + /react-shallow-renderer@16.15.0(react@18.2.0): + resolution: {integrity: sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==} + peerDependencies: + react: ^16.0.0 || ^17.0.0 || ^18.0.0 + dependencies: + object-assign: 4.1.1 + react: 18.2.0 + react-is: 18.2.0 + dev: false + + /react-test-renderer@18.2.0(react@18.2.0): + resolution: {integrity: sha512-JWD+aQ0lh2gvh4NM3bBM42Kx+XybOxCpgYK7F8ugAlpaTSnWsX+39Z4XkOykGZAHrjwwTZT3x3KxswVWxHPUqA==} + peerDependencies: + react: ^18.2.0 + dependencies: + react: 18.2.0 + react-is: 18.2.0 + react-shallow-renderer: 16.15.0(react@18.2.0) + scheduler: 0.23.0 + dev: false + /react@18.2.0: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} diff --git a/hotel-management/src/components/AppLayout/AppLayout.test.tsx b/hotel-management/src/components/AppLayout/AppLayout.test.tsx new file mode 100644 index 0000000..471cd48 --- /dev/null +++ b/hotel-management/src/components/AppLayout/AppLayout.test.tsx @@ -0,0 +1,17 @@ +import renderer from 'react-test-renderer'; +import { BrowserRouter } from 'react-router-dom'; + +// Components +import AppLayout from '.'; + +describe('AppLayout', () => { + const wrapper = renderer.create( + + + + ); + + 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 new file mode 100644 index 0000000..6d48dfc --- /dev/null +++ b/hotel-management/src/components/AppLayout/__snapshots__/AppLayout.test.tsx.snap @@ -0,0 +1,207 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`AppLayout Should render correctly 1`] = ` +
+
+

+ Hi, + Admin + ! +

+
    +
  • + +
  • +
  • + +
  • +
+
+ +
+
+`; diff --git a/hotel-management/src/components/ButtonIcon/ButtonIcon.test.tsx b/hotel-management/src/components/ButtonIcon/ButtonIcon.test.tsx new file mode 100644 index 0000000..d656e68 --- /dev/null +++ b/hotel-management/src/components/ButtonIcon/ButtonIcon.test.tsx @@ -0,0 +1,19 @@ +import renderer from 'react-test-renderer'; + +// Components +import ButtonIcon from '.'; +import { HiOutlineLogout } from 'react-icons/hi'; + +describe('ButtonIcon', () => { + const wrapper = renderer.create( + } + iconStyle={{ size: '23px' }} + /> + ); + + 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 new file mode 100644 index 0000000..c125584 --- /dev/null +++ b/hotel-management/src/components/ButtonIcon/__snapshots__/ButtonIcon.test.tsx.snap @@ -0,0 +1,44 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`ButtonIcon Should render correctly 1`] = ` + +`; diff --git a/hotel-management/src/components/ConfirmMessage/ConfirmMessage.test.tsx b/hotel-management/src/components/ConfirmMessage/ConfirmMessage.test.tsx new file mode 100644 index 0000000..233ce05 --- /dev/null +++ b/hotel-management/src/components/ConfirmMessage/ConfirmMessage.test.tsx @@ -0,0 +1,22 @@ +import renderer from 'react-test-renderer'; + +// Components +import ConfirmMessage from '.'; + +describe('ConfirmMessage', () => { + const isDisable = true; + const message = 'Hello World!'; + const handleOnConfirm = jest.fn(); + + const wrapper = renderer.create( + + ); + + test('Should render correctly', () => { + expect(wrapper).toMatchSnapshot(); + }); +}); diff --git a/hotel-management/src/components/ConfirmMessage/__snapshots__/ConfirmMessage.test.tsx.snap b/hotel-management/src/components/ConfirmMessage/__snapshots__/ConfirmMessage.test.tsx.snap new file mode 100644 index 0000000..ca6a17b --- /dev/null +++ b/hotel-management/src/components/ConfirmMessage/__snapshots__/ConfirmMessage.test.tsx.snap @@ -0,0 +1,28 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`ConfirmMessage Should render correctly 1`] = ` +
+

+ Hello World! +

+
+ + +
+
+`; diff --git a/hotel-management/src/components/Form/Form.test.tsx b/hotel-management/src/components/Form/Form.test.tsx new file mode 100644 index 0000000..795c518 --- /dev/null +++ b/hotel-management/src/components/Form/Form.test.tsx @@ -0,0 +1,40 @@ +import renderer from 'react-test-renderer'; + +// Components +import Form from '.'; +import Input from '@commonStyle/Input'; + +// Styled +import { FormBtn } from '@page/User/styled'; + +describe('Form ', () => { + const isDisable = true; + const errorMessage = 'This is error message'; + const handleOnSubmit = jest.fn(); + const handleOnClick = jest.fn(); + + const wrapper = renderer.create( +
+ + + + + + + + + + + Confirm + + + Close + + +
+ ); + + test('Should render correctly', () => { + expect(wrapper).toMatchSnapshot(); + }); +}); diff --git a/hotel-management/src/components/Form/__snapshots__/Form.test.tsx.snap b/hotel-management/src/components/Form/__snapshots__/Form.test.tsx.snap new file mode 100644 index 0000000..a4ab15f --- /dev/null +++ b/hotel-management/src/components/Form/__snapshots__/Form.test.tsx.snap @@ -0,0 +1,72 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Form Should render correctly 1`] = ` +
+
+ +
+ +

+ This is error message +

+
+
+
+ +
+ +

+ This is error message +

+
+
+
+ + +
+
+`; diff --git a/hotel-management/src/components/Header/Header.test.tsx b/hotel-management/src/components/Header/Header.test.tsx new file mode 100644 index 0000000..cd6974f --- /dev/null +++ b/hotel-management/src/components/Header/Header.test.tsx @@ -0,0 +1,12 @@ +import renderer from 'react-test-renderer'; + +// Components +import Header from '.'; + +describe('Header', () => { + const wrapper = renderer.create(
); + + test('Should render correctly', () => { + expect(wrapper).toMatchSnapshot(); + }); +}); diff --git a/hotel-management/src/components/Header/__snapshots__/Header.test.tsx.snap b/hotel-management/src/components/Header/__snapshots__/Header.test.tsx.snap new file mode 100644 index 0000000..35815b1 --- /dev/null +++ b/hotel-management/src/components/Header/__snapshots__/Header.test.tsx.snap @@ -0,0 +1,101 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Header Should render correctly 1`] = ` +
+

+ Hi, + Nezumi + ! +

+
    +
  • + +
  • +
  • + +
  • +
+
+`; diff --git a/hotel-management/src/components/HeaderMenu/HeaderMenu.test.tsx b/hotel-management/src/components/HeaderMenu/HeaderMenu.test.tsx new file mode 100644 index 0000000..78b97f0 --- /dev/null +++ b/hotel-management/src/components/HeaderMenu/HeaderMenu.test.tsx @@ -0,0 +1,12 @@ +import renderer from 'react-test-renderer'; + +// Components +import HeaderMenu from '.'; + +describe('HeaderMenu', () => { + const wrapper = renderer.create(); + + test('Should render correctly', () => { + expect(wrapper).toMatchSnapshot(); + }); +}); diff --git a/hotel-management/src/components/HeaderMenu/__snapshots__/HeaderMenu.test.tsx.snap b/hotel-management/src/components/HeaderMenu/__snapshots__/HeaderMenu.test.tsx.snap new file mode 100644 index 0000000..09cc4aa --- /dev/null +++ b/hotel-management/src/components/HeaderMenu/__snapshots__/HeaderMenu.test.tsx.snap @@ -0,0 +1,92 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`HeaderMenu Should render correctly 1`] = ` +
    +
  • + +
  • +
  • + +
  • +
+`; diff --git a/hotel-management/src/components/Menus/Menus.test.tsx b/hotel-management/src/components/Menus/Menus.test.tsx new file mode 100644 index 0000000..5e4039d --- /dev/null +++ b/hotel-management/src/components/Menus/Menus.test.tsx @@ -0,0 +1,31 @@ +import renderer from 'react-test-renderer'; + +// Components +import Menus from '.'; +import { RiEditBoxFill, RiDeleteBin2Line } from 'react-icons/ri'; + +describe('Menus', () => { + const id = '123'; + const handleOnClick = jest.fn(); + + const wrapper = renderer.create( + + + + + + }> + Edit + + }> + Delete + + + + + ); + + test('Should render correctly', () => { + expect(wrapper).toMatchSnapshot(); + }); +}); diff --git a/hotel-management/src/components/Menus/__snapshots__/Menus.test.tsx.snap b/hotel-management/src/components/Menus/__snapshots__/Menus.test.tsx.snap new file mode 100644 index 0000000..e6606ee --- /dev/null +++ b/hotel-management/src/components/Menus/__snapshots__/Menus.test.tsx.snap @@ -0,0 +1,35 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Menus Should render correctly 1`] = ` +
+ +
+`; diff --git a/hotel-management/src/components/Message/Message.test.tsx b/hotel-management/src/components/Message/Message.test.tsx new file mode 100644 index 0000000..0aa2d76 --- /dev/null +++ b/hotel-management/src/components/Message/Message.test.tsx @@ -0,0 +1,12 @@ +import renderer from 'react-test-renderer'; + +// Components +import Message from '.'; + +describe('Message', () => { + const wrapper = renderer.create(This is a message!); + + test('Should render correctly', () => { + expect(wrapper).toMatchSnapshot(); + }); +}); diff --git a/hotel-management/src/components/Message/__snapshots__/Message.test.tsx.snap b/hotel-management/src/components/Message/__snapshots__/Message.test.tsx.snap new file mode 100644 index 0000000..b817e31 --- /dev/null +++ b/hotel-management/src/components/Message/__snapshots__/Message.test.tsx.snap @@ -0,0 +1,9 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Message Should render correctly 1`] = ` +

+ This is a message! +

+`; diff --git a/hotel-management/src/components/Modal/Modal.test.tsx b/hotel-management/src/components/Modal/Modal.test.tsx new file mode 100644 index 0000000..7e17f35 --- /dev/null +++ b/hotel-management/src/components/Modal/Modal.test.tsx @@ -0,0 +1,25 @@ +import renderer from 'react-test-renderer'; + +// Components +import Modal from '.'; +import Button from '@commonStyle/Button'; + +describe('Modal', () => { + const wrapper = renderer.create( + + ( + + )} + /> + +

This is a windows

+
+
+ ); + + test('Should render correctly', () => { + expect(wrapper).toMatchSnapshot(); + }); +}); diff --git a/hotel-management/src/components/Modal/__snapshots__/Modal.test.tsx.snap b/hotel-management/src/components/Modal/__snapshots__/Modal.test.tsx.snap new file mode 100644 index 0000000..ca5c47b --- /dev/null +++ b/hotel-management/src/components/Modal/__snapshots__/Modal.test.tsx.snap @@ -0,0 +1,11 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Modal Should render correctly 1`] = ` + +`; diff --git a/hotel-management/src/components/Nav/Nav.test.tsx b/hotel-management/src/components/Nav/Nav.test.tsx new file mode 100644 index 0000000..6436c79 --- /dev/null +++ b/hotel-management/src/components/Nav/Nav.test.tsx @@ -0,0 +1,17 @@ +import renderer from 'react-test-renderer'; +import { BrowserRouter } from 'react-router-dom'; + +// Components +import Nav from '.'; + +describe('Nav', () => { + const wrapper = renderer.create( + +