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.

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import { render, screen, fireEvent } from "@testing-library/react";
  2. import * as redux from "react-redux";
  3. import AdsPage from "../../pages/AdsPage/AdsPage";
  4. import store from "../../store";
  5. import { mockState } from "../../mockState";
  6. import { Router } from "react-router-dom";
  7. import history from "../../store/utils/history";
  8. import ColorModeProvider from "../../context/ColorModeContext";
  9. describe("AdsPage render tests", () => {
  10. const cont = (
  11. <redux.Provider store={store}>
  12. <Router history={history}>
  13. <ColorModeProvider>
  14. <AdsPage />
  15. </ColorModeProvider>
  16. </Router>
  17. </redux.Provider>
  18. );
  19. let spyOnUseSelector;
  20. beforeEach(() => {
  21. spyOnUseSelector = jest.spyOn(redux, "useSelector");
  22. spyOnUseSelector.mockReturnValueOnce(mockState.ads.ads);
  23. });
  24. afterEach(() => {
  25. jest.resetAllMocks();
  26. });
  27. it("Should render ads", () => {
  28. render(cont);
  29. expect(screen.getByTestId("ads-page")).toBeDefined();
  30. });
  31. it("Should be rendered button which is used for showing input responsible for searching by name", () => {
  32. const { container } = render(cont);
  33. expect(container.getElementsByClassName("ads-page-btn")[0]).toBeDefined();
  34. });
  35. it("Should be rendered button for toggling filters modal", () => {
  36. const { container } = render(cont);
  37. expect(container.getElementsByClassName("ads-page-btn")[1]).toBeDefined();
  38. });
  39. it("Should be rendered button for adding new ad", () => {
  40. const { container } = render(cont);
  41. expect(container.getElementsByClassName("ads-page-btn")[2]).toBeDefined();
  42. });
  43. it("Input for searching by title should not be shown when component is initialy rendered", () => {
  44. const { container } = render(cont);
  45. expect(
  46. container.getElementsByClassName("ads-page-search-by-title")[0].style
  47. .visibility
  48. ).toBe("hidden");
  49. });
  50. it("Should be rendered ad cards", () => {
  51. const { container } = render(cont);
  52. expect(container.getElementsByClassName('ad-card').length).toBeGreaterThan(0);
  53. });
  54. it("Should be rendered archive ad cards", () => {
  55. const { container } = render(cont);
  56. expect(container.getElementsByClassName('archive-ad').length).toBe(0);
  57. });
  58. it("Should render filter drawer after click filter button", () => {
  59. const { container } = render(cont);
  60. fireEvent.click(container.getElementsByClassName("fltr-btn")[0]);
  61. expect(screen.getByTestId('ad-filters-drawer')).toBeDefined();
  62. });
  63. it("Should render modal after add ad button clicked", () => {
  64. const { container } = render(cont);
  65. fireEvent.click(container.getElementsByClassName("ads-page-btn")[2]);
  66. expect(screen.getByTestId('add-ad-modal')).toBeDefined();
  67. });
  68. it("Should render arrow buttons for active ads slider", () => {
  69. const { container } = render(cont);
  70. expect(container.getElementsByClassName('active-ads-ads-arrows')).toBeDefined();
  71. });
  72. it("Should render arrow buttons for archived ads slider", () => {
  73. const { container } = render(cont);
  74. expect(container.getElementsByClassName('archived-ads-ads-arrows')).toBeDefined();
  75. });
  76. });