diff --git a/mocks/handler.js b/mocks/handler.js index a35551c..4ccda1a 100644 --- a/mocks/handler.js +++ b/mocks/handler.js @@ -1,4 +1,4 @@ -import {GET_PROVINCE_LIST, GET_ROLE_LIST, GET_USER_ROUTE} from "@/core/data/apiRoutes"; +import {CREATE_EXPERT_MANAGEMENT, GET_PROVINCE_LIST, GET_ROLE_LIST, GET_USER_ROUTE} from "@/core/data/apiRoutes"; import {rest} from "msw"; export const handler = [ @@ -38,5 +38,10 @@ export const handler = [ } ] })) - }) + }), + rest.post(CREATE_EXPERT_MANAGEMENT, (req, res, ctx) => { + return res( + ctx.status(200), + ); + }), ] \ No newline at end of file diff --git a/src/components/dashboard/expert-management/Form/CreateForm/CreateContent/__tests__/index.test.js b/src/components/dashboard/expert-management/Form/CreateForm/CreateContent/__tests__/index.test.js index 3c7ca0d..02bc549 100644 --- a/src/components/dashboard/expert-management/Form/CreateForm/CreateContent/__tests__/index.test.js +++ b/src/components/dashboard/expert-management/Form/CreateForm/CreateContent/__tests__/index.test.js @@ -2,7 +2,18 @@ import {fireEvent, render, screen, waitFor} from "@testing-library/react"; import React from 'react'; import CreateContent from "../../CreateContent"; import MockAppWithProviders from "../../../../../../../../mocks/AppWithProvider"; -import CreateForm from "@/components/dashboard/expert-management/Form/CreateForm"; +import userEvent from '@testing-library/user-event'; + +function selectDropdownItem(screen, openerTestId, itemText) { + const opener = screen.getByTestId(openerTestId); + fireEvent.mouseDown(opener); + const selectItem = screen.queryByText(itemText); + fireEvent.click(selectItem); +} + +function setInputValue(screen, inputElement, value) { + fireEvent.change(inputElement, {target: {value}}); +} describe("CreateContent Component From Expert Management", () => { describe("Rendering", () => { @@ -37,27 +48,19 @@ describe("CreateContent Component From Expert Management", () => { const nationalIdInput = screen.queryByLabelText('کد ملی'); const passwordInput = screen.queryByLabelText('رمز عبور'); const positionInput = screen.queryByLabelText('سمت'); - const provinceSelectOpener = screen.getByTestId("option-opener-province"); - const roleSelectOpener = screen.getByTestId("option-opener-role"); - const genderSelectOpener = screen.getByTestId("option-opener-gender"); - fireEvent.mouseDown(provinceSelectOpener); - fireEvent.mouseDown(roleSelectOpener); - fireEvent.mouseDown(genderSelectOpener); - fireEvent.change(nameInput, {target: {value: 'nameTest'}}); - fireEvent.change(usernameInput, {target: {value: 'usernameTest'}}); - fireEvent.change(emailInput, {target: {value: 'emailTest'}}); - fireEvent.change(phoneNumberInput, {target: {value: 'phoneNumberTest'}}); - fireEvent.change(telephoneIdInput, {target: {value: 'telephoneIdTest'}}); - fireEvent.change(nationalIdInput, {target: {value: 'nationalIdTest'}}); - fireEvent.change(passwordInput, {target: {value: 'passwordTest'}}); - fireEvent.change(positionInput, {target: {value: 'positionTest'}}); - const selectItemProvince = screen.queryByText("آذربایجان شرقی"); - fireEvent.click(selectItemProvince); - const selectItemRole = screen.queryByText("ادمین"); - fireEvent.click(selectItemRole); - const selectItemGender = screen.queryByText("مرد"); - fireEvent.click(selectItemGender); + selectDropdownItem(screen, "option-opener-province", "آذربایجان شرقی"); + selectDropdownItem(screen, "option-opener-role", "ادمین"); + selectDropdownItem(screen, "option-opener-gender", "مرد"); + + setInputValue(screen, nameInput, 'nameTest'); + setInputValue(screen, usernameInput, 'usernameTest'); + setInputValue(screen, emailInput, 'emailTest'); + setInputValue(screen, phoneNumberInput, 'phoneNumberTest'); + setInputValue(screen, telephoneIdInput, 'telephoneIdTest'); + setInputValue(screen, nationalIdInput, 'nationalIdTest'); + setInputValue(screen, passwordInput, 'passwordTest'); + setInputValue(screen, positionInput, 'positionTest'); await waitFor(() => { expect(submitButton).not.toBeDisabled(); diff --git a/src/components/dashboard/expert-management/Form/CreateForm/__tests__/index.test.js b/src/components/dashboard/expert-management/Form/CreateForm/__tests__/index.test.js index 1e85160..cab2609 100644 --- a/src/components/dashboard/expert-management/Form/CreateForm/__tests__/index.test.js +++ b/src/components/dashboard/expert-management/Form/CreateForm/__tests__/index.test.js @@ -1,8 +1,19 @@ -import {act, fireEvent, render, screen} from "@testing-library/react"; +import {act, fireEvent, render, screen, waitFor} from "@testing-library/react"; import React from 'react'; import MockAppWithProviders from "../../../../../../../mocks/AppWithProvider"; import CreateForm from "../../CreateForm"; +function selectDropdownItem(screen, openerTestId, itemText) { + const opener = screen.getByTestId(openerTestId); + fireEvent.mouseDown(opener); + const selectItem = screen.queryByText(itemText); + fireEvent.click(selectItem); +} + +function setInputValue(screen, inputElement, value) { + fireEvent.change(inputElement, {target: {value}}); +} + describe("CreateForm Component From Expert Management", () => { describe("Rendering", () => { it("Create Button Rendered", () => { @@ -27,4 +38,103 @@ describe("CreateForm Component From Expert Management", () => { }); }); }); + describe("Form Submission", () => { + it('Should request to api and if get success close dialog', async () => { + render(); + + const CreateButton = screen.getByRole('button', {name: "افزودن کارشناس"}); + fireEvent.click(CreateButton); + + const submitButton = screen.queryByText('ثبت'); + + const nameInput = screen.queryByLabelText('نام کامل'); + const usernameInput = screen.queryByLabelText('نام کاربری'); + const emailInput = screen.queryByLabelText('پست الکترونیک'); + const phoneNumberInput = screen.queryByLabelText('شماره همراه'); + const telephoneIdInput = screen.queryByLabelText('کد تلفن'); + const nationalIdInput = screen.queryByLabelText('کد ملی'); + const passwordInput = screen.queryByLabelText('رمز عبور'); + const positionInput = screen.queryByLabelText('سمت'); + + selectDropdownItem(screen, "option-opener-province", "آذربایجان شرقی"); + selectDropdownItem(screen, "option-opener-role", "ادمین"); + selectDropdownItem(screen, "option-opener-gender", "مرد"); + + setInputValue(screen, nameInput, 'nameTest'); + setInputValue(screen, usernameInput, 'usernameTest'); + setInputValue(screen, emailInput, 'emailTest@gmail.com'); + setInputValue(screen, phoneNumberInput, '0914577458'); + setInputValue(screen, telephoneIdInput, '091'); + setInputValue(screen, nationalIdInput, 'nationalIdTest'); + setInputValue(screen, passwordInput, 'passwordTest12'); + setInputValue(screen, positionInput, 'positionTest'); + + expect(submitButton).not.toBeDisabled(); + await fireEvent.click(submitButton); + + await waitFor(() => { + const dialogContent = screen.getByTestId('create-dialog-content'); + expect(dialogContent).not.toBeInTheDocument(); + }); + }); + it('Should request to api and if get error keep previous data', async () => { + render(); + + const CreateButton = screen.getByRole('button', {name: "افزودن کارشناس"}); + fireEvent.click(CreateButton); + + const submitButton = screen.queryByText('ثبت'); + + const nameInput = screen.queryByLabelText('نام کامل'); + const usernameInput = screen.queryByLabelText('نام کاربری'); + const emailInput = screen.queryByLabelText('پست الکترونیک'); + const phoneNumberInput = screen.queryByLabelText('شماره همراه'); + const telephoneIdInput = screen.queryByLabelText('کد تلفن'); + const nationalIdInput = screen.queryByLabelText('کد ملی'); + const passwordInput = screen.queryByLabelText('رمز عبور'); + const positionInput = screen.queryByLabelText('سمت'); + const provinceSelectOpener = screen.getByTestId("option-opener-province"); + const provinceInput = screen.getByTestId("input-province-id") + const roleSelectOpener = screen.getByTestId("option-opener-role"); + const roleInput = screen.getByTestId("input-role-id") + const genderSelectOpener = screen.getByTestId("option-opener-gender"); + const genderInput = screen.getByTestId("input-gender") + fireEvent.mouseDown(provinceSelectOpener); + fireEvent.mouseDown(roleSelectOpener); + fireEvent.mouseDown(genderSelectOpener); + + fireEvent.change(nameInput, {target: {value: 'nameTest'}}); + fireEvent.change(usernameInput, {target: {value: 'usernameTest'}}); + fireEvent.change(emailInput, {target: {value: 'emailTest'}}); + fireEvent.change(phoneNumberInput, {target: {value: 'phoneNumberTest'}}); + fireEvent.change(telephoneIdInput, {target: {value: 'telephoneIdTest'}}); + fireEvent.change(nationalIdInput, {target: {value: 'nationalIdTest'}}); + fireEvent.change(passwordInput, {target: {value: 'passwordTest'}}); + fireEvent.change(positionInput, {target: {value: 'positionTest'}}); + const selectItemProvince = screen.queryByText("آذربایجان شرقی"); + fireEvent.click(selectItemProvince); + const selectItemRole = screen.queryByText("ادمین"); + fireEvent.click(selectItemRole); + const selectItemGender = screen.queryByText("مرد"); + fireEvent.click(selectItemGender); + + expect(submitButton).not.toBeDisabled(); + await fireEvent.click(submitButton); + + await waitFor(() => { + expect(nameInput).toHaveValue('nameTest'); + expect(usernameInput).toHaveValue('usernameTest'); + expect(emailInput).toHaveValue('emailTest'); + expect(phoneNumberInput).toHaveValue('phoneNumberTest'); + expect(telephoneIdInput).toHaveValue('telephoneIdTest'); + expect(nationalIdInput).toHaveValue('nationalIdTest'); + expect(passwordInput).toHaveValue('passwordTest'); + expect(positionInput).toHaveValue('positionTest'); + expect(provinceInput).toHaveValue('1'); + expect(roleInput).toHaveValue('1'); + expect(genderInput).toHaveValue('male'); + + }); + }); + }) }); \ No newline at end of file diff --git a/src/components/dashboard/expert-management/Form/CreateForm/index.jsx b/src/components/dashboard/expert-management/Form/CreateForm/index.jsx index 4b732aa..e50bc7e 100644 --- a/src/components/dashboard/expert-management/Form/CreateForm/index.jsx +++ b/src/components/dashboard/expert-management/Form/CreateForm/index.jsx @@ -26,7 +26,7 @@ const Create = ({mutate, fetchUrl}) => { - {t("ExpertMangement.create")}