Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

schedulePageReducer.test.js 3.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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 } from "@testing-library/react";
  7. import * as api from "../../request/scheduleRequest";
  8. import { runSaga } from "redux-saga";
  9. import { SCHEDULE_FETCH } from "../../store/actions/schedule/scheduleActionConstants";
  10. import { getSchedule } from "../../store/saga/scheduleSaga";
  11. import {
  12. fetchScheduleSuccess,
  13. fetchScheduleError,
  14. } from "../../store/actions/schedule/scheduleActions";
  15. import SchedulePage from "../../pages/SchedulePage/SchedulePage";
  16. import ColorModeProvider from "../../context/ColorModeContext";
  17. import * as helper from "../../util/helpers/rejectErrorCodeHelper";
  18. describe("SchedulePage render tests", () => {
  19. const cont = (
  20. <ColorModeProvider>
  21. <redux.Provider store={store}>
  22. <Router history={history}>
  23. <SchedulePage />
  24. </Router>
  25. </redux.Provider>
  26. </ColorModeProvider>
  27. );
  28. let spyOnUseSelector;
  29. let spyOnUseDispatch;
  30. let mockDispatch;
  31. beforeEach(() => {
  32. spyOnUseSelector = jest.spyOn(redux, "useSelector");
  33. spyOnUseSelector.mockReturnValueOnce(mockState.schedule.schedule);
  34. spyOnUseDispatch = jest.spyOn(redux, "useDispatch");
  35. mockDispatch = jest.fn();
  36. spyOnUseDispatch.mockReturnValue(mockDispatch);
  37. });
  38. afterEach(() => {
  39. jest.restoreAllMocks();
  40. });
  41. it("Should dispatch get schedule request when rendered", () => {
  42. render(cont);
  43. const date = new Date()
  44. expect(mockDispatch).toHaveBeenCalledWith({
  45. type: SCHEDULE_FETCH,
  46. payload: {
  47. month: date.getMonth() + 1,
  48. year: date.getFullYear(),
  49. },
  50. });
  51. });
  52. it("should load and handle schedule in case of success", async () => {
  53. const dispatchedActions = [];
  54. const mockedCall = { data: mockState.schedule.schedule };
  55. api.getSpecificSchedule = jest.fn(() => Promise.resolve(mockedCall));
  56. const fakeStore = {
  57. getState: () => mockState.schedule.schedule,
  58. dispatch: (action) => dispatchedActions.push(action),
  59. };
  60. await runSaga(fakeStore, getSchedule, {
  61. payload: {
  62. month: 12,
  63. year: 2022,
  64. },
  65. }).done;
  66. expect(api.getSpecificSchedule.mock.calls.length).toBe(1);
  67. expect(dispatchedActions).toContainEqual(fetchScheduleSuccess(mockedCall.data));
  68. });
  69. it("should handle candidate load errors in case of failure", async () => {
  70. const dispatchedActions = [];
  71. helper.rejectErrorCodeHelper = jest.fn(
  72. () => mockState.schedule.fetchScheduleErrorMessage
  73. );
  74. const error = {
  75. response: {
  76. data: { message: mockState.schedule.fetchScheduleErrorMessage },
  77. },
  78. };
  79. api.getSpecificSchedule = jest.fn(() => Promise.reject(error));
  80. const fakeStore = {
  81. getState: () => mockState.schedule.schedule,
  82. dispatch: (action) => dispatchedActions.push(action),
  83. };
  84. await runSaga(fakeStore, getSchedule, {
  85. payload: {
  86. month: 12,
  87. year: 2022,
  88. },
  89. }).done;
  90. expect(api.getSpecificSchedule.mock.calls.length).toBe(1);
  91. expect(dispatchedActions).toContainEqual(
  92. fetchScheduleError(error.response.data.message)
  93. );
  94. });
  95. });