@happychef/algorithm 1.2.11 → 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.
Files changed (57) hide show
  1. package/.github/workflows/ci-cd.yml +234 -234
  2. package/BRANCH_PROTECTION_SETUP.md +167 -167
  3. package/CHANGELOG.md +8 -8
  4. package/README.md +144 -144
  5. package/RESERVERINGEN_GIDS.md +986 -986
  6. package/__tests__/filters.test.js +276 -276
  7. package/__tests__/isDateAvailable.test.js +175 -175
  8. package/__tests__/isTimeAvailable.test.js +168 -168
  9. package/__tests__/restaurantData.test.js +422 -422
  10. package/__tests__/tableHelpers.test.js +247 -247
  11. package/assignTables.js +424 -424
  12. package/changes/2025/December/PR2___change.md +14 -14
  13. package/changes/2025/December/PR3_add__change.md +20 -20
  14. package/changes/2025/December/PR4___.md +15 -15
  15. package/changes/2025/December/PR5___.md +15 -15
  16. package/changes/2025/December/PR6__del_.md +17 -17
  17. package/changes/2025/December/PR7_add__change.md +21 -21
  18. package/changes/2026/January/PR8_add__change.md +39 -0
  19. package/changes/2026/January/PR9_add__change.md +20 -0
  20. package/filters/maxArrivalsFilter.js +114 -114
  21. package/filters/maxGroupsFilter.js +221 -221
  22. package/filters/timeFilter.js +89 -89
  23. package/getAvailableTimeblocks.js +158 -158
  24. package/grouping.js +162 -162
  25. package/index.js +42 -42
  26. package/isDateAvailable.js +80 -80
  27. package/isDateAvailableWithTableCheck.js +171 -171
  28. package/isTimeAvailable.js +25 -25
  29. package/jest.config.js +23 -23
  30. package/package.json +27 -27
  31. package/processing/dailyGuestCounts.js +73 -73
  32. package/processing/mealTypeCount.js +133 -133
  33. package/processing/timeblocksAvailable.js +167 -167
  34. package/reservation_data/counter.js +64 -64
  35. package/restaurant_data/exceptions.js +149 -149
  36. package/restaurant_data/openinghours.js +123 -123
  37. package/simulateTableAssignment.js +709 -699
  38. package/tableHelpers.js +178 -178
  39. package/tables/time/parseTime.js +19 -19
  40. package/tables/time/shifts.js +7 -7
  41. package/tables/utils/calculateDistance.js +13 -13
  42. package/tables/utils/isTableFreeForAllSlots.js +14 -14
  43. package/tables/utils/isTemporaryTableValid.js +39 -39
  44. package/test/test_counter.js +194 -194
  45. package/test/test_dailyCount.js +81 -81
  46. package/test/test_datesAvailable.js +106 -106
  47. package/test/test_exceptions.js +172 -172
  48. package/test/test_isDateAvailable.js +330 -330
  49. package/test/test_mealTypeCount.js +54 -54
  50. package/test/test_timesAvailable.js +88 -88
  51. package/test-detailed-filter.js +100 -100
  52. package/test-lunch-debug.js +110 -110
  53. package/test-max-arrivals-filter.js +79 -79
  54. package/test-meal-stop-fix.js +147 -147
  55. package/test-meal-stop-simple.js +93 -93
  56. package/test-timezone-debug.js +47 -47
  57. package/test.js +336 -336
package/test.js CHANGED
@@ -1,336 +1,336 @@
1
- const { isTimeAvailable } = require('./isTimeAvailable');
2
-
3
- // Sample data (same as previous examples)
4
- const data = {
5
- "_id": "poer",
6
- "general-settings": {
7
- "zitplaatsen": 30,
8
- "uurOpVoorhand": 4,
9
- "dagenInToekomst": 90,
10
- "maxGasten": 8,
11
- "intervalReservatie": 15,
12
- "duurReservatie": 120,
13
- "minutenTotEinde": 135,
14
- "showNoticeForMaxGuests": 0,
15
- "noticePhoneNumber": "",
16
- "storedNumber": 76
17
- },
18
- "menu": [
19
- {
20
- "name": "POER Menu",
21
- "startDate": "2024-11-01",
22
- "endDate": "2030-01-30",
23
- "startHour": "12:00",
24
- "endHour": "23:00",
25
- "daysOfWeek": [
26
- "zaterdag",
27
- "dinsdag",
28
- "woensdag",
29
- "donderdag",
30
- "vrijdag"
31
- ],
32
- "storedNumber": 36,
33
- "_id": "674a9033c1956dd233bafaad"
34
- },
35
- {
36
- "name": "A la carte",
37
- "startDate": "2024-11-30",
38
- "endDate": "2030-01-01",
39
- "startHour": "12:00",
40
- "endHour": "14:00",
41
- "daysOfWeek": [
42
- "dinsdag",
43
- "woensdag",
44
- "donderdag",
45
- "vrijdag"
46
- ],
47
- "storedNumber": 28,
48
- "_id": "674a9084c1956dd233bafaae"
49
- },
50
- {
51
- "name": "Ik weet het nog niet",
52
- "startDate": "2024-11-30",
53
- "endDate": "2030-01-01",
54
- "startHour": "12:00",
55
- "endHour": "14:00",
56
- "daysOfWeek": [
57
- "dinsdag",
58
- "woensdag",
59
- "donderdag",
60
- "vrijdag"
61
- ],
62
- "storedNumber": 41,
63
- "_id": "674a90bc64cc52acdd5e6cc2"
64
- },
65
- {
66
- "name": "Lunch",
67
- "startDate": "2024-11-01",
68
- "endDate": "2030-01-30",
69
- "startHour": "12:00",
70
- "endHour": "14:00",
71
- "daysOfWeek": [
72
- "dinsdag",
73
- "woensdag",
74
- "donderdag",
75
- "vrijdag"
76
- ],
77
- "storedNumber": 23,
78
- "_id": "674adb4e8d6385fb343499f7"
79
- },
80
- {
81
- "name": "A la carte",
82
- "startDate": "2024-11-01",
83
- "endDate": "2030-01-30",
84
- "startHour": "18:30",
85
- "endHour": "20:30",
86
- "daysOfWeek": [
87
- "dinsdag",
88
- "woensdag",
89
- "donderdag"
90
- ],
91
- "storedNumber": 50,
92
- "_id": "674adbf58d6385fb343499f8"
93
- },
94
- {
95
- "name": "Ik weet het nog niet",
96
- "startDate": "2024-11-01",
97
- "endDate": "2030-01-30",
98
- "startHour": "18:30",
99
- "endHour": "20:30",
100
- "daysOfWeek": [
101
- "dinsdag",
102
- "donderdag",
103
- "woensdag"
104
- ],
105
- "storedNumber": 54,
106
- "_id": "674adc208d6385fb343499f9"
107
- }
108
- ],
109
- "mededeling": [
110
- {
111
- "mededeling": "Gelieve er rekening mee te houden dat we op vrijdagavond en zaterdagavond enkel ons POER menu serveren.",
112
- "startDate": "2024-11-01",
113
- "endDate": "2030-01-30",
114
- "startTime": "18:30",
115
- "endTime": "20:30",
116
- "daysOfWeek": [
117
- "vrijdag",
118
- "zaterdag"
119
- ],
120
- "storedNumber": 95,
121
- "_id": "674ade0a8d6385fb343499fa"
122
- }
123
- ],
124
- "settings": {
125
- "pageTitle": "Reserveer nu",
126
- "generalNotification": "",
127
- "alignment": "fullScreenColor",
128
- "backgroundBlur": "blurBackground",
129
- "storedNumber": 61
130
- },
131
- "colors": {
132
- "backgroundType": "solid",
133
- "backgroundColor": "#e0debe",
134
- "gradientStartColor": "#FFFFFF",
135
- "gradientEndColor": "#000000",
136
- "animationType": "none",
137
- "widgetBackgroundColor": "#000000",
138
- "widgetTextColor": "#FFFFFF",
139
- "textColor": "#000000",
140
- "containerColor": "#FFFFFF",
141
- "buttonColor": "#000000",
142
- "buttonTextColor": "#FFFFFF",
143
- "storedNumber": 81
144
- },
145
- "exceptions": [
146
- {
147
- "title": "Extra mensen donderdagmiddag",
148
- "type": "Opening",
149
- "timeframe": "lunch",
150
- "startDate": "2024-12-05",
151
- "endDate": "2024-12-05",
152
- "startHour": "12:00",
153
- "endHour": "16:00",
154
- "maxSeats": "34",
155
- "daysOfWeek": [
156
- "donderdag"
157
- ],
158
- "storedNumber": 74,
159
- "_id": "67507dc98fb61d6afd54acb0"
160
- },
161
- {
162
- "title": "Extra personen donderdagavond",
163
- "type": "Uitzondering",
164
- "timeframe": "dinner",
165
- "startDate": "2024-12-05",
166
- "endDate": "2024-12-05",
167
- "startHour": "18:30",
168
- "endHour": "23:00",
169
- "maxSeats": "27",
170
- "daysOfWeek": [
171
- "donderdag"
172
- ],
173
- "storedNumber": 88,
174
- "_id": "67507e3383d7f2de02628f4a"
175
- },
176
- {
177
- "title": "Congé Periode 22/12 tot 9/01",
178
- "type": "Sluiting",
179
- "timeframe": "Volledige Dag",
180
- "startDate": "2024-12-22",
181
- "endDate": "2025-01-09",
182
- "daysOfWeek": [],
183
- "storedNumber": 89,
184
- "_id": "67511bb38fb61d6afd54acba"
185
- }
186
- ],
187
- "openinghours-lunch": {
188
- "schemeSettings": {
189
- "Tuesday": {
190
- "enabled": true,
191
- "startTime": "12:00",
192
- "endTime": "13:30",
193
- "maxCapacityEnabled": true,
194
- "maxCapacity": "30",
195
- "shiftsEnabled": false,
196
- "shifts": []
197
- },
198
- "Wednesday": {
199
- "enabled": true,
200
- "startTime": "12:00",
201
- "endTime": "16:00",
202
- "maxCapacityEnabled": true,
203
- "maxCapacity": "30",
204
- "shiftsEnabled": false,
205
- "shifts": []
206
- },
207
- "Thursday": {
208
- "enabled": true,
209
- "startTime": "12:00",
210
- "endTime": "16:00",
211
- "maxCapacityEnabled": true,
212
- "maxCapacity": "30",
213
- "shiftsEnabled": false,
214
- "shifts": []
215
- },
216
- "Friday": {
217
- "enabled": true,
218
- "startTime": "12:30",
219
- "endTime": "13:30",
220
- "maxCapacityEnabled": true,
221
- "maxCapacity": "30",
222
- "shiftsEnabled": false,
223
- "shifts": []
224
- }
225
- },
226
- "storedNumber": 2
227
- },
228
- "openinghours-dinner": {
229
- "schemeSettings": {
230
- "Tuesday": {
231
- "enabled": true,
232
- "startTime": "18:30",
233
- "endTime": "20:00",
234
- "maxCapacityEnabled": true,
235
- "maxCapacity": "24",
236
- "shiftsEnabled": false,
237
- "shifts": []
238
- },
239
- "Wednesday": {
240
- "enabled": true,
241
- "startTime": "16:00",
242
- "endTime": "20:00",
243
- "maxCapacityEnabled": true,
244
- "maxCapacity": "24",
245
- "shiftsEnabled": false,
246
- "shifts": []
247
- },
248
- "Thursday": {
249
- "enabled": true,
250
- "startTime": "16:00",
251
- "endTime": "20:00",
252
- "maxCapacityEnabled": true,
253
- "maxCapacity": "24",
254
- "shiftsEnabled": false,
255
- "shifts": []
256
- },
257
- "Friday": {
258
- "enabled": true,
259
- "startTime": "18:30",
260
- "endTime": "20:00",
261
- "maxCapacityEnabled": true,
262
- "maxCapacity": "30",
263
- "shiftsEnabled": false,
264
- "shifts": []
265
- },
266
- "Saturday": {
267
- "enabled": true,
268
- "startTime": "18:30",
269
- "endTime": "20:00",
270
- "maxCapacityEnabled": true,
271
- "maxCapacity": "30",
272
- "shiftsEnabled": false,
273
- "shifts": []
274
- }
275
- },
276
- "storedNumber": 6
277
- },
278
- "fonts": {
279
- "titleFont": {
280
- "font": "Poppins",
281
- "weight": "400"
282
- },
283
- "subtitleFont": {
284
- "font": "Poppins",
285
- "weight": "400"
286
- },
287
- "labelFont": {
288
- "font": "Poppins",
289
- "weight": "400"
290
- },
291
- "buttonFont": {
292
- "font": "Poppins",
293
- "weight": "400"
294
- }
295
- },
296
- "theme": {
297
- "id": 10,
298
- "title": "Herfstbladeren",
299
- "color": "#D35400",
300
- "image": "/static/media/default-theme.webp"
301
- }
302
- };
303
-
304
- // Sample reservations
305
- const reservations = [
306
- {
307
- "guests": 10,
308
- "time": "12:00",
309
- "date": "2024-12-18"
310
- },
311
- {
312
- "guests": 100,
313
- "time": "15:00",
314
- "date": "2024-12-04"
315
- },
316
- ];
317
-
318
- console.log('--- Is Time Available Tests ---');
319
-
320
- const dateStr = '2024-12-10';
321
- const guests = 1000;
322
-
323
- // Times to test
324
- const timesToTest = [
325
- "12:00",
326
- "12:15",
327
- "13:00",
328
- "19:00",
329
- "20:00", // boundary time for dinner
330
- "20:15" // beyond dinner end time, should likely fail
331
- ];
332
-
333
- timesToTest.forEach((timeStr) => {
334
- const available = isTimeAvailable(data, dateStr, timeStr, reservations, guests);
335
- console.log(`Is ${timeStr} on ${dateStr} available for ${guests} guests?`, available);
336
- });
1
+ const { isTimeAvailable } = require('./isTimeAvailable');
2
+
3
+ // Sample data (same as previous examples)
4
+ const data = {
5
+ "_id": "poer",
6
+ "general-settings": {
7
+ "zitplaatsen": 30,
8
+ "uurOpVoorhand": 4,
9
+ "dagenInToekomst": 90,
10
+ "maxGasten": 8,
11
+ "intervalReservatie": 15,
12
+ "duurReservatie": 120,
13
+ "minutenTotEinde": 135,
14
+ "showNoticeForMaxGuests": 0,
15
+ "noticePhoneNumber": "",
16
+ "storedNumber": 76
17
+ },
18
+ "menu": [
19
+ {
20
+ "name": "POER Menu",
21
+ "startDate": "2024-11-01",
22
+ "endDate": "2030-01-30",
23
+ "startHour": "12:00",
24
+ "endHour": "23:00",
25
+ "daysOfWeek": [
26
+ "zaterdag",
27
+ "dinsdag",
28
+ "woensdag",
29
+ "donderdag",
30
+ "vrijdag"
31
+ ],
32
+ "storedNumber": 36,
33
+ "_id": "674a9033c1956dd233bafaad"
34
+ },
35
+ {
36
+ "name": "A la carte",
37
+ "startDate": "2024-11-30",
38
+ "endDate": "2030-01-01",
39
+ "startHour": "12:00",
40
+ "endHour": "14:00",
41
+ "daysOfWeek": [
42
+ "dinsdag",
43
+ "woensdag",
44
+ "donderdag",
45
+ "vrijdag"
46
+ ],
47
+ "storedNumber": 28,
48
+ "_id": "674a9084c1956dd233bafaae"
49
+ },
50
+ {
51
+ "name": "Ik weet het nog niet",
52
+ "startDate": "2024-11-30",
53
+ "endDate": "2030-01-01",
54
+ "startHour": "12:00",
55
+ "endHour": "14:00",
56
+ "daysOfWeek": [
57
+ "dinsdag",
58
+ "woensdag",
59
+ "donderdag",
60
+ "vrijdag"
61
+ ],
62
+ "storedNumber": 41,
63
+ "_id": "674a90bc64cc52acdd5e6cc2"
64
+ },
65
+ {
66
+ "name": "Lunch",
67
+ "startDate": "2024-11-01",
68
+ "endDate": "2030-01-30",
69
+ "startHour": "12:00",
70
+ "endHour": "14:00",
71
+ "daysOfWeek": [
72
+ "dinsdag",
73
+ "woensdag",
74
+ "donderdag",
75
+ "vrijdag"
76
+ ],
77
+ "storedNumber": 23,
78
+ "_id": "674adb4e8d6385fb343499f7"
79
+ },
80
+ {
81
+ "name": "A la carte",
82
+ "startDate": "2024-11-01",
83
+ "endDate": "2030-01-30",
84
+ "startHour": "18:30",
85
+ "endHour": "20:30",
86
+ "daysOfWeek": [
87
+ "dinsdag",
88
+ "woensdag",
89
+ "donderdag"
90
+ ],
91
+ "storedNumber": 50,
92
+ "_id": "674adbf58d6385fb343499f8"
93
+ },
94
+ {
95
+ "name": "Ik weet het nog niet",
96
+ "startDate": "2024-11-01",
97
+ "endDate": "2030-01-30",
98
+ "startHour": "18:30",
99
+ "endHour": "20:30",
100
+ "daysOfWeek": [
101
+ "dinsdag",
102
+ "donderdag",
103
+ "woensdag"
104
+ ],
105
+ "storedNumber": 54,
106
+ "_id": "674adc208d6385fb343499f9"
107
+ }
108
+ ],
109
+ "mededeling": [
110
+ {
111
+ "mededeling": "Gelieve er rekening mee te houden dat we op vrijdagavond en zaterdagavond enkel ons POER menu serveren.",
112
+ "startDate": "2024-11-01",
113
+ "endDate": "2030-01-30",
114
+ "startTime": "18:30",
115
+ "endTime": "20:30",
116
+ "daysOfWeek": [
117
+ "vrijdag",
118
+ "zaterdag"
119
+ ],
120
+ "storedNumber": 95,
121
+ "_id": "674ade0a8d6385fb343499fa"
122
+ }
123
+ ],
124
+ "settings": {
125
+ "pageTitle": "Reserveer nu",
126
+ "generalNotification": "",
127
+ "alignment": "fullScreenColor",
128
+ "backgroundBlur": "blurBackground",
129
+ "storedNumber": 61
130
+ },
131
+ "colors": {
132
+ "backgroundType": "solid",
133
+ "backgroundColor": "#e0debe",
134
+ "gradientStartColor": "#FFFFFF",
135
+ "gradientEndColor": "#000000",
136
+ "animationType": "none",
137
+ "widgetBackgroundColor": "#000000",
138
+ "widgetTextColor": "#FFFFFF",
139
+ "textColor": "#000000",
140
+ "containerColor": "#FFFFFF",
141
+ "buttonColor": "#000000",
142
+ "buttonTextColor": "#FFFFFF",
143
+ "storedNumber": 81
144
+ },
145
+ "exceptions": [
146
+ {
147
+ "title": "Extra mensen donderdagmiddag",
148
+ "type": "Opening",
149
+ "timeframe": "lunch",
150
+ "startDate": "2024-12-05",
151
+ "endDate": "2024-12-05",
152
+ "startHour": "12:00",
153
+ "endHour": "16:00",
154
+ "maxSeats": "34",
155
+ "daysOfWeek": [
156
+ "donderdag"
157
+ ],
158
+ "storedNumber": 74,
159
+ "_id": "67507dc98fb61d6afd54acb0"
160
+ },
161
+ {
162
+ "title": "Extra personen donderdagavond",
163
+ "type": "Uitzondering",
164
+ "timeframe": "dinner",
165
+ "startDate": "2024-12-05",
166
+ "endDate": "2024-12-05",
167
+ "startHour": "18:30",
168
+ "endHour": "23:00",
169
+ "maxSeats": "27",
170
+ "daysOfWeek": [
171
+ "donderdag"
172
+ ],
173
+ "storedNumber": 88,
174
+ "_id": "67507e3383d7f2de02628f4a"
175
+ },
176
+ {
177
+ "title": "Congé Periode 22/12 tot 9/01",
178
+ "type": "Sluiting",
179
+ "timeframe": "Volledige Dag",
180
+ "startDate": "2024-12-22",
181
+ "endDate": "2025-01-09",
182
+ "daysOfWeek": [],
183
+ "storedNumber": 89,
184
+ "_id": "67511bb38fb61d6afd54acba"
185
+ }
186
+ ],
187
+ "openinghours-lunch": {
188
+ "schemeSettings": {
189
+ "Tuesday": {
190
+ "enabled": true,
191
+ "startTime": "12:00",
192
+ "endTime": "13:30",
193
+ "maxCapacityEnabled": true,
194
+ "maxCapacity": "30",
195
+ "shiftsEnabled": false,
196
+ "shifts": []
197
+ },
198
+ "Wednesday": {
199
+ "enabled": true,
200
+ "startTime": "12:00",
201
+ "endTime": "16:00",
202
+ "maxCapacityEnabled": true,
203
+ "maxCapacity": "30",
204
+ "shiftsEnabled": false,
205
+ "shifts": []
206
+ },
207
+ "Thursday": {
208
+ "enabled": true,
209
+ "startTime": "12:00",
210
+ "endTime": "16:00",
211
+ "maxCapacityEnabled": true,
212
+ "maxCapacity": "30",
213
+ "shiftsEnabled": false,
214
+ "shifts": []
215
+ },
216
+ "Friday": {
217
+ "enabled": true,
218
+ "startTime": "12:30",
219
+ "endTime": "13:30",
220
+ "maxCapacityEnabled": true,
221
+ "maxCapacity": "30",
222
+ "shiftsEnabled": false,
223
+ "shifts": []
224
+ }
225
+ },
226
+ "storedNumber": 2
227
+ },
228
+ "openinghours-dinner": {
229
+ "schemeSettings": {
230
+ "Tuesday": {
231
+ "enabled": true,
232
+ "startTime": "18:30",
233
+ "endTime": "20:00",
234
+ "maxCapacityEnabled": true,
235
+ "maxCapacity": "24",
236
+ "shiftsEnabled": false,
237
+ "shifts": []
238
+ },
239
+ "Wednesday": {
240
+ "enabled": true,
241
+ "startTime": "16:00",
242
+ "endTime": "20:00",
243
+ "maxCapacityEnabled": true,
244
+ "maxCapacity": "24",
245
+ "shiftsEnabled": false,
246
+ "shifts": []
247
+ },
248
+ "Thursday": {
249
+ "enabled": true,
250
+ "startTime": "16:00",
251
+ "endTime": "20:00",
252
+ "maxCapacityEnabled": true,
253
+ "maxCapacity": "24",
254
+ "shiftsEnabled": false,
255
+ "shifts": []
256
+ },
257
+ "Friday": {
258
+ "enabled": true,
259
+ "startTime": "18:30",
260
+ "endTime": "20:00",
261
+ "maxCapacityEnabled": true,
262
+ "maxCapacity": "30",
263
+ "shiftsEnabled": false,
264
+ "shifts": []
265
+ },
266
+ "Saturday": {
267
+ "enabled": true,
268
+ "startTime": "18:30",
269
+ "endTime": "20:00",
270
+ "maxCapacityEnabled": true,
271
+ "maxCapacity": "30",
272
+ "shiftsEnabled": false,
273
+ "shifts": []
274
+ }
275
+ },
276
+ "storedNumber": 6
277
+ },
278
+ "fonts": {
279
+ "titleFont": {
280
+ "font": "Poppins",
281
+ "weight": "400"
282
+ },
283
+ "subtitleFont": {
284
+ "font": "Poppins",
285
+ "weight": "400"
286
+ },
287
+ "labelFont": {
288
+ "font": "Poppins",
289
+ "weight": "400"
290
+ },
291
+ "buttonFont": {
292
+ "font": "Poppins",
293
+ "weight": "400"
294
+ }
295
+ },
296
+ "theme": {
297
+ "id": 10,
298
+ "title": "Herfstbladeren",
299
+ "color": "#D35400",
300
+ "image": "/static/media/default-theme.webp"
301
+ }
302
+ };
303
+
304
+ // Sample reservations
305
+ const reservations = [
306
+ {
307
+ "guests": 10,
308
+ "time": "12:00",
309
+ "date": "2024-12-18"
310
+ },
311
+ {
312
+ "guests": 100,
313
+ "time": "15:00",
314
+ "date": "2024-12-04"
315
+ },
316
+ ];
317
+
318
+ console.log('--- Is Time Available Tests ---');
319
+
320
+ const dateStr = '2024-12-10';
321
+ const guests = 1000;
322
+
323
+ // Times to test
324
+ const timesToTest = [
325
+ "12:00",
326
+ "12:15",
327
+ "13:00",
328
+ "19:00",
329
+ "20:00", // boundary time for dinner
330
+ "20:15" // beyond dinner end time, should likely fail
331
+ ];
332
+
333
+ timesToTest.forEach((timeStr) => {
334
+ const available = isTimeAvailable(data, dateStr, timeStr, reservations, guests);
335
+ console.log(`Is ${timeStr} on ${dateStr} available for ${guests} guests?`, available);
336
+ });