Skip to content

Commit 08b75ff

Browse files
committed
Fixed deffered tests
1 parent 1f077eb commit 08b75ff

File tree

2 files changed

+13
-12
lines changed

2 files changed

+13
-12
lines changed

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

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,6 @@ let rec private direct (returnDef : OutputDef) (ctx : ResolveFieldContext) (path
376376
match Map.tryFind resolvedDef.Name typeMap with
377377
| Some fields -> executeObjectFields fields name resolvedDef ctx path value
378378
| None -> KeyValuePair(name, null) |> ResolverResult.data |> AsyncVal.wrap
379-
//| None -> raiseErrors <| interfaceImplError iDef.Name resolvedDef.Name path ctx
380379

381380
| Union uDef ->
382381
let possibleTypesFn = ctx.Schema.GetPossibleTypes
@@ -389,7 +388,6 @@ let rec private direct (returnDef : OutputDef) (ctx : ResolveFieldContext) (path
389388
match Map.tryFind resolvedDef.Name typeMap with
390389
| Some fields -> executeObjectFields fields name resolvedDef ctx path (uDef.ResolveValue value)
391390
| None -> KeyValuePair(name, null) |> ResolverResult.data |> AsyncVal.wrap
392-
//| None -> raiseErrors <| unionImplError uDef.Name resolvedDef.Name path ctx
393391

394392
| _ -> failwithf "Unexpected value of returnDef: %O" returnDef
395393

@@ -451,7 +449,7 @@ and private streamed (options : BufferedStreamOptions) (innerDef : OutputDef) (c
451449
|> Array.mapi resolveItem
452450
|> Observable.ofAsyncValSeq
453451
|> buffer
454-
ResolverResult.defered (KeyValuePair (info.Identifier, null)) stream |> AsyncVal.wrap
452+
ResolverResult.defered (KeyValuePair (info.Identifier, box [])) stream |> AsyncVal.wrap
455453
| _ -> raise <| GQLMessageException (ErrorMessages.expectedEnumerableValue ctx.ExecutionInfo.Identifier (value.GetType()))
456454

457455
and private live (ctx : ResolveFieldContext) (path : FieldPath) (parent : obj) (value : obj) =
@@ -511,18 +509,21 @@ and private executeResolvers (ctx : ResolveFieldContext) (path : FieldPath) (par
511509
| Ok None when ctx.ExecutionInfo.IsNullable -> return Ok (KeyValuePair(name, null), None, [])
512510
| Error errs -> return Error errs
513511
| Ok None -> return Error (nullResolverError name path ctx)
514-
| Ok (Some v) -> return! onSuccess ctx path parent v
512+
| Ok (Some v) ->
513+
match! onSuccess ctx path parent v with
514+
| Ok (kvp, _, _) when not ctx.ExecutionInfo.IsNullable && kvp.Value = null -> return Error (nullResolverError name path ctx)
515+
| result -> return result
515516
}
516517

517518
match info.Kind, returnDef with
518519
| ResolveDeferred innerInfo, _ when innerInfo.IsNullable -> // We can only defer nullable fields
519520
deferred
520-
|> resolveWith { ctx with ExecutionInfo = { innerInfo with IsNullable = false } }
521+
|> resolveWith { ctx with ExecutionInfo = innerInfo }
521522
| ResolveDeferred innerInfo, _ ->
522523
raiseErrors <| deferredNullableError (innerInfo.Identifier) (innerInfo.ReturnDef.ToString()) path ctx
523524
| ResolveStreamed (innerInfo, mode), HasList innerDef -> // We can only stream lists
524525
streamed mode innerDef
525-
|> resolveWith { ctx with ExecutionInfo = innerInfo; }
526+
|> resolveWith { ctx with ExecutionInfo = innerInfo }
526527
| ResolveStreamed (innerInfo, _), _ ->
527528
raiseErrors <| streamListError innerInfo.Identifier (returnDef.ToString()) path ctx
528529
| ResolveLive innerInfo, _ ->

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

Lines changed: 6 additions & 6 deletions
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)