Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

selectionProcessesPageUI.test.js 4.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. import { fireEvent, render, screen, waitFor } from "@testing-library/react";
  2. import * as redux from "react-redux";
  3. import SelectionProcessPage from "../../pages/selectionProcessPage/selectionProcessPage";
  4. import store from "../../store";
  5. import "../../i18n";
  6. import { mockState } from "../../mockState";
  7. import { Router } from "react-router-dom";
  8. import history from "../../store/utils/history";
  9. import { SelectionProvider } from "../../context/SelectionContext";
  10. describe("SelectionProcessPage render tests", () => {
  11. var props = {
  12. history: {
  13. replace: jest.fn(),
  14. push: jest.fn(),
  15. location: {
  16. pathname: "/selectionFlow",
  17. },
  18. },
  19. };
  20. const cont = (
  21. <redux.Provider store={store}>
  22. <SelectionProvider>
  23. <Router history={history}>
  24. <SelectionProcessPage {...props} />
  25. </Router>
  26. </SelectionProvider>
  27. </redux.Provider>
  28. );
  29. let spyOnUseSelector;
  30. beforeEach(() => {
  31. // Mock useSelector hook
  32. spyOnUseSelector = jest.spyOn(redux, "useSelector");
  33. spyOnUseSelector
  34. .mockReturnValueOnce(mockState.selections)
  35. .mockReturnValueOnce(mockState.selections.processes)
  36. .mockReturnValueOnce(mockState.selections.statuses);
  37. // MOZDA VRATITI KANDIDATE i korisnike?
  38. // spyOnUseSelector.mockReturnValue(mockState.selections);
  39. });
  40. afterEach(() => {
  41. jest.restoreAllMocks();
  42. });
  43. it("Should render", () => {
  44. render(cont);
  45. expect(screen.getByTestId("selections-page")).toBeDefined();
  46. });
  47. it("Should render a card foreach mocked level", () => {
  48. const { container } = render(cont);
  49. expect(container.getElementsByClassName("selection-card").length).toBe(4);
  50. });
  51. // it("Should render a button with specific class for an enabled user", () => {
  52. // const { container } = render(cont);
  53. // expect(container.getElementsByClassName("td-btn").length).toBe(0);
  54. // });
  55. it("Should render filter button", () => {
  56. const { container } = render(cont);
  57. expect(container.getElementsByClassName("userPageBtn").length).toBe(1);
  58. });
  59. it("Should render date if process is scheduled", () => {
  60. render(cont);
  61. expect(screen.getAllByTestId("process-date")[0]).toBeDefined();
  62. });
  63. it("Should render scheduler if process is scheduled", () => {
  64. const { container } = render(cont);
  65. expect(
  66. container.getElementsByClassName("sel-item-scheduler")[0]
  67. ).toBeDefined();
  68. });
  69. it("Should render interviewBtn", () => {
  70. render(cont);
  71. expect(screen.getByTestId("interview-image")).toBeDefined();
  72. });
  73. // it("Should render interview dailog when clicked on", () => {
  74. // render(cont);
  75. // fireEvent.click(screen.getByTestId("interview-image"));
  76. // waitFor(() => expect(screen.getByTestId("interview-dialog")).toBeDefined());
  77. // });
  78. it("Should render selection card if process failed", () => {
  79. render(cont);
  80. expect(
  81. screen.getByRole("button", {
  82. name: /neuspešno/i,
  83. })
  84. ).toBeDefined();
  85. });
  86. it("Should navigate to applicant selection when status is clicked if status is 'failed'", () => {
  87. render(cont);
  88. var statusBtn = screen.getByRole("button", {
  89. name: /neuspešno/i,
  90. });
  91. fireEvent.click(statusBtn);
  92. // 21364 is the id of the applicant in mockState
  93. expect(props.history.push).toHaveBeenCalledWith("/selectionFlow/21364");
  94. });
  95. it("Should navigate to applicant selection when status is clicked if status is 'done'", () => {
  96. render(cont);
  97. var statusBtn = screen.getAllByRole("button", {
  98. name: /zakazan/i,
  99. })[0];
  100. fireEvent.click(statusBtn);
  101. expect(screen.getByTestId("status-select")).toBeDefined();
  102. });
  103. it("Should not render selection card if process is done", () => {
  104. render(cont);
  105. expect(
  106. screen.queryByRole("button", {
  107. name: /odrađen/i,
  108. })
  109. ).toBe(null);
  110. });
  111. it("Drag and drop", () => {
  112. const { container } = render(cont);
  113. fireEvent.drop(container.getElementsByClassName("selection-card")[0], {
  114. dataTransfer: {
  115. getData: (type) =>
  116. '{"id":32,"name":"random","status":"Kandidat primljen","date":null,"link":"link","applicant":{"applicantId":6,"firstName":"Safet","lastName":"Purkovic","position":"React Developer","dateOfApplication":"2021-05-05T00:00:00","cv":"dasdas","email":"safet@gmail.com","phoneNumber":"2313123","linkedlnLink":"sda","githubLink":null,"bitBucketLink":null,"experience":2,"applicationChannel":null,"typeOfEmployment":"Posao","technologyApplicants":[],"comments":[],"ads":[],"selectionProcesses":[{"status":"Kandidat primljen","date":null,"link":"link","scheduler":{"id":7,"firstName":"Safet","lastName":"Purkovic","email":"safet.purkovic@dilig.net","isEnabled":true},"selectionLevel":{"id":4,"name":"Konacna odluka"}}]},"selectionLevelId":4}',
  117. },
  118. });
  119. });
  120. });