1
0
mirror of https://github.com/mgerb/classic-wow-forums synced 2026-01-12 01:52:49 +00:00

server - fix tests - added reply tests

This commit is contained in:
2018-01-26 23:45:02 -06:00
parent 7344bb428a
commit 8f711e7bb7
6 changed files with 88 additions and 15 deletions

View File

@@ -38,7 +38,7 @@ defmodule MyApp.Data.Reply do
{:ok, data} = Repo.transaction(fn -> {:ok, data} = Repo.transaction(fn ->
thread = Repo.get_by(Data.Thread, %{ id: Map.get(params, "thread_id")}) thread = Repo.get_by(Data.Thread, %{ id: Map.get(params, "thread_id")})
if !thread.locked do if !is_nil(thread) && !thread.locked do
{:ok, data} = insert_changeset(%Data.Reply{}, params) {:ok, data} = insert_changeset(%Data.Reply{}, params)
|> Repo.insert |> Repo.insert
|> Data.Util.process_insert_or_update |> Data.Util.process_insert_or_update

View File

@@ -7,7 +7,7 @@ defmodule MyAppWeb.PageController do
# cache index.html if prod # cache index.html if prod
file = case System.get_env("MIX_ENV") do file = case System.get_env("MIX_ENV") do
:prod -> "prod" ->
Cachex.get(:myapp, "index.html") Cachex.get(:myapp, "index.html")
|> get_file |> get_file
_ -> File.read!(Application.app_dir(:myapp, "priv/static/index.html")) _ -> File.read!(Application.app_dir(:myapp, "priv/static/index.html"))

View File

@@ -3,7 +3,7 @@ defmodule MyApp.BattleNet.AuthTest do
import MyApp.BattleNet.Auth import MyApp.BattleNet.Auth
test "get access token from battle net should error out" do test "get access token from battle net should error out" do
assert get_access_token("123") == {:error, "invalid_request"} assert get_access_token("123") == {:error, "unauthorized"}
end end
end end

View File

@@ -1,7 +1,8 @@
defmodule MyAppWeb.PageControllerTest do defmodule MyAppWeb.PageControllerTest do
use MyAppWeb.ConnCase, async: true use MyAppWeb.ConnCase, async: true
test "index.html should be cached" do test "index.html should be cached in prod" do
System.put_env("MIX_ENV", "prod")
assert Cachex.get(:myapp, "index.html") == {:missing, nil} assert Cachex.get(:myapp, "index.html") == {:missing, nil}
conn = build_conn() |> get("/lsakdjfl") conn = build_conn() |> get("/lsakdjfl")
{ok, _} = Cachex.get(:myapp, "index.html") {ok, _} = Cachex.get(:myapp, "index.html")

View File

@@ -7,14 +7,9 @@ defmodule MyAppWeb.ReplyControllerTest do
new_conn = build_conn() new_conn = build_conn()
|> put_req_header("authorization", "Bearer " <> user.token) |> put_req_header("authorization", "Bearer " <> user.token)
{:badmatch, {:error, data}} = conn = catch_error(post(new_conn, "/api/reply")) conn = post(new_conn, "/api/reply", %{"thread_id" => 1})
assert data == [%{thread_id: "can't be blank"}, %{content: "can't be blank"}] body = conn |> response(400) |> Poison.decode!
assert body == %{"error" => %{"message" => "thread locked", "status" => 400}}
{:badmatch, {:error, data}} = conn = catch_error(post(new_conn, "/api/reply", %{"content" => "t"}))
assert data == [%{thread_id: "can't be blank"}]
{:badmatch, {:error, data}} = conn = catch_error(post(new_conn, "/api/reply", %{"content" => "t", "thread_id" => 1}))
assert data == [%{thread_id: "does not exist"}]
end end
test "insert new reply should succeed" do test "insert new reply should succeed" do
@@ -37,10 +32,85 @@ defmodule MyAppWeb.ReplyControllerTest do
assert data["quote_id"] == nil assert data["quote_id"] == nil
# make sure thread reply count and last reply id are updated # make sure thread reply count and last reply id are updated
# conn = get(new_conn, "/api/thread?category_id=1") conn = get(new_conn, "/api/thread?category_id=1")
# body = conn |> response(200) |> Poison.decode! body = conn |> response(200) |> Poison.decode!
# assert Enum.at(body["data"], 0) == "ok" data = Enum.at(body["data"], 0)
assert data["last_reply_id"] == user_id
assert data["reply_count"] == 1
end
test "user replies should be rate limited" do
{:ok, user} = new_user()
new_conn = build_conn()
|> put_req_header("authorization", "Bearer " <> user.token)
# insert new thread first
conn = post(new_conn, "/api/thread", %{"title" => "t", "category_id" => 1})
body = conn |> response(200) |> Poison.decode!
thread_id = body["data"]["id"]
post(new_conn, "/api/reply", %{"content" => "c", "thread_id" => thread_id})
# post another reply
conn = post(new_conn, "/api/reply", %{"content" => "c", "thread_id" => body["data"]["id"]})
body = conn |> response(429) |> Poison.decode!
assert body == %{"error" => %{"message" => "limit reached", "status" => 429}}
# clear cache
Cachex.clear(:myapp)
# new reply should work
conn = post(new_conn, "/api/reply", %{"content" => "c", "thread_id" => thread_id})
body = conn |> response(200) |> Poison.decode!
end
test "user update reply" do
{:ok, user} = new_user()
new_conn = build_conn()
|> put_req_header("authorization", "Bearer " <> user.token)
# insert new thread first
conn = post(new_conn, "/api/thread", %{"title" => "t", "category_id" => 1})
body = conn |> response(200) |> Poison.decode!
thread_id = body["data"]["id"]
# insert new reply
conn = post(new_conn, "/api/reply", %{"content" => "c", "thread_id" => thread_id})
body = conn |> response(200) |> Poison.decode!
reply_id = body["data"]["id"]
# should fail
conn = put(new_conn, "/api/reply", %{"content" => "new edited content"})
body = conn |> response(400) |> Poison.decode!
assert body == %{"error" => %{"message" => "Invalid reply", "status" => 400}}
# should succeed
conn = put(new_conn, "/api/reply", %{"content" => "new edited content", "id" => reply_id})
body = conn |> response(200) |> Poison.decode!
assert body == %{"data" => "ok"}
end
test "mod update reply" do
{:ok, user} = new_user()
new_conn = build_conn()
|> put_req_header("authorization", "Bearer " <> user.token)
# insert new thread first
conn = post(new_conn, "/api/thread", %{"title" => "t", "category_id" => 1})
body = conn |> response(200) |> Poison.decode!
thread_id = body["data"]["id"]
# insert new reply
conn = post(new_conn, "/api/reply", %{"content" => "c", "thread_id" => thread_id})
body = conn |> response(200) |> Poison.decode!
reply_id = body["data"]["id"]
# mod update reply should fail - unauthorized
conn = put(new_conn, "/api/reply/mod", %{"content" => "c", "id" => reply_id})
body = conn |> response(401) |> Poison.decode!
assert body == %{"error" => %{"message" => "unauthorized", "status" => 401}}
end end
end end

View File

@@ -8,6 +8,8 @@ defmodule MyApp.Data.TestHelpers do
|> Auth.Token.add_token_and_map_claims |> Auth.Token.add_token_and_map_claims
end end
# TODO: get admin user
@spec atom_key_to_string(map) :: map @spec atom_key_to_string(map) :: map
def atom_key_to_string(map) do def atom_key_to_string(map) do
for {key, val} <- map, into: %{}, do: {Atom.to_string(key), val} for {key, val} <- map, into: %{}, do: {Atom.to_string(key), val}