@doctocar/tooling 0.3.1-33 → 0.3.1-35

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 (35) hide show
  1. package/dist/firebase/cloudFunctions/enums/OnCallCloudFunctionsNames.enum.d.ts +1 -0
  2. package/dist/firebase/cloudFunctions/enums/OnCallCloudFunctionsNames.enum.js +1 -0
  3. package/dist/firebase/cloudFunctions/maps/OnCallCloudFunctionsTypeMappings.map.d.ts +5 -1
  4. package/dist/firebase/cloudFunctions/types/users/fcm/ClearUserFcmBadgeRequestData.type.d.ts +3 -0
  5. package/dist/firebase/cloudFunctions/types/users/fcm/ClearUserFcmBadgeRequestData.type.js +2 -0
  6. package/dist/firebase/cloudFunctions/types/users/fcm/ClearUserFcmBadgeResponseData.type.d.ts +1 -0
  7. package/dist/firebase/cloudFunctions/types/users/fcm/ClearUserFcmBadgeResponseData.type.js +2 -0
  8. package/dist/firebase/cloudFunctions/types/users/fcm/index.d.ts +2 -0
  9. package/dist/firebase/cloudFunctions/types/users/fcm/index.js +2 -0
  10. package/dist/firebase/firestore/utils/dataValidators/slots/__tests__/isValidOneTimeSlot.test.d.ts +1 -0
  11. package/dist/firebase/firestore/utils/dataValidators/slots/__tests__/isValidOneTimeSlot.test.js +287 -0
  12. package/dist/firebase/firestore/utils/dataValidators/slots/__tests__/isValidRecurringSlot.test.d.ts +1 -0
  13. package/dist/firebase/firestore/utils/dataValidators/slots/__tests__/isValidRecurringSlot.test.js +527 -0
  14. package/dist/firebase/firestore/utils/dataValidators/slots/__tests__/isValidTimeOffSlot.test.d.ts +1 -0
  15. package/dist/firebase/firestore/utils/dataValidators/slots/__tests__/isValidTimeOffSlot.test.js +272 -0
  16. package/dist/firebase/firestore/utils/dataValidators/slots/index.d.ts +3 -3
  17. package/dist/firebase/firestore/utils/dataValidators/slots/index.js +3 -3
  18. package/dist/firebase/firestore/utils/dataValidators/slots/isValidOneTimeSlot.d.ts +2 -0
  19. package/dist/firebase/firestore/utils/dataValidators/slots/isValidOneTimeSlot.js +45 -0
  20. package/dist/firebase/firestore/utils/dataValidators/slots/isValidRecurringSlot.d.ts +2 -0
  21. package/dist/firebase/firestore/utils/dataValidators/slots/isValidRecurringSlot.js +83 -0
  22. package/dist/firebase/firestore/utils/dataValidators/slots/isValidTimeOffSlot.d.ts +2 -0
  23. package/dist/firebase/firestore/utils/dataValidators/slots/isValidTimeOffSlot.js +45 -0
  24. package/dist/gcp/pubsub/enums/PubSubTopics.enum.d.ts +1 -1
  25. package/dist/gcp/pubsub/enums/PubSubTopics.enum.js +1 -1
  26. package/dist/gcp/pubsub/maps/PubSubTopicMessageMap.map.d.ts +2 -2
  27. package/dist/gcp/pubsub/types/orders/PubSubOrderInvoicedMessage.type.d.ts +3 -0
  28. package/dist/gcp/pubsub/types/orders/PubSubOrderInvoicedMessage.type.js +2 -0
  29. package/dist/gcp/pubsub/types/orders/index.d.ts +1 -1
  30. package/dist/gcp/pubsub/types/orders/index.js +1 -1
  31. package/dist/gcp/pubsub/utils/stubs/index.d.ts +1 -1
  32. package/dist/gcp/pubsub/utils/stubs/index.js +1 -1
  33. package/dist/gcp/pubsub/utils/stubs/pubSubOrderInvoicedMessageStub.d.ts +2 -0
  34. package/dist/gcp/pubsub/utils/stubs/pubSubOrderInvoicedMessageStub.js +9 -0
  35. package/package.json +1 -1
@@ -0,0 +1,527 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /* eslint-disable @typescript-eslint/no-explicit-any */
4
+ const enums_1 = require("../../../../../../enums");
5
+ const constants_1 = require("../../../../constants");
6
+ const enums_2 = require("../../../../enums");
7
+ const stubs_1 = require("../../../stubs");
8
+ const isValidRecurringSlot_1 = require("../isValidRecurringSlot");
9
+ describe("isValidRecurringSlot", () => {
10
+ const baseValidSlot = {
11
+ type: enums_2.SlotType.RECURRING,
12
+ capacity: 3,
13
+ startDate: (0, stubs_1.firestoreTimestampStub)(),
14
+ endDate: null,
15
+ daysOfWeek: [enums_1.WeekDays.MONDAY, enums_1.WeekDays.WEDNESDAY],
16
+ intervalWeeks: 1,
17
+ timeZone: "Europe/Paris",
18
+ createdAt: (0, stubs_1.firestoreTimestampStub)(),
19
+ updatedAt: (0, stubs_1.firestoreTimestampStub)(),
20
+ };
21
+ it("returns true for a valid slot", () => {
22
+ const slot = {
23
+ ...baseValidSlot,
24
+ localTimeRangeOfDay: {
25
+ startTime: {
26
+ hour: 9,
27
+ minute: 0,
28
+ },
29
+ endTime: {
30
+ hour: 10,
31
+ minute: 30,
32
+ },
33
+ },
34
+ intervalWeeks: 1,
35
+ };
36
+ expect((0, isValidRecurringSlot_1.isValidRecurringSlot)(slot)).toBe(true);
37
+ });
38
+ it("return true for differents valid timezones", () => {
39
+ const validTimezones = [
40
+ "Europe/Paris",
41
+ "Europe/Berlin",
42
+ "Europe/Madrid",
43
+ "Europe/Rome",
44
+ "Europe/Brussels",
45
+ "Europe/Moscow",
46
+ "America/New_York",
47
+ "Asia/Tokyo",
48
+ "Australia/Sydney",
49
+ "UTC",
50
+ "Europe/London",
51
+ "America/Los_Angeles",
52
+ "Asia/Kolkata",
53
+ "America/Argentina/Buenos_Aires",
54
+ "Asia/Shanghai",
55
+ ];
56
+ validTimezones.forEach((timezone) => {
57
+ const slot = {
58
+ ...baseValidSlot,
59
+ timeZone: timezone,
60
+ localTimeRangeOfDay: {
61
+ startTime: {
62
+ hour: 9,
63
+ minute: 0,
64
+ },
65
+ endTime: {
66
+ hour: 10,
67
+ minute: 30,
68
+ },
69
+ },
70
+ intervalWeeks: 1,
71
+ };
72
+ expect((0, isValidRecurringSlot_1.isValidRecurringSlot)(slot)).toBe(true);
73
+ });
74
+ });
75
+ it("return false if type is not RECURRING", () => {
76
+ const slot = {
77
+ ...baseValidSlot,
78
+ type: enums_2.SlotType.ONE_TIME,
79
+ localTimeRangeOfDay: {
80
+ startTime: {
81
+ hour: 9,
82
+ minute: 0,
83
+ },
84
+ endTime: {
85
+ hour: 10,
86
+ minute: 30,
87
+ },
88
+ },
89
+ intervalWeeks: 1,
90
+ };
91
+ expect((0, isValidRecurringSlot_1.isValidRecurringSlot)(slot)).toBe(false);
92
+ });
93
+ it("return false if startAt or endAt is missing", () => {
94
+ const missingStart = {
95
+ ...baseValidSlot,
96
+ localTimeRangeOfDay: {
97
+ endTime: {
98
+ hour: 10,
99
+ minute: 30,
100
+ },
101
+ },
102
+ intervalWeeks: 1,
103
+ };
104
+ const missingEnd = {
105
+ ...baseValidSlot,
106
+ localTimeRangeOfDay: {
107
+ startTime: {
108
+ hour: 9,
109
+ minute: 0,
110
+ },
111
+ },
112
+ intervalWeeks: 1,
113
+ };
114
+ expect((0, isValidRecurringSlot_1.isValidRecurringSlot)(missingStart)).toBe(false);
115
+ expect((0, isValidRecurringSlot_1.isValidRecurringSlot)(missingEnd)).toBe(false);
116
+ });
117
+ it("return false if timeZone is missing or invalid", () => {
118
+ const missingTimeZone = {
119
+ ...baseValidSlot,
120
+ timeZone: undefined,
121
+ localTimeRangeOfDay: {
122
+ startTime: {
123
+ hour: 9,
124
+ minute: 0,
125
+ },
126
+ endTime: {
127
+ hour: 10,
128
+ minute: 30,
129
+ },
130
+ },
131
+ intervalWeeks: 1,
132
+ };
133
+ expect((0, isValidRecurringSlot_1.isValidRecurringSlot)(missingTimeZone)).toBe(false);
134
+ const slot = {
135
+ ...baseValidSlot,
136
+ timeZone: "",
137
+ localTimeRangeOfDay: {
138
+ startTime: {
139
+ hour: 9,
140
+ minute: 0,
141
+ },
142
+ endTime: {
143
+ hour: 10,
144
+ minute: 30,
145
+ },
146
+ },
147
+ intervalWeeks: 1,
148
+ };
149
+ expect((0, isValidRecurringSlot_1.isValidRecurringSlot)(slot)).toBe(false);
150
+ const invalidSlot = {
151
+ ...baseValidSlot,
152
+ timeZone: "Invalid/Timezone",
153
+ localTimeRangeOfDay: {
154
+ startTime: {
155
+ hour: 9,
156
+ minute: 0,
157
+ },
158
+ endTime: {
159
+ hour: 10,
160
+ minute: 30,
161
+ },
162
+ },
163
+ intervalWeeks: 1,
164
+ };
165
+ expect((0, isValidRecurringSlot_1.isValidRecurringSlot)(invalidSlot)).toBe(false);
166
+ });
167
+ it("return false if startDate is missing", () => {
168
+ const slot = {
169
+ ...baseValidSlot,
170
+ startDate: undefined,
171
+ localTimeRangeOfDay: {
172
+ startTime: {
173
+ hour: 9,
174
+ minute: 0,
175
+ },
176
+ endTime: {
177
+ hour: 10,
178
+ minute: 30,
179
+ },
180
+ },
181
+ };
182
+ expect((0, isValidRecurringSlot_1.isValidRecurringSlot)(slot)).toBe(false);
183
+ });
184
+ it("return false if startDate is not a valid timestamp", () => {
185
+ const slot = {
186
+ ...baseValidSlot,
187
+ startDate: { toMillis: () => NaN },
188
+ localTimeRangeOfDay: {
189
+ startTime: {
190
+ hour: 9,
191
+ minute: 0,
192
+ },
193
+ endTime: {
194
+ hour: 10,
195
+ minute: 30,
196
+ },
197
+ },
198
+ };
199
+ expect((0, isValidRecurringSlot_1.isValidRecurringSlot)(slot)).toBe(false);
200
+ });
201
+ it("return false if endDate is not a valid timestamp", () => {
202
+ const slot = {
203
+ ...baseValidSlot,
204
+ endDate: { toMillis: () => NaN },
205
+ localTimeRangeOfDay: {
206
+ startTime: {
207
+ hour: 9,
208
+ minute: 0,
209
+ },
210
+ endTime: {
211
+ hour: 10,
212
+ minute: 30,
213
+ },
214
+ },
215
+ };
216
+ expect((0, isValidRecurringSlot_1.isValidRecurringSlot)(slot)).toBe(false);
217
+ });
218
+ it("return false if capacity is not an integer ≥ 1 <= MAXIMUM_SLOT_CAPACITY", () => {
219
+ const zeroCap = {
220
+ ...baseValidSlot,
221
+ capacity: 0,
222
+ localTimeRangeOfDay: {
223
+ startTime: {
224
+ hour: 9,
225
+ minute: 0,
226
+ },
227
+ endTime: {
228
+ hour: 10,
229
+ minute: 30,
230
+ },
231
+ },
232
+ intervalWeeks: 1,
233
+ };
234
+ const negCap = {
235
+ ...baseValidSlot,
236
+ capacity: -5,
237
+ localTimeRangeOfDay: {
238
+ startTime: {
239
+ hour: 9,
240
+ minute: 0,
241
+ },
242
+ endTime: {
243
+ hour: 10,
244
+ minute: 30,
245
+ },
246
+ },
247
+ intervalWeeks: 1,
248
+ };
249
+ const floatCap = {
250
+ ...baseValidSlot,
251
+ capacity: 2.5,
252
+ localTimeRangeOfDay: {
253
+ startTime: {
254
+ hour: 9,
255
+ minute: 0,
256
+ },
257
+ endTime: {
258
+ hour: 10,
259
+ minute: 30,
260
+ },
261
+ },
262
+ intervalWeeks: 1,
263
+ };
264
+ const tooBigCap = {
265
+ ...baseValidSlot,
266
+ capacity: constants_1.MAXIMUM_SLOT_CAPACITY + 1,
267
+ localTimeRangeOfDay: {
268
+ startTime: {
269
+ hour: 9,
270
+ minute: 0,
271
+ },
272
+ endTime: {
273
+ hour: 10,
274
+ minute: 30,
275
+ },
276
+ },
277
+ intervalWeeks: 1,
278
+ };
279
+ expect((0, isValidRecurringSlot_1.isValidRecurringSlot)(zeroCap)).toBe(false);
280
+ expect((0, isValidRecurringSlot_1.isValidRecurringSlot)(negCap)).toBe(false);
281
+ expect((0, isValidRecurringSlot_1.isValidRecurringSlot)(floatCap)).toBe(false);
282
+ expect((0, isValidRecurringSlot_1.isValidRecurringSlot)(tooBigCap)).toBe(false);
283
+ });
284
+ it("return false if startAt ≥ endAt", () => {
285
+ const equalTimes = {
286
+ ...baseValidSlot,
287
+ localTimeRangeOfDay: {
288
+ startTime: {
289
+ hour: 10,
290
+ minute: 30,
291
+ },
292
+ endTime: {
293
+ hour: 10,
294
+ minute: 30,
295
+ },
296
+ },
297
+ };
298
+ const backwards = {
299
+ ...baseValidSlot,
300
+ localTimeRangeOfDay: {
301
+ startTime: {
302
+ hour: 9,
303
+ minute: 0,
304
+ },
305
+ endTime: {
306
+ hour: 8,
307
+ minute: 30,
308
+ },
309
+ },
310
+ };
311
+ expect((0, isValidRecurringSlot_1.isValidRecurringSlot)(equalTimes)).toBe(false);
312
+ expect((0, isValidRecurringSlot_1.isValidRecurringSlot)(backwards)).toBe(false);
313
+ });
314
+ it("return false if there is duplicate weekdays", () => {
315
+ const duplicateDays = {
316
+ ...baseValidSlot,
317
+ daysOfWeek: [enums_1.WeekDays.MONDAY, enums_1.WeekDays.MONDAY],
318
+ localTimeRangeOfDay: {
319
+ startTime: {
320
+ hour: 9,
321
+ minute: 0,
322
+ },
323
+ endTime: {
324
+ hour: 10,
325
+ minute: 30,
326
+ },
327
+ },
328
+ };
329
+ expect((0, isValidRecurringSlot_1.isValidRecurringSlot)(duplicateDays)).toBe(false);
330
+ });
331
+ it("return false if daysOfWeek contains invalid values", () => {
332
+ const invalidDays = {
333
+ ...baseValidSlot,
334
+ daysOfWeek: [enums_1.WeekDays.MONDAY, "INVALID_DAY"],
335
+ localTimeRangeOfDay: {
336
+ startTime: {
337
+ hour: 9,
338
+ minute: 0,
339
+ },
340
+ endTime: {
341
+ hour: 10,
342
+ minute: 30,
343
+ },
344
+ },
345
+ };
346
+ expect((0, isValidRecurringSlot_1.isValidRecurringSlot)(invalidDays)).toBe(false);
347
+ });
348
+ it("return false if startAt or endAt does not have hour or minute", () => {
349
+ const badStart = {
350
+ ...baseValidSlot,
351
+ localTimeRangeOfDay: {
352
+ startTime: { hour: undefined, minute: 0 },
353
+ endTime: { hour: 10, minute: 30 },
354
+ },
355
+ };
356
+ const badEnd = {
357
+ ...baseValidSlot,
358
+ localTimeRangeOfDay: {
359
+ startTime: { hour: 9, minute: 0 },
360
+ endTime: { hour: undefined, minute: 30 },
361
+ },
362
+ };
363
+ expect((0, isValidRecurringSlot_1.isValidRecurringSlot)(badStart)).toBe(false);
364
+ expect((0, isValidRecurringSlot_1.isValidRecurringSlot)(badEnd)).toBe(false);
365
+ });
366
+ it("return false if startAt or endAt hour is not an integer in [0, 23]", () => {
367
+ const badStart = {
368
+ ...baseValidSlot,
369
+ localTimeRangeOfDay: {
370
+ startTime: { hour: 24, minute: 0 },
371
+ endTime: { hour: 10, minute: 30 },
372
+ },
373
+ };
374
+ const badEnd = {
375
+ ...baseValidSlot,
376
+ localTimeRangeOfDay: {
377
+ startTime: { hour: 9, minute: 0 },
378
+ endTime: { hour: -1, minute: 30 },
379
+ },
380
+ };
381
+ expect((0, isValidRecurringSlot_1.isValidRecurringSlot)(badStart)).toBe(false);
382
+ expect((0, isValidRecurringSlot_1.isValidRecurringSlot)(badEnd)).toBe(false);
383
+ });
384
+ it("return false if startAt or endAt minute is not an integer in [0, 59]", () => {
385
+ const badStart = {
386
+ ...baseValidSlot,
387
+ localTimeRangeOfDay: {
388
+ startTime: { hour: 9, minute: 60 },
389
+ endTime: { hour: 10, minute: 30 },
390
+ },
391
+ };
392
+ const badEnd = {
393
+ ...baseValidSlot,
394
+ localTimeRangeOfDay: {
395
+ startTime: { hour: 9, minute: 0 },
396
+ endTime: { hour: 10, minute: -1 },
397
+ },
398
+ };
399
+ expect((0, isValidRecurringSlot_1.isValidRecurringSlot)(badStart)).toBe(false);
400
+ expect((0, isValidRecurringSlot_1.isValidRecurringSlot)(badEnd)).toBe(false);
401
+ });
402
+ it("return false if intervalWeeks is not an integer in [1, 52]", () => {
403
+ const badInterval = {
404
+ ...baseValidSlot,
405
+ intervalWeeks: 0,
406
+ localTimeRangeOfDay: {
407
+ startTime: {
408
+ hour: 9,
409
+ minute: 0,
410
+ },
411
+ endTime: {
412
+ hour: 10,
413
+ minute: 30,
414
+ },
415
+ },
416
+ };
417
+ const badInterval2 = {
418
+ ...baseValidSlot,
419
+ intervalWeeks: 53,
420
+ localTimeRangeOfDay: {
421
+ startTime: {
422
+ hour: 9,
423
+ minute: 0,
424
+ },
425
+ endTime: {
426
+ hour: 10,
427
+ minute: 30,
428
+ },
429
+ },
430
+ };
431
+ const badInterval3 = {
432
+ ...baseValidSlot,
433
+ intervalWeeks: -1.5,
434
+ localTimeRangeOfDay: {
435
+ startTime: {
436
+ hour: 9,
437
+ minute: 0,
438
+ },
439
+ endTime: {
440
+ hour: 10,
441
+ minute: 30,
442
+ },
443
+ },
444
+ };
445
+ expect((0, isValidRecurringSlot_1.isValidRecurringSlot)(badInterval)).toBe(false);
446
+ expect((0, isValidRecurringSlot_1.isValidRecurringSlot)(badInterval2)).toBe(false);
447
+ expect((0, isValidRecurringSlot_1.isValidRecurringSlot)(badInterval3)).toBe(false);
448
+ });
449
+ it("return false if daysOfWeek is empty", () => {
450
+ const slot = {
451
+ ...baseValidSlot,
452
+ daysOfWeek: [],
453
+ localTimeRangeOfDay: {
454
+ startTime: { hour: 9, minute: 0 },
455
+ endTime: { hour: 10, minute: 0 },
456
+ },
457
+ };
458
+ expect((0, isValidRecurringSlot_1.isValidRecurringSlot)(slot)).toBe(false);
459
+ });
460
+ it("allows a single weekday", () => {
461
+ const slot = {
462
+ ...baseValidSlot,
463
+ daysOfWeek: [enums_1.WeekDays.FRIDAY],
464
+ localTimeRangeOfDay: {
465
+ startTime: { hour: 9, minute: 0 },
466
+ endTime: { hour: 10, minute: 0 },
467
+ },
468
+ };
469
+ expect((0, isValidRecurringSlot_1.isValidRecurringSlot)(slot)).toBe(true);
470
+ });
471
+ it("return false if intervalWeeks is missing", () => {
472
+ const slot = {
473
+ ...baseValidSlot,
474
+ localTimeRangeOfDay: {
475
+ startTime: { hour: 9, minute: 0 },
476
+ endTime: { hour: 10, minute: 0 },
477
+ },
478
+ intervalWeeks: undefined,
479
+ };
480
+ expect((0, isValidRecurringSlot_1.isValidRecurringSlot)(slot)).toBe(false);
481
+ });
482
+ it("allows intervalWeeks of 1 and 52", () => {
483
+ for (const n of [1, 52]) {
484
+ const slot = {
485
+ ...baseValidSlot,
486
+ localTimeRangeOfDay: {
487
+ startTime: { hour: 9, minute: 0 },
488
+ endTime: { hour: 10, minute: 0 },
489
+ },
490
+ intervalWeeks: n,
491
+ };
492
+ expect((0, isValidRecurringSlot_1.isValidRecurringSlot)(slot)).toBe(true);
493
+ }
494
+ });
495
+ it("allows startAt 00:00 and endAt 23:59", () => {
496
+ const slot = {
497
+ ...baseValidSlot,
498
+ localTimeRangeOfDay: {
499
+ startTime: { hour: 0, minute: 0 },
500
+ endTime: { hour: 23, minute: 59 },
501
+ },
502
+ };
503
+ expect((0, isValidRecurringSlot_1.isValidRecurringSlot)(slot)).toBe(true);
504
+ });
505
+ it("allows capacity of exactly 1", () => {
506
+ const slot = {
507
+ ...baseValidSlot,
508
+ capacity: 1,
509
+ localTimeRangeOfDay: {
510
+ startTime: { hour: 9, minute: 0 },
511
+ endTime: { hour: 10, minute: 0 },
512
+ },
513
+ };
514
+ expect((0, isValidRecurringSlot_1.isValidRecurringSlot)(slot)).toBe(true);
515
+ });
516
+ it("return false if capacity is missing", () => {
517
+ const slot = {
518
+ ...baseValidSlot,
519
+ capacity: undefined,
520
+ localTimeRangeOfDay: {
521
+ startTime: { hour: 9, minute: 0 },
522
+ endTime: { hour: 10, minute: 0 },
523
+ },
524
+ };
525
+ expect((0, isValidRecurringSlot_1.isValidRecurringSlot)(slot)).toBe(false);
526
+ });
527
+ });