@@ -71,9 +71,11 @@ let getExecutor (expectedFilter : ObjectListFilter voption) =
71
71
.Field(
72
72
" subjects" ,
73
73
Nullable ( ListOf ( Nullable SubjectType)),
74
- resolve = fun ctx ( a : A ) ->
75
- expectedFilter |> ValueOption.iter ( fun _ -> equals expectedFilter ctx.Filter)
76
- a.subjects |> List.map getSubject |> List.toSeq |> Some
74
+ resolve =
75
+ fun ctx ( a : A ) ->
76
+ expectedFilter
77
+ |> ValueOption.iter ( fun _ -> equals expectedFilter ctx.Filter)
78
+ a.subjects |> List.map getSubject |> List.toSeq |> Some
77
79
)
78
80
.WithQueryWeight ( 1.0 )
79
81
]
@@ -90,18 +92,19 @@ let getExecutor (expectedFilter : ObjectListFilter voption) =
90
92
.Field(
91
93
" subjects" ,
92
94
Nullable ( ListOf ( Nullable SubjectType)),
93
- resolve = fun ctx ( b : B ) ->
94
- expectedFilter |> ValueOption.iter ( fun _ -> equals expectedFilter ctx.Filter)
95
- b.subjects |> List.map getSubject |> List.toSeq |> Some
95
+ resolve =
96
+ fun ctx ( b : B ) ->
97
+ expectedFilter
98
+ |> ValueOption.iter ( fun _ -> equals expectedFilter ctx.Filter)
99
+ b.subjects |> List.map getSubject |> List.toSeq |> Some
96
100
)
97
101
.WithQueryWeight ( 1.0 )
98
102
]
99
103
)
100
104
let Query =
101
105
Define.Object< Root> (
102
106
name = " Query" ,
103
- fields = [ // Перетворити executor на getExecutor(ValueOption filter) *** executor = getExecutor(ValueNone) *** Перевіряти ValueSome на 99 і 100 рядках, дістаючи фільтри з контексту
104
- // Приклад - тести на інпутОбжекти - InputRecordTests: 122 - 150
107
+ fields = [
105
108
Define.Field ( " A" , Nullable AType, " A Field" , [ Define.Input ( " id" , IntType) ], resolve = ( fun ctx _ -> getA ( ctx.Arg ( " id" ))))
106
109
Define.Field ( " B" , Nullable BType, " B Field" , [ Define.Input ( " id" , IntType) ], resolve = ( fun ctx _ -> getB ( ctx.Arg ( " id" ))))
107
110
]
@@ -114,16 +117,17 @@ let getExecutor (expectedFilter : ObjectListFilter voption) =
114
117
]
115
118
Executor ( schema, middleware)
116
119
117
- let executor = getExecutor( ValueNone)
120
+ let executor = getExecutor ( ValueNone)
118
121
119
122
let execute ( query : Document ) = executor.AsyncExecute ( query) |> sync
120
123
121
124
let executeWithVariables ( query : Document , variables : ImmutableDictionary < string , JsonElement >) =
122
- executor.AsyncExecute ( ast = query, variables = variables) |> sync
125
+ executor.AsyncExecute ( ast = query, variables = variables)
126
+ |> sync
123
127
124
- let executeWithCustomFilter ( query : Document , variables : ImmutableDictionary < string , JsonElement >, customFilter : ObjectListFilter ) =
125
- let ex = getExecutor( ValueSome customFilter)
126
- ex.AsyncExecute( ast = query, variables = variables) |> sync
128
+ let executeWithCustomFilter ( query : Document , variables : ImmutableDictionary < string , JsonElement >, customFilter : ObjectListFilter ) =
129
+ let ex = getExecutor ( ValueSome customFilter)
130
+ ex.AsyncExecute ( ast = query, variables = variables) |> sync
127
131
128
132
let expectedErrors : GQLProblemDetails list = [
129
133
GQLProblemDetails.Create ( " Query complexity exceeds maximum threshold. Please reduce query complexity and try again." )
@@ -506,7 +510,7 @@ let ``Object list filter: must return filter information in Metadata`` () =
506
510
]
507
511
]
508
512
]
509
- let expectedFilter : KeyValuePair < obj list , ObjectListFilter > =
513
+ let expectedFilter : KeyValuePair < obj list , _ > =
510
514
kvp ([ " A" ; " s" ]) ( And ( Equals { FieldName = " id" ; Value = 2 L }, StartsWith { FieldName = " value" ; Value = " A" }))
511
515
let result = execute query
512
516
ensureDirect result <| fun data errors ->
@@ -555,7 +559,7 @@ let ``Object list filter: Must return AND filter information in Metadata`` () =
555
559
]
556
560
]
557
561
]
558
- let expectedFilter : KeyValuePair < obj list , ObjectListFilter > =
562
+ let expectedFilter : KeyValuePair < obj list , _ > =
559
563
kvp ([ " A" ; " subjects" ]) ( And ( StartsWith { FieldName = " value" ; Value = " 3" }, Equals { FieldName = " id" ; Value = 6 L }))
560
564
let result = execute query
561
565
ensureDirect result <| fun data errors ->
@@ -602,7 +606,7 @@ let ``Object list filter: Must return OR filter information in Metadata`` () =
602
606
]
603
607
]
604
608
]
605
- let expectedFilter : KeyValuePair < obj list , ObjectListFilter > =
609
+ let expectedFilter : KeyValuePair < obj list , _ > =
606
610
kvp ([ " A" ; " subjects" ]) ( Or ( StartsWith { FieldName = " value" ; Value = " 3" }, Equals { FieldName = " id" ; Value = 6 L }))
607
611
let result = execute query
608
612
ensureDirect result <| fun data errors ->
@@ -649,7 +653,7 @@ let ``Object list filter: Must return NOT filter information in Metadata`` () =
649
653
]
650
654
]
651
655
]
652
- let expectedFilter : KeyValuePair < obj list , ObjectListFilter > =
656
+ let expectedFilter : KeyValuePair < obj list , _ > =
653
657
kvp ([ " A" ; " subjects" ]) ( Not ( StartsWith { FieldName = " value" ; Value = " 3" }))
654
658
let result = execute query
655
659
ensureDirect result <| fun data errors ->
@@ -660,7 +664,6 @@ let ``Object list filter: Must return NOT filter information in Metadata`` () =
660
664
|> seqEquals [ expectedFilter ]
661
665
662
666
[<Fact>]
663
- // Перевірити всі кейси в одному тесті, якщо не вдасться обробити - поміняти Choice на Discriminated Union
664
667
let ``Object list filter : Must parse all filter operators`` () =
665
668
let query =
666
669
parse
@@ -698,108 +701,97 @@ let ``Object list filter: Must parse all filter operators`` () =
698
701
]
699
702
]
700
703
701
- let notStartsFilter = """ { "not": { "value_starts_with": "3" } }"""
702
- let notStartsFilterJsonElement = JsonDocument.Parse( notStartsFilter) .RootElement
703
- let dict = ImmutableDictionary< string, JsonElement>. Empty.Add ( " filter" , notStartsFilterJsonElement)
704
- let expectedFilter : KeyValuePair < obj list , ObjectListFilter > =
705
- kvp ([ " A" ; " subjects" ]) ( Not ( StartsWith { FieldName = " value" ; Value = " 3" }))
706
- let result = executeWithCustomFilter ( query, dict, Not ( StartsWith { FieldName = " value" ; Value = " 3" }))
704
+ let notStartsFilter = """ { "not": { "value_starts_with": "3" } }""" |> JsonDocument.Parse |> _. RootElement
705
+ let dict = ImmutableDictionary< string, JsonElement>. Empty.Add ( " filter" , notStartsFilter)
706
+ let filter = Not ( StartsWith { FieldName = " value" ; Value = " 3" })
707
+ let expectedFilter : KeyValuePair < obj list , _ > = kvp ([ " A" ; " subjects" ]) ( filter)
708
+ let result = executeWithCustomFilter ( query, dict, filter)
707
709
ensureDirect result <| fun data errors ->
708
710
empty errors
709
711
data |> equals ( upcast expected)
710
712
result.Metadata.TryFind< ObjectListFilters> ( " filters" )
711
713
|> wantValueSome
712
714
|> seqEquals [ expectedFilter ]
713
715
714
- let notEndsFilter = """ { "not": { "value_ends_with": "2" } }"""
715
- let notEndsFilterJsonElement = JsonDocument.Parse( notEndsFilter) .RootElement
716
- let dict1 = ImmutableDictionary< string, JsonElement>. Empty.Add ( " filter" , notEndsFilterJsonElement)
717
- let expectedFilter1 : KeyValuePair < obj list , ObjectListFilter > =
718
- kvp ([ " A" ; " subjects" ]) ( Not ( EndsWith { FieldName = " value" ; Value = " 2" }))
719
- let result1 = executeWithCustomFilter ( query, dict1, Not ( EndsWith { FieldName = " value" ; Value = " 2" }))
716
+ let notEndsFilter = """ { "not": { "value_ends_with": "2" } }""" |> JsonDocument.Parse |> _. RootElement
717
+ let dict1 = ImmutableDictionary< string, JsonElement>. Empty.Add ( " filter" , notEndsFilter)
718
+ let filter1 = Not ( EndsWith { FieldName = " value" ; Value = " 2" })
719
+ let expectedFilter1 : KeyValuePair < obj list , _ > = kvp ([ " A" ; " subjects" ]) ( filter1)
720
+ let result1 = executeWithCustomFilter ( query, dict1, filter1)
720
721
ensureDirect result1 <| fun data errors1 ->
721
722
empty errors1
722
723
data |> equals ( upcast expected)
723
724
result1.Metadata.TryFind< ObjectListFilters> ( " filters" )
724
725
|> wantValueSome
725
726
|> seqEquals [ expectedFilter1 ]
726
727
727
- let notGreaterThanOrEqualFilter = """ { "not": { "id_gte": 2 } }"""
728
- let notGreaterThanOrEqualFilterJsonElement = JsonDocument.Parse( notGreaterThanOrEqualFilter) .RootElement
729
- let dict2 = ImmutableDictionary< string, JsonElement>. Empty.Add ( " filter" , notGreaterThanOrEqualFilterJsonElement)
730
- let expectedFilter2 : KeyValuePair < obj list , ObjectListFilter > =
731
- kvp ([ " A" ; " subjects" ]) ( Not ( GreaterThanOrEqual { FieldName = " id" ; Value = 2.0 }))
732
- let result2 = executeWithCustomFilter ( query, dict2, Not ( GreaterThanOrEqual { FieldName = " id" ; Value = 2.0 }))
728
+ let notGreaterThanOrEqualFilter = """ { "not": { "id_gte": 2 } }""" |> JsonDocument.Parse |> _. RootElement
729
+ let dict2 = ImmutableDictionary< string, JsonElement>. Empty.Add ( " filter" , notGreaterThanOrEqualFilter)
730
+ let filter2 = Not ( GreaterThanOrEqual { FieldName = " id" ; Value = 2.0 })
731
+ let expectedFilter2 : KeyValuePair < obj list , _ > = kvp ([ " A" ; " subjects" ]) ( filter2)
732
+ let result2 = executeWithCustomFilter ( query, dict2, filter2)
733
733
ensureDirect result2 <| fun data errors2 ->
734
734
empty errors2
735
735
data |> equals ( upcast expected)
736
736
result2.Metadata.TryFind< ObjectListFilters> ( " filters" )
737
737
|> wantValueSome
738
738
|> seqEquals [ expectedFilter2 ]
739
739
740
- let notLessThanOrEqualFilter = """ { "not": { "id_lte": 4 } }"""
741
- let notLessThanOrEqualFilterJsonElement = JsonDocument.Parse( notLessThanOrEqualFilter) .RootElement
742
- let dict3 = ImmutableDictionary< string, JsonElement>. Empty.Add ( " filter" , notLessThanOrEqualFilterJsonElement)
743
- let expectedFilter3 : KeyValuePair < obj list , ObjectListFilter > =
744
- kvp ([ " A" ; " subjects" ]) ( Not ( LessThanOrEqual { FieldName = " id" ; Value = 4.0 }))
745
- let result3 = executeWithCustomFilter ( query, dict3, Not ( LessThanOrEqual { FieldName = " id" ; Value = 4.0 }))
740
+ let notLessThanOrEqualFilter = """ { "not": { "id_lte": 4 } }""" |> JsonDocument.Parse |> _. RootElement
741
+ let dict3 = ImmutableDictionary< string, JsonElement>. Empty.Add ( " filter" , notLessThanOrEqualFilter)
742
+ let filter3 = Not ( LessThanOrEqual { FieldName = " id" ; Value = 4.0 })
743
+ let expectedFilter3 : KeyValuePair < obj list , _ > = kvp ([ " A" ; " subjects" ]) ( filter3)
744
+ let result3 = executeWithCustomFilter ( query, dict3, filter3)
746
745
ensureDirect result3 <| fun data errors3 ->
747
746
empty errors3
748
747
data |> equals ( upcast expected)
749
748
result3.Metadata.TryFind< ObjectListFilters> ( " filters" )
750
749
|> wantValueSome
751
750
|> seqEquals [ expectedFilter3 ]
752
751
753
- let notGreaterThanFilter = """ { "not": { "id_gt": 2 } }"""
754
- let notGreaterThanFilterJsonElement = JsonDocument.Parse( notGreaterThanFilter) .RootElement
755
- let dict4 = ImmutableDictionary< string, JsonElement>. Empty.Add ( " filter" , notGreaterThanFilterJsonElement)
756
- let expectedFilter4 : KeyValuePair < obj list , ObjectListFilter > =
757
- kvp ([ " A" ; " subjects" ]) ( Not ( GreaterThan { FieldName = " id" ; Value = 2.0 }))
758
- let result4 =
759
- executeWithCustomFilter ( query, dict4, Not ( GreaterThan { FieldName = " id" ; Value = 2.0 }))
760
- ensureDirect result4
761
- <| fun data errors2 ->
752
+ let notGreaterThanFilter = """ { "not": { "id_gt": 2 } }""" |> JsonDocument.Parse |> _. RootElement
753
+ let dict4 = ImmutableDictionary< string, JsonElement>. Empty.Add ( " filter" , notGreaterThanFilter)
754
+ let filter4 = Not ( GreaterThan { FieldName = " id" ; Value = 2.0 })
755
+ let expectedFilter4 : KeyValuePair < obj list , _ > = kvp ([ " A" ; " subjects" ]) ( filter4)
756
+ let result4 = executeWithCustomFilter ( query, dict4, filter4)
757
+ ensureDirect result4 <| fun data errors2 ->
762
758
empty errors2
763
759
data |> equals ( upcast expected)
764
760
result4.Metadata.TryFind< ObjectListFilters> ( " filters" )
765
761
|> wantValueSome
766
762
|> seqEquals [ expectedFilter4 ]
767
763
768
- let notLessThanFilter = """ { "not": { "id_lt": 4 } }"""
769
- let notLessThanFilterJsonElement = JsonDocument.Parse( notLessThanFilter) .RootElement
770
- let dict5 = ImmutableDictionary< string, JsonElement>. Empty.Add ( " filter" , notLessThanFilterJsonElement)
771
-
772
- let expectedFilter5 : KeyValuePair < obj list , ObjectListFilter > =
773
- kvp ([ " A" ; " subjects" ]) ( Not ( LessThan { FieldName = " id" ; Value = 4.0 }))
774
- let result5 = executeWithCustomFilter ( query, dict5, Not ( LessThan { FieldName = " id" ; Value = 4.0 }))
775
- ensureDirect result5 <| fun data errors5 ->
764
+ let notLessThanFilter = """ { "not": { "id_lt": 4 } }""" |> JsonDocument.Parse |> _. RootElement
765
+ let dict5 = ImmutableDictionary< string, JsonElement>. Empty.Add ( " filter" , notLessThanFilter)
766
+ let filter5 = Not ( LessThan { FieldName = " id" ; Value = 4.0 })
767
+ let expectedFilter5 : KeyValuePair < obj list , ObjectListFilter > = kvp ([ " A" ; " subjects" ]) ( filter5)
768
+ let result5 = executeWithCustomFilter ( query, dict5, filter5)
769
+ ensureDirect result5
770
+ <| fun data errors5 ->
776
771
empty errors5
777
772
data |> equals ( upcast expected)
778
773
result5.Metadata.TryFind< ObjectListFilters> ( " filters" )
779
774
|> wantValueSome
780
775
|> seqEquals [ expectedFilter5 ]
781
776
782
- let notContainsFilter = """ { "not": { "value_contains": "A" } }"""
783
- let notContainsFilterJsonElement = JsonDocument.Parse( notContainsFilter) .RootElement
784
- let dict6 = ImmutableDictionary< string, JsonElement>. Empty.Add ( " filter" , notContainsFilterJsonElement)
785
-
786
- let expectedFilter6 : KeyValuePair < obj list , ObjectListFilter > =
787
- kvp ([ " A" ; " subjects" ]) ( Not ( Contains { FieldName = " value" ; Value = " A" }))
788
- let result6 = executeWithCustomFilter ( query, dict6, Not ( Contains { FieldName = " value" ; Value = " A" }))
777
+ let notContainsFilter = """ { "not": { "value_contains": "A" } }""" |> JsonDocument.Parse |> _. RootElement
778
+ let dict6 = ImmutableDictionary< string, JsonElement>. Empty.Add ( " filter" , notContainsFilter)
779
+ let filter6 = Not ( Contains { FieldName = " value" ; Value = " A" })
780
+ let expectedFilter6 : KeyValuePair < obj list , ObjectListFilter > = kvp ([ " A" ; " subjects" ]) ( filter6)
781
+ let result6 = executeWithCustomFilter ( query, dict6, filter6)
789
782
ensureDirect result6 <| fun data errors6 ->
790
783
empty errors6
791
784
data |> equals ( upcast expected)
792
785
result6.Metadata.TryFind< ObjectListFilters> ( " filters" )
793
786
|> wantValueSome
794
787
|> seqEquals [ expectedFilter6 ]
795
788
796
- let notEqualsFilter = """ { "not": { "value": "A2" } }"""
797
- let notEqualsFilterJsonElement = JsonDocument.Parse( notEqualsFilter) .RootElement
798
- let dict7 = ImmutableDictionary< string, JsonElement>. Empty.Add ( " filter" , notEqualsFilterJsonElement)
799
-
789
+ let notEqualsFilter = """ { "not": { "value": "A2" } }""" |> JsonDocument.Parse |> _. RootElement
790
+ let dict7 = ImmutableDictionary< string, JsonElement>. Empty.Add ( " filter" , notEqualsFilter)
791
+ let filter7 = Not ( Equals { FieldName = " value" ; Value = " A2" })
800
792
let expectedFilter7 : KeyValuePair < obj list , ObjectListFilter > =
801
- kvp ([ " A" ; " subjects" ]) ( Not ( Equals { FieldName = " value " ; Value = " A2 " }) )
802
- let result7 = executeWithCustomFilter ( query, dict7, Not ( Equals { FieldName = " value " ; Value = " A2 " }) )
793
+ kvp ([ " A" ; " subjects" ]) ( filter7 )
794
+ let result7 = executeWithCustomFilter ( query, dict7, filter7 )
803
795
ensureDirect result7 <| fun data errors7 ->
804
796
empty errors7
805
797
data |> equals ( upcast expected)
0 commit comments