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}) => {
-