1
0
mirror of https://github.com/danbee/chess synced 2025-03-04 08:39:06 +00:00

Show correct opponent in the games list

This commit is contained in:
Daniel Barber 2018-02-19 13:18:30 -05:00
parent b122c4d44f
commit 9b47a85d8f
Signed by: danbarber
GPG Key ID: 931D8112E0103DD8
4 changed files with 38 additions and 8 deletions

View File

@ -37,7 +37,8 @@ defmodule Chess.Store.Game do
def for_user(query, user) do def for_user(query, user) do
query query
|> where([game], user_id: ^user.id) |> where([game], user_id: ^user.id)
|> preload(:opponent) |> or_where([game], opponent_id: ^user.id)
|> preload([:user, :opponent])
end end
def ordered(query) do def ordered(query) do

View File

@ -5,7 +5,7 @@
<%= for game <- @games do %> <%= for game <- @games do %>
<tr> <tr>
<td> <td>
<%= 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" %>
</td> </td>
<td> <td>
Started on <%= Timex.format!(game.inserted_at, "%b %e at %I:%M %P", :strftime) %> Started on <%= Timex.format!(game.inserted_at, "%b %e at %I:%M %P", :strftime) %>

View File

@ -1,3 +1,13 @@
defmodule ChessWeb.GameView do defmodule ChessWeb.GameView do
use ChessWeb, :view 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 end

View File

@ -15,7 +15,7 @@ defmodule Chess.GamesTest do
create_user("zelda", "ganonsucks") create_user("zelda", "ganonsucks")
session session
|> login() |> create_user_and_login()
|> visit("/games") |> visit("/games")
|> click(link("New game")) |> click(link("New game"))
|> select("game[opponent_id]", option: "zelda") |> select("game[opponent_id]", option: "zelda")
@ -32,7 +32,7 @@ defmodule Chess.GamesTest do
create_game_for(user, opponent) create_game_for(user, opponent)
session session
|> login() |> create_user_and_login()
|> visit("/games") |> visit("/games")
|> click(link("New game")) |> click(link("New game"))
|> select("game[opponent_id]", option: "urbosa") |> select("game[opponent_id]", option: "urbosa")
@ -44,11 +44,25 @@ defmodule Chess.GamesTest do
|> assert_has(link("Game with urbosa")) |> assert_has(link("Game with urbosa"))
end 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 test "can move a piece", %{session: session} do
create_user("zelda", "ganonsucks") create_user("zelda", "ganonsucks")
session session
|> login() |> create_user_and_login()
|> visit("/games") |> visit("/games")
|> click(link("New game")) |> click(link("New game"))
|> select("game[opponent_id]", option: "zelda") |> select("game[opponent_id]", option: "zelda")
@ -65,13 +79,18 @@ defmodule Chess.GamesTest do
|> assert_has(square_containing("f4-r3", "white.pawn")) |> assert_has(square_containing("f4-r3", "white.pawn"))
end end
defp login(session) do defp create_user_and_login(session) do
create_user("link", "ilovezelda") create_user("link", "ilovezelda")
session
|> login("link", "ilovezelda")
end
defp login(session, username, password) do
session session
|> visit("/session/new") |> visit("/session/new")
|> fill_in(text_field("Username"), with: "link") |> fill_in(text_field("Username"), with: username)
|> fill_in(text_field("Password"), with: "ilovezelda") |> fill_in(text_field("Password"), with: password)
|> click(button("Log in")) |> click(button("Log in"))
end end