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:
@@ -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)
|
||||
|
||||
2
mix.exs
2
mix.exs
@@ -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
|
||||
|
||||
9
test/myapp/battle_net/auth_test.exs
Normal file
9
test/myapp/battle_net/auth_test.exs
Normal 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
|
||||
41
test/myapp/data/thread_test.exs
Normal file
41
test/myapp/data/thread_test.exs
Normal 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
|
||||
49
test/myapp/data/user_test.exs
Normal file
49
test/myapp/data/user_test.exs
Normal 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
|
||||
14
test/myapp_web/controllers/user_controller_test.exs
Normal file
14
test/myapp_web/controllers/user_controller_test.exs
Normal 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
|
||||
14
test/support/data/test_helpers.ex
Normal file
14
test/support/data/test_helpers.ex
Normal 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
|
||||
Reference in New Issue
Block a user