Skip to content

Commit

Permalink
Add tests for selectors, TODO adminOrderTotalSelector, ensure it is n…
Browse files Browse the repository at this point in the history
…ot impacted by filters
  • Loading branch information
danielqiuu committed Sep 24, 2023
1 parent e32374c commit 092c799
Show file tree
Hide file tree
Showing 5 changed files with 48 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import RefreshIcon from "@material-ui/icons/Refresh";
import { useDispatch, useSelector } from "react-redux";
import styles from "pages/Orders/Orders.module.scss";
import {
adminOrderTotalSelector,
adminOrderTotalWithFiltersSelector,
getOrdersWithFilters,
} from "slices/order/adminOrderSlice";

Expand All @@ -13,7 +13,7 @@ const OrdersCount = () => {
const refreshOrders = () => {
dispatch(getOrdersWithFilters());
};
const orderQuantity = useSelector(adminOrderTotalSelector);
const orderQuantity = useSelector(adminOrderTotalWithFiltersSelector);
return (
<div className={styles.ordersBodyToolbarRefresh}>
<Typography variant="body2">{orderQuantity} results</Typography>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import {
adminOrderSelectors,
getOrdersWithFilters,
setFilters,
adminOrderNewTotalSelector,
adminOrderTotalSelector,
adminCheckedOutOrderTotalSelector,
} from "slices/order/adminOrderSlice";

Expand All @@ -43,7 +43,7 @@ const AdminDashboard = () => {
const dispatch = useDispatch();
const history = useHistory();
const allOrders = useSelector(adminOrderSelectors.selectAll);
const orderQuantity = useSelector(adminOrderNewTotalSelector);
const orderQuantity = useSelector(adminOrderTotalSelector);
const count = useSelector(teamCountSelector);
const participants = useSelector(totalParticipantCountSelector);
const checkedOut = useSelector(adminCheckedOutOrderTotalSelector);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,17 @@ import {
teamAdminSelectors,
NUM_TEAM_LIMIT,
getTeamNextPage,
teamCountSelector,
totalParticipantCountSelector,
} from "slices/event/teamAdminSlice";
import { makeMockApiListResponse, makeStoreWithEntities, waitFor } from "testing/utils";
import { mockTeam, mockTeams } from "testing/mockData";
import { mockTeam, mockTeamMultiple, mockTeams, mockValidTeam } from "testing/mockData";
import { get, stripHostnameReturnFilters } from "api/api";
import { displaySnackbar } from "slices/ui/uiSlice";
import thunk, { ThunkDispatch } from "redux-thunk";
import { AnyAction } from "redux";
import configureStore from "redux-mock-store";
import { teamReducerName, teamSizeSelector } from "./teamSlice";

jest.mock("api/api", () => ({
...jest.requireActual("api/api"),
Expand Down Expand Up @@ -57,6 +60,18 @@ describe("Selectors", () => {
expect(isLoadingSelector(loadingTrueState)).toEqual(true);
expect(isLoadingSelector(loadingFalseState)).toEqual(false);
});
test("totalParticipantCountSelector", () => {
const store = makeStoreWithEntities({ teams: mockTeams });
const totalTeams = totalParticipantCountSelector(store.getState());
const totalProfiles = mockTeams.reduce((sum, team) => {
if (team.profiles) {
return sum + team.profiles.length;
} else {
return sum;
}
}, 0);
expect(totalTeams).toEqual(totalProfiles);
});
});

describe("getTeamsWithSearch thunk", () => {
Expand Down Expand Up @@ -92,6 +107,7 @@ describe("getTeamsWithSearch thunk", () => {
limit: NUM_TEAM_LIMIT,
});
expect(teamAdminSelectors.selectAll(store.getState())).toEqual(mockTeams);
expect(teamCountSelector(store.getState())).toEqual(mockTeams.length);
});
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,13 @@ import {
errorSelector,
getOrdersWithFilters,
adminOrderSelectors,
adminOrderTotalWithFiltersSelector,
adminOrderTotalSelector,
adminCheckedOutOrderTotalSelector,
} from "slices/order/adminOrderSlice";
import { get } from "api/api";
import { makeMockApiListResponse, makeStoreWithEntities } from "testing/utils";
import { mockPendingOrders } from "testing/mockData";
import { mockCheckedOutOrders, mockOrders, mockPendingOrders } from "testing/mockData";
import { waitFor } from "@testing-library/react";

jest.mock("api/api", () => ({
Expand Down Expand Up @@ -52,11 +54,30 @@ describe("adminOrderSlice Selectors", () => {
expect(errorSelector(errorExistsState)).toEqual("exists");
expect(errorSelector(errorNullState)).toEqual(null);
});
test("adminOrderTotalSelector", () => {
test("adminOrderTotalWithFiltersSelector", () => {
const store = makeStoreWithEntities({ allOrders: mockPendingOrders });
const total = adminOrderTotalSelector(store.getState());
const total = adminOrderTotalWithFiltersSelector(store.getState());
expect(total).toEqual(mockPendingOrders.length);
});
// todo not working, doesnt select all orders
test("adminOrderTotalSelector", () => {
const store = makeStoreWithEntities({ allOrders: mockOrders });
const total = adminOrderTotalSelector(store.getState());
expect(total).toEqual(mockOrders.length);
});
test("adminCheckedOutOrderTotalSelector", () => {
const store = makeStoreWithEntities({ allOrders: mockCheckedOutOrders });
const total = adminCheckedOutOrderTotalSelector(store.getState());
const totalRequestedQuantity = mockCheckedOutOrders.reduce((sum, order) => {
return (
sum +
order.request.reduce((orderSum, item) => {
return orderSum + item.requested_quantity;
}, 0)
);
}, 0);
expect(total).toEqual(totalRequestedQuantity); // total number of orders in mockCheckedOutOrders
});
});
describe("getOrdersWithFilters Thunk", () => {
it("Updates the store on API success", async () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -200,22 +200,12 @@ export const adminOrderNumStatusesSelector = createSelector(
(adminOrderSlice) => adminOrderSlice.numStatuses
);

export const adminOrderTotalSelector = createSelector(
export const adminOrderTotalWithFiltersSelector = createSelector(
[adminOrderSelectors.selectAll],
(orderItems) => orderItems.reduce((accum) => accum + 1, 0)
);

export const adminOrderNewTotalSelector = createSelector(
[adminOrderSliceSelector],
(adminOrderSlice) => {
const { numStatuses } = adminOrderSlice;
const total = Object.values(numStatuses).reduce(
(acc, value) => acc + (value || 0),
0
);
return total;
}
);
//Todo this selector is being affected by filters
export const adminOrderTotalSelector = createSelector();

export const adminCheckedOutOrderTotalSelector = createSelector(
[adminOrderSelectors.selectAll],
Expand Down

0 comments on commit 092c799

Please sign in to comment.