akkoma/test/support/websocket_client.ex

66 lines
1.3 KiB
Elixir

# Pleroma: A lightweight social networking server
# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Integration.WebsocketClient do
# https://github.com/phoenixframework/phoenix/blob/master/test/support/websocket_client.exs
use WebSockex
@doc """
Starts the WebSocket server for given ws URL. Received Socket.Message's
are forwarded to the sender pid
"""
def start_link(sender, url, headers \\ []) do
WebSockex.start_link(
url,
__MODULE__,
%{ sender: sender },
extra_headers: headers
)
end
@doc """
Closes the socket
"""
def close(socket) do
send(socket, :close)
end
@doc """
Sends a low-level text message to the client.
"""
def send_text(server_pid, msg) do
send(server_pid, {:text, msg})
end
@doc false
@impl true
def handle_frame(frame, state) do
send(state.sender, frame)
{:ok, state}
end
@impl true
def handle_disconnect(conn_status, state) do
send(state.sender, {:close, conn_status})
{:ok, state}
end
@doc false
@impl true
def handle_info({:text, msg}, state) do
{:reply, {:text, msg}, state}
end
@impl true
def handle_info(:close, _state) do
{:close, <<>>, "done"}
end
@doc false
@impl true
def terminate(_reason, _state) do
:ok
end
end