diff --git a/hackathon_site/dashboard/frontend/src/components/orders/OrdersCount/OrdersCount.tsx b/hackathon_site/dashboard/frontend/src/components/orders/OrdersCount/OrdersCount.tsx
index 8e9ef5ffd..d84bca565 100644
--- a/hackathon_site/dashboard/frontend/src/components/orders/OrdersCount/OrdersCount.tsx
+++ b/hackathon_site/dashboard/frontend/src/components/orders/OrdersCount/OrdersCount.tsx
@@ -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";
@@ -13,7 +13,7 @@ const OrdersCount = () => {
const refreshOrders = () => {
dispatch(getOrdersWithFilters());
};
- const orderQuantity = useSelector(adminOrderTotalSelector);
+ const orderQuantity = useSelector(adminOrderTotalWithFiltersSelector);
return (
{orderQuantity} results
diff --git a/hackathon_site/dashboard/frontend/src/pages/AdminDashboard/AdminDashboard.tsx b/hackathon_site/dashboard/frontend/src/pages/AdminDashboard/AdminDashboard.tsx
index 173ee883f..3191a6785 100644
--- a/hackathon_site/dashboard/frontend/src/pages/AdminDashboard/AdminDashboard.tsx
+++ b/hackathon_site/dashboard/frontend/src/pages/AdminDashboard/AdminDashboard.tsx
@@ -27,7 +27,7 @@ import {
adminOrderSelectors,
getOrdersWithFilters,
setFilters,
- adminOrderNewTotalSelector,
+ adminOrderTotalSelector,
adminCheckedOutOrderTotalSelector,
} from "slices/order/adminOrderSlice";
@@ -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);
diff --git a/hackathon_site/dashboard/frontend/src/slices/event/teamAdminSlice.test.ts b/hackathon_site/dashboard/frontend/src/slices/event/teamAdminSlice.test.ts
index 57f34e32b..e2531ae35 100644
--- a/hackathon_site/dashboard/frontend/src/slices/event/teamAdminSlice.test.ts
+++ b/hackathon_site/dashboard/frontend/src/slices/event/teamAdminSlice.test.ts
@@ -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"),
@@ -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", () => {
@@ -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);
});
});
diff --git a/hackathon_site/dashboard/frontend/src/slices/order/adminOrderSlice.test.ts b/hackathon_site/dashboard/frontend/src/slices/order/adminOrderSlice.test.ts
index f446ac187..c9f78373b 100644
--- a/hackathon_site/dashboard/frontend/src/slices/order/adminOrderSlice.test.ts
+++ b/hackathon_site/dashboard/frontend/src/slices/order/adminOrderSlice.test.ts
@@ -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", () => ({
@@ -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 () => {
diff --git a/hackathon_site/dashboard/frontend/src/slices/order/adminOrderSlice.ts b/hackathon_site/dashboard/frontend/src/slices/order/adminOrderSlice.ts
index 71dd6d5c7..04a254884 100644
--- a/hackathon_site/dashboard/frontend/src/slices/order/adminOrderSlice.ts
+++ b/hackathon_site/dashboard/frontend/src/slices/order/adminOrderSlice.ts
@@ -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],