-
Overview
+
+
+ {" "}
+ Overview{" "}
+
+
+
+
+ -
+
+ {" "}
+
+ {checkedOut} item's checked out
+
+
+
+
+
+ -
+
+ {" "}
+
+ {participants} participants
+
+
+
+
+
+ -
+
+ {" "}
+
+ {count} teams
+
+
+
+
+
+ -
+
+ {" "}
+
+ {orderQuantity} orders
+
+
+
+
+
+ -
+
+ {" "}
+
+ 7 broken/lost items
+
+
+
+
+
+
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/event/teamAdminSlice.ts b/hackathon_site/dashboard/frontend/src/slices/event/teamAdminSlice.ts
index 05fb3a18b..eac72e19e 100644
--- a/hackathon_site/dashboard/frontend/src/slices/event/teamAdminSlice.ts
+++ b/hackathon_site/dashboard/frontend/src/slices/event/teamAdminSlice.ts
@@ -171,3 +171,14 @@ export const teamCountSelector = createSelector(
[teamAdminSliceSelector],
(teamAdminSlice) => teamAdminSlice.count
);
+
+export const totalParticipantCountSelector = createSelector(
+ [teamAdminSelectors.selectAll],
+ (teamsList) => {
+ let count = 0;
+ for (let i = 0; i < teamsList.length; i++) {
+ count += teamsList[i].profiles.length;
+ }
+ return count;
+ }
+);
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 82fab7a4c..04a254884 100644
--- a/hackathon_site/dashboard/frontend/src/slices/order/adminOrderSlice.ts
+++ b/hackathon_site/dashboard/frontend/src/slices/order/adminOrderSlice.ts
@@ -200,9 +200,24 @@ export const adminOrderNumStatusesSelector = createSelector(
(adminOrderSlice) => adminOrderSlice.numStatuses
);
-export const adminOrderTotalSelector = createSelector(
+export const adminOrderTotalWithFiltersSelector = createSelector(
[adminOrderSelectors.selectAll],
(orderItems) => orderItems.reduce((accum) => accum + 1, 0)
);
+//Todo this selector is being affected by filters
+export const adminOrderTotalSelector = createSelector();
+
+export const adminCheckedOutOrderTotalSelector = createSelector(
+ [adminOrderSelectors.selectAll],
+ (ordersList) => {
+ let count = 0;
+ for (let i = 0; i < ordersList.length; i++) {
+ if (ordersList[i].status === "Picked Up") {
+ count += ordersList[i].items.length;
+ }
+ }
+ return count;
+ }
+);
export const { setFilters, clearFilters } = actions;