| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- import { render, fireEvent, screen, waitFor } from "@testing-library/react";
- import * as redux from "react-redux";
- import store from "../../store";
- import { mockState } from "../../mockState";
- import { Router } from "react-router-dom";
- import history from "../../store/utils/history";
- import CandidateDetailsPage from "../../pages/CandidatesPage/CandidateDetailsPage";
- import mediaQuery from "css-mediaquery";
-
- function createMatchMedia(width) {
- return (query) => ({
- matches: mediaQuery.match(query, { width }),
- addListener: () => {},
- removeListener: () => {},
- });
- }
-
- describe("CandidateDetailsPage render tests", () => {
- var props = {
- history: {
- replace: jest.fn(),
- push: jest.fn(),
- location: {
- pathname: "/candidates/1",
- },
- },
- };
-
- const cont = (
- <redux.Provider store={store}>
- <Router history={history}>
- <CandidateDetailsPage {...props} />
- </Router>
- </redux.Provider>
- );
-
- let spyOnUseSelector;
- let spyOnUseDispatch;
- let mockDispatch;
-
- beforeEach(() => {
- window.matchMedia = createMatchMedia(362);
- spyOnUseSelector = jest.spyOn(redux, "useSelector");
- spyOnUseSelector
- .mockReturnValueOnce(mockState.users.users)
- .mockReturnValueOnce(mockState.users.user)
- .mockReturnValueOnce(mockState.candidate.candidate)
- .mockReturnValueOnce(mockState.users.users)
- .mockReturnValueOnce(mockState.users.user)
- .mockReturnValueOnce(mockState.candidate.candidate)
- .mockReturnValueOnce(mockState.users.users)
- .mockReturnValueOnce(mockState.users.user)
- .mockReturnValueOnce(mockState.candidate.candidate);
-
- spyOnUseDispatch = jest.spyOn(redux, "useDispatch");
- mockDispatch = jest.fn();
- spyOnUseDispatch.mockReturnValue(mockDispatch);
- });
-
- afterEach(() => {
- jest.restoreAllMocks();
- });
-
- it("Should render", () => {
- const { container } = render(cont);
- expect(
- container.getElementsByClassName("main-candidate-container")[0]
- ).toBeDefined();
- });
-
- it("Initialy should dispatch two methods", () => {
- render(cont);
- expect(mockDispatch).toBeCalledTimes(2);
- });
-
- it("Should render candidate name", () => {
- const { container } = render(cont);
- expect(
- container.getElementsByClassName("candidate-lower-header")[0]
- ).toBeDefined();
- });
-
- it("Should render button for deleting candidate", () => {
- const { container } = render(cont);
- expect(container.getElementsByClassName("candidate-btn")[0]).toBeDefined();
- });
-
- it("Should represent one year of experience for the candidate", () => {
- render(cont);
- expect(screen.getByTestId("candidate-experience").textContent).toBe(
- "Experience:1"
- );
- });
-
- it("Should represent all technologies of candidate", () => {
- const { container } = render(cont);
- expect(
- container.getElementsByClassName("technology-candidate-card").length
- ).toBe(2);
- });
-
- it("It should show Muski inside paragraph for gender because value of gender property of our candidate is M", () => {
- render(cont);
- expect(screen.getByTestId("candidate-gender").textContent).toBe("Muski");
- });
-
- it("Should render dialog after clicking button for deleting candidate", () => {
- const { container } = render(cont);
- fireEvent.click(container.getElementsByClassName("candidate-btn")[0]);
- expect(screen.getByTestId("alert-container")).toBeDefined();
- });
-
- it("Should render input for sending comment", () => {
- const { container } = render(cont);
- expect(container.getElementsByClassName("comment-input")[0]).toBeDefined();
- });
-
- it("Initially mention should not be rendered", async () => {
- const { container } = render(cont);
- await waitFor(() =>
- expect(
- container.getElementsByClassName("comment-input_suggestions")[0]
- ).toBeUndefined()
- );
- });
-
- // it("Should render mention list after entering @ inside our mention input", async () => {
- // const { container } = render(cont);
- // const input = container
- // .getElementsByClassName("comment-input")[0]
- // .querySelector("textarea");
- // fireEvent.change(input, { target: { value: "@" } });
- // await waitFor(() =>
- // expect(
- // container
- // .getElementsByClassName("comment-input")[0]
- // .getElementsByClassName("comment-input_suggestions")[0]
- // ).toBeDefined()
- // );
- // });
-
- it("Should render first button for sending commment because width of screen is greater than 361", () => {
- const { container } = render(cont);
- expect(
- container.getElementsByClassName("comment-send-btn")[0]
- ).toBeDefined();
- });
-
- it("Clicking button for sending comment should dispatch function", async () => {
- const { container } = render(cont);
- const input = container
- .getElementsByClassName("comment-input")[0]
- .querySelector("textarea");
- fireEvent.change(input, { target: { value: "some value" } });
- fireEvent.click(container.getElementsByClassName("comment-send-btn")[0]);
- await waitFor(() => expect(mockDispatch).toBeCalledTimes(3));
- });
-
- it("Should not render second button for sending commment because width of screen is greater than 361", () => {
- const { container } = render(cont);
- expect(
- container.getElementsByClassName("comment-send-btn-responsive")[0]
- ).toBeUndefined();
- });
-
- it("Should render button for downloading CV", () => {
- const { container } = render(cont);
- expect(
- container.getElementsByClassName("applicant-cv-button")[0]
- ).toBeDefined();
- });
-
- it("should not render responsive right and left arrow because screen width is greater than 361", () => {
- render(cont);
- expect(screen.queryByTestId("candidate-ad-responsive-arrows")).toBeNull();
- });
-
- it("Should render two ads for candidate", () => {
- const { container } = render(cont);
- expect(container.getElementsByClassName("applicant-add").length).toBe(2);
- });
-
- it("Should render three comments", () => {
- const { container } = render(cont);
- expect(
- container.getElementsByClassName("comment-sub-container").length
- ).toBe(3);
- });
-
- it("Should render page with all candidates", () => {
- const { container } = render(cont);
- fireEvent.click(
- container.getElementsByClassName("applicant-ads-back-button")[0]
- );
- const arg = { pathname: "/candidates" };
- expect(props.history.push).toHaveBeenCalledWith(arg);
- });
- });
|