1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96import { adapter } from 'test/utils/scheduler/adapters';
import { processEvent } from '@mui/x-scheduler-headless/process-event';
import { EventBuilder } from 'test/utils/scheduler/event-builder';
describe('processEvent', () => {
it('keeps event timezone in modelInBuiltInFormat', () => {
const event = EventBuilder.new(adapter)
.withDataTimezone('America/New_York')
.span('2025-01-01T10:00:00Z', '2025-01-01T12:00:00Z')
.build();
const processed = processEvent(event, 'Pacific/Kiritimati', adapter);
expect(processed.modelInBuiltInFormat.timezone).to.equal('America/New_York');
});
it('should fallback to "default" timezone when event.timezone is not provided', () => {
const event = EventBuilder.new().build();
const processed = processEvent(event, 'Europe/Paris', adapter);
expect(processed.dataTimezone.timezone).to.equal('default');
expect(processed.displayTimezone.timezone).to.equal('Europe/Paris');
});
describe('displayTimezone', () => {
it('converts start and end to the display timezone', () => {
const event = EventBuilder.new(adapter)
.span('2025-01-01T10:00:00Z', '2025-01-01T12:00:00Z')
.build();
const processed = processEvent(event, 'Pacific/Kiritimati', adapter);
expect(adapter.getTimezone(processed.displayTimezone.start.value)).to.equal(
'Pacific/Kiritimati',
);
expect(adapter.getTimezone(processed.displayTimezone.end.value)).to.equal(
'Pacific/Kiritimati',
);
expect(processed.displayTimezone.start.toString()).to.not.equal(event.start.toString());
expect(processed.displayTimezone.end.toString()).to.not.equal(event.end.toString());
});
it('converts exDates to the display timezone', () => {
const event = EventBuilder.new(adapter).exDates(['2025-01-05T00:00:00Z']).build();
const processed = processEvent(event, 'America/New_York', adapter);
expect(processed.displayTimezone.exDates).to.have.length(1);
expect(adapter.getTimezone(processed.displayTimezone.exDates![0])).to.equal(
'America/New_York',
);
});
it('converts rrule.until to the display timezone when rrule is an object', () => {
const event = EventBuilder.new(adapter)
.rrule({
freq: 'DAILY',
until: adapter.date('2025-01-10T23:59:00Z', 'default'),
})
.build();
const processed = processEvent(event, 'Asia/Tokyo', adapter);
expect(adapter.getTimezone(processed.displayTimezone.rrule!.until!)).to.equal('Asia/Tokyo');
});
it('parses rrule string and applies timezone conversion to UNTIL', () => {
const event = EventBuilder.new(adapter).build();
const processed = processEvent(
{
...event,
rrule: 'FREQ=DAILY;UNTIL=20250110T230000Z',
},
'Pacific/Kiritimati',
adapter,
);
expect(adapter.getTimezone(processed.displayTimezone.rrule!.until!)).to.equal(
'Pacific/Kiritimati',
);
});
});
describe('dataTimezone', () => {
it('keeps original timezone in dataTimezone', () => {
const event = EventBuilder.new(adapter)
.withDataTimezone('America/New_York')
.span('2025-01-01T10:00:00Z', '2025-01-01T12:00:00Z')
.build();
const processed = processEvent(event, 'Pacific/Kiritimati', adapter);
expect(processed.dataTimezone.timezone).to.equal('America/New_York');
});
});
});