Skip to content

Commit d261a7b

Browse files
authored
Merge pull request #375 from HackIllinois/dev/sherry/event-id-bug
Remove eventId for attendees in GET
2 parents 71c94b6 + 0783bad commit d261a7b

File tree

3 files changed

+39
-2
lines changed

3 files changed

+39
-2
lines changed

src/services/event/event-router.test.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,23 @@ const TESTER_EVENT_2 = {
7979
isPro: false,
8080
} satisfies Event;
8181

82+
const PUBLIC_EVENT = {
83+
eventId: "test-public-event",
84+
isStaff: false,
85+
name: "meeting",
86+
description: "meeting",
87+
startTime: 9,
88+
endTime: 10,
89+
eventType: EventType.MEETING,
90+
locations: [],
91+
isAsync: false,
92+
points: 0,
93+
isPrivate: false,
94+
isMandatory: true,
95+
isPro: false,
96+
menu: [],
97+
} satisfies Event;
98+
8299
// Before each test, initialize database with tester & other users
83100
beforeEach(async () => {
84101
await Models.EventFollowers.create(TESTER_EVENT_FOLLOWERS);
@@ -92,6 +109,18 @@ beforeEach(async () => {
92109
await Models.Event.create(TESTER_EVENT_2);
93110
});
94111

112+
describe("GET /event/", () => {
113+
it("returns events with correct eventId visibility", async () => {
114+
await Models.Event.deleteMany({});
115+
await Models.Event.create(PUBLIC_EVENT);
116+
const attendeeResponse = await getAsAttendee(`/event/`).expect(StatusCode.SuccessOK);
117+
const staffResponse = await getAsStaff(`/event/`).expect(StatusCode.SuccessOK);
118+
119+
expect(JSON.parse(attendeeResponse.text).events.eventId).toBeUndefined();
120+
expect(JSON.parse(staffResponse.text).events).toMatchObject([PUBLIC_EVENT]);
121+
});
122+
});
123+
95124
describe("GET /event/followers/", () => {
96125
it("gives an forbidden error for a non-staff user", async () => {
97126
const response = await getAsAttendee(`/event/followers/${TESTER_EVENT_FOLLOWERS.eventId}/`).expect(

src/services/event/event-router.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {
1616
EventAttendeesSchema,
1717
EventAttendeesInfoSchema,
1818
EventAttendanceSchema,
19+
PublicEventsSchema,
1920
} from "./event-schemas";
2021
import { EventIdSchema, SuccessResponseSchema, UserIdSchema } from "../../common/schemas";
2122
import { z } from "zod";
@@ -259,16 +260,17 @@ eventsRouter.get(
259260
responses: {
260261
[StatusCode.SuccessOK]: {
261262
description: "The events",
262-
schema: EventsSchema,
263+
schema: z.union([PublicEventsSchema, EventsSchema]),
263264
},
264265
},
265266
}),
266267
async (req, res) => {
267268
const roles = tryGetAuthenticatedUser(req)?.roles || [];
269+
const includeIds = roles.includes(Role.ADMIN) || roles.includes(Role.STAFF);
268270
const events = await Models.Event.find({
269271
eventType: { $ne: EventType.STAFF_SHIFT },
270272
...restrictEventsByRoles(roles),
271-
});
273+
}).select(includeIds ? "-_id" : "-eventId -_id"); // Excludes eventId for attendees
272274

273275
return res.status(StatusCode.SuccessOK).send({ events });
274276
},

src/services/event/event-schemas.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,12 @@ export const EventsSchema = z
241241
})
242242
.openapi("Events");
243243

244+
export const PublicEventsSchema = z
245+
.object({
246+
events: z.array(EventSchema.omit({ eventId: true })),
247+
})
248+
.openapi("Events");
249+
244250
export const EventAttendanceSchema = z
245251
.object({
246252
present: z.array(z.tuple([z.string(), z.number(), z.number()])),

0 commit comments

Comments
 (0)