@@ -84,11 +84,160 @@ describe("time edge cases", () => {
84
84
[ Thur ] : "24 hRs" ,
85
85
[ Fri ] : "24 hours" ,
86
86
} ) ;
87
+ await queryParserAndAssertTimingsCorrect ( [ [ Tue , 0 , 0 , Fri , 23 , 59 ] ] ) ;
88
+ } ) ;
89
+ test ( "all day every day" , async ( ) => {
90
+ setUpTimingTest ( {
91
+ [ Mon ] : "OPEN 24 HOURS" ,
92
+ [ Tue ] : "OPEN 24 HOURS" ,
93
+ [ Wed ] : "OPEN 24 HRS" ,
94
+ [ Thur ] : "24 hRs" ,
95
+ [ Fri ] : "24 hours" ,
96
+ [ Sat ] : "24 hours" ,
97
+ [ Sun ] : "24 hours" ,
98
+ } ) ;
99
+ await queryParserAndAssertTimingsCorrect ( [ [ Sun , 0 , 0 , Sat , 23 , 59 ] ] ) ; // this is the reason why we leave the other return type that represents open every day as this. (backwards compatibility, mostly)
100
+ } ) ;
101
+ test ( "all day every day but slightly different" , async ( ) => {
102
+ setUpTimingTest ( {
103
+ [ Mon ] : "OPEN 24 HOURS" ,
104
+ [ Tue ] : "OPEN 24 HOURS" ,
105
+ [ Wed ] : "OPEN 24 HRS" ,
106
+ [ Thur ] : "12:00 AM - 11:59 PM" ,
107
+ [ Fri ] : "24 hours" ,
108
+ [ Sat ] : "12:00 AM - 2:59 AM, 3:00 AM - 11:59 PM" ,
109
+ [ Sun ] : "24 hours" ,
110
+ } ) ;
111
+ await queryParserAndAssertTimingsCorrect ( [ [ Sun , 0 , 0 , Sat , 23 , 59 ] ] ) ;
112
+ } ) ;
113
+ test ( "empty string" , async ( ) => {
114
+ setUpTimingTest ( {
115
+ [ Mon ] : "OPEN 24 HOURS" ,
116
+ [ Tue ] : "" ,
117
+ [ Wed ] : "" ,
118
+ [ Thur ] : "" ,
119
+ [ Fri ] : "" ,
120
+ [ Sat ] : "" ,
121
+ [ Sun ] : "24 hours" ,
122
+ } ) ;
123
+ await queryParserAndAssertTimingsCorrect ( [ [ Sun , 0 , 0 , Mon , 23 , 59 ] ] ) ;
124
+ } ) ;
125
+ test ( "loop-back time coalescing (wrapping on saturday, but it overlaps with sunday)" , async ( ) => {
126
+ setUpTimingTest ( {
127
+ [ Mon ] : "" ,
128
+ [ Tue ] : "" ,
129
+ [ Wed ] : "" ,
130
+ [ Thur ] : "" ,
131
+ [ Fri ] : "" ,
132
+ [ Sat ] : "7:00 AM - 2:00 AM" ,
133
+ [ Sun ] : "1:00 AM - 5:00 PM" , // sunday is represented as 0
134
+ } ) ;
135
+ await queryParserAndAssertTimingsCorrect ( [ [ Sat , 7 , 0 , Sun , 17 , 0 ] ] ) ;
136
+ } ) ;
137
+ test ( "loop-back time coalescing (wrapping on saturday, but it overlaps with multiple ranges on sunday)" , async ( ) => {
138
+ setUpTimingTest ( {
139
+ [ Mon ] : "" ,
140
+ [ Tue ] : "" ,
141
+ [ Wed ] : "" ,
142
+ [ Thur ] : "" ,
143
+ [ Fri ] : "" ,
144
+ [ Sat ] : "7:00 AM - 2:00 AM" ,
145
+ [ Sun ] : "12:00AM - 12:35 AM, 1:00 AM - 5:00 PM" , // sunday is represented as 0
146
+ } ) ;
147
+ await queryParserAndAssertTimingsCorrect ( [ [ Sat , 7 , 0 , Sun , 17 , 0 ] ] ) ;
148
+ } ) ;
149
+ test ( "open all week, gone wrong" , async ( ) => {
150
+ setUpTimingTest ( {
151
+ [ Sun ] : "OPEN 24 HOURS" ,
152
+ [ Mon ] : "OPEN 24 HOURS" ,
153
+ [ Tue ] : "OPEN 24 HOURS" ,
154
+ [ Wed ] : "OPEN 24 HOURS" ,
155
+ [ Thur ] : "OPEN 24 HOURS" ,
156
+ [ Fri ] : "OPEN 24 HOURS" ,
157
+ [ Sat ] : "12:00 AM - 10:00 AM, 9:00 AM - 2:00 AM" ,
158
+ } ) ;
159
+ await queryParserAndAssertTimingsCorrect ( [ [ Sun , 0 , 0 , Sat , 23 , 59 ] ] ) ; // this should be the default return value if it's open all week
160
+ } ) ;
161
+ test ( "open all week, gone wrong" , async ( ) => {
162
+ setUpTimingTest ( {
163
+ [ Sun ] : "12:00 AM - 12:05 AM, 12:10 AM - 11:59 PM" ,
164
+ [ Mon ] : "OPEN 24 HOURS" ,
165
+ [ Tue ] : "OPEN 24 HOURS" ,
166
+ [ Wed ] : "OPEN 24 HOURS" ,
167
+ [ Thur ] : "OPEN 24 HOURS" ,
168
+ [ Fri ] : "OPEN 24 HOURS" ,
169
+ [ Sat ] : "12:00 AM - 10:00 AM, 9:00 AM - 2:00 AM" ,
170
+ } ) ;
171
+ await queryParserAndAssertTimingsCorrect ( [ [ Sun , 0 , 0 , Sat , 23 , 59 ] ] ) ; // this should be the default return value if it's open all week
172
+ } ) ;
173
+ test ( "wrapping on thursday, but it overlaps with friday" , async ( ) => {
174
+ setUpTimingTest ( {
175
+ [ Mon ] : "" ,
176
+ [ Tue ] : "" ,
177
+ [ Wed ] : "" ,
178
+ [ Thur ] : "7:00 AM - 2:00 AM" ,
179
+ [ Fri ] : "1:00 AM - 5:00 PM" ,
180
+ [ Sat ] : "" ,
181
+ [ Sun ] : "" ,
182
+ } ) ;
183
+ await queryParserAndAssertTimingsCorrect ( [ [ Thur , 7 , 0 , Fri , 17 , 0 ] ] ) ;
184
+ } ) ;
185
+ test ( "some combination of wrap-around" , async ( ) => {
186
+ setUpTimingTest ( {
187
+ [ Mon ] : "" ,
188
+ [ Tue ] : "" ,
189
+ [ Wed ] : "open 24 hours" ,
190
+ [ Thur ] : "7:00 AM - 2:00 AM" ,
191
+ [ Fri ] : "1:00 AM - 5:00 PM" ,
192
+ [ Sat ] : "" ,
193
+ [ Sun ] : "open 24 hours" ,
194
+ } ) ;
87
195
await queryParserAndAssertTimingsCorrect ( [
88
- [ Tue , 0 , 0 , Tue , 23 , 59 ] ,
196
+ [ Sun , 0 , 0 , Sun , 23 , 59 ] ,
89
197
[ Wed , 0 , 0 , Wed , 23 , 59 ] ,
90
- [ Thur , 0 , 0 , Thur , 23 , 59 ] ,
91
- [ Fri , 0 , 0 , Fri , 23 , 59 ] ,
198
+ [ Thur , 7 , 0 , Fri , 17 , 0 ] ,
199
+ ] ) ;
200
+ } ) ;
201
+ test ( "open nearly all week, but Dining Services has truly lost it" , async ( ) => {
202
+ setUpTimingTest ( {
203
+ [ Sun ] : "12:00 AM - 12:05 AM, 9:00 AM - 11:59 PM" ,
204
+ [ Mon ] : "12:00 AM - 3:05 AM, 3:00 AM - 2:00 AM" ,
205
+ [ Tue ] : "1:00 AM - 9:00 PM, 9:01 PM - 12:00 AM, 12:00 AM - 3:00 PM" ,
206
+ [ Wed ] : "OPEN 24 HOURS" ,
207
+ [ Thur ] : "OPEN 24 HOURS" ,
208
+ [ Fri ] : "OPEN 24 HOURS, mooo" ,
209
+ [ Sat ] : "12:00 AM - 10:00 AM, 9:00 AM - 7:05 AM" ,
210
+ } ) ;
211
+ await queryParserAndAssertTimingsCorrect ( [ [ Sun , 9 , 0 , Sun , 7 , 5 ] ] ) ;
212
+ } ) ; // tests literally everything
213
+ test ( "open nearly all week, but Dining Services has truly lost it" , async ( ) => {
214
+ setUpTimingTest ( {
215
+ [ Sun ] : "12:05 AM - 12:10 AM, 9:00 AM - 11:59 PM" ,
216
+ [ Mon ] : "12:00 AM - 3:05 AM, 3:00 AM - 2:00 AM" ,
217
+ [ Tue ] : "1:00 AM - 9:00 PM, 9:01 PM - 12:00 AM, 12:00 AM - 3:00 PM" ,
218
+ [ Wed ] : "OPEN 24 HOURS" ,
219
+ [ Thur ] : "OPEN 24 HOURS" ,
220
+ [ Fri ] : "OPEN 24 HOURS, mooo" ,
221
+ [ Sat ] : "12:00 AM - 10:00 AM, 9:00 AM - 12:02 AM" ,
222
+ } ) ;
223
+ await queryParserAndAssertTimingsCorrect ( [
224
+ [ Sun , 0 , 5 , Sun , 0 , 10 ] ,
225
+ [ Sun , 9 , 0 , Sun , 0 , 2 ] ,
226
+ ] ) ;
227
+ } ) ; // tests literally everything
228
+ test ( "degenerate open times" , async ( ) => {
229
+ setUpTimingTest ( {
230
+ [ Mon ] : "" ,
231
+ [ Tue ] : "" ,
232
+ [ Wed ] : "" ,
233
+ [ Thur ] : "2:00 AM - 2:00 AM" ,
234
+ [ Fri ] : "1:00 AM - 1:00 AM" ,
235
+ [ Sat ] : "" ,
236
+ [ Sun ] : "" ,
237
+ } ) ;
238
+ await queryParserAndAssertTimingsCorrect ( [
239
+ [ Thur , 2 , 0 , Thur , 2 , 0 ] ,
240
+ [ Fri , 1 , 0 , Fri , 1 , 0 ] ,
92
241
] ) ;
93
242
} ) ;
94
243
test ( "single time" , async ( ) => {
@@ -136,7 +285,7 @@ describe("time edge cases", () => {
136
285
[ Sat , 16 , 0 , Sat , 21 , 0 ] ,
137
286
] ) ;
138
287
} ) ;
139
- test ( "12AM" , async ( ) => {
288
+ test ( "12AM (tests the 12:00 AM -> 11:59 PM shift) " , async ( ) => {
140
289
setUpTimingTest ( {
141
290
[ Mon ] : "12:00 AM - 12:00 AM" ,
142
291
[ Tue ] : "2:00 AM - 12:00 AM" ,
@@ -182,4 +331,46 @@ describe("time edge cases", () => {
182
331
[ Fri , 19 , 0 , Fri , 23 , 59 ] ,
183
332
] ) ;
184
333
} ) ;
334
+ test ( "partial all day" , async ( ) => {
335
+ setUpTimingTest ( {
336
+ [ Wed ] : "open 24 hours" ,
337
+ [ Thur ] : "open 24 hours" ,
338
+ [ Fri ] : "open 24 hours" ,
339
+ } ) ;
340
+ await queryParserAndAssertTimingsCorrect ( [ [ Wed , 0 , 0 , Fri , 23 , 59 ] ] ) ;
341
+ } ) ;
342
+ test ( "partial all day, over the weekend" , async ( ) => {
343
+ setUpTimingTest ( {
344
+ [ Sat ] : "open 24 hours" ,
345
+ [ Sun ] : "open 24 hours" ,
346
+ [ Mon ] : "open 24 hours" ,
347
+ } ) ;
348
+ await queryParserAndAssertTimingsCorrect ( [ [ Sat , 0 , 0 , Mon , 23 , 59 ] ] ) ;
349
+ } ) ;
350
+ test ( "partial all day, over the weekend" , async ( ) => {
351
+ setUpTimingTest ( {
352
+ [ Sat ] : "7:00 AM - 12:01 AM" ,
353
+ [ Sun ] : "open 24 hours" ,
354
+ [ Mon ] : "open 24 hours" ,
355
+ } ) ;
356
+ await queryParserAndAssertTimingsCorrect ( [ [ Sat , 7 , 0 , Mon , 23 , 59 ] ] ) ;
357
+ } ) ;
358
+ test ( "another one" , async ( ) => {
359
+ setUpTimingTest ( {
360
+ [ Sat ] : "7:00 AM - 12:01 AM" ,
361
+ } ) ;
362
+ await queryParserAndAssertTimingsCorrect ( [ [ Sat , 7 , 0 , Sun , 0 , 1 ] ] ) ;
363
+ } ) ;
364
+ test ( "unparseable token" , async ( ) => {
365
+ setUpTimingTest ( {
366
+ [ Mon ] : "mooooo" ,
367
+ } ) ;
368
+ await queryParserAndAssertTimingsCorrect ( [ ] ) ;
369
+ } ) ;
370
+ test ( "24 hours should override other times" , async ( ) => {
371
+ setUpTimingTest ( {
372
+ [ Mon ] : "OPEN 24 HOURS, 2:00 AM - 3:00 AM" ,
373
+ } ) ;
374
+ await queryParserAndAssertTimingsCorrect ( [ [ Mon , 0 , 0 , Mon , 23 , 59 ] ] ) ;
375
+ } ) ;
185
376
} ) ;
0 commit comments