mirror of
https://github.com/n8n-io/n8n.git
synced 2025-02-02 07:01:30 -08:00
90 lines
2 KiB
TypeScript
90 lines
2 KiB
TypeScript
import moment from 'moment-timezone';
|
|
|
|
import type { RecurrentEvent } from '../GenericFunctions';
|
|
import { addNextOccurrence } from '../GenericFunctions';
|
|
|
|
const mockNow = '2024-09-06T16:30:00+03:00';
|
|
jest.spyOn(global.Date, 'now').mockImplementation(() => moment(mockNow).valueOf());
|
|
|
|
describe('addNextOccurrence', () => {
|
|
it('should not modify event if no recurrence exists', () => {
|
|
const event: RecurrentEvent[] = [
|
|
{
|
|
start: {
|
|
dateTime: '2024-09-01T08:00:00Z',
|
|
timeZone: 'UTC',
|
|
},
|
|
end: {
|
|
dateTime: '2024-09-01T09:00:00Z',
|
|
timeZone: 'UTC',
|
|
},
|
|
recurrence: [],
|
|
},
|
|
];
|
|
|
|
const result = addNextOccurrence(event);
|
|
|
|
expect(result[0].nextOccurrence).toBeUndefined();
|
|
});
|
|
|
|
it('should handle event with no RRULE correctly', () => {
|
|
const event: RecurrentEvent[] = [
|
|
{
|
|
start: {
|
|
dateTime: '2024-09-01T08:00:00Z',
|
|
timeZone: 'UTC',
|
|
},
|
|
end: {
|
|
dateTime: '2024-09-01T09:00:00Z',
|
|
timeZone: 'UTC',
|
|
},
|
|
recurrence: ['FREQ=WEEKLY;COUNT=2'],
|
|
},
|
|
];
|
|
|
|
const result = addNextOccurrence(event);
|
|
|
|
expect(result[0].nextOccurrence).toBeUndefined();
|
|
});
|
|
|
|
it('should ignore recurrence if until date is in the past', () => {
|
|
const event: RecurrentEvent[] = [
|
|
{
|
|
start: {
|
|
dateTime: '2024-08-01T08:00:00Z',
|
|
timeZone: 'UTC',
|
|
},
|
|
end: {
|
|
dateTime: '2024-08-01T09:00:00Z',
|
|
timeZone: 'UTC',
|
|
},
|
|
recurrence: ['RRULE:FREQ=DAILY;UNTIL=20240805T000000Z'],
|
|
},
|
|
];
|
|
|
|
const result = addNextOccurrence(event);
|
|
|
|
expect(result[0].nextOccurrence).toBeUndefined();
|
|
});
|
|
|
|
it('should handle errors gracefully without breaking and return unchanged event', () => {
|
|
const event: RecurrentEvent[] = [
|
|
{
|
|
start: {
|
|
dateTime: '2024-09-06T17:30:00+03:00',
|
|
timeZone: 'Europe/Berlin',
|
|
},
|
|
end: {
|
|
dateTime: '2024-09-06T18:00:00+03:00',
|
|
timeZone: 'Europe/Berlin',
|
|
},
|
|
recurrence: ['xxxxx'],
|
|
},
|
|
];
|
|
|
|
const result = addNextOccurrence(event);
|
|
|
|
expect(result).toEqual(event);
|
|
});
|
|
});
|