Skip to content

Commit bb99dab

Browse files
njlrxperiandri
authored andcommitted
* Enums now encoded using name
* Adds test
1 parent eb4b157 commit bb99dab

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ let rec private direct (returnDef : OutputDef) (ctx : ResolveFieldContext) (path
322322
| Some v' -> resolved name v'
323323
| None -> raiseError <| coercionError value scalarDef.Name path ctx
324324
| Enum enumDef ->
325-
let enumCase = enumDef.Options |> Array.tryPick(fun case -> if case.Value.Equals(value) then coerceStringValue value else None)
325+
let enumCase = enumDef.Options |> Array.tryPick(fun case -> if case.Value.Equals(value) then Some case.Name else None)
326326
match enumCase with
327327
| Some v' -> resolved name (v' :> obj)
328328
| None -> raiseError <| coercionError value enumDef.Name path ctx

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

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,29 @@ let ``Execute uses provided resolve function to accesses properties`` () =
3737
empty errors
3838
data.["data"] |> equals (upcast expected)
3939
| _ -> fail "Expected Direct GQResponse"
40+
41+
type private Fruit =
42+
| Apple
43+
| Banana
44+
| Cherry
45+
46+
let private enumType =
47+
Define.Enum(
48+
"Fruit",
49+
[
50+
Define.EnumValue("APPLE", Apple)
51+
Define.EnumValue("BANANA", Banana)
52+
Define.EnumValue("CHERRY", Cherry)
53+
]
54+
)
55+
56+
[<Fact>]
57+
let ``Execute resolves enums to their names`` () =
58+
let schema = testSchema [ Define.Field("fruits", ListOf enumType, "", [], resolve = fun ctx d -> [ Apple; Banana; Cherry ]) ]
59+
let expected = NameValueLookup.ofList [ "fruits", [ "APPLE"; "BANANA"; "CHERRY" ] :> obj ]
60+
let actual = sync <| Executor(schema).AsyncExecute(parse "{ fruits() }")
61+
match actual with
62+
| Direct(data, errors) ->
63+
empty errors
64+
data.["data"] |> equals (upcast expected)
65+
| _ -> fail "Expected Direct GQResponse"

0 commit comments

Comments
 (0)