diff --git a/src/actions/__tests__/sponsor-forms-actions.test.js b/src/actions/__tests__/sponsor-forms-actions.test.js index 646f2483e..dbf2689e9 100644 --- a/src/actions/__tests__/sponsor-forms-actions.test.js +++ b/src/actions/__tests__/sponsor-forms-actions.test.js @@ -1,66 +1,94 @@ -import * as OpenStackUiCoreActions from "openstack-uicore-foundation/lib/utils/actions"; -import { deleteSponsorFormItem } from "../sponsor-forms-actions"; -import * as UtilsMethods from "../../utils/methods"; -import * as BaseActions from "../base-actions"; +/** + * @jest-environment jsdom + */ +import { expect, jest, describe, it } from "@jest/globals"; +import configureStore from "redux-mock-store"; +import thunk from "redux-thunk"; +import flushPromises from "flush-promises"; +import { getRequest } from "openstack-uicore-foundation/lib/utils/actions"; +import { getSponsorForms } from "../sponsor-forms-actions"; +import * as methods from "../../utils/methods"; -jest.mock("openstack-uicore-foundation/lib/utils/actions", () => { - const originalModule = jest.requireActual( - "openstack-uicore-foundation/lib/utils/actions" - ); +jest.mock("openstack-uicore-foundation/lib/utils/actions", () => ({ + __esModule: true, + ...jest.requireActual("openstack-uicore-foundation/lib/utils/actions"), + postRequest: jest.fn(), + getRequest: jest.fn() +})); - return { - __esModule: true, - ...originalModule, - deleteRequest: jest.fn(() => () => () => Promise.resolve()) - }; -}); +describe("Sponsor Forms Actions", () => { + describe("GetSponsorForms", () => { + const middlewares = [thunk]; + const mockStore = configureStore(middlewares); + + beforeEach(() => { + jest.spyOn(methods, "getAccessTokenSafely").mockReturnValue("TOKEN"); + + getRequest.mockImplementation( + ( + requestActionCreator, + receiveActionCreator, + endpoint, // eslint-disable-line no-unused-vars + payload, // eslint-disable-line no-unused-vars + errorHandler = null, // eslint-disable-line no-unused-vars + requestActionPayload = {} + ) => + ( + params = {} // eslint-disable-line no-unused-vars + ) => + (dispatch) => { + if ( + requestActionCreator && + typeof requestActionCreator === "function" + ) + dispatch(requestActionCreator(requestActionPayload)); + + return new Promise((resolve) => { + if (typeof receiveActionCreator === "function") { + dispatch(receiveActionCreator({ response: {} })); + resolve({ response: {} }); + } + dispatch(receiveActionCreator); + resolve({ response: {} }); + }); + } + ); + }); -describe("SponsorFormActions", () => { - describe("DeleteSponsorFormItem", () => { afterEach(() => { // restore the spy created with spyOn jest.restoreAllMocks(); }); + describe("On perPage change", () => { + it("should request page specified", async () => { + const store = mockStore({ + currentSummitState: { + currentSummit: {} + }, + sponsorFormsListState: { + totalCount: 13 + } + }); - it("execute", async () => { - const mockedDispatch = jest.fn(); - const mockedGetState = jest.fn(() => ({ - currentSummitState: { - currentSummit: "SSS" - }, - sponsorFormItemsListState: { - currentPage: 1, - perPage: 10, - order: "asc", - orderDir: 1, - hideArchived: false - } - })); - - const params = { - formId: "AAA", - itemId: "III" - }; - - const spyOnGetAccessTokenSafely = jest - .spyOn(UtilsMethods, "getAccessTokenSafely") - .mockImplementation(() => "access _token"); - const spyOnSnackbarSuccessHandler = jest.spyOn( - BaseActions, - "snackbarSuccessHandler" - ); - - await deleteSponsorFormItem(params.formId, params.itemId)( - mockedDispatch, - mockedGetState - ); + store.dispatch(getSponsorForms("", 2, 50, "id", 1, false, [])); + await flushPromises(); - // gets acces token safely - expect(spyOnGetAccessTokenSafely).toHaveBeenCalled(); - // calls delete request - expect(OpenStackUiCoreActions.deleteRequest).toHaveBeenCalled(); - // shows snackbar - expect(spyOnSnackbarSuccessHandler).toHaveBeenCalled(); + expect(getRequest).toHaveBeenCalled(); + expect(getRequest).toHaveBeenCalledWith( + expect.anything(), + expect.anything(), + expect.anything(), + expect.anything(), + { + hideArchived: false, + order: "id", + orderDir: 1, + currentPage: 2, + perPage: 50, + term: "" + } + ); + }); }); }); }); diff --git a/src/actions/sponsor-forms-actions.js b/src/actions/sponsor-forms-actions.js index 085b09bfd..480619f4a 100644 --- a/src/actions/sponsor-forms-actions.js +++ b/src/actions/sponsor-forms-actions.js @@ -106,7 +106,7 @@ export const SPONSOR_FORM_ITEM_UNARCHIVED = "SPONSOR_FORM_ITEM_UNARCHIVED"; export const getSponsorForms = ( term = "", - page = DEFAULT_CURRENT_PAGE, + currentPage = DEFAULT_CURRENT_PAGE, perPage = DEFAULT_PER_PAGE, order = "id", orderDir = DEFAULT_ORDER_DIR, @@ -127,7 +127,7 @@ export const getSponsorForms = } const params = { - page, + page: currentPage, fields: "id,code,name,level,expire_date,is_archived", relations: "items", per_page: perPage, @@ -157,7 +157,7 @@ export const getSponsorForms = createAction(RECEIVE_SPONSOR_FORMS), `${window.PURCHASES_API_URL}/api/v1/summits/${currentSummit.id}/show-forms`, authErrorHandler, - { order, orderDir, page, perPage, term, hideArchived } + { order, orderDir, currentPage, perPage, term, hideArchived } )(params)(dispatch).then(() => { dispatch(stopLoading()); }); diff --git a/src/pages/sponsors/sponsor-forms-list-page/index.js b/src/pages/sponsors/sponsor-forms-list-page/index.js index 56c011083..451e3a4b1 100644 --- a/src/pages/sponsors/sponsor-forms-list-page/index.js +++ b/src/pages/sponsors/sponsor-forms-list-page/index.js @@ -65,7 +65,7 @@ const SponsorFormsListPage = ({ const handlePerPageChange = (newPerPage) => { getSponsorForms( term, - currentPage, + DEFAULT_CURRENT_PAGE, newPerPage, order, orderDir, @@ -73,13 +73,20 @@ const SponsorFormsListPage = ({ ); }; const handleSort = (key, dir) => { - getSponsorForms(term, currentPage, perPage, key, dir, hideArchived); + getSponsorForms( + term, + DEFAULT_CURRENT_PAGE, + perPage, + key, + dir, + hideArchived + ); }; const handleSearch = (searchTerm) => { getSponsorForms( searchTerm, - currentPage, + DEFAULT_CURRENT_PAGE, perPage, order, orderDir,