Skip to content

Commit 91f1ea2

Browse files
committed
add unit tests
1 parent 711ee2b commit 91f1ea2

File tree

2 files changed

+147
-0
lines changed

2 files changed

+147
-0
lines changed

tests/unit/data/acmWideCalendar.ics

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
BEGIN:VCALENDAR
2+
VERSION:2.0
3+
PRODID:-//sebbo.net//ical-generator//EN
4+
METHOD:PUBLISH
5+
NAME:ACM@UIUC - All Events
6+
X-WR-CALNAME:ACM@UIUC - All Events
7+
BEGIN:VTIMEZONE
8+
TZID:America/Chicago
9+
TZURL:http://tzurl.org/zoneinfo-outlook/America/Chicago
10+
X-LIC-LOCATION:America/Chicago
11+
BEGIN:DAYLIGHT
12+
TZOFFSETFROM:-0600
13+
TZOFFSETTO:-0500
14+
TZNAME:CDT
15+
DTSTART:19700308T020000
16+
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
17+
END:DAYLIGHT
18+
BEGIN:STANDARD
19+
TZOFFSETFROM:-0500
20+
TZOFFSETTO:-0600
21+
TZNAME:CST
22+
DTSTART:19701101T020000
23+
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
24+
END:STANDARD
25+
END:VTIMEZONE
26+
TIMEZONE-ID:America/Chicago
27+
X-WR-TIMEZONE:America/Chicago
28+
BEGIN:VEVENT
29+
UID:3138bead-b2c5-4bfe-bce4-4b478658cb78
30+
SEQUENCE:0
31+
DTSTAMP:20240822T155148
32+
DTSTART;TZID=America/Chicago:20240825T120000
33+
DTEND;TZID=America/Chicago:20240825T160000
34+
SUMMARY:Quad Day
35+
LOCATION:Main Quad
36+
DESCRIPTION:Host: ACM\nGoogle Maps Link: https://maps.app.goo.gl/2ZRYibtE7
37+
Yem5TrP6\n\nJoin us on Quad Day to learn more about ACM and CS at Illinois
38+
!
39+
ORGANIZER;CN="ACM@UIUC":mailto:ACM@UIUC
40+
END:VEVENT
41+
BEGIN:VEVENT
42+
UID:5bc69f3b-e958-4c80-b041-ddeae0385db8
43+
SEQUENCE:0
44+
DTSTAMP:20240822T155148
45+
DTSTART;TZID=America/Chicago:20240725T180000
46+
DTEND;TZID=America/Chicago:20240725T190000
47+
RRULE:FREQ=WEEKLY;UNTIL=20240905T190000
48+
SUMMARY:Infra Meeting
49+
LOCATION:ACM Middle Room
50+
DESCRIPTION:Host: Infrastructure Committee\n\nTest event.
51+
ORGANIZER;CN="ACM@UIUC":mailto:ACM@UIUC
52+
END:VEVENT
53+
BEGIN:VEVENT
54+
UID:4d38608d-90bf-4a58-8701-3f1b659a53db
55+
SEQUENCE:0
56+
DTSTAMP:20240822T155148
57+
DTSTART;TZID=America/Chicago:20240925T180000
58+
DTEND;TZID=America/Chicago:20240925T190000
59+
SUMMARY:Testing Paid and Featured Event
60+
LOCATION:ACM Middle Room
61+
DESCRIPTION:Host: Social Committee\n\nTest paid featured event.
62+
ORGANIZER;CN="ACM@UIUC":mailto:ACM@UIUC
63+
END:VEVENT
64+
BEGIN:VEVENT
65+
UID:accd7fe0-50ac-427b-8041-a2b3ddcd328e
66+
SEQUENCE:0
67+
DTSTAMP:20240822T155148
68+
DTSTART;TZID=America/Chicago:20240725T180000
69+
DTEND;TZID=America/Chicago:20240725T190000
70+
SUMMARY:Event in the past.
71+
LOCATION:ACM Middle Room
72+
DESCRIPTION:Host: Infrastructure Committee\n\nTest event in the past.
73+
ORGANIZER;CN="ACM@UIUC":mailto:ACM@UIUC
74+
END:VEVENT
75+
BEGIN:VEVENT
76+
UID:78be8f2b-3d1d-4481-90b6-85bfd84d38b4
77+
SEQUENCE:0
78+
DTSTAMP:20240822T155148
79+
DTSTART;TZID=America/Chicago:20240830T170000
80+
DTEND;TZID=America/Chicago:20240830T170000
81+
RRULE:FREQ=WEEKLY
82+
SUMMARY:Weekly Happy Hour
83+
LOCATION:Legends
84+
DESCRIPTION:Host: ACM\nGoogle Maps Link: https://goo.gl/maps/CXESXd3otbGZN
85+
qFP7\n\nMeet and chat with your peers and fellow ACM members\, with food o
86+
n us!
87+
ORGANIZER;CN="ACM@UIUC":mailto:ACM@UIUC
88+
END:VEVENT
89+
END:VCALENDAR

tests/unit/ical.test.ts

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import { afterAll, expect, test, beforeEach, vi } from "vitest";
2+
import { ScanCommand, DynamoDBClient } from "@aws-sdk/client-dynamodb";
3+
import { mockClient } from "aws-sdk-client-mock";
4+
import init from "../../src/index.js";
5+
import { EventGetResponse } from "../../src/routes/events.js";
6+
import {
7+
dynamoTableData,
8+
dynamoTableDataUnmarshalled,
9+
dynamoTableDataUnmarshalledUpcomingOnly,
10+
} from "./mockEventData.testdata.js";
11+
import { secretObject } from "./secret.testdata.js";
12+
import { readFile } from "fs/promises";
13+
14+
const ddbMock = mockClient(DynamoDBClient);
15+
const jwt_secret = secretObject["jwt_key"];
16+
vi.stubEnv("JwtSigningKey", jwt_secret);
17+
18+
const app = await init();
19+
test("Test getting ACM-wide iCal calendar", async () => {
20+
const date = new Date(2024, 7, 22, 15, 51, 48); // August 22, 2024, at 15:51:48 (3:51:48 PM)
21+
vi.setSystemTime(date);
22+
ddbMock.on(ScanCommand).resolves({
23+
Items: dynamoTableData as any,
24+
});
25+
const response = await app.inject({
26+
method: "GET",
27+
url: "/api/v1/ical",
28+
});
29+
expect(response.statusCode).toBe(200);
30+
expect(response.headers["content-disposition"]).toEqual(
31+
'attachment; filename="calendar.ics"',
32+
);
33+
expect(response.body).toEqual(
34+
(await readFile("./tests/unit/data/acmWideCalendar.ics")).toString(),
35+
);
36+
});
37+
38+
test("Test getting non-existent iCal calendar fails", async () => {
39+
const date = new Date(2024, 7, 22, 15, 51, 48); // August 22, 2024, at 15:51:48 (3:51:48 PM)
40+
vi.setSystemTime(date);
41+
ddbMock.on(ScanCommand).resolves({
42+
Items: dynamoTableData as any,
43+
});
44+
const response = await app.inject({
45+
method: "GET",
46+
url: "/api/v1/ical/invalid",
47+
});
48+
expect(response.statusCode).toBe(400);
49+
});
50+
51+
afterAll(async () => {
52+
await app.close();
53+
vi.useRealTimers();
54+
});
55+
beforeEach(() => {
56+
ddbMock.reset();
57+
vi.useFakeTimers();
58+
});

0 commit comments

Comments
 (0)