Skip to content

Commit aaf29df

Browse files
committed
Add chat service tests
1 parent 2035081 commit aaf29df

File tree

3 files changed

+57
-5
lines changed

3 files changed

+57
-5
lines changed

lib/cog/command/service/chat.ex

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
defmodule Cog.Command.Service.Chat do
22
require Logger
3-
3+
44
alias Cog.Chat.Adapter
55

66
def send_message(destination, message) do
77
{:ok, provider} = Cog.Util.Misc.chat_provider_module
88

99
case build_target(provider, destination) do
1010
{:ok, target} ->
11-
Cog.Chat.Adapter.send("slack", target, message, %{originating_room_id: target.id})
11+
Cog.Chat.Adapter.send(provider, target, message, %{originating_room_id: target.id})
1212
{:error, reason} ->
1313
Logger.debug("Invalid message destination: #{inspect destination}")
1414
{:error, reason}
@@ -17,19 +17,19 @@ defmodule Cog.Command.Service.Chat do
1717

1818
defp build_target(provider, "@" <> handle) do
1919
case Adapter.lookup_user(provider, handle) do
20-
{:ok, %{id: user_id}} ->
20+
{:ok, %{id: user_id}} ->
2121
{:ok, %{provider: provider, id: user_id, name: handle, is_dm: true}}
2222
_ ->
2323
{:error, :unknown_handle}
2424
end
2525
end
2626
defp build_target(provider, "#" <> room) do
2727
case Adapter.lookup_room(provider, name: "##{room}") do
28-
{:ok, %{id: room_id}} ->
28+
{:ok, %{id: room_id}} ->
2929
{:ok, %{provider: provider, id: room_id, name: room, is_dm: false}}
3030
_ ->
3131
{:error, :unknown_room}
32-
end
32+
end
3333
end
3434
defp build_target(_provider, _destination) do
3535
{:error, :invalid_destination}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
defmodule Cog.V1.ChatServiceControllerTest do
2+
use Cog.ConnCase
3+
4+
@moduletag :services
5+
@endpoint Cog.ServiceEndpoint
6+
7+
@path "/v1/services/chat/1.0.0"
8+
9+
alias Cog.Command.Service.Tokens
10+
11+
setup do
12+
# This makes the test process look like a pipeline executor,
13+
# because the token will be registered to it.
14+
token = Tokens.new
15+
conn = tokened_connection(token)
16+
{:ok, [conn: conn]}
17+
end
18+
19+
defp tokened_connection(token) do
20+
build_conn()
21+
|> Plug.Conn.put_req_header("content-type", "application/json")
22+
|> Plug.Conn.put_req_header("authorization", "pipeline #{token}")
23+
end
24+
25+
test "requests without a token are denied" do
26+
conn = post(build_conn(), @path <> "/send_message")
27+
assert response(conn, 401)
28+
end
29+
30+
test "sending message to an unknown user is an error", %{conn: conn} do
31+
conn = post(conn, @path <> "/send_message", Poison.encode!(%{destination: "@fake_user", message: "taco"}))
32+
assert %{"error" => "Unable to find chat user for @fake_user"} == json_response(conn, 404)
33+
end
34+
35+
test "sending message to an unknown room is an error", %{conn: conn} do
36+
conn = post(conn, @path <> "/send_message", Poison.encode!(%{destination: "#fake_room", message: "taco"}))
37+
assert %{"error" => "Unable to find chat room for #fake_room"} == json_response(conn, 404)
38+
end
39+
40+
test "sending message to an invalid destination is an error", %{conn: conn} do
41+
conn = post(conn, @path <> "/send_message", Poison.encode!(%{destination: "definitely_fake", message: "taco"}))
42+
assert %{"error" => "Invalid chat destination URI definitely_fake"} == json_response(conn, 404)
43+
end
44+
45+
test "sending message to a good message results in a success", %{conn: conn} do
46+
conn = post(conn, @path <> "/send_message", Poison.encode!(%{destination: "#ci_bot_testing", message: "taco"}))
47+
assert %{"status" => "sent"} == json_response(conn, 200)
48+
end
49+
50+
end

test/support/test_provider.ex

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ defmodule Cog.Chat.Test.Provider do
2828
provider: @provider_name,
2929
email: handle}
3030
end
31+
def lookup_user("fake_user"), do: {:error, :unknown_user}
3132
def lookup_user(handle) do
3233
%Cog.Chat.User{id: handle,
3334
first_name: handle,
@@ -49,6 +50,7 @@ defmodule Cog.Chat.Test.Provider do
4950
provider: @provider_name,
5051
is_dm: false}
5152
end
53+
def lookup_room({:name, "#fake_room"}), do: {:error, :unknown_room}
5254
def lookup_room({:name, name}) do
5355
%Cog.Chat.Room{id: name,
5456
name: name,

0 commit comments

Comments
 (0)