Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

usersPageUI.test.js 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. import * as redux from "react-redux";
  2. import store from "../../store";
  3. import { Router } from "react-router-dom";
  4. import { mockState } from "../../mockState";
  5. import { render, screen, fireEvent, waitFor } from "@testing-library/react";
  6. import history from "../../store/utils/history";
  7. import UsersPage from "../../pages/UsersPage/UsersPage";
  8. describe("UsersPage render tests", () => {
  9. var props = {
  10. history: {
  11. replace: jest.fn(),
  12. push: jest.fn(),
  13. location: {
  14. pathname: "/users",
  15. },
  16. },
  17. };
  18. const cont = (
  19. <redux.Provider store={store}>
  20. <Router history={history}>
  21. <UsersPage {...props} />
  22. </Router>
  23. </redux.Provider>
  24. );
  25. let spyOnUseSelector;
  26. beforeEach(() => {
  27. spyOnUseSelector = jest.spyOn(redux, "useSelector");
  28. spyOnUseSelector
  29. .mockReturnValue(mockState.users)
  30. .mockReturnValue(mockState.users);
  31. });
  32. afterEach(() => {
  33. jest.restoreAllMocks();
  34. });
  35. it("Should render", () => {
  36. render(cont);
  37. expect(screen.getByTestId("users")).toBeDefined();
  38. });
  39. it("Number of rows of table should be equal to the number of users", () => {
  40. const { container } = render(cont);
  41. expect(
  42. container
  43. .getElementsByClassName("usersTable-users")[0]
  44. .getElementsByClassName("secondaryRow").length
  45. ).toBe(mockState.users.users.length);
  46. });
  47. it("Should render edit button", () => {
  48. const { container } = render(cont);
  49. expect(container.getElementsByClassName("userPageBtn")[0]).toBeDefined();
  50. });
  51. it("Should render search button", () => {
  52. const { container } = render(cont);
  53. expect(container.getElementsByClassName("userPageBtn")[1]).toBeDefined();
  54. });
  55. it("Should render invite button", () => {
  56. const { container } = render(cont);
  57. expect(container.getElementsByClassName("inviteBtn")[0]).toBeDefined();
  58. });
  59. it("After clicking edit button there should be shown three buttons for each row of our table", () => {
  60. const { container } = render(cont);
  61. fireEvent.click(container.getElementsByClassName("userPageBtn")[0]);
  62. expect(container.getElementsByClassName("td-btn").length).toBe(
  63. 3 * mockState.users.users.length
  64. );
  65. });
  66. it("After clicking invite button invote dialog should be shown", () => {
  67. const { container } = render(cont);
  68. fireEvent.click(container.getElementsByClassName("inviteBtn")[0]);
  69. expect(screen.getByTestId("invite-dialog")).toBeDefined();
  70. });
  71. it("After clicking button for reseting password dialog should be shown", () => {
  72. const { container } = render(cont);
  73. fireEvent.click(container.getElementsByClassName("userPageBtn")[0]);
  74. fireEvent.click(container.getElementsByClassName("td-btn")[0]);
  75. expect(screen.getByTestId("alert-container")).toBeDefined();
  76. });
  77. it("After clicking button editing we should be redirected to user details page", () => {
  78. const { container } = render(cont);
  79. fireEvent.click(container.getElementsByClassName("userPageBtn")[0]);
  80. fireEvent.click(container.getElementsByClassName("td-btn")[2]);
  81. expect(props.history.push).toHaveBeenCalledWith("/users/1");
  82. });
  83. it("Initially input for searching by name should not be shown", () => {
  84. const { container } = render(cont);
  85. expect(
  86. container.getElementsByClassName("search-input-users")[0].style.visibility
  87. ).toBe("hidden");
  88. });
  89. // it("input for searching by name should be shown after clicking button for first time", async () => {
  90. // const { container } = render(cont);
  91. // fireEvent.click(container.getElementsByClassName("userPageBtn")[1]);
  92. // await waitFor(() =>
  93. // expect(
  94. // container.getElementsByClassName("search-input-users")[0].style
  95. // .visibility
  96. // ).toBe("vissible")
  97. // );
  98. // });
  99. });