forked from ryanmwangi/CalMerger
test: add nextcloud tests
This commit is contained in:
parent
1f19d8cf1f
commit
bed3e47f8e
|
@ -26,7 +26,7 @@ describe('Calendar Merging API', () => {
|
||||||
await new Promise(resolve => setTimeout(resolve, 100));
|
await new Promise(resolve => setTimeout(resolve, 100));
|
||||||
});
|
});
|
||||||
|
|
||||||
const loadCalendarFile = (filename) => {
|
const getTestCalendarFilename = (filename) => {
|
||||||
return path.join(TEST_CALENDARS_DIR, filename);
|
return path.join(TEST_CALENDARS_DIR, filename);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -34,8 +34,33 @@ describe('Calendar Merging API', () => {
|
||||||
return fs.readFileSync(path.join(EXPECTED_OUTPUTS_DIR, filename), 'utf8');
|
return fs.readFileSync(path.join(EXPECTED_OUTPUTS_DIR, filename), 'utf8');
|
||||||
};
|
};
|
||||||
|
|
||||||
|
test('Preserve nextcloud calendar', async () => {
|
||||||
|
const input = getTestCalendarFilename('nextcloud-minimal.ics');
|
||||||
|
const response = await request(server)
|
||||||
|
.post('/merge')
|
||||||
|
.send({
|
||||||
|
linkGroupName: 'nextcloud-minimal',
|
||||||
|
calendars: [
|
||||||
|
{
|
||||||
|
url: input,
|
||||||
|
prefix: '',
|
||||||
|
override: false,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
expect(response.status).toBe(200);
|
||||||
|
// Check if the file was created in the test directory
|
||||||
|
const filePath = path.join(CALENDARS_DIR, 'nextcloud-minimal.ics');
|
||||||
|
console.log('Checking if file exists at:', filePath);
|
||||||
|
expect(fs.existsSync(filePath)).toBe(true);
|
||||||
|
// Load expected output and compare
|
||||||
|
const expectedOutput = fs.readFileSync(input, 'utf8');
|
||||||
|
const actualOutput = fs.readFileSync(filePath, 'utf8');
|
||||||
|
expect(actualOutput).toBe(expectedOutput);
|
||||||
|
});
|
||||||
|
|
||||||
test('Preserve date-based calendar', async () => {
|
test('Preserve date-based calendar', async () => {
|
||||||
const input = loadCalendarFile('US_Holidays.ics');
|
const input = getTestCalendarFilename('US_Holidays.ics');
|
||||||
const response = await request(server)
|
const response = await request(server)
|
||||||
.post('/merge')
|
.post('/merge')
|
||||||
.send({
|
.send({
|
||||||
|
@ -57,7 +82,6 @@ describe('Calendar Merging API', () => {
|
||||||
const expectedOutput = fs.readFileSync(input, 'utf8');
|
const expectedOutput = fs.readFileSync(input, 'utf8');
|
||||||
const actualOutput = fs.readFileSync(filePath, 'utf8');
|
const actualOutput = fs.readFileSync(filePath, 'utf8');
|
||||||
expect(actualOutput).toBe(expectedOutput);
|
expect(actualOutput).toBe(expectedOutput);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// test('Merge date-based calendar', async () => {
|
// test('Merge date-based calendar', async () => {
|
||||||
|
@ -67,12 +91,12 @@ describe('Calendar Merging API', () => {
|
||||||
// linkGroupName: 'Date Based Calendar',
|
// linkGroupName: 'Date Based Calendar',
|
||||||
// calendars: [
|
// calendars: [
|
||||||
// {
|
// {
|
||||||
// url: loadCalendarFile('holiday_calendar_2023.ics'),
|
// url: getTestCalendarFilename('holiday_calendar_2023.ics'),
|
||||||
// prefix: 'holiday_calendar_2023',
|
// prefix: 'holiday_calendar_2023',
|
||||||
// override: false,
|
// override: false,
|
||||||
// },
|
// },
|
||||||
// {
|
// {
|
||||||
// url: loadCalendarFile('US_Holidays.ics'),
|
// url: getTestCalendarFilename('US_Holidays.ics'),
|
||||||
// prefix: 'US_holidays',
|
// prefix: 'US_holidays',
|
||||||
// override: false,
|
// override: false,
|
||||||
// },
|
// },
|
||||||
|
@ -93,7 +117,7 @@ describe('Calendar Merging API', () => {
|
||||||
// });
|
// });
|
||||||
|
|
||||||
test('Merge time-based calendar', async () => {
|
test('Merge time-based calendar', async () => {
|
||||||
const input = loadCalendarFile('work_task_calendar.ics');
|
const input = getTestCalendarFilename('work_task_calendar.ics');
|
||||||
const response = await request(server)
|
const response = await request(server)
|
||||||
.post('/merge')
|
.post('/merge')
|
||||||
.send({
|
.send({
|
||||||
|
@ -121,7 +145,7 @@ describe('Calendar Merging API', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
test('EAT Event', async () => {
|
test('EAT Event', async () => {
|
||||||
const input = loadCalendarFile('eat_time_zone_event.ics');
|
const input = getTestCalendarFilename('eat_time_zone_event.ics');
|
||||||
const response = await request(server)
|
const response = await request(server)
|
||||||
.post('/merge')
|
.post('/merge')
|
||||||
.send({
|
.send({
|
||||||
|
@ -155,7 +179,7 @@ describe('Calendar Merging API', () => {
|
||||||
// linkGroupName: 'No Prefix Calendar',
|
// linkGroupName: 'No Prefix Calendar',
|
||||||
// calendars: [
|
// calendars: [
|
||||||
// {
|
// {
|
||||||
// url: loadCalendarFile('sf_public_holidays.ics'),
|
// url: getTestCalendarFilename('sf_public_holidays.ics'),
|
||||||
// prefix: '',
|
// prefix: '',
|
||||||
// override: false,
|
// override: false,
|
||||||
// },
|
// },
|
||||||
|
@ -182,7 +206,7 @@ describe('Calendar Merging API', () => {
|
||||||
// linkGroupName: 'Override Calendar',
|
// linkGroupName: 'Override Calendar',
|
||||||
// calendars: [
|
// calendars: [
|
||||||
// {
|
// {
|
||||||
// url: loadCalendarFile('sf_public_holidays.ics'),
|
// url: getTestCalendarFilename('sf_public_holidays.ics'),
|
||||||
// prefix: 'Override Event',
|
// prefix: 'Override Event',
|
||||||
// override: true,
|
// override: true,
|
||||||
// },
|
// },
|
||||||
|
@ -209,12 +233,12 @@ describe('Calendar Merging API', () => {
|
||||||
// linkGroupName: 'UTCEAT Time Zone Calendar',
|
// linkGroupName: 'UTCEAT Time Zone Calendar',
|
||||||
// calendars: [
|
// calendars: [
|
||||||
// {
|
// {
|
||||||
// url: loadCalendarFile('utc_time_zone_event.ics'),
|
// url: getTestCalendarFilename('utc_time_zone_event.ics'),
|
||||||
// prefix: 'UTC_Event',
|
// prefix: 'UTC_Event',
|
||||||
// override: false,
|
// override: false,
|
||||||
// },
|
// },
|
||||||
// {
|
// {
|
||||||
// url: loadCalendarFile('eat_time_zone_event.ics'),
|
// url: getTestCalendarFilename('eat_time_zone_event.ics'),
|
||||||
// prefix: 'EAT_Event',
|
// prefix: 'EAT_Event',
|
||||||
// override: false,
|
// override: false,
|
||||||
// },
|
// },
|
||||||
|
@ -240,12 +264,12 @@ describe('Calendar Merging API', () => {
|
||||||
// linkGroupName: 'Merged Date and Time Based Calendar',
|
// linkGroupName: 'Merged Date and Time Based Calendar',
|
||||||
// calendars: [
|
// calendars: [
|
||||||
// {
|
// {
|
||||||
// url: loadCalendarFile('holiday_calendar_2023.ics'), // Date-based calendar
|
// url: getTestCalendarFilename('holiday_calendar_2023.ics'), // Date-based calendar
|
||||||
// prefix: 'Holiday_2023',
|
// prefix: 'Holiday_2023',
|
||||||
// override: false,
|
// override: false,
|
||||||
// },
|
// },
|
||||||
// {
|
// {
|
||||||
// url: loadCalendarFile('work_task_calendar.ics'), // Time-based calendar
|
// url: getTestCalendarFilename('work_task_calendar.ics'), // Time-based calendar
|
||||||
// prefix: 'Work_Task',
|
// prefix: 'Work_Task',
|
||||||
// override: false,
|
// override: false,
|
||||||
// },
|
// },
|
||||||
|
|
|
@ -35,17 +35,16 @@ describe('Calendar Utility Functions', () => {
|
||||||
|
|
||||||
// Test case: reading data from a file
|
// Test case: reading data from a file
|
||||||
it('reads and parses data from a file', async () => {
|
it('reads and parses data from a file', async () => {
|
||||||
const testCalendar = { url: path.join(__dirname, 'test_calendars', 'eat_time_zone_event.ics'), };
|
const testCalendar = { url: path.join(__dirname, 'test_calendars', 'nextcloud.ics'), };
|
||||||
|
|
||||||
// Call the fetchCalendarData function
|
// Call the fetchCalendarData function
|
||||||
const result = await fetchCalendarData(testCalendar);
|
const result = await fetchCalendarData(testCalendar);
|
||||||
|
const parsed = ICAL.parse(result.data);
|
||||||
// Expected parsed output
|
const component = new ICAL.Component(parsed);
|
||||||
const expectedParsedData = '';
|
const firstEvent = new ICAL.Event(component.getAllSubcomponents('vevent')[0]);
|
||||||
|
|
||||||
// Assert that the fetched and parsed data matches
|
// Assert that the fetched and parsed data matches
|
||||||
expect(ICAL.parse(result.data)).toEqual(expectedParsedData);
|
expect(firstEvent.startDate.toJSON()).toEqual({"day": 20, "hour": 21, "isDate": false, "minute": 15, "month": 11, "second": 0, "timezone": "Europe/Berlin", "year": 2024});
|
||||||
});
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
BEGIN:VCALENDAR
|
||||||
|
VERSION:2.0
|
||||||
|
CALSCALE:GREGORIAN
|
||||||
|
PRODID:-//SabreDAV//SabreDAV//EN
|
||||||
|
BEGIN:VTIMEZONE
|
||||||
|
TZID:Europe/Berlin
|
||||||
|
BEGIN:DAYLIGHT
|
||||||
|
TZOFFSETFROM:+0100
|
||||||
|
TZOFFSETTO:+0200
|
||||||
|
TZNAME:CEST
|
||||||
|
DTSTART:19700329T020000
|
||||||
|
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
|
||||||
|
END:DAYLIGHT
|
||||||
|
BEGIN:STANDARD
|
||||||
|
TZOFFSETFROM:+0200
|
||||||
|
TZOFFSETTO:+0100
|
||||||
|
TZNAME:CET
|
||||||
|
DTSTART:19701025T030000
|
||||||
|
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
|
||||||
|
END:STANDARD
|
||||||
|
END:VTIMEZONE
|
||||||
|
BEGIN:VEVENT
|
||||||
|
DTEND;TZID=Europe/Berlin:20241120T215000
|
||||||
|
DTSTAMP:20241113T212909Z
|
||||||
|
DTSTART;TZID=Europe/Berlin:20241120T211500
|
||||||
|
LOCATION:FaceTime
|
||||||
|
RRULE:FREQ=WEEKLY;BYDAY=WE
|
||||||
|
SEQUENCE:0
|
||||||
|
SUMMARY:JR Weekly Check-In
|
||||||
|
UID:5f4ad965-16a8-48eb-8233-78bf93a8b35e
|
||||||
|
END:VEVENT
|
||||||
|
END:VCALENDAR
|
|
@ -0,0 +1,131 @@
|
||||||
|
BEGIN:VCALENDAR
|
||||||
|
VERSION:2.0
|
||||||
|
CALSCALE:GREGORIAN
|
||||||
|
PRODID:-//SabreDAV//SabreDAV//EN
|
||||||
|
X-WR-CALNAME:Progodyssey Ryan (stackspin-a51baefe-70df-4cce-9be1-048354b619
|
||||||
|
b8)
|
||||||
|
X-APPLE-CALENDAR-COLOR:#ddcb55
|
||||||
|
REFRESH-INTERVAL;VALUE=DURATION:PT4H
|
||||||
|
X-PUBLISHED-TTL:PT4H
|
||||||
|
BEGIN:VTIMEZONE
|
||||||
|
TZID:Europe/Berlin
|
||||||
|
BEGIN:DAYLIGHT
|
||||||
|
TZOFFSETFROM:+0100
|
||||||
|
TZOFFSETTO:+0200
|
||||||
|
TZNAME:CEST
|
||||||
|
DTSTART:19700329T020000
|
||||||
|
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
|
||||||
|
END:DAYLIGHT
|
||||||
|
BEGIN:STANDARD
|
||||||
|
TZOFFSETFROM:+0200
|
||||||
|
TZOFFSETTO:+0100
|
||||||
|
TZNAME:CET
|
||||||
|
DTSTART:19701025T030000
|
||||||
|
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
|
||||||
|
END:STANDARD
|
||||||
|
END:VTIMEZONE
|
||||||
|
BEGIN:VEVENT
|
||||||
|
CREATED:20241113T212909Z
|
||||||
|
DTEND;TZID=Europe/Berlin:20241120T215000
|
||||||
|
DTSTAMP:20241113T212909Z
|
||||||
|
DTSTART;TZID=Europe/Berlin:20241120T211500
|
||||||
|
LAST-MODIFIED:20241113T212909Z
|
||||||
|
LOCATION:FaceTime
|
||||||
|
RRULE:FREQ=WEEKLY;BYDAY=WE
|
||||||
|
SEQUENCE:0
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:JR Weekly Check-In
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
UID:5f4ad965-16a8-48eb-8233-78bf93a8b35e
|
||||||
|
RELATED-TO;RELTYPE=SIBLING:17cf7d22-9bee-4a8e-9023-878b1a1b73a0
|
||||||
|
BEGIN:VALARM
|
||||||
|
ACKNOWLEDGED:20241113T202052Z
|
||||||
|
ACTION:DISPLAY
|
||||||
|
DESCRIPTION:This is an event reminder.
|
||||||
|
TRIGGER:-PT20M
|
||||||
|
UID:99250427-AB45-4111-A999-DB417FC290D1
|
||||||
|
X-WR-ALARMUID:99250427-AB45-4111-A999-DB417FC290D1
|
||||||
|
SUMMARY:JR Weekly Check-In
|
||||||
|
END:VALARM
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
CREATED:20241113T213036Z
|
||||||
|
DTEND;TZID=Europe/Berlin:20241204T212500
|
||||||
|
DTSTAMP:20241113T213036Z
|
||||||
|
DTSTART;TZID=Europe/Berlin:20241204T203000
|
||||||
|
LAST-MODIFIED:20241113T213036Z
|
||||||
|
LOCATION:FaceTime
|
||||||
|
SEQUENCE:1
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:JR Weekly Check-In
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
UID:5f4ad965-16a8-48eb-8233-78bf93a8b35e
|
||||||
|
RELATED-TO;RELTYPE=SIBLING:17cf7d22-9bee-4a8e-9023-878b1a1b73a0
|
||||||
|
RECURRENCE-ID;TZID=Europe/Berlin:20241204T211500
|
||||||
|
BEGIN:VALARM
|
||||||
|
ACKNOWLEDGED:20241113T202052Z
|
||||||
|
ACTION:DISPLAY
|
||||||
|
DESCRIPTION:This is an event reminder.
|
||||||
|
TRIGGER:-PT20M
|
||||||
|
UID:99250427-AB45-4111-A999-DB417FC290D1
|
||||||
|
X-WR-ALARMUID:99250427-AB45-4111-A999-DB417FC290D1
|
||||||
|
SUMMARY:JR Weekly Check-In
|
||||||
|
END:VALARM
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
CREATED:20241107T101403Z
|
||||||
|
DTEND;TZID=Europe/Berlin:20241111T134500
|
||||||
|
DTSTAMP:20241118T103806Z
|
||||||
|
DTSTART;TZID=Europe/Berlin:20241111T121500
|
||||||
|
LAST-MODIFIED:20241118T103803Z
|
||||||
|
LOCATION:https://call.element.io/room/#/progodyssey?password=bU95nPdV2u-BGJ
|
||||||
|
4zw9cPGw&roomId=%21QsGQUxdyuMfGKhGvNH%3Acall.ems.host
|
||||||
|
RRULE:FREQ=WEEKLY;BYDAY=MO
|
||||||
|
SEQUENCE:4
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:JR Coprogramming Session
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
UID:8c251542-6cbf-4396-b83d-490be79c97a9
|
||||||
|
BEGIN:VALARM
|
||||||
|
ACKNOWLEDGED:20241118T103803Z
|
||||||
|
ACTION:DISPLAY
|
||||||
|
DESCRIPTION:This is an event reminder.
|
||||||
|
SUMMARY:Coprogramming Session
|
||||||
|
TRIGGER:-PT1H
|
||||||
|
UID:55C3B462-E182-4A2B-A500-3F249FC860C2
|
||||||
|
X-WR-ALARMUID:55C3B462-E182-4A2B-A500-3F249FC860C2
|
||||||
|
END:VALARM
|
||||||
|
BEGIN:VALARM
|
||||||
|
ACTION:DISPLAY
|
||||||
|
DESCRIPTION:Reminder
|
||||||
|
TRIGGER:-PT1H
|
||||||
|
UID:9AABB2AB-A755-4723-87CF-10B119670E7F
|
||||||
|
X-APPLE-DEFAULT-ALARM:TRUE
|
||||||
|
X-WR-ALARMUID:9AABB2AB-A755-4723-87CF-10B119670E7F
|
||||||
|
END:VALARM
|
||||||
|
END:VEVENT
|
||||||
|
BEGIN:VEVENT
|
||||||
|
CREATED:20241107T101605Z
|
||||||
|
DTEND;TZID=Europe/Berlin:20241113T215500
|
||||||
|
DTSTAMP:20241113T212909Z
|
||||||
|
DTSTART;TZID=Europe/Berlin:20241113T213000
|
||||||
|
LAST-MODIFIED:20241113T212909Z
|
||||||
|
LOCATION:FaceTime
|
||||||
|
RRULE:FREQ=WEEKLY;BYDAY=WE;UNTIL=20241120T202959Z
|
||||||
|
SEQUENCE:4
|
||||||
|
STATUS:CONFIRMED
|
||||||
|
SUMMARY:JR Weekly Check-In
|
||||||
|
TRANSP:OPAQUE
|
||||||
|
UID:17cf7d22-9bee-4a8e-9023-878b1a1b73a0
|
||||||
|
RELATED-TO;RELTYPE=SIBLING:5f4ad965-16a8-48eb-8233-78bf93a8b35e
|
||||||
|
BEGIN:VALARM
|
||||||
|
ACKNOWLEDGED:20241113T202052Z
|
||||||
|
ACTION:DISPLAY
|
||||||
|
DESCRIPTION:This is an event reminder.
|
||||||
|
SUMMARY:JR Weekly Check-In
|
||||||
|
TRIGGER:-PT20M
|
||||||
|
UID:99250427-AB45-4111-A999-DB417FC290D1
|
||||||
|
X-WR-ALARMUID:99250427-AB45-4111-A999-DB417FC290D1
|
||||||
|
END:VALARM
|
||||||
|
END:VEVENT
|
||||||
|
END:VCALENDAR
|
Loading…
Reference in New Issue