1
0
mirror of https://github.com/mgerb/classic-wow-forums synced 2026-01-10 09:02:50 +00:00

figuring out testing - works pretty good so far

This commit is contained in:
2018-01-04 23:04:39 -06:00
parent f540e7351b
commit 006a7e1fc2
7 changed files with 138 additions and 7 deletions

View File

@@ -13,7 +13,7 @@ defmodule MyApp.Data.User do
timestamps()
end
def changeset(user, params \\ %{}) do
defp changeset(user, params \\ %{}) do
user
|> cast(params, [:battle_net_id, :battletag])
|> validate_required([:battle_net_id, :battletag])
@@ -29,19 +29,23 @@ defmodule MyApp.Data.User do
end
# insert user info in database - if not exists - update battletag if it has changed
@spec upsert_user(%{"battle_net_id": integer, "battletag": String.t} | tuple) :: {:ok, map} | {:error, any}
@spec upsert_user(%{"battle_net_id": integer, "battletag": String.t, "access_token": String.t} | tuple) :: {:ok, map} | {:error, any}
def upsert_user(params) when is_map(params) do
# check for current user in database
case get_user(Map.get(params, "battle_net_id")) do
nil -> insert_user(params)
user ->
# update user if battletag has changed
user = get_user(Map.get(params, "battle_net_id"))
output = cond do
is_nil(user) ->
insert_user(params)
true ->
if Map.get(user, :battletag) != Map.get(params, "battletag") do
update_battletag(user, params)
else
{:ok, user}
end
end
output
|> add_access_token(Map.get(params, "access_token"))
end
def upsert_user({:ok, params}), do: upsert_user(params)

View File

@@ -60,7 +60,7 @@ defmodule MyApp.Mixfile do
"ecto.setup": ["ecto.create", "ecto.migrate", "seeds"],
"seeds": ["run priv/repo/seeds.exs"],
"ecto.reset": ["ecto.drop", "ecto.setup"],
"test": ["ecto.create --quiet", "ecto.migrate", "test"]
"test": ["ecto.drop", "ecto.create --quiet", "ecto.migrate", "seeds", "test"]
]
end
end

View File

@@ -0,0 +1,9 @@
defmodule MyApp.BattleNet.AuthTest do
use MyAppWeb.ConnCase, async: true
import MyApp.BattleNet.Auth
test "get access token from battle net should error out" do
assert get_access_token("123") == {:error, "invalid_request"}
end
end

View File

@@ -0,0 +1,41 @@
defmodule MyApp.Data.ThreadTest do
use MyAppWeb.ConnCase, async: true
import MyApp.Data.Thread
import MyApp.Data.TestHelpers
defp new_thread(userID, category_id \\ 1) do
%{
"title" => "test title",
"category_id" => category_id,
"content" => "test content",
"user_id" => userID,
}
end
test "insert_thread: try to insert with no parameters" do
assert insert_thread(%{}) == {:error,
[%{title: "can't be blank"}, %{category_id: "can't be blank"},
%{content: "can't be blank"}, %{user_id: "can't be blank"}]}
end
test "insert_thread: insert as invalid user" do
assert insert_thread(new_thread(9238748)) == {:error, [%{user_id: "does not exist"}]}
end
test "insert_thread: insert as invalid category_id" do
{:ok, user} = new_user()
assert insert_thread(new_thread(user.id, 2342342343)) == {:error, [%{category_id: "does not exist"}]}
end
test "new thread should be inserted" do
{:ok, user} = new_user()
{:ok, thread} = insert_thread(new_thread(user.id))
assert thread.title == "test title"
assert thread.category_id == 1
assert thread.user_id == user.id
assert thread.content == "test content"
end
# TODO: update thread
end

View File

@@ -0,0 +1,49 @@
defmodule MyApp.Data.UserTest do
use MyAppWeb.ConnCase, async: true
import MyApp.Data.User
import MyApp.Data.TestHelpers
test "user is inserted into database" do
{:ok, user} = new_user()
assert user == %{
access_token: "test_token",
battle_net_id: 1,
battletag: "mgerb42",
id: user.id,
permissions: "user",
}
end
test "user's battletag is updated" do
{:ok, user} = new_user()
# update user battletag
user = user
|> atom_key_to_string()
|> Map.put("battletag", "mgerb")
{:ok, user} = upsert_user(user)
assert user == %{
access_token: "test_token",
battle_net_id: 1,
battletag: "mgerb",
id: user.id,
permissions: "user",
}
# call upsert again with same battletag
{:ok, user} = user
|> atom_key_to_string()
|> upsert_user()
assert user == %{
access_token: "test_token",
battle_net_id: 1,
battletag: "mgerb",
id: user.id,
permissions: "user",
}
end
end

View File

@@ -0,0 +1,14 @@
defmodule MyAppWeb.UserControllerTest do
use MyAppWeb.ConnCase, async: true
test "get user index should return unauthorized" do
conn =
build_conn()
|> get("/api/user")
body = conn |> response(401) |> Poison.decode!
assert body["error"]["message"] == "unauthorized"
end
end

View File

@@ -0,0 +1,14 @@
defmodule MyApp.Data.TestHelpers do
import MyApp.Data.User
@spec new_user() :: {:ok, map}
def new_user() do
upsert_user(%{"battle_net_id" => 1, "battletag" => "mgerb42", "access_token" => "test_token"})
end
@spec atom_key_to_string(map) :: map
def atom_key_to_string(map) do
for {key, val} <- map, into: %{}, do: {Atom.to_string(key), val}
end
end