@@ -2609,5 +2609,175 @@ public void SearchWithEmptyAny()
2609
2609
2610
2610
Assert . True ( any ) ;
2611
2611
}
2612
+
2613
+ [ Fact ]
2614
+ public void SearchGuidFieldContains ( )
2615
+ {
2616
+ var guid1 = Guid . NewGuid ( ) ;
2617
+ var guid2 = Guid . NewGuid ( ) ;
2618
+ var guid3 = Guid . NewGuid ( ) ;
2619
+ var guid1Str = ExpressionParserUtilities . EscapeTagField ( guid1 . ToString ( ) ) ;
2620
+ var guid2Str = ExpressionParserUtilities . EscapeTagField ( guid2 . ToString ( ) ) ;
2621
+ var guid3Str = ExpressionParserUtilities . EscapeTagField ( guid3 . ToString ( ) ) ;
2622
+ var potentialFieldValues = new Guid [ ] { guid1 , guid2 , guid3 } ;
2623
+ _mock . Setup ( x => x . Execute ( It . IsAny < string > ( ) , It . IsAny < string [ ] > ( ) ) )
2624
+ . Returns ( _mockReply ) ;
2625
+ var collection = new RedisCollection < ObjectWithStringLikeValueTypes > ( _mock . Object ) . Where ( x => potentialFieldValues . Contains ( x . Guid ) ) ;
2626
+ collection . ToList ( ) ;
2627
+ _mock . Verify ( x => x . Execute (
2628
+ "FT.SEARCH" ,
2629
+ "objectwithstringlikevaluetypes-idx" ,
2630
+ $ "(@Guid:{{{guid1Str}|{ guid2Str } |{ guid3Str } }})",
2631
+ "LIMIT" ,
2632
+ "0" ,
2633
+ "100" ) ) ;
2634
+ }
2635
+
2636
+ [ Fact ]
2637
+ public void SearchUlidFieldContains ( )
2638
+ {
2639
+ var ulid1 = Ulid . NewUlid ( ) ;
2640
+ var ulid2 = Ulid . NewUlid ( ) ;
2641
+ var ulid3 = Ulid . NewUlid ( ) ;
2642
+
2643
+ var potentialFieldValues = new Ulid [ ] { ulid1 , ulid2 , ulid3 } ;
2644
+ _mock . Setup ( x => x . Execute ( It . IsAny < string > ( ) , It . IsAny < string [ ] > ( ) ) )
2645
+ . Returns ( _mockReply ) ;
2646
+ var collection = new RedisCollection < ObjectWithStringLikeValueTypes > ( _mock . Object ) . Where ( x => potentialFieldValues . Contains ( x . Ulid ) ) ;
2647
+ collection . ToList ( ) ;
2648
+ _mock . Verify ( x => x . Execute (
2649
+ "FT.SEARCH" ,
2650
+ "objectwithstringlikevaluetypes-idx" ,
2651
+ $ "(@Ulid:{{{ulid1}|{ ulid2 } |{ ulid3 } }})",
2652
+ "LIMIT" ,
2653
+ "0" ,
2654
+ "100" ) ) ;
2655
+ }
2656
+
2657
+ [ Fact ]
2658
+ public void SearchEnumFieldContains ( )
2659
+ {
2660
+ var enum1 = AnEnum . one ;
2661
+ var enum2 = AnEnum . two ;
2662
+ var enum3 = AnEnum . three ;
2663
+
2664
+ var potentialFieldValues = new AnEnum [ ] { enum1 , enum2 , enum3 } ;
2665
+ _mock . Setup ( x => x . Execute ( It . IsAny < string > ( ) , It . IsAny < string [ ] > ( ) ) )
2666
+ . Returns ( _mockReply ) ;
2667
+ var collection = new RedisCollection < ObjectWithStringLikeValueTypes > ( _mock . Object ) . Where ( x => potentialFieldValues . Contains ( x . AnEnum ) ) ;
2668
+ collection . ToList ( ) ;
2669
+ _mock . Verify ( x => x . Execute (
2670
+ "FT.SEARCH" ,
2671
+ "objectwithstringlikevaluetypes-idx" ,
2672
+ $ "(@AnEnum:{{one|two|three}})",
2673
+ "LIMIT" ,
2674
+ "0" ,
2675
+ "100" ) ) ;
2676
+ }
2677
+
2678
+ [ Fact ]
2679
+ public void SearchNumericEnumFieldContains ( )
2680
+ {
2681
+ var enum1 = AnEnum . one ;
2682
+ var enum2 = AnEnum . two ;
2683
+ var enum3 = AnEnum . three ;
2684
+
2685
+ var potentialFieldValues = new AnEnum [ ] { enum1 , enum2 , enum3 } ;
2686
+ _mock . Setup ( x => x . Execute ( It . IsAny < string > ( ) , It . IsAny < string [ ] > ( ) ) )
2687
+ . Returns ( _mockReply ) ;
2688
+ var collection = new RedisCollection < ObjectWithStringLikeValueTypes > ( _mock . Object ) . Where ( x => potentialFieldValues . Contains ( x . AnEnumAsInt ) ) ;
2689
+ collection . ToList ( ) ;
2690
+ _mock . Verify ( x => x . Execute (
2691
+ "FT.SEARCH" ,
2692
+ "objectwithstringlikevaluetypes-idx" ,
2693
+ "@AnEnumAsInt:[0 0]|@AnEnumAsInt:[1 1]|@AnEnumAsInt:[2 2]" ,
2694
+ "LIMIT" ,
2695
+ "0" ,
2696
+ "100" ) ) ;
2697
+ }
2698
+
2699
+ [ Fact ]
2700
+ public void SearchEnumFieldContainsList ( )
2701
+ {
2702
+ var enum1 = AnEnum . one ;
2703
+ var enum2 = AnEnum . two ;
2704
+ var enum3 = AnEnum . three ;
2705
+
2706
+ var potentialFieldValues = new List < AnEnum > { enum1 , enum2 , enum3 } ;
2707
+ _mock . Setup ( x => x . Execute ( It . IsAny < string > ( ) , It . IsAny < string [ ] > ( ) ) )
2708
+ . Returns ( _mockReply ) ;
2709
+ var collection = new RedisCollection < ObjectWithStringLikeValueTypes > ( _mock . Object ) . Where ( x => potentialFieldValues . Contains ( x . AnEnum ) ) ;
2710
+ collection . ToList ( ) ;
2711
+ _mock . Verify ( x => x . Execute (
2712
+ "FT.SEARCH" ,
2713
+ "objectwithstringlikevaluetypes-idx" ,
2714
+ $ "(@AnEnum:{{one|two|three}})",
2715
+ "LIMIT" ,
2716
+ "0" ,
2717
+ "100" ) ) ;
2718
+ }
2719
+
2720
+ [ Fact ]
2721
+ public void SearchNumericEnumFieldContainsList ( )
2722
+ {
2723
+ var enum1 = AnEnum . one ;
2724
+ var enum2 = AnEnum . two ;
2725
+ var enum3 = AnEnum . three ;
2726
+
2727
+ var potentialFieldValues = new List < AnEnum > { enum1 , enum2 , enum3 } ;
2728
+ _mock . Setup ( x => x . Execute ( It . IsAny < string > ( ) , It . IsAny < string [ ] > ( ) ) )
2729
+ . Returns ( _mockReply ) ;
2730
+ var collection = new RedisCollection < ObjectWithStringLikeValueTypes > ( _mock . Object ) . Where ( x => potentialFieldValues . Contains ( x . AnEnumAsInt ) ) ;
2731
+ collection . ToList ( ) ;
2732
+ _mock . Verify ( x => x . Execute (
2733
+ "FT.SEARCH" ,
2734
+ "objectwithstringlikevaluetypes-idx" ,
2735
+ "@AnEnumAsInt:[0 0]|@AnEnumAsInt:[1 1]|@AnEnumAsInt:[2 2]" ,
2736
+ "LIMIT" ,
2737
+ "0" ,
2738
+ "100" ) ) ;
2739
+ }
2740
+
2741
+ [ Fact ]
2742
+ public void SearchEnumFieldContainsListAsProperty ( )
2743
+ {
2744
+ var enum1 = AnEnum . one ;
2745
+ var enum2 = AnEnum . two ;
2746
+ var enum3 = AnEnum . three ;
2747
+
2748
+ var potentialFieldValues = new { list = new List < AnEnum > { enum1 , enum2 , enum3 } } ;
2749
+ _mock . Setup ( x => x . Execute ( It . IsAny < string > ( ) , It . IsAny < string [ ] > ( ) ) )
2750
+ . Returns ( _mockReply ) ;
2751
+ var collection = new RedisCollection < ObjectWithStringLikeValueTypes > ( _mock . Object ) . Where ( x => potentialFieldValues . list . Contains ( x . AnEnum ) ) ;
2752
+ collection . ToList ( ) ;
2753
+ _mock . Verify ( x => x . Execute (
2754
+ "FT.SEARCH" ,
2755
+ "objectwithstringlikevaluetypes-idx" ,
2756
+ $ "(@AnEnum:{{one|two|three}})",
2757
+ "LIMIT" ,
2758
+ "0" ,
2759
+ "100" ) ) ;
2760
+ }
2761
+
2762
+ [ Fact ]
2763
+ public void SearchNumericEnumFieldContainsListAsProperty ( )
2764
+ {
2765
+ var enum1 = AnEnum . one ;
2766
+ var enum2 = AnEnum . two ;
2767
+ var enum3 = AnEnum . three ;
2768
+
2769
+ var potentialFieldValues = new { list = new List < AnEnum > { enum1 , enum2 , enum3 } } ;
2770
+ _mock . Setup ( x => x . Execute ( It . IsAny < string > ( ) , It . IsAny < string [ ] > ( ) ) )
2771
+ . Returns ( _mockReply ) ;
2772
+ var collection = new RedisCollection < ObjectWithStringLikeValueTypes > ( _mock . Object ) . Where ( x => potentialFieldValues . list . Contains ( x . AnEnumAsInt ) ) ;
2773
+ collection . ToList ( ) ;
2774
+ _mock . Verify ( x => x . Execute (
2775
+ "FT.SEARCH" ,
2776
+ "objectwithstringlikevaluetypes-idx" ,
2777
+ "@AnEnumAsInt:[0 0]|@AnEnumAsInt:[1 1]|@AnEnumAsInt:[2 2]" ,
2778
+ "LIMIT" ,
2779
+ "0" ,
2780
+ "100" ) ) ;
2781
+ }
2612
2782
}
2613
2783
}
0 commit comments