Skip to content

Commit e6410b7

Browse files
[scheduler] Add tests for eventCalendarEventSelectors (#20160)
1 parent 76b6fb7 commit e6410b7

File tree

5 files changed

+238
-44
lines changed

5 files changed

+238
-44
lines changed
Lines changed: 180 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,180 @@
1+
import { EventBuilder, getEventCalendarStateFromParameters } from 'test/utils/scheduler';
2+
import { eventCalendarEventSelectors } from './eventCalendarEventSelectors';
3+
4+
const defaultEvent = EventBuilder.new().id('event-1').build();
5+
const readOnlyEvent = EventBuilder.new().id('event-1').readOnly(true).build();
6+
7+
describe('eventCalendarEventSelectors', () => {
8+
describe('isDraggable', () => {
9+
it('should return false when areEventsDraggable is not defined', () => {
10+
const state = getEventCalendarStateFromParameters({
11+
events: [defaultEvent],
12+
areEventsDraggable: undefined,
13+
});
14+
expect(eventCalendarEventSelectors.isDraggable(state, 'event-1')).to.equal(false);
15+
});
16+
17+
it('should return false when areEventsDraggable is false', () => {
18+
const state = getEventCalendarStateFromParameters({
19+
events: [defaultEvent],
20+
areEventsDraggable: false,
21+
});
22+
expect(eventCalendarEventSelectors.isDraggable(state, 'event-1')).to.equal(false);
23+
});
24+
25+
it('should return false when the event is read-only', () => {
26+
const state = getEventCalendarStateFromParameters({
27+
events: [readOnlyEvent],
28+
areEventsDraggable: true,
29+
});
30+
expect(eventCalendarEventSelectors.isDraggable(state, 'event-1')).to.equal(false);
31+
});
32+
33+
it('should return false when the calendar is read-only', () => {
34+
const state = getEventCalendarStateFromParameters({
35+
events: [defaultEvent],
36+
areEventsDraggable: true,
37+
readOnly: true,
38+
});
39+
expect(eventCalendarEventSelectors.isDraggable(state, 'event-1')).to.equal(false);
40+
});
41+
42+
it('should return false when the event start property is read-only', () => {
43+
const state = getEventCalendarStateFromParameters({
44+
events: [defaultEvent],
45+
areEventsDraggable: true,
46+
eventModelStructure: {
47+
start: { getter: (event) => event.start },
48+
},
49+
});
50+
expect(eventCalendarEventSelectors.isDraggable(state, 'event-1')).to.equal(false);
51+
});
52+
53+
it('should return false when the event end property is read-only', () => {
54+
const state = getEventCalendarStateFromParameters({
55+
events: [defaultEvent],
56+
areEventsDraggable: true,
57+
eventModelStructure: {
58+
end: { getter: (event) => event.end },
59+
},
60+
});
61+
expect(eventCalendarEventSelectors.isDraggable(state, 'event-1')).to.equal(false);
62+
});
63+
64+
it('should return true when areEventsDraggable is true and the event is not read-only', () => {
65+
const state = getEventCalendarStateFromParameters({
66+
events: [defaultEvent],
67+
areEventsDraggable: true,
68+
});
69+
expect(eventCalendarEventSelectors.isDraggable(state, 'event-1')).to.equal(true);
70+
});
71+
});
72+
73+
describe('isResizable', () => {
74+
it('should return false when areEventsResizable is not defined', () => {
75+
const state = getEventCalendarStateFromParameters({
76+
events: [defaultEvent],
77+
view: 'week',
78+
areEventsResizable: undefined,
79+
});
80+
expect(eventCalendarEventSelectors.isResizable(state, 'event-1', 'day-grid')).to.equal(false);
81+
});
82+
83+
it('should return false when areEventsResizable is false', () => {
84+
const state = getEventCalendarStateFromParameters({
85+
events: [defaultEvent],
86+
view: 'week',
87+
areEventsResizable: false,
88+
});
89+
expect(eventCalendarEventSelectors.isResizable(state, 'event-1', 'day-grid')).to.equal(false);
90+
});
91+
92+
it('should return false when the event is read-only', () => {
93+
const state = getEventCalendarStateFromParameters({
94+
events: [readOnlyEvent],
95+
view: 'week',
96+
areEventsResizable: true,
97+
});
98+
expect(eventCalendarEventSelectors.isResizable(state, 'event-1', 'day-grid')).to.equal(false);
99+
});
100+
101+
it('should return false when the calendar is read-only', () => {
102+
const state = getEventCalendarStateFromParameters({
103+
events: [defaultEvent],
104+
view: 'week',
105+
areEventsResizable: true,
106+
readOnly: true,
107+
});
108+
expect(eventCalendarEventSelectors.isResizable(state, 'event-1', 'day-grid')).to.equal(false);
109+
});
110+
111+
it('should return false when the event start property is read-only', () => {
112+
const state = getEventCalendarStateFromParameters({
113+
events: [defaultEvent],
114+
view: 'week',
115+
areEventsResizable: true,
116+
eventModelStructure: {
117+
start: { getter: (event) => event.start },
118+
},
119+
});
120+
expect(eventCalendarEventSelectors.isResizable(state, 'event-1', 'day-grid')).to.equal(false);
121+
});
122+
123+
it('should return false when the event end property is read-only', () => {
124+
const state = getEventCalendarStateFromParameters({
125+
events: [defaultEvent],
126+
view: 'week',
127+
areEventsResizable: true,
128+
eventModelStructure: {
129+
end: { getter: (event) => event.end },
130+
},
131+
});
132+
expect(eventCalendarEventSelectors.isResizable(state, 'event-1', 'day-grid')).to.equal(false);
133+
});
134+
135+
it('should return true when areEventsResizable is true and the event is not read-only', () => {
136+
const state = getEventCalendarStateFromParameters({
137+
events: [defaultEvent],
138+
view: 'week',
139+
areEventsResizable: true,
140+
});
141+
expect(eventCalendarEventSelectors.isResizable(state, 'event-1', 'day-grid')).to.equal(true);
142+
});
143+
144+
it('should return false in day view on day-grid surface', () => {
145+
const state = getEventCalendarStateFromParameters({
146+
events: [defaultEvent],
147+
view: 'day',
148+
areEventsResizable: true,
149+
});
150+
expect(eventCalendarEventSelectors.isResizable(state, 'event-1', 'day-grid')).to.equal(false);
151+
});
152+
153+
it('should return true in day view on time-grid surface', () => {
154+
const state = getEventCalendarStateFromParameters({
155+
events: [defaultEvent],
156+
view: 'day',
157+
areEventsResizable: true,
158+
});
159+
expect(eventCalendarEventSelectors.isResizable(state, 'event-1', 'time-grid')).to.equal(true);
160+
});
161+
162+
it('should return false in month view on day-grid surface for single-day events', () => {
163+
const state = getEventCalendarStateFromParameters({
164+
events: [defaultEvent],
165+
view: 'month',
166+
areEventsResizable: true,
167+
});
168+
expect(eventCalendarEventSelectors.isResizable(state, 'event-1', 'day-grid')).to.equal(false);
169+
});
170+
171+
it('should return true in month view on day-grid surface for multi-day events', () => {
172+
const state = getEventCalendarStateFromParameters({
173+
events: [{ ...defaultEvent, allDay: true }],
174+
view: 'month',
175+
areEventsResizable: true,
176+
});
177+
expect(eventCalendarEventSelectors.isResizable(state, 'event-1', 'day-grid')).to.equal(true);
178+
});
179+
});
180+
});

packages/x-scheduler-headless/src/event-calendar-selectors/eventCalendarEventSelectors.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export const eventCalendarEventSelectors = {
2626
),
2727
isResizable: createSelector(
2828
(state: State, eventId: CalendarEventId, surfaceType: EventSurfaceType) => {
29-
if (schedulerEventSelectors.isReadOnly(state, eventId) || !state.areEventsDraggable) {
29+
if (schedulerEventSelectors.isReadOnly(state, eventId) || !state.areEventsResizable) {
3030
return false;
3131
}
3232

0 commit comments

Comments
 (0)