From e2ec1d4a8a7fe02074178887895d637149b8f9b9 Mon Sep 17 00:00:00 2001 From: Jacob Cody Wimer Date: Thu, 12 Dec 2019 11:19:24 -0500 Subject: [PATCH] Fixed bug with pool to bracket advancement. This bug was conceived due to the removing of tests and logic when making pool and pool_placement database fields. --- app/models/match.rb | 10 ++++- app/models/weight.rb | 14 +++---- .../bracket_advancement/advance_wrestler.rb | 6 +-- .../bracket_advancement/pool_advance.rb | 24 +++++++----- .../pool_to_bracket_advancement_test.rb | 37 +++++++++++++++++++ test/test_helper.rb | 1 + 6 files changed, 71 insertions(+), 21 deletions(-) create mode 100644 test/integration/pool_to_bracket_advancement_test.rb diff --git a/app/models/match.rb b/app/models/match.rb index 8a8f875..cdf6787 100644 --- a/app/models/match.rb +++ b/app/models/match.rb @@ -19,7 +19,8 @@ class Match < ActiveRecord::Base calculate_school_points end end - + + BRACKET_POSITIONS = ["Pool","1/2","3/4","5/6","7/8","Quarter","Semis","Conso Semis"] WIN_TYPES = ["Decision", "Major", "Tech Fall", "Pin", "Forfeit", "Injury Default", "Default", "DQ"] def calculate_school_points @@ -29,6 +30,13 @@ class Match < ActiveRecord::Base end end + def wrestler_in_match(wrestler) + if self.w1 == wrestler.id or self.w2 == wrestler.id + return true + else + return false + end + end def mat_assigned if self.mat diff --git a/app/models/weight.rb b/app/models/weight.rb index c56aba0..c54aa7c 100644 --- a/app/models/weight.rb +++ b/app/models/weight.rb @@ -48,8 +48,8 @@ class Weight < ActiveRecord::Base end def all_pool_matches_finished(pool) - @wrestlers = wrestlers_in_pool(pool) - @wrestlers.each do |w| + wrestlers = wrestlers_in_pool(pool) + wrestlers.each do |w| if w.pool_matches.size != w.finished_pool_matches.size return false end @@ -58,14 +58,14 @@ class Weight < ActiveRecord::Base end def pools - @wrestlers = self.wrestlers - if @wrestlers.size <= 6 + wrestlers = self.wrestlers + if wrestlers.size <= 6 self.pools = 1 - elsif (@wrestlers.size > 6) && (@wrestlers.size <= 10) + elsif (wrestlers.size > 6) && (wrestlers.size <= 10) self.pools = 2 - elsif (@wrestlers.size > 10) && (@wrestlers.size <= 16) + elsif (wrestlers.size > 10) && (wrestlers.size <= 16) self.pools = 4 - elsif (@wrestlers.size > 16) && (@wrestlers.size <= 24) + elsif (wrestlers.size > 16) && (wrestlers.size <= 24) self.pools = 8 end end diff --git a/app/services/bracket_advancement/advance_wrestler.rb b/app/services/bracket_advancement/advance_wrestler.rb index ab82bcf..39c98ce 100644 --- a/app/services/bracket_advancement/advance_wrestler.rb +++ b/app/services/bracket_advancement/advance_wrestler.rb @@ -17,12 +17,10 @@ class AdvanceWrestler end def pool_to_bracket_advancement - if @wrestler.weight.all_pool_matches_finished(@wrestler.pool) and (@wrestler.finished_bracket_matches.size == 0 or @wrestler.weight.pools == 1) + if @wrestler.weight.all_pool_matches_finished(@wrestler.pool) and (@wrestler.finished_bracket_matches.size < 1) PoolOrder.new(@wrestler.weight.wrestlers_in_pool(@wrestler.pool)).getPoolOrder end - if @wrestler.weight.all_pool_matches_finished(@wrestler.pool) - PoolAdvance.new(@wrestler,@wrestler.last_match).advanceWrestler - end + PoolAdvance.new(@wrestler).advanceWrestler end end \ No newline at end of file diff --git a/app/services/bracket_advancement/pool_advance.rb b/app/services/bracket_advancement/pool_advance.rb index d5a6925..3e3e1fc 100644 --- a/app/services/bracket_advancement/pool_advance.rb +++ b/app/services/bracket_advancement/pool_advance.rb @@ -1,12 +1,12 @@ class PoolAdvance - def initialize(wrestler,previousMatch) + def initialize(wrestler) @wrestler = wrestler - @previousMatch = previousMatch + @last_match = @wrestler.last_match end def advanceWrestler - if @wrestler.pool_placement and @wrestler.weight.pools > 1 + if @wrestler.weight.pools > 1 and @wrestler.finished_bracket_matches.size < 1 poolToBracketAdvancment end if @wrestler.finished_bracket_matches.size > 0 @@ -15,19 +15,25 @@ class PoolAdvance end def poolToBracketAdvancment - if @wrestler.pool_placement == 2 - runnerUpMatch.replace_loser_name_with_wrestler(runnerUp,"Runner Up Pool #{pool}") + pool = @wrestler.pool + # This has to always run because the last match in a pool might not be a pool winner or runner up + winner = Wrestler.where("weight_id = ? and pool_placement = 1 and pool = ?",@wrestler.weight.id, pool).first + runner_up = Wrestler.where("weight_id = ? and pool_placement = 2 and pool = ?",@wrestler.weight.id, pool).first + if runner_up + runner_up_match = Match.where("weight_id = ? and (loser1_name = ? or loser2_name = ?)",@wrestler.weight.id, "Runner Up Pool #{pool}", "Runner Up Pool #{pool}").first + runner_up_match.replace_loser_name_with_wrestler(runner_up,"Runner Up Pool #{pool}") end - if @wrestler.pool_placement == 1 - winnerMatch.replace_loser_name_with_wrestler(winner,"Winner Pool #{pool}") + if winner + winner_match = Match.where("weight_id = ? and (loser1_name = ? or loser2_name = ?)",@wrestler.weight.id, "Winner Pool #{pool}", "Winner Pool #{pool}").first + winner_match.replace_loser_name_with_wrestler(winner,"Winner Pool #{pool}") end end def bracketAdvancment - if @previousMatch.winner_id == @wrestler.id + if @last_match.winner_id == @wrestler.id winnerAdvance end - if @previousMatch.winner_id != @wrestler.id + if @last_match.winner_id != @wrestler.id loserAdvance end end diff --git a/test/integration/pool_to_bracket_advancement_test.rb b/test/integration/pool_to_bracket_advancement_test.rb new file mode 100644 index 0000000..49cf767 --- /dev/null +++ b/test/integration/pool_to_bracket_advancement_test.rb @@ -0,0 +1,37 @@ +require 'test_helper' + +class PoolToBracketAdvancementTest < ActionDispatch::IntegrationTest + + def setup + @tournament = create_pool_tournament_single_weight(10) + @weight = Weight.where("tournament_id = ? and max = 106", @tournament.id).first + end + + def end_all_pool_matches + matches = Match.where("weight_id = ? and bracket_position = 'Pool'",@weight.id) + matches.each do |match| + if match.wrestler1.bracket_line < match.wrestler2.bracket_line + match.winner_id = match.w1 + else + match.winner_id = match.w2 + end + match.finished = 1 + match.score = "2-1" + match.save + end + end + + test "Pool winners are wrestling for first and pool losers are wrestling for third in two pools to finals pool bracket" do + end_all_pool_matches + pool_winner_1 = Wrestler.where("weight_id = ? and pool = 1 and pool_placement = 1",@weight.id).first + pool_runnerup_1 = Wrestler.where("weight_id = ? and pool = 1 and pool_placement = 2",@weight.id).first + pool_winner_2 = Wrestler.where("weight_id = ? and pool = 2 and pool_placement = 1",@weight.id).first + pool_runnerup_2 = Wrestler.where("weight_id = ? and pool = 2 and pool_placement = 2",@weight.id).first + match_1_2 = Match.where("weight_id = ? and bracket_position = '1/2'", @weight.id).first + match_3_4 = Match.where("weight_id = ? and bracket_position = '3/4'", @weight.id).first + assert match_1_2.wrestler_in_match(pool_winner_1) == true + assert match_1_2.wrestler_in_match(pool_winner_2) == true + assert match_3_4.wrestler_in_match(pool_runnerup_1) == true + assert match_3_4.wrestler_in_match(pool_runnerup_2) == true + end +end \ No newline at end of file diff --git a/test/test_helper.rb b/test/test_helper.rb index abb079c..12ebb30 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -32,6 +32,7 @@ class ActiveSupport::TestCase @weight.save create_wrestlers_for_weight(@weight, @school, number_of_wrestlers, 1) GenerateTournamentMatches.new(@tournament).generate + return @tournament end def create_pool_tournament