From 9b47a85d8fae5afc0929b70d354ed226da4d8e13 Mon Sep 17 00:00:00 2001 From: Dan Barber Date: Mon, 19 Feb 2018 13:18:30 -0500 Subject: [PATCH] Show correct opponent in the games list --- lib/chess/store/game.ex | 3 +- lib/chess_web/templates/game/index.html.eex | 2 +- lib/chess_web/views/game_view.ex | 10 +++++++ test/features/games_test.exs | 31 +++++++++++++++++---- 4 files changed, 38 insertions(+), 8 deletions(-) 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