@adaas/a-concept 0.1.55 → 0.1.57

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.
@@ -452,4 +452,228 @@ describe('A-Scope tests', () => {
452
452
  });
453
453
 
454
454
  });
455
+ it('Should resolve entities from both current and parent scopes with resolveAll', async () => {
456
+ class MyEntity_A extends A_Entity<{ name: string }> {
457
+ name!: string;
458
+
459
+ fromNew(newEntity: { name: string; }): void {
460
+ super.fromNew(newEntity);
461
+ this.name = newEntity.name;
462
+ }
463
+ }
464
+
465
+ class MyEntity_B extends MyEntity_A { }
466
+
467
+ const parentScope = new A_Scope({
468
+ name: 'ParentScope',
469
+ entities: [new MyEntity_B({ name: 'Entity1' })]
470
+ });
471
+
472
+ const scope = new A_Scope({
473
+ name: 'TestScope',
474
+ entities: [new MyEntity_A({ name: 'Entity2' })]
475
+ }).inherit(parentScope);
476
+
477
+ const resolvedEntities = scope.resolveAll<MyEntity_A>(MyEntity_A);
478
+
479
+ expect(resolvedEntities.length).toBe(2);
480
+ expect(resolvedEntities[0].name).toBe('Entity2');
481
+ expect(resolvedEntities[0]).toBeInstanceOf(MyEntity_A);
482
+ expect(resolvedEntities[1].name).toBe('Entity1');
483
+ expect(resolvedEntities[1]).toBeInstanceOf(MyEntity_B);
484
+ });
485
+
486
+ it('Should resolve entities from current scope only with resolveFlatAll', async () => {
487
+ class MyEntity_A extends A_Entity<{ name: string }> {
488
+ name!: string;
489
+
490
+ fromNew(newEntity: { name: string; }): void {
491
+ super.fromNew(newEntity);
492
+ this.name = newEntity.name;
493
+ }
494
+ }
495
+
496
+ class MyEntity_B extends MyEntity_A { }
497
+
498
+ const parentScope = new A_Scope({
499
+ name: 'ParentScope',
500
+ entities: [new MyEntity_B({ name: 'Entity1' })]
501
+ });
502
+
503
+ const scope = new A_Scope({
504
+ name: 'TestScope',
505
+ entities: [new MyEntity_A({ name: 'Entity2' })]
506
+ }).inherit(parentScope);
507
+
508
+ const resolvedFlatEntities = scope.resolveFlatAll<MyEntity_A>(MyEntity_A);
509
+
510
+ expect(resolvedFlatEntities.length).toBe(1);
511
+ expect(resolvedFlatEntities[0].name).toBe('Entity2');
512
+ expect(resolvedFlatEntities[0]).toBeInstanceOf(MyEntity_A);
513
+ });
514
+
515
+ it('Should resolve base class entity from current scope with resolve', async () => {
516
+ class MyEntity_A extends A_Entity<{ name: string }> {
517
+ name!: string;
518
+
519
+ fromNew(newEntity: { name: string; }): void {
520
+ super.fromNew(newEntity);
521
+ this.name = newEntity.name;
522
+ }
523
+ }
524
+
525
+ class MyEntity_B extends MyEntity_A { }
526
+
527
+ const parentScope = new A_Scope({
528
+ name: 'ParentScope',
529
+ entities: [new MyEntity_B({ name: 'Entity1' })]
530
+ });
531
+
532
+ const scope = new A_Scope({
533
+ name: 'TestScope',
534
+ entities: [new MyEntity_A({ name: 'Entity2' })]
535
+ }).inherit(parentScope);
536
+
537
+ const resolvedA = scope.resolve<MyEntity_A>(MyEntity_A);
538
+
539
+ expect(resolvedA).toBeDefined();
540
+ expect(resolvedA?.name).toBe('Entity2');
541
+ expect(resolvedA).toBeInstanceOf(MyEntity_A);
542
+ expect(resolvedA).not.toBeInstanceOf(MyEntity_B);
543
+ });
544
+
545
+ it('Should resolve derived class entity from parent scope with resolve', async () => {
546
+ class MyEntity_A extends A_Entity<{ name: string }> {
547
+ name!: string;
548
+
549
+ fromNew(newEntity: { name: string; }): void {
550
+ super.fromNew(newEntity);
551
+ this.name = newEntity.name;
552
+ }
553
+ }
554
+
555
+ class MyEntity_B extends MyEntity_A { }
556
+
557
+ const parentScope = new A_Scope({
558
+ name: 'ParentScope',
559
+ entities: [new MyEntity_B({ name: 'Entity1' })]
560
+ });
561
+
562
+ const scope = new A_Scope({
563
+ name: 'TestScope',
564
+ entities: [new MyEntity_A({ name: 'Entity2' })]
565
+ }).inherit(parentScope);
566
+
567
+ const resolvedB = scope.resolve<MyEntity_B>(MyEntity_B);
568
+
569
+ expect(resolvedB).toBeDefined();
570
+ expect(resolvedB?.name).toBe('Entity1');
571
+ expect(resolvedB).toBeInstanceOf(MyEntity_B);
572
+ });
573
+
574
+ it('Should not resolve derived class entity from parent scope with resolveFlat', async () => {
575
+ class MyEntity_A extends A_Entity<{ name: string }> {
576
+ name!: string;
577
+
578
+ fromNew(newEntity: { name: string; }): void {
579
+ super.fromNew(newEntity);
580
+ this.name = newEntity.name;
581
+ }
582
+ }
583
+
584
+ class MyEntity_B extends MyEntity_A { }
585
+
586
+ const parentScope = new A_Scope({
587
+ name: 'ParentScope',
588
+ entities: [new MyEntity_B({ name: 'Entity1' })]
589
+ });
590
+
591
+ const scope = new A_Scope({
592
+ name: 'TestScope',
593
+ entities: [new MyEntity_A({ name: 'Entity2' })]
594
+ }).inherit(parentScope);
595
+
596
+ const resolvedFlatB = scope.resolveFlat<MyEntity_A>(MyEntity_B);
597
+ expect(resolvedFlatB).toBeUndefined();
598
+ });
599
+
600
+ it('Should resolve entity by class name from current scope', async () => {
601
+ class MyEntity_A extends A_Entity<{ name: string }> {
602
+ name!: string;
603
+
604
+ fromNew(newEntity: { name: string; }): void {
605
+ super.fromNew(newEntity);
606
+ this.name = newEntity.name;
607
+ }
608
+ }
609
+
610
+ class MyEntity_B extends MyEntity_A { }
611
+
612
+ const parentScope = new A_Scope({
613
+ name: 'ParentScope',
614
+ entities: [new MyEntity_B({ name: 'Entity1' })]
615
+ });
616
+
617
+ const scope = new A_Scope({
618
+ name: 'TestScope',
619
+ entities: [new MyEntity_A({ name: 'Entity2' })]
620
+ }).inherit(parentScope);
621
+
622
+ const resolvedByNameA = scope.resolve<MyEntity_A>('MyEntity_A');
623
+ expect(resolvedByNameA).toBeInstanceOf(MyEntity_A);
624
+ expect(resolvedByNameA?.name).toBe('Entity2');
625
+ });
626
+
627
+ it('Should resolve entity by class name from parent scope', async () => {
628
+ class MyEntity_A extends A_Entity<{ name: string }> {
629
+ name!: string;
630
+
631
+ fromNew(newEntity: { name: string; }): void {
632
+ super.fromNew(newEntity);
633
+ this.name = newEntity.name;
634
+ }
635
+ }
636
+
637
+ class MyEntity_B extends MyEntity_A { }
638
+
639
+ const parentScope = new A_Scope({
640
+ name: 'ParentScope',
641
+ entities: [new MyEntity_B({ name: 'Entity1' })]
642
+ });
643
+
644
+ const scope = new A_Scope({
645
+ name: 'TestScope',
646
+ entities: [new MyEntity_A({ name: 'Entity2' })]
647
+ }).inherit(parentScope);
648
+
649
+ const resolvedByName = scope.resolve<MyEntity_B>('MyEntity_B');
650
+ expect(resolvedByName).toBeInstanceOf(MyEntity_B);
651
+ expect(resolvedByName?.name).toBe('Entity1');
652
+ });
653
+
654
+ it('Should not resolve entity by class name from parent scope with resolveFlat', async () => {
655
+ class MyEntity_A extends A_Entity<{ name: string }> {
656
+ name!: string;
657
+
658
+ fromNew(newEntity: { name: string; }): void {
659
+ super.fromNew(newEntity);
660
+ this.name = newEntity.name;
661
+ }
662
+ }
663
+
664
+ class MyEntity_B extends MyEntity_A { }
665
+
666
+ const parentScope = new A_Scope({
667
+ name: 'ParentScope',
668
+ entities: [new MyEntity_B({ name: 'Entity1' })]
669
+ });
670
+
671
+ const scope = new A_Scope({
672
+ name: 'TestScope',
673
+ entities: [new MyEntity_A({ name: 'Entity2' })]
674
+ }).inherit(parentScope);
675
+
676
+ const resolveByNameFlat = scope.resolveFlat<MyEntity_A>('MyEntity_B');
677
+ expect(resolveByNameFlat).toBeUndefined();
678
+ });
455
679
  });