You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

userManagementUI.test.js 3.0KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import * as redux from "react-redux";
  2. import store from "../../store";
  3. import { Router } from "react-router-dom";
  4. import history from "../../store/utils/history";
  5. import { mockState } from "../../mockState";
  6. import { render, screen, fireEvent } from "@testing-library/react";
  7. import UsersPage from "../../pages/UsersPage/UsersPage";
  8. describe("Stats reducer 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. let spyOnUseDispatch;
  27. let mockDispatch;
  28. beforeEach(() => {
  29. // Mock useSelector hook
  30. spyOnUseSelector = jest.spyOn(redux, "useSelector");
  31. spyOnUseSelector.mockReturnValue(mockState.users);
  32. // Mock useDispatch hook
  33. spyOnUseDispatch = jest.spyOn(redux, "useDispatch");
  34. // Mock dispatch function returned from useDispatch
  35. mockDispatch = jest.fn();
  36. spyOnUseDispatch.mockReturnValue(mockDispatch);
  37. });
  38. afterEach(() => {
  39. jest.restoreAllMocks();
  40. });
  41. it("Should render", () => {
  42. render(cont);
  43. expect(screen.getByTestId("users")).toBeDefined();
  44. });
  45. it("should not show user actions when rendered", () => {
  46. const { container } = render(cont);
  47. expect(container.getElementsByClassName("edit-row").length).toBe(0);
  48. });
  49. it("Should render last column when editing mode is active", () => {
  50. const { container } = render(cont);
  51. fireEvent.click(container.getElementsByClassName("edit-btn-class")[0]);
  52. expect(container.getElementsByClassName("edit-row").length).toBeGreaterThan(
  53. 0
  54. );
  55. });
  56. it("Should open alert dialog when clicking on reset password button", () => {
  57. const { container } = render(cont);
  58. fireEvent.click(container.getElementsByClassName("edit-btn-class")[0]);
  59. // the resset password button is the first one to appear with this class
  60. fireEvent.click(container.getElementsByClassName("td-btn")[0]);
  61. expect(screen.getByTestId("alert-container")).toBeDefined();
  62. });
  63. it("Should open alert dialog when clicking on enable toggler", () => {
  64. const { container } = render(cont);
  65. fireEvent.click(container.getElementsByClassName("edit-btn-class")[0]);
  66. // the enable toggler button is the sedond one to appear with this class
  67. fireEvent.click(container.getElementsByClassName("td-btn")[1]);
  68. expect(screen.getByTestId("alert-container")).toBeDefined();
  69. });
  70. it("Should navigate to user details page when clicking on edit button", () => {
  71. const { container } = render(cont);
  72. fireEvent.click(container.getElementsByClassName("edit-btn-class")[0]);
  73. // the link to user details is the third button appear with this class
  74. fireEvent.click(container.getElementsByClassName("td-btn")[2]);
  75. // 7 is the id of the first user in our mockstate
  76. const arg = '/users/7'
  77. expect(props.history.push).toHaveBeenCalledWith(arg);
  78. });
  79. });