Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

loginPageUI.test.js 4.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  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 { fireEvent, render, screen, waitFor } from "@testing-library/react";
  6. import history from "../../store/utils/history";
  7. import LoginPage from "../../pages/LoginPage/LoginPageMUI";
  8. describe("LoginPage render tests", () => {
  9. var props = {
  10. history: {
  11. replace: jest.fn(),
  12. push: jest.fn(),
  13. location: {
  14. pathname: "/",
  15. },
  16. },
  17. };
  18. const cont = (
  19. <redux.Provider store={store}>
  20. <Router history={history}>
  21. <LoginPage {...props} />
  22. </Router>
  23. </redux.Provider>
  24. );
  25. let spyOnUseSelector;
  26. let spyOnUseDispatch;
  27. let mockDispatch;
  28. beforeEach(() => {
  29. spyOnUseSelector = jest.spyOn(redux, "useSelector");
  30. spyOnUseSelector.mockReturnValue("some error");
  31. spyOnUseDispatch = jest.spyOn(redux, "useDispatch");
  32. mockDispatch = jest.fn();
  33. spyOnUseDispatch.mockReturnValue(mockDispatch);
  34. });
  35. afterEach(() => {
  36. jest.restoreAllMocks();
  37. });
  38. it("Should render", () => {
  39. const { container } = render(cont);
  40. expect(
  41. container.getElementsByClassName("c-login-container")[0]
  42. ).toBeDefined();
  43. });
  44. it("Should render login-logo", () => {
  45. const { container } = render(cont);
  46. expect(container.getElementsByClassName("login-logo")[0]).toBeDefined();
  47. });
  48. it("Should render welcome message", () => {
  49. const { container } = render(cont);
  50. expect(
  51. container
  52. .getElementsByClassName("c-login-container")[0]
  53. .querySelector("h")
  54. ).toBeDefined();
  55. });
  56. it("Should render error message because we mocked error message", () => {
  57. render(cont);
  58. expect(screen.getByTestId("error-message")).toBeDefined();
  59. });
  60. it("Should render username input", () => {
  61. render(cont);
  62. expect(screen.getByTestId("username-input")).toBeDefined();
  63. });
  64. it("Should render password input", () => {
  65. render(cont);
  66. expect(screen.getByTestId("password-input")).toBeDefined();
  67. });
  68. it("Should render forgot paswword link", () => {
  69. const { container } = render(cont);
  70. expect(container.getElementsByClassName("text-end")[0]).toBeDefined();
  71. });
  72. it("Should render submit button", () => {
  73. const { container } = render(cont);
  74. expect(container.getElementsByClassName("c-btn")[0]).toBeDefined();
  75. });
  76. it("Should render separator container", () => {
  77. render(cont);
  78. expect(screen.getByTestId("separator")).toBeDefined();
  79. });
  80. it("Should dilig logo", () => {
  81. render(cont);
  82. expect(screen.getByTestId("dilig-logo")).toBeDefined();
  83. });
  84. it("Should not dispatch functions after clicking submit button because username and password inputs are emtpy", async () => {
  85. const { container } = render(cont);
  86. fireEvent.click(container.getElementsByClassName("c-btn")[0]);
  87. await waitFor(() => expect(mockDispatch).toBeCalledTimes(0));
  88. });
  89. it("Should not dispatch functions after clicking submit button because password input is emtpy", async () => {
  90. const { container } = render(cont);
  91. fireEvent.change(screen.getByTestId("username-input"), {
  92. target: { value: "some username" },
  93. });
  94. fireEvent.click(container.getElementsByClassName("c-btn")[0]);
  95. await waitFor(() => expect(mockDispatch).toBeCalledTimes(0));
  96. });
  97. it("Should not dispatch functions after clicking submit button because username input is emtpy", async () => {
  98. const { container } = render(cont);
  99. fireEvent.change(screen.getByTestId("password-input"), {
  100. target: { value: "some password" },
  101. });
  102. fireEvent.click(container.getElementsByClassName("c-btn")[0]);
  103. await waitFor(() => expect(mockDispatch).toBeCalledTimes(0));
  104. });
  105. it("Should dispatch two functions after clicking submit button", async () => {
  106. const { container } = render(cont);
  107. fireEvent.change(screen.getByTestId("username-input"), {
  108. target: { value: "some username" },
  109. });
  110. fireEvent.change(screen.getByTestId("password-input"), {
  111. target: { value: "some password" },
  112. });
  113. fireEvent.click(container.getElementsByClassName("c-btn")[0]);
  114. await waitFor(() => expect(mockDispatch).toBeCalledTimes(2));
  115. });
  116. // it("After clicking submit button we should go to ads page", async () => {
  117. // const { container } = render(cont);
  118. // fireEvent.change(screen.getByTestId("username-input"), {
  119. // target: { value: "some username" },
  120. // });
  121. // fireEvent.change(screen.getByTestId("password-input"), {
  122. // target: { value: "some password" },
  123. // });
  124. // fireEvent.click(container.getElementsByClassName("c-btn")[0]);
  125. // const arg = { pathname: "/ads" };
  126. // expect(props.history.push).toHaveBeenCalledWith(arg);
  127. // });
  128. });