Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions lib/ex_chat/use_cases/who_am_i.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
defmodule ExChat.UseCases.WhoAmI do

def on(session_id) do
{:ok, "You are logged in as #{session_id}"}
end
end
7 changes: 6 additions & 1 deletion lib/ex_chat/web/websocket_controller.ex
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ defmodule ExChat.Web.WebSocketController do
end

alias ExChat.UseCases.{ValidateAccessToken, SendMessageToChatRoom,
CreateChatRoom, JoinChatRoom, SubscribeToUserSession}
CreateChatRoom, JoinChatRoom, SubscribeToUserSession, WhoAmI}

@default_ping_interval 30_000
@default_idle_timeout 60_000
Expand Down Expand Up @@ -60,6 +60,11 @@ defmodule ExChat.Web.WebSocketController do
handle(Map.put(command, "room", "default"), session_id)
end

defp handle(%{"message" => "/who"}, session_id) do
{:ok, message} = WhoAmI.on(session_id)
{:reply, {:text, to_json(%{message: message})}, session_id}
end

defp handle(%{"room" => room, "message" => message}, session_id) do
case SendMessageToChatRoom.on(message, room, session_id) do
{:error, message} ->
Expand Down
9 changes: 9 additions & 0 deletions test/ex_chat/use_cases/who_am_i_test.exs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
defmodule ExChat.UseCases.WhoAmITest do
use ExUnit.Case, async: true

alias ExChat.UseCases.WhoAmI

test "return a message telling the user how they are logged in" do
assert WhoAmI.on("a-user") == {:ok, "You are logged in as a-user"}
end
end
19 changes: 19 additions & 0 deletions test/ex_chat/web/websocket_acceptance_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,25 @@ defmodule ExChat.Web.WebSocketAcceptanceTest do
end
end

describe "As a User when I send the /who command" do
setup :connect_as_a_user

test "I receive back my logged in information", %{client: client} do
send_as_text(client, "{\"room\":\"default\",\"message\":\"/who\"}")

assert_receive "{\"message\":\"You are logged in as a-user\"}"
end

test "a message that merely contains /who is broadcast as usual", %{client: client} do
send_as_text(client, "{\"command\":\"join\"}")

send_as_text(client, "{\"room\":\"default\",\"message\":\"who is there /who\"}")

assert_receive "{\"room\":\"default\",\"from\":\"a-user\",\"message\":\"who is there /who\"}"
refute_receive "{\"message\":\"You are logged in as a-user\"}"
end
end

describe "As a User when I create a new chat room" do
setup :connect_as_a_user

Expand Down