11defmodule Agoneum.AccountTest do
22 use Agoneum.DataCase
33
4- alias Agoneum.Account
4+ alias Agoneum . { Account , Account.User , Games }
55
66 describe "users" do
7- alias Agoneum.Account.User
8-
97 @ valid_attrs % { email: "[email protected] " , name: "some name" , password: "some password" } 108 @ update_attrs % { email: "[email protected] " , name: "some updated name" , password: "some updated password" } 119 @ invalid_attrs % { email: nil , name: nil , password_hash: nil }
10+ @ game_attrs % { description: "Kill your friends" , max_players: 7 , min_players: 4 , name: "BANG!" , year: 2002 }
1211
1312 def user_fixture ( attrs \\ % { } ) do
1413 { :ok , user } =
@@ -17,6 +16,17 @@ defmodule Agoneum.AccountTest do
1716 |> Account . create_user ( )
1817
1918 user
19+ |> Agoneum.Repo . preload ( :games )
20+ end
21+
22+ def game_fixture ( attrs \\ % { } ) do
23+ { :ok , game } =
24+ attrs
25+ |> Enum . into ( @ game_attrs )
26+ |> Games . create_game ( )
27+
28+ game
29+ |> Agoneum.Repo . preload ( :users )
2030 end
2131
2232 test "list_users/0 returns all users" do
@@ -102,5 +112,36 @@ defmodule Agoneum.AccountTest do
102112 user = user_fixture ( )
103113 assert % Ecto.Changeset { } = Account . change_user ( user )
104114 end
115+
116+ test "add_game/1 associates a game with the user" do
117+ user = user_fixture ( )
118+ game = game_fixture ( )
119+ assert length ( user . games ) == 0
120+
121+ assert { :ok , user } = Account . add_games ( user , game )
122+ assert length ( user . games ) == 1
123+ end
124+
125+ test "add_game/1 updates a user's list of games without creating duplicates" do
126+ user = user_fixture ( )
127+ game = game_fixture ( )
128+ game2 = game_fixture ( % { name: "BANG! High Noon" } )
129+ assert length ( user . games ) == 0
130+
131+ Account . add_games ( user , game )
132+ { :ok , user } = Account . add_games ( user , [ game , game2 ] )
133+ assert length ( user . games ) == 2
134+ end
135+
136+ test "add_game/1 associates a game with multiple users" do
137+ user1 = user_fixture ( % { email: "[email protected] " , name: "User 1" } ) 138+ user2 = user_fixture ( % { email: "[email protected] " , name: "User 2" } ) 139+ game = game_fixture ( )
140+
141+ assert { :ok , user1 } = Account . add_games ( user1 , game )
142+ assert { :ok , user2 } = Account . add_games ( user2 , game )
143+
144+ assert List . first ( user1 . games ) . id == List . first ( user2 . games ) . id
145+ end
105146 end
106147end
0 commit comments