2024-10-29 18:24:44 +00:00
|
|
|
import request from 'supertest';
|
2024-10-29 18:26:17 +00:00
|
|
|
import express from 'express';
|
|
|
|
import fs from 'fs';
|
|
|
|
import path from 'path';
|
2024-10-29 18:51:24 +00:00
|
|
|
import app from './server';
|
2024-10-29 18:27:29 +00:00
|
|
|
|
2024-11-04 18:20:33 +00:00
|
|
|
const TEST_MERGED_CALENDARS_DIR = path.join(__dirname, 'temp_test_calendar');
|
2024-10-31 12:46:44 +00:00
|
|
|
const MERGED_CALENDARS_DIR = 'calendar';
|
2024-11-04 10:10:43 +00:00
|
|
|
const TEST_CALENDARS_DIR = 'test_calendars';
|
2024-10-30 10:58:05 +00:00
|
|
|
let server;
|
2024-10-29 18:29:24 +00:00
|
|
|
|
|
|
|
describe('Calendar Merging API', () => {
|
2024-10-30 11:00:02 +00:00
|
|
|
beforeAll(async () => {
|
2024-11-04 18:21:58 +00:00
|
|
|
// Set environment variable for the test directory
|
|
|
|
process.env.TEST_MERGED_CALENDARS_DIR = TEST_MERGED_CALENDARS_DIR;
|
2024-10-30 11:00:02 +00:00
|
|
|
// Start the server
|
2024-10-30 11:54:19 +00:00
|
|
|
server = app.listen(0);
|
2024-11-04 18:21:58 +00:00
|
|
|
// Ensure the test merged calendars directory exists
|
|
|
|
if (!fs.existsSync(TEST_MERGED_CALENDARS_DIR)) {
|
|
|
|
fs.mkdirSync(TEST_MERGED_CALENDARS_DIR, { recursive: true });
|
2024-10-29 18:29:24 +00:00
|
|
|
}
|
|
|
|
});
|
2024-10-30 11:03:00 +00:00
|
|
|
|
2024-11-04 15:24:10 +00:00
|
|
|
afterAll(async () => {
|
2024-10-29 18:32:00 +00:00
|
|
|
// Clean up the merged calendars directory after tests
|
2024-11-05 10:33:56 +00:00
|
|
|
fs.rmSync(TEST_MERGED_CALENDARS_DIR, { recursive: true, force: true });
|
|
|
|
|
|
|
|
// Close the server
|
2024-10-30 11:56:38 +00:00
|
|
|
await new Promise(resolve => server.close(resolve));
|
2024-10-29 18:32:00 +00:00
|
|
|
});
|
2024-10-29 18:29:24 +00:00
|
|
|
|
2024-11-04 10:12:44 +00:00
|
|
|
const loadCalendarFile = (filename) => {
|
|
|
|
return path.join(__dirname, TEST_CALENDARS_DIR, filename);
|
|
|
|
};
|
|
|
|
|
2024-10-29 18:33:03 +00:00
|
|
|
test('Merge date-based calendar', async () => {
|
2024-10-30 12:00:20 +00:00
|
|
|
const response = await request(server)
|
2024-10-29 18:34:45 +00:00
|
|
|
.post('/merge')
|
|
|
|
.send({
|
|
|
|
linkGroupName: 'Date Based Calendar',
|
|
|
|
calendars: [
|
|
|
|
{
|
2024-11-04 15:24:10 +00:00
|
|
|
url: loadCalendarFile('ferien_bayern_2023.ics'),
|
2024-11-04 10:20:05 +00:00
|
|
|
prefix: 'Ferien_Bayern_2023',
|
2024-10-29 18:34:45 +00:00
|
|
|
override: false,
|
|
|
|
},
|
2024-10-31 12:41:08 +00:00
|
|
|
{
|
2024-11-04 15:24:10 +00:00
|
|
|
url: loadCalendarFile('US_Holidays.ics'),
|
|
|
|
prefix: 'US_holidays',
|
2024-11-04 10:21:25 +00:00
|
|
|
override: false,
|
2024-10-31 12:43:13 +00:00
|
|
|
},
|
2024-10-29 18:34:45 +00:00
|
|
|
],
|
|
|
|
});
|
2024-10-29 18:35:41 +00:00
|
|
|
expect(response.status).toBe(200);
|
|
|
|
expect(response.body.url).toMatch(/calendar\/Date_Based_Calendar/);
|
2024-10-29 18:40:57 +00:00
|
|
|
|
|
|
|
// Check if the file was created
|
|
|
|
const filePath = path.join(MERGED_CALENDARS_DIR, 'Date_Based_Calendar.ics');
|
|
|
|
expect(fs.existsSync(filePath)).toBe(true);
|
|
|
|
});
|
2024-10-30 11:23:44 +00:00
|
|
|
|
2024-10-29 18:43:11 +00:00
|
|
|
test('Merge time-based calendar', async () => {
|
2024-10-30 12:00:20 +00:00
|
|
|
const response = await request(server)
|
2024-11-04 15:24:10 +00:00
|
|
|
.post('/merge')
|
2024-10-29 18:43:11 +00:00
|
|
|
.send({
|
|
|
|
linkGroupName: 'Time Based Calendar',
|
|
|
|
calendars: [
|
|
|
|
{
|
2024-11-04 15:24:10 +00:00
|
|
|
url: loadCalendarFile('other_work.ics'),
|
2024-11-04 12:35:14 +00:00
|
|
|
prefix: 'other_work',
|
2024-10-29 18:43:11 +00:00
|
|
|
override: false,
|
|
|
|
},
|
2024-10-31 12:43:13 +00:00
|
|
|
{
|
2024-11-04 15:24:10 +00:00
|
|
|
url: loadCalendarFile('work.ics'),
|
2024-11-04 10:27:34 +00:00
|
|
|
prefix: 'work',
|
2024-11-04 10:23:47 +00:00
|
|
|
override: false,
|
2024-10-31 12:43:13 +00:00
|
|
|
},
|
2024-10-29 18:43:11 +00:00
|
|
|
],
|
|
|
|
});
|
|
|
|
|
|
|
|
expect(response.status).toBe(200);
|
|
|
|
expect(response.body.url).toMatch(/calendar\/Time_Based_Calendar/);
|
|
|
|
|
|
|
|
// Check if the file was created
|
|
|
|
const filePath = path.join(MERGED_CALENDARS_DIR, 'Time_Based_Calendar.ics');
|
|
|
|
expect(fs.existsSync(filePath)).toBe(true);
|
|
|
|
});
|
2024-10-30 11:23:44 +00:00
|
|
|
|
2024-10-29 18:45:09 +00:00
|
|
|
test('Merge calendar without prefix', async () => {
|
2024-10-30 12:00:20 +00:00
|
|
|
const response = await request(server)
|
2024-10-29 18:45:09 +00:00
|
|
|
.post('/merge')
|
|
|
|
.send({
|
|
|
|
linkGroupName: 'No Prefix Calendar',
|
|
|
|
calendars: [
|
|
|
|
{
|
2024-11-04 15:24:10 +00:00
|
|
|
url: loadCalendarFile('San_Francisco_Public_Holidays.ics'),
|
2024-10-29 18:45:09 +00:00
|
|
|
prefix: '',
|
|
|
|
override: false,
|
|
|
|
},
|
|
|
|
],
|
|
|
|
});
|
|
|
|
|
|
|
|
expect(response.status).toBe(200);
|
|
|
|
expect(response.body.url).toMatch(/calendar\/No_Prefix_Calendar/);
|
|
|
|
|
|
|
|
// Check if the file was created
|
|
|
|
const filePath = path.join(MERGED_CALENDARS_DIR, 'No_Prefix_Calendar.ics');
|
|
|
|
expect(fs.existsSync(filePath)).toBe(true);
|
|
|
|
});
|
2024-10-30 11:23:44 +00:00
|
|
|
|
2024-10-29 18:46:40 +00:00
|
|
|
test('Merge calendar with override', async () => {
|
2024-10-30 12:00:20 +00:00
|
|
|
const response = await request(server)
|
2024-10-29 18:46:40 +00:00
|
|
|
.post('/merge')
|
|
|
|
.send({
|
|
|
|
linkGroupName: 'Override Calendar',
|
|
|
|
calendars: [
|
|
|
|
{
|
2024-11-04 15:24:10 +00:00
|
|
|
url: loadCalendarFile('San_Francisco_Public_Holidays.ics'),
|
2024-10-29 18:46:40 +00:00
|
|
|
prefix: 'Override Event',
|
|
|
|
override: true,
|
|
|
|
},
|
|
|
|
],
|
|
|
|
});
|
|
|
|
|
|
|
|
expect(response.status).toBe(200);
|
|
|
|
expect(response.body.url).toMatch(/calendar\/Override_Calendar/);
|
|
|
|
|
|
|
|
// Check if the file was created
|
|
|
|
const filePath = path.join(MERGED_CALENDARS_DIR, 'Override_Calendar.ics');
|
|
|
|
expect(fs.existsSync(filePath)).toBe(true);
|
|
|
|
});
|
2024-10-29 18:33:03 +00:00
|
|
|
|
2024-11-04 15:24:10 +00:00
|
|
|
});
|