jazz-tools 0.13.5 → 0.13.9

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.
@@ -417,6 +417,211 @@ describe("subscribeToCoValue", () => {
417
417
 
418
418
  expect(updateFn).toHaveBeenCalledTimes(1);
419
419
  });
420
+
421
+ it("should emit when all the items become available", async () => {
422
+ class TestMap extends CoMap {
423
+ value = co.string;
424
+ }
425
+
426
+ class TestList extends CoList.Of(co.ref(TestMap)) {}
427
+
428
+ const reader = await createJazzTestAccount({
429
+ isCurrentActiveAccount: true,
430
+ });
431
+
432
+ const creator = await createJazzTestAccount({
433
+ isCurrentActiveAccount: true,
434
+ });
435
+
436
+ const everyone = Group.create(creator);
437
+ everyone.addMember("everyone", "reader");
438
+
439
+ const group = Group.create(creator);
440
+
441
+ const list = TestList.create(
442
+ [
443
+ TestMap.create({ value: "1" }, group),
444
+ TestMap.create({ value: "2" }, everyone),
445
+ TestMap.create({ value: "3" }, everyone),
446
+ TestMap.create({ value: "4" }, everyone),
447
+ TestMap.create({ value: "5" }, everyone),
448
+ ],
449
+ everyone,
450
+ );
451
+
452
+ let result = null as Resolved<TestList, { $each: true }> | null;
453
+
454
+ const updateFn = vi.fn().mockImplementation((value) => {
455
+ result = value;
456
+ });
457
+ const onUnauthorized = vi.fn();
458
+
459
+ const unsubscribe = subscribeToCoValue(
460
+ TestList,
461
+ list.id,
462
+ {
463
+ loadAs: reader,
464
+ resolve: {
465
+ $each: true,
466
+ },
467
+ onUnauthorized,
468
+ },
469
+ updateFn,
470
+ );
471
+
472
+ onTestFinished(unsubscribe);
473
+
474
+ await waitFor(() => {
475
+ expect(onUnauthorized).toHaveBeenCalled();
476
+ });
477
+
478
+ group.addMember("everyone", "reader");
479
+
480
+ await waitFor(() => {
481
+ expect(updateFn).toHaveBeenCalled();
482
+ });
483
+
484
+ assert(result);
485
+
486
+ expect(result[0]?.value).toBe("1");
487
+
488
+ expect(updateFn).toHaveBeenCalledTimes(1);
489
+ });
490
+
491
+ it("should handle null values in lists with required refs", async () => {
492
+ class TestMap extends CoMap {
493
+ value = co.string;
494
+ }
495
+
496
+ class TestList extends CoList.Of(co.ref(TestMap)) {}
497
+
498
+ const reader = await createJazzTestAccount({
499
+ isCurrentActiveAccount: true,
500
+ });
501
+
502
+ const creator = await createJazzTestAccount({
503
+ isCurrentActiveAccount: true,
504
+ });
505
+
506
+ const everyone = Group.create(creator);
507
+ everyone.addMember("everyone", "reader");
508
+
509
+ const list = TestList.create(
510
+ [
511
+ // TODO: This should be flagged as an error by typescript
512
+ null,
513
+ TestMap.create({ value: "2" }, everyone),
514
+ TestMap.create({ value: "3" }, everyone),
515
+ TestMap.create({ value: "4" }, everyone),
516
+ TestMap.create({ value: "5" }, everyone),
517
+ ],
518
+ everyone,
519
+ );
520
+
521
+ let result = null as Resolved<TestList, { $each: true }> | null;
522
+
523
+ const updateFn = vi.fn().mockImplementation((value) => {
524
+ result = value;
525
+ });
526
+ const onUnauthorized = vi.fn();
527
+ const onUnavailable = vi.fn();
528
+
529
+ const unsubscribe = subscribeToCoValue(
530
+ TestList,
531
+ list.id,
532
+ {
533
+ loadAs: reader,
534
+ resolve: {
535
+ $each: true,
536
+ },
537
+ onUnauthorized,
538
+ onUnavailable,
539
+ },
540
+ updateFn,
541
+ );
542
+
543
+ onTestFinished(unsubscribe);
544
+
545
+ await waitFor(() => {
546
+ expect(onUnavailable).toHaveBeenCalled();
547
+ });
548
+
549
+ list[0] = TestMap.create({ value: "1" }, everyone);
550
+
551
+ await waitFor(() => {
552
+ expect(updateFn).toHaveBeenCalled();
553
+ });
554
+
555
+ assert(result);
556
+
557
+ expect(result[0]?.value).toBe("1");
558
+
559
+ expect(updateFn).toHaveBeenCalledTimes(1);
560
+ });
561
+
562
+ it("should handle null values in lists with optional refs", async () => {
563
+ class TestMap extends CoMap {
564
+ value = co.string;
565
+ }
566
+
567
+ class TestList extends CoList.Of(co.optional.ref(TestMap)) {}
568
+
569
+ const reader = await createJazzTestAccount({
570
+ isCurrentActiveAccount: true,
571
+ });
572
+
573
+ const creator = await createJazzTestAccount({
574
+ isCurrentActiveAccount: true,
575
+ });
576
+
577
+ const everyone = Group.create(creator);
578
+ everyone.addMember("everyone", "reader");
579
+
580
+ const list = TestList.create(
581
+ [
582
+ null,
583
+ TestMap.create({ value: "2" }, everyone),
584
+ TestMap.create({ value: "3" }, everyone),
585
+ TestMap.create({ value: "4" }, everyone),
586
+ TestMap.create({ value: "5" }, everyone),
587
+ ],
588
+ everyone,
589
+ );
590
+
591
+ let result = null as Resolved<TestList, { $each: true }> | null;
592
+
593
+ const updateFn = vi.fn().mockImplementation((value) => {
594
+ result = value;
595
+ });
596
+ const onUnauthorized = vi.fn();
597
+ const onUnavailable = vi.fn();
598
+
599
+ const unsubscribe = subscribeToCoValue(
600
+ TestList,
601
+ list.id,
602
+ {
603
+ loadAs: reader,
604
+ resolve: {
605
+ $each: true,
606
+ },
607
+ onUnauthorized,
608
+ onUnavailable,
609
+ },
610
+ updateFn,
611
+ );
612
+
613
+ onTestFinished(unsubscribe);
614
+
615
+ await waitFor(() => {
616
+ expect(updateFn).toHaveBeenCalled();
617
+ });
618
+
619
+ assert(result);
620
+
621
+ expect(result[0]).toBeNull();
622
+
623
+ expect(updateFn).toHaveBeenCalledTimes(1);
624
+ });
420
625
  });
421
626
 
422
627
  describe("createCoValueObservable", () => {
package/tsconfig.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "compilerOptions": {
3
- "lib": ["ESNext"],
3
+ "lib": ["ESNext", "DOM"],
4
4
  "module": "esnext",
5
5
  "target": "ES2021",
6
6
  "moduleResolution": "bundler",