From 34a04be4bfb8c78b9793568b283eac4b3ea06655 Mon Sep 17 00:00:00 2001 From: jcwimer Date: Tue, 10 Nov 2015 02:58:52 +0000 Subject: [PATCH] Added head to head pool winner and tests --- app/models/poolorder.rb | 46 ++++++++++++++++++ app/models/weight.rb | 3 +- app/models/wrestler.rb | 5 +- test/integration/pool_advancement_test.rb | 57 ++++++++++++++++++++++- 4 files changed, 106 insertions(+), 5 deletions(-) create mode 100644 app/models/poolorder.rb diff --git a/app/models/poolorder.rb b/app/models/poolorder.rb new file mode 100644 index 0000000..8830201 --- /dev/null +++ b/app/models/poolorder.rb @@ -0,0 +1,46 @@ +class Poolorder + def initialize(wrestlers) + @wrestlers = wrestlers + end + attr_accessor :wrestlersWithSamePoints + + def getPoolOrder + setOriginalPoints + until checkForTieBreakers == false + breakTie + end + @wrestlers.sort_by{|w| w.poolAdvancePoints}.reverse! + end + + def setOriginalPoints + @wrestlers.each do |w| + w.poolAdvancePoints = w.poolWins.size + end + end + + def checkForTieBreakers + @wrestlers.each do |w| + self.wrestlersWithSamePoints = @wrestlers.select{|wr| wr.poolAdvancePoints == w.poolAdvancePoints} + if self.wrestlersWithSamePoints.size > 1 + return true + end + end + return false + end + + def breakTie + headToHead + end + + + def headToHead + self.wrestlersWithSamePoints.each do |wr| + @otherWrestlers = self.wrestlersWithSamePoints.select{|w| w.id != wr.id} + @otherWrestlers.each do |ow| + if wr.matchAgainst(ow).first.winner_id == wr.id + wr.poolAdvancePoints = wr.poolAdvancePoints + 1 + end + end + end + end +end \ No newline at end of file diff --git a/app/models/weight.rb b/app/models/weight.rb index 1d9229e..5720dfb 100644 --- a/app/models/weight.rb +++ b/app/models/weight.rb @@ -139,7 +139,6 @@ class Weight < ActiveRecord::Base end def poolOrder(pool) - @wrestlers = wrestlersForPool(pool) - @wrestlers.sort_by{|w| w.poolWins.size}.reverse! + Poolorder.new(wrestlersForPool(pool)).getPoolOrder end end diff --git a/app/models/wrestler.rb b/app/models/wrestler.rb index 2f32a2e..439eb21 100644 --- a/app/models/wrestler.rb +++ b/app/models/wrestler.rb @@ -3,7 +3,7 @@ class Wrestler < ActiveRecord::Base belongs_to :weight has_one :tournament, through: :weight has_many :matches, through: :weight - attr_accessor :poolNumber + attr_accessor :poolNumber, :poolAdvancePoints before_save do self.tournament.destroyAllMatches @@ -22,6 +22,9 @@ class Wrestler < ActiveRecord::Base end end + def matchAgainst(opponent) + allMatches.select{|m| m.w1 == opponent.id or m.w2 == opponent.id} + end def isWrestlingThisRound(matchRound) if allMatches.blank? diff --git a/test/integration/pool_advancement_test.rb b/test/integration/pool_advancement_test.rb index 39b871a..db655fd 100644 --- a/test/integration/pool_advancement_test.rb +++ b/test/integration/pool_advancement_test.rb @@ -5,10 +5,16 @@ class PoolAdvancementTest < ActionDispatch::IntegrationTest def setup @tournament = Tournament.find(1) @tournament.generateMatchups - nineManBracketPoolOne end - def nineManBracketPoolOne + def showNineManWeightThreePoolTwoMatches + @matches = @tournament.matches.select{|m| m.weight_id == 3 && m.bracket_position == "Pool" && m.poolNumber == 2} + @matches.each do |m| + puts "Bout: #{m.bout_number} #{m.w1_name} vs #{m.w2_name} Pool: #{m.poolNumber}" + end + end + + def nineManBracketPoolOneOutrightWinner @matches = @tournament.matches.select{|m| m.weight_id == 3 && m.bracket_position == "Pool"} endMatch(1002,"Guy8",@matches) endMatch(1003,"Guy10",@matches) @@ -22,6 +28,26 @@ class PoolAdvancementTest < ActionDispatch::IntegrationTest endMatch(3002,"Guy5",@matches) end + def nineManBracketPoolTwoGuyNineHeadToHead + @matches = @tournament.matches.select{|m| m.weight_id == 3 && m.bracket_position == "Pool"} + endMatch(1004,"Guy4",@matches) + endMatch(1005,"Guy3",@matches) + endMatch(2004,"Guy3",@matches) + endMatch(2005,"Guy9",@matches) + endMatch(3004,"Guy7",@matches) + endMatch(3005,"Guy9",@matches) + end + + def nineManBracketPoolTwoGuyThreeHeadToHead + @matches = @tournament.matches.select{|m| m.weight_id == 3 && m.bracket_position == "Pool"} + endMatch(1004,"Guy9",@matches) + endMatch(1005,"Guy3",@matches) + endMatch(2004,"Guy4",@matches) + endMatch(2005,"Guy9",@matches) + endMatch(3004,"Guy7",@matches) + endMatch(3005,"Guy3",@matches) + end + def endMatch(bout,winner,matches) @match = matches.select{|m| m.bout_number == bout}.first @match.finished = 1 @@ -37,15 +63,42 @@ class PoolAdvancementTest < ActionDispatch::IntegrationTest end test "nine man outright finals advance" do + nineManBracketPoolOneOutrightWinner @wrestler = Wrestler.where("name = ?", "Guy2").first @match = Match.where("bout_number = ?",6000).first assert_equal 6000, @wrestler.boutByRound(6) end test "nine man outright conso finals advance" do + nineManBracketPoolOneOutrightWinner @wrestler = Wrestler.where("name = ?", "Guy8").first assert_equal 6001, @wrestler.boutByRound(6) end + test "nine man pool 2 man to man tie breaker finalist guy 9" do + @wrestler = Wrestler.where("name = ?", "Guy9").first + nineManBracketPoolTwoGuyNineHeadToHead + @match = Match.where("bout_number = ?",6000).first + assert_equal 6000, @wrestler.boutByRound(6) + end + + test "nine man pool 2 man to man tie breaker finalist guy 3" do + @wrestler = Wrestler.where("name = ?", "Guy3").first + nineManBracketPoolTwoGuyThreeHeadToHead + @match = Match.where("bout_number = ?",6000).first + assert_equal 6000, @wrestler.boutByRound(6) + end + + test "nine man outright conso finals man to man tie breaker guy 3" do + nineManBracketPoolTwoGuyNineHeadToHead + @wrestler = Wrestler.where("name = ?", "Guy3").first + assert_equal 6001, @wrestler.boutByRound(6) + end + + test "nine man outright conso finals man to man tie breaker guy 9" do + nineManBracketPoolTwoGuyThreeHeadToHead + @wrestler = Wrestler.where("name = ?", "Guy9").first + assert_equal 6001, @wrestler.boutByRound(6) + end end