Skip to content

Commit aa491bd

Browse files
committed
Fixed deffered tests
1 parent a141691 commit aa491bd

File tree

2 files changed

+13
-10
lines changed

2 files changed

+13
-10
lines changed

src/FSharp.Data.GraphQL.Server/Execution.fs

+7-4
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,7 @@ and private streamed (options : BufferedStreamOptions) (innerDef : OutputDef) (c
451451
|> Array.mapi resolveItem
452452
|> Observable.ofAsyncValSeq
453453
|> buffer
454-
ResolverResult.defered (KeyValuePair (info.Identifier, null)) stream |> AsyncVal.wrap
454+
ResolverResult.defered (KeyValuePair (info.Identifier, box [])) stream |> AsyncVal.wrap
455455
| _ -> raise <| GQLMessageException (ErrorMessages.expectedEnumerableValue ctx.ExecutionInfo.Identifier (value.GetType()))
456456

457457
and private live (ctx : ResolveFieldContext) (path : FieldPath) (parent : obj) (value : obj) =
@@ -511,18 +511,21 @@ and private executeResolvers (ctx : ResolveFieldContext) (path : FieldPath) (par
511511
| Ok None when ctx.ExecutionInfo.IsNullable -> return Ok (KeyValuePair(name, null), None, [])
512512
| Error errs -> return Error errs
513513
| Ok None -> return Error (nullResolverError name path ctx)
514-
| Ok (Some v) -> return! onSuccess ctx path parent v
514+
| Ok (Some v) ->
515+
match! onSuccess ctx path parent v with
516+
| Ok (kvp, _, _) when not ctx.ExecutionInfo.IsNullable && kvp.Value = null -> return Error (nullResolverError name path ctx)
517+
| result -> return result
515518
}
516519

517520
match info.Kind, returnDef with
518521
| ResolveDeferred innerInfo, _ when innerInfo.IsNullable -> // We can only defer nullable fields
519522
deferred
520-
|> resolveWith { ctx with ExecutionInfo = { innerInfo with IsNullable = false } }
523+
|> resolveWith { ctx with ExecutionInfo = innerInfo }
521524
| ResolveDeferred innerInfo, _ ->
522525
raiseErrors <| deferredNullableError (innerInfo.Identifier) (innerInfo.ReturnDef.ToString()) path ctx
523526
| ResolveStreamed (innerInfo, mode), HasList innerDef -> // We can only stream lists
524527
streamed mode innerDef
525-
|> resolveWith { ctx with ExecutionInfo = innerInfo; }
528+
|> resolveWith { ctx with ExecutionInfo = innerInfo }
526529
| ResolveStreamed (innerInfo, _), _ ->
527530
raiseErrors <| streamListError innerInfo.Identifier (returnDef.ToString()) path ctx
528531
| ResolveLive innerInfo, _ ->

tests/FSharp.Data.GraphQL.Tests/AbstractionTests.fs

+6-6
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ let ``Execute handles execution of abstract types: isTypeOf is used to resolve r
116116
empty errors
117117
data |> equals (upcast expected)
118118

119-
[<Fact(Skip = "Not implemented")>]
119+
[<Fact>]
120120
let ``Execute handles execution of abstract types: not specified Interface types produce error`` () =
121121
let query =
122122
"""{
@@ -130,7 +130,7 @@ let ``Execute handles execution of abstract types: not specified Interface types
130130

131131
let result = sync <| schemaWithInterface.Value.AsyncExecute (parse query)
132132
ensureRequestError result <| fun [ petsError ] ->
133-
petsError |> ensureValidationError "Field 'pets' does not allow nulls and list values." [ "pets"; "0" ]
133+
petsError |> ensureExecutionError "Non-Null field pets resolved as a null!" [ "pets"; 1 ]
134134

135135
let query =
136136
"""{
@@ -144,7 +144,7 @@ let ``Execute handles execution of abstract types: not specified Interface types
144144

145145
let result = sync <| schemaWithInterface.Value.AsyncExecute (parse query)
146146
ensureRequestError result <| fun [ petsError ] ->
147-
petsError |> ensureValidationError "Field 'pets' does not allow nulls and list values." [ "pets"; "0" ]
147+
petsError |> ensureExecutionError "Non-Null field pets resolved as a null!" [ "pets"; 0 ]
148148

149149
[<Fact>]
150150
let ``Execute handles execution of abstract types: not specified Interface types must be filtered out if they allow null`` () =
@@ -322,7 +322,7 @@ let ``Execute handles execution of abstract types: isTypeOf is used to resolve r
322322
empty errors
323323
data |> equals (upcast expected)
324324

325-
[<Fact(Skip = "Not implemented")>]
325+
[<Fact>]
326326
let ``Execute handles execution of abstract types: not specified Union types produce error`` () =
327327
let query =
328328
"""{
@@ -336,7 +336,7 @@ let ``Execute handles execution of abstract types: not specified Union types pro
336336

337337
let result = sync <| schemaWithUnion.Value.AsyncExecute (parse query)
338338
ensureRequestError result <| fun [ petsError ] ->
339-
petsError |> ensureValidationError "Field 'pets' does not allow nulls and list values." [ "pets"; "0" ]
339+
petsError |> ensureExecutionError "Non-Null field pets resolved as a null!" [ "pets"; 1 ]
340340

341341
let query =
342342
"""{
@@ -350,7 +350,7 @@ let ``Execute handles execution of abstract types: not specified Union types pro
350350

351351
let result = sync <| schemaWithUnion.Value.AsyncExecute (parse query)
352352
ensureRequestError result <| fun [ petsError ] ->
353-
petsError |> ensureValidationError "Field 'pets' does not allow nulls and list values." [ "pets"; "0" ]
353+
petsError |> ensureExecutionError "Non-Null field pets resolved as a null!" [ "pets"; 0 ]
354354

355355
[<Fact>]
356356
let ``Execute handles execution of abstract types: not specified Union types must be filtered out`` () =

0 commit comments

Comments
 (0)