diff --git a/lib/chess/store/game.ex b/lib/chess/store/game.ex
index 7b92c12..2cac123 100644
--- a/lib/chess/store/game.ex
+++ b/lib/chess/store/game.ex
@@ -37,7 +37,8 @@ defmodule Chess.Store.Game do
def for_user(query, user) do
query
|> where([game], user_id: ^user.id)
- |> preload(:opponent)
+ |> or_where([game], opponent_id: ^user.id)
+ |> preload([:user, :opponent])
end
def ordered(query) do
diff --git a/lib/chess_web/templates/game/index.html.eex b/lib/chess_web/templates/game/index.html.eex
index 71aafb7..a9d71c3 100644
--- a/lib/chess_web/templates/game/index.html.eex
+++ b/lib/chess_web/templates/game/index.html.eex
@@ -5,7 +5,7 @@
<%= for game <- @games do %>
|
- <%= link "Game with #{game.opponent.username}", to: game_path(@conn, :show, game), class: "btn btn-default btn-xs" %>
+ <%= link "Game with #{opponent(@conn, game).username}", to: game_path(@conn, :show, game), class: "btn btn-default btn-xs" %>
|
Started on <%= Timex.format!(game.inserted_at, "%b %e at %I:%M %P", :strftime) %>
diff --git a/lib/chess_web/views/game_view.ex b/lib/chess_web/views/game_view.ex
index 320f85c..6a4ded6 100644
--- a/lib/chess_web/views/game_view.ex
+++ b/lib/chess_web/views/game_view.ex
@@ -1,3 +1,13 @@
defmodule ChessWeb.GameView do
use ChessWeb, :view
+
+ import ChessWeb.LayoutView, only: [current_user: 1]
+
+ def opponent(conn, game) do
+ if current_user(conn).id == game.user_id do
+ game.opponent
+ else
+ game.user
+ end
+ end
end
diff --git a/test/features/games_test.exs b/test/features/games_test.exs
index 728b88c..3ec28ca 100644
--- a/test/features/games_test.exs
+++ b/test/features/games_test.exs
@@ -15,7 +15,7 @@ defmodule Chess.GamesTest do
create_user("zelda", "ganonsucks")
session
- |> login()
+ |> create_user_and_login()
|> visit("/games")
|> click(link("New game"))
|> select("game[opponent_id]", option: "zelda")
@@ -32,7 +32,7 @@ defmodule Chess.GamesTest do
create_game_for(user, opponent)
session
- |> login()
+ |> create_user_and_login()
|> visit("/games")
|> click(link("New game"))
|> select("game[opponent_id]", option: "urbosa")
@@ -44,11 +44,25 @@ defmodule Chess.GamesTest do
|> assert_has(link("Game with urbosa"))
end
+ test "can see games as an opponent", %{session: session} do
+ opponent = create_user("urbosa", "gerudoqueen")
+
+ user = create_user("zelda", "ganonsucks")
+ create_game_for(user, opponent)
+
+ session
+ |> login("urbosa", "gerudoqueen")
+
+ session
+ |> assert_has(css(".table tr", count: 1))
+ |> assert_has(link("Game with zelda"))
+ end
+
test "can move a piece", %{session: session} do
create_user("zelda", "ganonsucks")
session
- |> login()
+ |> create_user_and_login()
|> visit("/games")
|> click(link("New game"))
|> select("game[opponent_id]", option: "zelda")
@@ -65,13 +79,18 @@ defmodule Chess.GamesTest do
|> assert_has(square_containing("f4-r3", "white.pawn"))
end
- defp login(session) do
+ defp create_user_and_login(session) do
create_user("link", "ilovezelda")
+ session
+ |> login("link", "ilovezelda")
+ end
+
+ defp login(session, username, password) do
session
|> visit("/session/new")
- |> fill_in(text_field("Username"), with: "link")
- |> fill_in(text_field("Password"), with: "ilovezelda")
+ |> fill_in(text_field("Username"), with: username)
+ |> fill_in(text_field("Password"), with: password)
|> click(button("Log in"))
end
|