diff --git a/lib/slipstream/serializer/phoenix_socket_v2_serializer.ex b/lib/slipstream/serializer/phoenix_socket_v2_serializer.ex index a18ac99..23d2a8c 100644 --- a/lib/slipstream/serializer/phoenix_socket_v2_serializer.ex +++ b/lib/slipstream/serializer/phoenix_socket_v2_serializer.ex @@ -103,9 +103,11 @@ defmodule Slipstream.Serializer.PhoenixSocketV2Serializer do defp decode_binary!(<< @push::size(8), join_ref_size::size(8), + ref_size::size(8), topic_size::size(8), event_size::size(8), join_ref::binary-size(join_ref_size), + ref::binary-size(ref_size), topic::binary-size(topic_size), event::binary-size(event_size), data::binary @@ -114,7 +116,7 @@ defmodule Slipstream.Serializer.PhoenixSocketV2Serializer do topic: topic, event: event, payload: {:binary, data}, - ref: nil, + ref: ref, join_ref: join_ref } end diff --git a/test/slipstream/serializer/phoenix_socket_v2_serializer_test.exs b/test/slipstream/serializer/phoenix_socket_v2_serializer_test.exs index e569756..2cc6a9e 100644 --- a/test/slipstream/serializer/phoenix_socket_v2_serializer_test.exs +++ b/test/slipstream/serializer/phoenix_socket_v2_serializer_test.exs @@ -38,4 +38,36 @@ defmodule Slipstream.Serializer.PhoenixSocketV2SerializerTest do end) end end + + describe "encode!/2 and decode!/2 round-trip" do + test "binary payload messages encode and decode correctly" do + original_message = %Message{ + topic: "test:topic", + event: "test_event", + payload: {:binary, <<1, 2, 3, 4>>}, + ref: "123", + join_ref: "456" + } + + encoded = encode!(original_message, json_parser: Jason) + decoded = decode!(encoded, opcode: :binary, json_parser: Jason) + + assert decoded == original_message + end + + test "text/JSON payload messages encode and decode correctly" do + original_message = %Message{ + topic: "test:topic", + event: "test_event", + payload: %{"foo" => "bar", "baz" => 123}, + ref: "123", + join_ref: "456" + } + + encoded = encode!(original_message, json_parser: Jason) + decoded = decode!(encoded, opcode: :text, json_parser: Jason) + + assert decoded == original_message + end + end end