From 04f4b149c689e92b869183b9cad7fc4f218738c7 Mon Sep 17 00:00:00 2001 From: "Valber M. Silva de Souza" Date: Tue, 7 Feb 2023 01:25:44 +0100 Subject: [PATCH] "deserializing" ClientComplete --- src/Main/WebSocketMessagesMappers.fs | 9 ++++++++- tests/unit-tests/SerializationTests.fs | 16 ++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/Main/WebSocketMessagesMappers.fs b/src/Main/WebSocketMessagesMappers.fs index 7228a20..17cea3c 100644 --- a/src/Main/WebSocketMessagesMappers.fs +++ b/src/Main/WebSocketMessagesMappers.fs @@ -10,6 +10,11 @@ module GraphQLWsMessageRawMapping = | _ -> failwith "payload was expected to be a string, but it wasn't" | None -> None + let requireId (raw : GraphQLWsMessageRaw) : string = + match raw.Id with + | Some s -> s + | None -> failwith "property \"id\" is required but was not there" + let toWebSocketClientMessage (raw : GraphQLWsMessageRaw) : WebSocketClientMessage = match raw.Type with | None -> @@ -19,7 +24,9 @@ module GraphQLWsMessageRawMapping = | Some "ping" -> ClientPing (raw.Payload |> requirePayloadToBeAnOptionalString) | Some "pong" -> - ClientPong (raw.Payload |> requirePayloadToBeAnOptionalString) + ClientPong (raw.Payload |> requirePayloadToBeAnOptionalString) + | Some "complete" -> + ClientComplete (raw |> requireId) | Some other -> failwithf "type \"%s\" is not supported as a client message type" other diff --git a/tests/unit-tests/SerializationTests.fs b/tests/unit-tests/SerializationTests.fs index d4a7d86..54e61b5 100644 --- a/tests/unit-tests/SerializationTests.fs +++ b/tests/unit-tests/SerializationTests.fs @@ -118,3 +118,19 @@ let ``Deserializes ClientPong with payload correctly`` () = | ClientPong (Some "pong!") -> () // <-- expected | other -> Assert.Fail(sprintf "unexpected actual value: '%A'" other) + +[] +let ``Deserializes ClientComplete correctly``() = + let serializerOptions = new JsonSerializerOptions() + serializerOptions.Converters.Add(new GraphQLWsMessageConverter()) + + let input = "{\"id\": \"65fca2b5-f149-4a70-a055-5123dea4628f\", \"type\":\"complete\"}" + + let resultRaw = JsonSerializer.Deserialize(input, serializerOptions) + let result = resultRaw |> GraphQLWsMessageRawMapping.toWebSocketClientMessage + + match result with + | ClientComplete id -> + Assert.Equal("65fca2b5-f149-4a70-a055-5123dea4628f", id) + | other -> + Assert.Fail(sprintf "unexpected actual value: '%A'" other)