Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

candidateDetailsPageUI.test.js 6.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. import { render, fireEvent, screen, waitFor } from "@testing-library/react";
  2. import * as redux from "react-redux";
  3. import store from "../../store";
  4. import { mockState } from "../../mockState";
  5. import { Router } from "react-router-dom";
  6. import history from "../../store/utils/history";
  7. import CandidateDetailsPage from "../../pages/CandidatesPage/CandidateDetailsPage";
  8. import mediaQuery from "css-mediaquery";
  9. function createMatchMedia(width) {
  10. return (query) => ({
  11. matches: mediaQuery.match(query, { width }),
  12. addListener: () => {},
  13. removeListener: () => {},
  14. });
  15. }
  16. describe("CandidateDetailsPage render tests", () => {
  17. var props = {
  18. history: {
  19. replace: jest.fn(),
  20. push: jest.fn(),
  21. location: {
  22. pathname: "/candidates/1",
  23. },
  24. },
  25. };
  26. const cont = (
  27. <redux.Provider store={store}>
  28. <Router history={history}>
  29. <CandidateDetailsPage {...props} />
  30. </Router>
  31. </redux.Provider>
  32. );
  33. let spyOnUseSelector;
  34. let spyOnUseDispatch;
  35. let mockDispatch;
  36. beforeEach(() => {
  37. window.matchMedia = createMatchMedia(362);
  38. spyOnUseSelector = jest.spyOn(redux, "useSelector");
  39. spyOnUseSelector
  40. .mockReturnValueOnce(mockState.users.users)
  41. .mockReturnValueOnce(mockState.users.user)
  42. .mockReturnValueOnce(mockState.candidate.candidate)
  43. .mockReturnValueOnce(mockState.users.users)
  44. .mockReturnValueOnce(mockState.users.user)
  45. .mockReturnValueOnce(mockState.candidate.candidate)
  46. .mockReturnValueOnce(mockState.users.users)
  47. .mockReturnValueOnce(mockState.users.user)
  48. .mockReturnValueOnce(mockState.candidate.candidate);
  49. spyOnUseDispatch = jest.spyOn(redux, "useDispatch");
  50. mockDispatch = jest.fn();
  51. spyOnUseDispatch.mockReturnValue(mockDispatch);
  52. });
  53. afterEach(() => {
  54. jest.restoreAllMocks();
  55. });
  56. it("Should render", () => {
  57. const { container } = render(cont);
  58. expect(
  59. container.getElementsByClassName("main-candidate-container")[0]
  60. ).toBeDefined();
  61. });
  62. it("Initialy should dispatch two methods", () => {
  63. render(cont);
  64. expect(mockDispatch).toBeCalledTimes(2);
  65. });
  66. it("Should render candidate name", () => {
  67. const { container } = render(cont);
  68. expect(
  69. container.getElementsByClassName("candidate-lower-header")[0]
  70. ).toBeDefined();
  71. });
  72. it("Should render button for deleting candidate", () => {
  73. const { container } = render(cont);
  74. expect(container.getElementsByClassName("candidate-btn")[0]).toBeDefined();
  75. });
  76. it("Should represent one year of experience for the candidate", () => {
  77. render(cont);
  78. expect(screen.getByTestId("candidate-experience").textContent).toBe(
  79. "Experience:1"
  80. );
  81. });
  82. it("Should represent all technologies of candidate", () => {
  83. const { container } = render(cont);
  84. expect(
  85. container.getElementsByClassName("technology-candidate-card").length
  86. ).toBe(2);
  87. });
  88. it("It should show Muski inside paragraph for gender because value of gender property of our candidate is M", () => {
  89. render(cont);
  90. expect(screen.getByTestId("candidate-gender").textContent).toBe("Muski");
  91. });
  92. it("Should render dialog after clicking button for deleting candidate", () => {
  93. const { container } = render(cont);
  94. fireEvent.click(container.getElementsByClassName("candidate-btn")[0]);
  95. expect(screen.getByTestId("alert-container")).toBeDefined();
  96. });
  97. it("Should render input for sending comment", () => {
  98. const { container } = render(cont);
  99. expect(container.getElementsByClassName("comment-input")[0]).toBeDefined();
  100. });
  101. it("Initially mention should not be rendered", async () => {
  102. const { container } = render(cont);
  103. await waitFor(() =>
  104. expect(
  105. container.getElementsByClassName("comment-input_suggestions")[0]
  106. ).toBeUndefined()
  107. );
  108. });
  109. // it("Should render mention list after entering @ inside our mention input", async () => {
  110. // const { container } = render(cont);
  111. // const input = container
  112. // .getElementsByClassName("comment-input")[0]
  113. // .querySelector("textarea");
  114. // fireEvent.change(input, { target: { value: "@" } });
  115. // await waitFor(() =>
  116. // expect(
  117. // container
  118. // .getElementsByClassName("comment-input")[0]
  119. // .getElementsByClassName("comment-input_suggestions")[0]
  120. // ).toBeDefined()
  121. // );
  122. // });
  123. it("Should render first button for sending commment because width of screen is greater than 361", () => {
  124. const { container } = render(cont);
  125. expect(
  126. container.getElementsByClassName("comment-send-btn")[0]
  127. ).toBeDefined();
  128. });
  129. it("Clicking button for sending comment should dispatch function", async () => {
  130. const { container } = render(cont);
  131. const input = container
  132. .getElementsByClassName("comment-input")[0]
  133. .querySelector("textarea");
  134. fireEvent.change(input, { target: { value: "some value" } });
  135. fireEvent.click(container.getElementsByClassName("comment-send-btn")[0]);
  136. await waitFor(() => expect(mockDispatch).toBeCalledTimes(3));
  137. });
  138. it("Should not render second button for sending commment because width of screen is greater than 361", () => {
  139. const { container } = render(cont);
  140. expect(
  141. container.getElementsByClassName("comment-send-btn-responsive")[0]
  142. ).toBeUndefined();
  143. });
  144. it("Should render button for downloading CV", () => {
  145. const { container } = render(cont);
  146. expect(
  147. container.getElementsByClassName("applicant-cv-button")[0]
  148. ).toBeDefined();
  149. });
  150. it("should not render responsive right and left arrow because screen width is greater than 361", () => {
  151. render(cont);
  152. expect(screen.queryByTestId("candidate-ad-responsive-arrows")).toBeNull();
  153. });
  154. it("Should render two ads for candidate", () => {
  155. const { container } = render(cont);
  156. expect(container.getElementsByClassName("applicant-add").length).toBe(2);
  157. });
  158. it("Should render three comments", () => {
  159. const { container } = render(cont);
  160. expect(
  161. container.getElementsByClassName("comment-sub-container").length
  162. ).toBe(3);
  163. });
  164. it("Should render page with all candidates", () => {
  165. const { container } = render(cont);
  166. fireEvent.click(
  167. container.getElementsByClassName("applicant-ads-back-button")[0]
  168. );
  169. const arg = { pathname: "/candidates" };
  170. expect(props.history.push).toHaveBeenCalledWith(arg);
  171. });
  172. });