@happychef/algorithm 1.2.10 → 1.2.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/ci-cd.yml +133 -2
- package/BRANCH_PROTECTION_SETUP.md +167 -0
- package/CHANGELOG.md +8 -8
- package/RESERVERINGEN_GIDS.md +986 -986
- package/assignTables.js +424 -398
- package/changes/2025/December/PR2___change.md +14 -14
- package/changes/2025/December/PR3_add__change.md +20 -20
- package/changes/2025/December/PR4___.md +16 -0
- package/changes/2025/December/PR5___.md +16 -0
- package/changes/2025/December/PR6__del_.md +18 -0
- package/changes/2025/December/PR7_add__change.md +22 -0
- package/changes/2026/January/PR8_add__change.md +39 -0
- package/changes/2026/January/PR9_add__change.md +20 -0
- package/filters/maxArrivalsFilter.js +114 -114
- package/filters/maxGroupsFilter.js +221 -221
- package/filters/timeFilter.js +89 -89
- package/getAvailableTimeblocks.js +158 -158
- package/grouping.js +162 -162
- package/index.js +42 -42
- package/isDateAvailable.js +80 -80
- package/isDateAvailableWithTableCheck.js +171 -171
- package/isTimeAvailable.js +25 -25
- package/package.json +27 -27
- package/processing/dailyGuestCounts.js +73 -73
- package/processing/mealTypeCount.js +133 -133
- package/processing/timeblocksAvailable.js +167 -167
- package/reservation_data/counter.js +64 -64
- package/restaurant_data/exceptions.js +149 -149
- package/restaurant_data/openinghours.js +123 -123
- package/simulateTableAssignment.js +709 -699
- package/tableHelpers.js +178 -178
- package/tables/time/parseTime.js +19 -19
- package/tables/time/shifts.js +7 -7
- package/tables/utils/calculateDistance.js +13 -13
- package/tables/utils/isTableFreeForAllSlots.js +14 -14
- package/tables/utils/isTemporaryTableValid.js +39 -39
- package/test/test_counter.js +194 -194
- package/test/test_dailyCount.js +81 -81
- package/test/test_datesAvailable.js +106 -106
- package/test/test_exceptions.js +172 -172
- package/test/test_isDateAvailable.js +330 -330
- package/test/test_mealTypeCount.js +54 -54
- package/test/test_timesAvailable.js +88 -88
- package/test-meal-stop-fix.js +147 -147
- package/test-meal-stop-simple.js +93 -93
- package/test.js +336 -336
|
@@ -1,106 +1,106 @@
|
|
|
1
|
-
// dateAvailabilityTests.js
|
|
2
|
-
|
|
3
|
-
const { isDateAvailable } = require('../isDateAvailable');
|
|
4
|
-
const { getDailyGuestCounts } = require('../processing/dailyGuestCounts');
|
|
5
|
-
|
|
6
|
-
// Sample data
|
|
7
|
-
const data = {
|
|
8
|
-
"_id": "demo",
|
|
9
|
-
"general-settings": {
|
|
10
|
-
"zitplaatsen": "5",
|
|
11
|
-
"duurReservatie": "120", // Reservation duration of 120 minutes
|
|
12
|
-
"intervalReservatie": "30" // Time increment of 30 minutes
|
|
13
|
-
},
|
|
14
|
-
"openinghours-breakfast": {
|
|
15
|
-
"schemeSettings": {
|
|
16
|
-
"Monday": {
|
|
17
|
-
"enabled": false,
|
|
18
|
-
"startTime": "07:00",
|
|
19
|
-
"endTime": "11:00",
|
|
20
|
-
"maxCapacityEnabled": false, // Will fallback to zitplaatsen
|
|
21
|
-
"maxCapacity": "0",
|
|
22
|
-
"shiftsEnabled": false,
|
|
23
|
-
"shifts": []
|
|
24
|
-
}
|
|
25
|
-
},
|
|
26
|
-
"storedNumber": {
|
|
27
|
-
"$numberInt": "0"
|
|
28
|
-
}
|
|
29
|
-
},
|
|
30
|
-
"openinghours-lunch": {
|
|
31
|
-
"schemeSettings": {
|
|
32
|
-
"Monday": {
|
|
33
|
-
"enabled": false,
|
|
34
|
-
"startTime": "13:00", // Lunch starts at 13:00
|
|
35
|
-
"endTime": "16:00",
|
|
36
|
-
"maxCapacityEnabled": true,
|
|
37
|
-
"maxCapacity": "20",
|
|
38
|
-
"shiftsEnabled": false,
|
|
39
|
-
"shifts": []
|
|
40
|
-
}
|
|
41
|
-
},
|
|
42
|
-
"storedNumber": {
|
|
43
|
-
"$numberInt": "0"
|
|
44
|
-
}
|
|
45
|
-
},
|
|
46
|
-
"openinghours-dinner": {
|
|
47
|
-
"schemeSettings": {
|
|
48
|
-
"Monday": {
|
|
49
|
-
"enabled": true,
|
|
50
|
-
"startTime": "16:00",
|
|
51
|
-
"endTime": "23:00",
|
|
52
|
-
"maxCapacityEnabled": true,
|
|
53
|
-
"maxCapacity": "5",
|
|
54
|
-
"shiftsEnabled": false,
|
|
55
|
-
}
|
|
56
|
-
},
|
|
57
|
-
"storedNumber": {
|
|
58
|
-
"$numberInt": "0"
|
|
59
|
-
}
|
|
60
|
-
},
|
|
61
|
-
"exceptions": []
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
// Sample reservations
|
|
65
|
-
const reservations = [
|
|
66
|
-
// Dinner reservations
|
|
67
|
-
{ guests: "5", time: "18:00", date: "2024-12-02" }, // Shift 1 is fully booked
|
|
68
|
-
{ guests: "2", time: "20:00", date: "2024-12-02" }, // Shift 2 has available seats
|
|
69
|
-
];
|
|
70
|
-
|
|
71
|
-
console.log('--- Date Availability Tests ---');
|
|
72
|
-
|
|
73
|
-
const guests = 3;
|
|
74
|
-
|
|
75
|
-
// Test 1: Check availability on 2024-12-02
|
|
76
|
-
const dateStr1 = '2024-12-02';
|
|
77
|
-
const { guestCounts: dailyGuestCounts1, shiftsInfo } = getDailyGuestCounts(data, dateStr1, reservations);
|
|
78
|
-
console.log(`Daily Guest Counts for ${dateStr1}:`);
|
|
79
|
-
console.log(dailyGuestCounts1);
|
|
80
|
-
console.log('Shifts Info:', shiftsInfo);
|
|
81
|
-
|
|
82
|
-
const isAvailable1 = isDateAvailable(data, dateStr1, reservations, guests);
|
|
83
|
-
console.log(`Is date ${dateStr1} available for ${guests} guests? ${isAvailable1}`);
|
|
84
|
-
console.log('---');
|
|
85
|
-
|
|
86
|
-
// Test 2: Check availability on 2024-12-03
|
|
87
|
-
const dateStr2 = '2024-12-03';
|
|
88
|
-
const { guestCounts: dailyGuestCounts2 } = getDailyGuestCounts(data, dateStr2, reservations);
|
|
89
|
-
console.log(`Daily Guest Counts for ${dateStr2}:`);
|
|
90
|
-
console.log(dailyGuestCounts2);
|
|
91
|
-
|
|
92
|
-
const isAvailable2 = isDateAvailable(data, dateStr2, reservations, guests);
|
|
93
|
-
console.log(`Is date ${dateStr2} available for ${guests} guests? ${isAvailable2}`);
|
|
94
|
-
console.log('---');
|
|
95
|
-
|
|
96
|
-
// Test 3: Check availability on 2024-12-02 for 5 guests
|
|
97
|
-
const guests3 = 5;
|
|
98
|
-
const isAvailable3 = isDateAvailable(data, dateStr1, reservations, guests3);
|
|
99
|
-
console.log(`Is date ${dateStr1} available for ${guests3} guests? ${isAvailable3}`);
|
|
100
|
-
console.log('---');
|
|
101
|
-
|
|
102
|
-
// Test 4: Check availability on 2024-12-02 for 2 guests
|
|
103
|
-
const guests4 = 2;
|
|
104
|
-
const isAvailable4 = isDateAvailable(data, dateStr1, reservations, guests4);
|
|
105
|
-
console.log(`Is date ${dateStr1} available for ${guests4} guests? ${isAvailable4}`);
|
|
106
|
-
console.log('---');
|
|
1
|
+
// dateAvailabilityTests.js
|
|
2
|
+
|
|
3
|
+
const { isDateAvailable } = require('../isDateAvailable');
|
|
4
|
+
const { getDailyGuestCounts } = require('../processing/dailyGuestCounts');
|
|
5
|
+
|
|
6
|
+
// Sample data
|
|
7
|
+
const data = {
|
|
8
|
+
"_id": "demo",
|
|
9
|
+
"general-settings": {
|
|
10
|
+
"zitplaatsen": "5",
|
|
11
|
+
"duurReservatie": "120", // Reservation duration of 120 minutes
|
|
12
|
+
"intervalReservatie": "30" // Time increment of 30 minutes
|
|
13
|
+
},
|
|
14
|
+
"openinghours-breakfast": {
|
|
15
|
+
"schemeSettings": {
|
|
16
|
+
"Monday": {
|
|
17
|
+
"enabled": false,
|
|
18
|
+
"startTime": "07:00",
|
|
19
|
+
"endTime": "11:00",
|
|
20
|
+
"maxCapacityEnabled": false, // Will fallback to zitplaatsen
|
|
21
|
+
"maxCapacity": "0",
|
|
22
|
+
"shiftsEnabled": false,
|
|
23
|
+
"shifts": []
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"storedNumber": {
|
|
27
|
+
"$numberInt": "0"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"openinghours-lunch": {
|
|
31
|
+
"schemeSettings": {
|
|
32
|
+
"Monday": {
|
|
33
|
+
"enabled": false,
|
|
34
|
+
"startTime": "13:00", // Lunch starts at 13:00
|
|
35
|
+
"endTime": "16:00",
|
|
36
|
+
"maxCapacityEnabled": true,
|
|
37
|
+
"maxCapacity": "20",
|
|
38
|
+
"shiftsEnabled": false,
|
|
39
|
+
"shifts": []
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"storedNumber": {
|
|
43
|
+
"$numberInt": "0"
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"openinghours-dinner": {
|
|
47
|
+
"schemeSettings": {
|
|
48
|
+
"Monday": {
|
|
49
|
+
"enabled": true,
|
|
50
|
+
"startTime": "16:00",
|
|
51
|
+
"endTime": "23:00",
|
|
52
|
+
"maxCapacityEnabled": true,
|
|
53
|
+
"maxCapacity": "5",
|
|
54
|
+
"shiftsEnabled": false,
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
"storedNumber": {
|
|
58
|
+
"$numberInt": "0"
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"exceptions": []
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
// Sample reservations
|
|
65
|
+
const reservations = [
|
|
66
|
+
// Dinner reservations
|
|
67
|
+
{ guests: "5", time: "18:00", date: "2024-12-02" }, // Shift 1 is fully booked
|
|
68
|
+
{ guests: "2", time: "20:00", date: "2024-12-02" }, // Shift 2 has available seats
|
|
69
|
+
];
|
|
70
|
+
|
|
71
|
+
console.log('--- Date Availability Tests ---');
|
|
72
|
+
|
|
73
|
+
const guests = 3;
|
|
74
|
+
|
|
75
|
+
// Test 1: Check availability on 2024-12-02
|
|
76
|
+
const dateStr1 = '2024-12-02';
|
|
77
|
+
const { guestCounts: dailyGuestCounts1, shiftsInfo } = getDailyGuestCounts(data, dateStr1, reservations);
|
|
78
|
+
console.log(`Daily Guest Counts for ${dateStr1}:`);
|
|
79
|
+
console.log(dailyGuestCounts1);
|
|
80
|
+
console.log('Shifts Info:', shiftsInfo);
|
|
81
|
+
|
|
82
|
+
const isAvailable1 = isDateAvailable(data, dateStr1, reservations, guests);
|
|
83
|
+
console.log(`Is date ${dateStr1} available for ${guests} guests? ${isAvailable1}`);
|
|
84
|
+
console.log('---');
|
|
85
|
+
|
|
86
|
+
// Test 2: Check availability on 2024-12-03
|
|
87
|
+
const dateStr2 = '2024-12-03';
|
|
88
|
+
const { guestCounts: dailyGuestCounts2 } = getDailyGuestCounts(data, dateStr2, reservations);
|
|
89
|
+
console.log(`Daily Guest Counts for ${dateStr2}:`);
|
|
90
|
+
console.log(dailyGuestCounts2);
|
|
91
|
+
|
|
92
|
+
const isAvailable2 = isDateAvailable(data, dateStr2, reservations, guests);
|
|
93
|
+
console.log(`Is date ${dateStr2} available for ${guests} guests? ${isAvailable2}`);
|
|
94
|
+
console.log('---');
|
|
95
|
+
|
|
96
|
+
// Test 3: Check availability on 2024-12-02 for 5 guests
|
|
97
|
+
const guests3 = 5;
|
|
98
|
+
const isAvailable3 = isDateAvailable(data, dateStr1, reservations, guests3);
|
|
99
|
+
console.log(`Is date ${dateStr1} available for ${guests3} guests? ${isAvailable3}`);
|
|
100
|
+
console.log('---');
|
|
101
|
+
|
|
102
|
+
// Test 4: Check availability on 2024-12-02 for 2 guests
|
|
103
|
+
const guests4 = 2;
|
|
104
|
+
const isAvailable4 = isDateAvailable(data, dateStr1, reservations, guests4);
|
|
105
|
+
console.log(`Is date ${dateStr1} available for ${guests4} guests? ${isAvailable4}`);
|
|
106
|
+
console.log('---');
|
package/test/test_exceptions.js
CHANGED
|
@@ -1,173 +1,173 @@
|
|
|
1
|
-
// test.js
|
|
2
|
-
|
|
3
|
-
const {
|
|
4
|
-
getDataByDayAndMeal,
|
|
5
|
-
getDataByDateAndMeal,
|
|
6
|
-
getDataByDateAndTime,
|
|
7
|
-
} = require('../restaurant_data/openinghours');
|
|
8
|
-
|
|
9
|
-
const {
|
|
10
|
-
getDataByDateAndMealWithExceptions,
|
|
11
|
-
getDataByDateAndTimeWithExceptions,
|
|
12
|
-
} = require('../restaurant_data/exceptions');
|
|
13
|
-
|
|
14
|
-
// Data including exceptions
|
|
15
|
-
const data = {
|
|
16
|
-
"_id": "demo",
|
|
17
|
-
"openinghours-breakfast": {
|
|
18
|
-
"schemeSettings": {
|
|
19
|
-
"Monday": {
|
|
20
|
-
"enabled": true,
|
|
21
|
-
"startTime": "07:00",
|
|
22
|
-
"endTime": "09:00",
|
|
23
|
-
"maxCapacityEnabled": true,
|
|
24
|
-
"maxCapacity": "12",
|
|
25
|
-
"shiftsEnabled": false,
|
|
26
|
-
"shifts": []
|
|
27
|
-
},
|
|
28
|
-
"Wednesday": {
|
|
29
|
-
"enabled": true,
|
|
30
|
-
"startTime": "07:00",
|
|
31
|
-
"endTime": "10:00",
|
|
32
|
-
"maxCapacityEnabled": true,
|
|
33
|
-
"maxCapacity": "12",
|
|
34
|
-
"shiftsEnabled": false,
|
|
35
|
-
"shifts": []
|
|
36
|
-
}
|
|
37
|
-
},
|
|
38
|
-
},
|
|
39
|
-
"openinghours-lunch": {
|
|
40
|
-
"schemeSettings": {
|
|
41
|
-
"Thursday": {
|
|
42
|
-
"enabled": false, // Disabled lunch on Thursday
|
|
43
|
-
"startTime": "13:00",
|
|
44
|
-
"endTime": "14:00",
|
|
45
|
-
"maxCapacityEnabled": true,
|
|
46
|
-
"maxCapacity": "10",
|
|
47
|
-
"shiftsEnabled": false,
|
|
48
|
-
"shifts": []
|
|
49
|
-
}
|
|
50
|
-
},
|
|
51
|
-
},
|
|
52
|
-
"openinghours-dinner": {
|
|
53
|
-
"schemeSettings": {
|
|
54
|
-
"Thursday": {
|
|
55
|
-
"enabled": true,
|
|
56
|
-
"startTime": "16:00",
|
|
57
|
-
"endTime": "17:30",
|
|
58
|
-
"maxCapacityEnabled": true,
|
|
59
|
-
"maxCapacity": "10",
|
|
60
|
-
"shiftsEnabled": false,
|
|
61
|
-
"shifts": []
|
|
62
|
-
},
|
|
63
|
-
"Friday": {
|
|
64
|
-
"enabled": true,
|
|
65
|
-
"startTime": "16:00",
|
|
66
|
-
"endTime": "17:00",
|
|
67
|
-
"maxCapacityEnabled": true,
|
|
68
|
-
"maxCapacity": "10",
|
|
69
|
-
"shiftsEnabled": false,
|
|
70
|
-
"shifts": []
|
|
71
|
-
},
|
|
72
|
-
"Saturday": {
|
|
73
|
-
"enabled": false, // Disabled day
|
|
74
|
-
"startTime": "16:00",
|
|
75
|
-
"endTime": "18:00",
|
|
76
|
-
"maxCapacityEnabled": true,
|
|
77
|
-
"maxCapacity": "10",
|
|
78
|
-
"shiftsEnabled": false,
|
|
79
|
-
"shifts": []
|
|
80
|
-
}
|
|
81
|
-
},
|
|
82
|
-
},
|
|
83
|
-
// Exceptions included in the data
|
|
84
|
-
"exceptions": [
|
|
85
|
-
{
|
|
86
|
-
"title": "Opening 4 tot 10 December",
|
|
87
|
-
"type": "Uitzondering",
|
|
88
|
-
"timeframe": "breakfast",
|
|
89
|
-
"startDate": "2024-12-04",
|
|
90
|
-
"endDate": "2024-12-10",
|
|
91
|
-
"startHour": "07:00",
|
|
92
|
-
"endHour": "09:00",
|
|
93
|
-
"maxSeats": "333",
|
|
94
|
-
"daysOfWeek": [
|
|
95
|
-
|
|
96
|
-
],
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
"title": "Opening 4 tot 10 December",
|
|
100
|
-
"type": "Uitzondering",
|
|
101
|
-
"timeframe": "breakfast",
|
|
102
|
-
"startDate": "2024-12-04",
|
|
103
|
-
"endDate": "2024-12-10",
|
|
104
|
-
"startHour": "07:00",
|
|
105
|
-
"endHour": "09:00",
|
|
106
|
-
"maxSeats": "444",
|
|
107
|
-
"daysOfWeek": [
|
|
108
|
-
|
|
109
|
-
],
|
|
110
|
-
},
|
|
111
|
-
{
|
|
112
|
-
"title": "Opening 4 tot 10 December",
|
|
113
|
-
"type": "Sluiting",
|
|
114
|
-
"timeframe": "breakfast",
|
|
115
|
-
"startDate": "2024-12-04",
|
|
116
|
-
"endDate": "2024-12-10",
|
|
117
|
-
"startHour": "07:00",
|
|
118
|
-
"endHour": "09:00",
|
|
119
|
-
"maxSeats": "333",
|
|
120
|
-
"daysOfWeek": [
|
|
121
|
-
|
|
122
|
-
],
|
|
123
|
-
},
|
|
124
|
-
{
|
|
125
|
-
"title": "Closure on December 2nd",
|
|
126
|
-
"type": "Sluiting",
|
|
127
|
-
"timeframe": "dinner",
|
|
128
|
-
"startDate": "2024-12-02",
|
|
129
|
-
"endDate": "2024-12-04",
|
|
130
|
-
"daysOfWeek": [
|
|
131
|
-
|
|
132
|
-
]
|
|
133
|
-
},
|
|
134
|
-
{
|
|
135
|
-
"title": "Uitzondering on December 4th",
|
|
136
|
-
"type": "Uitzondering",
|
|
137
|
-
"timeframe": "breakfast",
|
|
138
|
-
"startDate": "2024-12-04",
|
|
139
|
-
"endDate": "2024-12-04",
|
|
140
|
-
"startHour": "07:00",
|
|
141
|
-
"endHour": "08:00",
|
|
142
|
-
"maxSeats": "12",
|
|
143
|
-
"daysOfWeek": [
|
|
144
|
-
"woensdag"
|
|
145
|
-
]
|
|
146
|
-
}
|
|
147
|
-
]
|
|
148
|
-
};
|
|
149
|
-
|
|
150
|
-
// ------------------------
|
|
151
|
-
// Tests without exceptions
|
|
152
|
-
// ------------------------
|
|
153
|
-
|
|
154
|
-
console.log('--- Tests without exceptions ---');
|
|
155
|
-
|
|
156
|
-
// Test 1: Get data by date and meal - breakfast on December 4th
|
|
157
|
-
console.log('Test 1:', getDataByDateAndMeal(data, '2024-12-04', 'breakfast')); // Should return data
|
|
158
|
-
|
|
159
|
-
// Test 2: Get data by date and time exactly at startTime
|
|
160
|
-
console.log('Test 2:', getDataByDateAndTime(data, '2024-12-04', '07:00')); // Should return data for breakfast
|
|
161
|
-
|
|
162
|
-
// ----------------------
|
|
163
|
-
// Tests with exceptions
|
|
164
|
-
// ----------------------
|
|
165
|
-
|
|
166
|
-
console.log('\n--- Tests with exceptions ---');
|
|
167
|
-
|
|
168
|
-
// Test 1: Get data by date and meal - breakfast on December 4th (Opening applies)
|
|
169
|
-
console.log('Test 1:', getDataByDateAndMealWithExceptions(data, '2024-12-04', 'breakfast')); // Should return Opening data
|
|
170
|
-
|
|
171
|
-
// Test 2: Get data by date and time - breakfast on December 4th at 07:30 (within Opening time)
|
|
172
|
-
console.log('Test 2:', getDataByDateAndTimeWithExceptions(data, '2024-12-04', '07:00')); // Should return Opening data
|
|
1
|
+
// test.js
|
|
2
|
+
|
|
3
|
+
const {
|
|
4
|
+
getDataByDayAndMeal,
|
|
5
|
+
getDataByDateAndMeal,
|
|
6
|
+
getDataByDateAndTime,
|
|
7
|
+
} = require('../restaurant_data/openinghours');
|
|
8
|
+
|
|
9
|
+
const {
|
|
10
|
+
getDataByDateAndMealWithExceptions,
|
|
11
|
+
getDataByDateAndTimeWithExceptions,
|
|
12
|
+
} = require('../restaurant_data/exceptions');
|
|
13
|
+
|
|
14
|
+
// Data including exceptions
|
|
15
|
+
const data = {
|
|
16
|
+
"_id": "demo",
|
|
17
|
+
"openinghours-breakfast": {
|
|
18
|
+
"schemeSettings": {
|
|
19
|
+
"Monday": {
|
|
20
|
+
"enabled": true,
|
|
21
|
+
"startTime": "07:00",
|
|
22
|
+
"endTime": "09:00",
|
|
23
|
+
"maxCapacityEnabled": true,
|
|
24
|
+
"maxCapacity": "12",
|
|
25
|
+
"shiftsEnabled": false,
|
|
26
|
+
"shifts": []
|
|
27
|
+
},
|
|
28
|
+
"Wednesday": {
|
|
29
|
+
"enabled": true,
|
|
30
|
+
"startTime": "07:00",
|
|
31
|
+
"endTime": "10:00",
|
|
32
|
+
"maxCapacityEnabled": true,
|
|
33
|
+
"maxCapacity": "12",
|
|
34
|
+
"shiftsEnabled": false,
|
|
35
|
+
"shifts": []
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
"openinghours-lunch": {
|
|
40
|
+
"schemeSettings": {
|
|
41
|
+
"Thursday": {
|
|
42
|
+
"enabled": false, // Disabled lunch on Thursday
|
|
43
|
+
"startTime": "13:00",
|
|
44
|
+
"endTime": "14:00",
|
|
45
|
+
"maxCapacityEnabled": true,
|
|
46
|
+
"maxCapacity": "10",
|
|
47
|
+
"shiftsEnabled": false,
|
|
48
|
+
"shifts": []
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
"openinghours-dinner": {
|
|
53
|
+
"schemeSettings": {
|
|
54
|
+
"Thursday": {
|
|
55
|
+
"enabled": true,
|
|
56
|
+
"startTime": "16:00",
|
|
57
|
+
"endTime": "17:30",
|
|
58
|
+
"maxCapacityEnabled": true,
|
|
59
|
+
"maxCapacity": "10",
|
|
60
|
+
"shiftsEnabled": false,
|
|
61
|
+
"shifts": []
|
|
62
|
+
},
|
|
63
|
+
"Friday": {
|
|
64
|
+
"enabled": true,
|
|
65
|
+
"startTime": "16:00",
|
|
66
|
+
"endTime": "17:00",
|
|
67
|
+
"maxCapacityEnabled": true,
|
|
68
|
+
"maxCapacity": "10",
|
|
69
|
+
"shiftsEnabled": false,
|
|
70
|
+
"shifts": []
|
|
71
|
+
},
|
|
72
|
+
"Saturday": {
|
|
73
|
+
"enabled": false, // Disabled day
|
|
74
|
+
"startTime": "16:00",
|
|
75
|
+
"endTime": "18:00",
|
|
76
|
+
"maxCapacityEnabled": true,
|
|
77
|
+
"maxCapacity": "10",
|
|
78
|
+
"shiftsEnabled": false,
|
|
79
|
+
"shifts": []
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
// Exceptions included in the data
|
|
84
|
+
"exceptions": [
|
|
85
|
+
{
|
|
86
|
+
"title": "Opening 4 tot 10 December",
|
|
87
|
+
"type": "Uitzondering",
|
|
88
|
+
"timeframe": "breakfast",
|
|
89
|
+
"startDate": "2024-12-04",
|
|
90
|
+
"endDate": "2024-12-10",
|
|
91
|
+
"startHour": "07:00",
|
|
92
|
+
"endHour": "09:00",
|
|
93
|
+
"maxSeats": "333",
|
|
94
|
+
"daysOfWeek": [
|
|
95
|
+
|
|
96
|
+
],
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"title": "Opening 4 tot 10 December",
|
|
100
|
+
"type": "Uitzondering",
|
|
101
|
+
"timeframe": "breakfast",
|
|
102
|
+
"startDate": "2024-12-04",
|
|
103
|
+
"endDate": "2024-12-10",
|
|
104
|
+
"startHour": "07:00",
|
|
105
|
+
"endHour": "09:00",
|
|
106
|
+
"maxSeats": "444",
|
|
107
|
+
"daysOfWeek": [
|
|
108
|
+
|
|
109
|
+
],
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"title": "Opening 4 tot 10 December",
|
|
113
|
+
"type": "Sluiting",
|
|
114
|
+
"timeframe": "breakfast",
|
|
115
|
+
"startDate": "2024-12-04",
|
|
116
|
+
"endDate": "2024-12-10",
|
|
117
|
+
"startHour": "07:00",
|
|
118
|
+
"endHour": "09:00",
|
|
119
|
+
"maxSeats": "333",
|
|
120
|
+
"daysOfWeek": [
|
|
121
|
+
|
|
122
|
+
],
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"title": "Closure on December 2nd",
|
|
126
|
+
"type": "Sluiting",
|
|
127
|
+
"timeframe": "dinner",
|
|
128
|
+
"startDate": "2024-12-02",
|
|
129
|
+
"endDate": "2024-12-04",
|
|
130
|
+
"daysOfWeek": [
|
|
131
|
+
|
|
132
|
+
]
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"title": "Uitzondering on December 4th",
|
|
136
|
+
"type": "Uitzondering",
|
|
137
|
+
"timeframe": "breakfast",
|
|
138
|
+
"startDate": "2024-12-04",
|
|
139
|
+
"endDate": "2024-12-04",
|
|
140
|
+
"startHour": "07:00",
|
|
141
|
+
"endHour": "08:00",
|
|
142
|
+
"maxSeats": "12",
|
|
143
|
+
"daysOfWeek": [
|
|
144
|
+
"woensdag"
|
|
145
|
+
]
|
|
146
|
+
}
|
|
147
|
+
]
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
// ------------------------
|
|
151
|
+
// Tests without exceptions
|
|
152
|
+
// ------------------------
|
|
153
|
+
|
|
154
|
+
console.log('--- Tests without exceptions ---');
|
|
155
|
+
|
|
156
|
+
// Test 1: Get data by date and meal - breakfast on December 4th
|
|
157
|
+
console.log('Test 1:', getDataByDateAndMeal(data, '2024-12-04', 'breakfast')); // Should return data
|
|
158
|
+
|
|
159
|
+
// Test 2: Get data by date and time exactly at startTime
|
|
160
|
+
console.log('Test 2:', getDataByDateAndTime(data, '2024-12-04', '07:00')); // Should return data for breakfast
|
|
161
|
+
|
|
162
|
+
// ----------------------
|
|
163
|
+
// Tests with exceptions
|
|
164
|
+
// ----------------------
|
|
165
|
+
|
|
166
|
+
console.log('\n--- Tests with exceptions ---');
|
|
167
|
+
|
|
168
|
+
// Test 1: Get data by date and meal - breakfast on December 4th (Opening applies)
|
|
169
|
+
console.log('Test 1:', getDataByDateAndMealWithExceptions(data, '2024-12-04', 'breakfast')); // Should return Opening data
|
|
170
|
+
|
|
171
|
+
// Test 2: Get data by date and time - breakfast on December 4th at 07:30 (within Opening time)
|
|
172
|
+
console.log('Test 2:', getDataByDateAndTimeWithExceptions(data, '2024-12-04', '07:00')); // Should return Opening data
|
|
173
173
|
|