diff --git a/spec/models/play_spec.rb b/spec/models/play_spec.rb index b23de38..cf763b6 100644 --- a/spec/models/play_spec.rb +++ b/spec/models/play_spec.rb @@ -1,22 +1,19 @@ RSpec.describe Play, type: :model do before(:all) do - @game = FactoryGirl.create(:game) - @user1 = FactoryGirl.create(:user) - @user2 = FactoryGirl.create(:user) - @game.add_player_from_user @user1 - @game.add_player_from_user @user2 - @game.save - @game.start + @game = setup_game @play = @game.current_player.plays.new @play.game_id = @game.id @play.save end after(:each) do - @play.errors.messages.clear - @play.hand = [] - @game.play_to_beat = nil + #reset game + @game.reload + @game.play_to_beat_id = nil + + # reset play @play.reload + @play.errors[:player_cards].clear end subject { @play } @@ -73,16 +70,17 @@ RSpec.describe Play, type: :model do describe 'wins?' do context 'it does not beat the hand_to_beat' do it 'single' do + # Play a high single card @play_to_beat = Play.new @play_to_beat.player = @game.players.where.not(id: @game.active_player.id).last @play_to_beat.game = @game @play_to_beat.player_cards << @play_to_beat.player.player_cards.order(:value).last - @play_to_beat.save + expect(@play_to_beat.save).to eq(true) + expect(@game.play_to_beat.play).to eq(@play_to_beat) - expect(@play.game.play_to_beat.play).to eq(@play_to_beat) - - # Losing card + # Try to play a losing card @cards_to_play = @play.player.player_cards.order(:value).first + @play.reload @play.player_cards << @cards_to_play expect(@game.player_to_beat).to_not eq(@play.player) @@ -128,16 +126,20 @@ RSpec.describe Play, type: :model do end context 'it beats the hand_to_beat' do it 'single' do - @play_to_beat = Play.new - @play_to_beat.player = @game.players.where.not(id: @game.current_player.id).first - @play_to_beat.game = @game - @play_to_beat.player_cards << @play_to_beat.player.player_cards.order(:value).first - @play_to_beat.save - - @cards_to_play = @play.player.player_cards.order(:value).last + # current player plays their lowest card + @cards_to_play = @play.player.player_cards.order(:value).first @play.player_cards << @cards_to_play + @play.save + @game.reload + # next player plays their lowest card and beats the previous play + @cards_to_play = @play.player.player_cards.order(:value).first + @play.player_cards << @cards_to_play expect(@play.valid?).to eq(true) + @play.save + @game.reload + + expect(@game.play_to_beat.play).to eq(@play) expect(@play.errors[:player_cards]).to eq([]) end @@ -149,11 +151,10 @@ RSpec.describe Play, type: :model do ] @play_to_beat = Play.new - @play_to_beat.player = @game.players.first + @play_to_beat.player = @game.current_player @play_to_beat.player_cards << @cards_to_beat @play_to_beat.game = @game @play_to_beat.save - @play.player_cards = [ @spade4 = PlayerCard.new(@deck.cards[4].instance_values), @club4 = PlayerCard.new(@deck.cards[5].instance_values) diff --git a/spec/support/helpers.rb b/spec/support/helpers.rb index 3228baf..873394c 100644 --- a/spec/support/helpers.rb +++ b/spec/support/helpers.rb @@ -3,4 +3,5 @@ RSpec.configure do |config| config.include Features::SessionHelpers, type: :feature config.include Features::GameHelpers, type: :feature config.include Models::PlayHelpers, type: :model + config.include Models::GameHelpers, type: :model end diff --git a/spec/support/helpers/game_helpers.rb b/spec/support/helpers/game_helpers.rb index 20d32ee..d0ff0c2 100644 --- a/spec/support/helpers/game_helpers.rb +++ b/spec/support/helpers/game_helpers.rb @@ -16,3 +16,23 @@ module Features end end end + +# TODO: DRY up this repetition +module Models + module GameHelpers + def setup_game + # Default game has 4 players + game = FactoryGirl.create :game + user1 = FactoryGirl.create :user + user2 = FactoryGirl.create :user + user3 = FactoryGirl.create :user + user4 = FactoryGirl.create :user + game.add_player_from_user user1 + game.add_player_from_user user2 + game.add_player_from_user user3 + game.add_player_from_user user4 + game.start + return game + end + end +end