1
0
mirror of https://github.com/jcwimer/wrestlingApp synced 2026-03-25 01:14:43 +00:00

Fixed pool order deducted points bug

This commit is contained in:
2020-01-03 12:54:11 -05:00
parent 0d3cc08ad7
commit a709cb5c69
2 changed files with 57 additions and 28 deletions

View File

@@ -18,6 +18,8 @@ class PoolOrder
def setOriginalPoints
@wrestlers.each do |w|
w.pool_placement_tiebreaker = nil
w.pool_placement = nil
w.poolAdvancePoints = w.pool_wins.size
end
end
@@ -31,42 +33,44 @@ class PoolOrder
def wrestlersWithSamePoints
@wrestlers.each do |w|
wrestlersWithSamePoints = @wrestlers.select{|wr| wr.poolAdvancePoints == w.poolAdvancePoints}
if wrestlersWithSamePoints.size > 0
return wrestlersWithSamePoints
wrestlersWithSamePointsLocal = @wrestlers.select{|wr| wr.poolAdvancePoints == w.poolAdvancePoints}
if wrestlersWithSamePointsLocal.size > 1
return wrestlersWithSamePointsLocal
end
end
return []
end
def ifWrestlersWithSamePointsIsSameAsOriginal(originalTieSize)
if wrestlersWithSamePoints.size == originalTieSize
yield
return true
else
return false
end
end
def breakTie
originalTieSize = wrestlersWithSamePoints.size
ifWrestlersWithSamePointsIsSameAsOriginal(originalTieSize) { deductedPoints }
deductedPoints(originalTieSize) if ifWrestlersWithSamePointsIsSameAsOriginal(originalTieSize)
if originalTieSize == 2
ifWrestlersWithSamePointsIsSameAsOriginal(originalTieSize) { headToHead }
headToHead if ifWrestlersWithSamePointsIsSameAsOriginal(originalTieSize)
end
ifWrestlersWithSamePointsIsSameAsOriginal(originalTieSize) { teamPoints }
ifWrestlersWithSamePointsIsSameAsOriginal(originalTieSize) { mostFalls }
ifWrestlersWithSamePointsIsSameAsOriginal(originalTieSize) { mostTechs }
ifWrestlersWithSamePointsIsSameAsOriginal(originalTieSize) { mostMajors }
ifWrestlersWithSamePointsIsSameAsOriginal(originalTieSize) { mostDecisionPointsScored }
ifWrestlersWithSamePointsIsSameAsOriginal(originalTieSize) { fastest_pins }
ifWrestlersWithSamePointsIsSameAsOriginal(originalTieSize) { coinFlip }
teamPoints if ifWrestlersWithSamePointsIsSameAsOriginal(originalTieSize)
mostFalls if ifWrestlersWithSamePointsIsSameAsOriginal(originalTieSize)
mostTechs if ifWrestlersWithSamePointsIsSameAsOriginal(originalTieSize)
mostMajors if ifWrestlersWithSamePointsIsSameAsOriginal(originalTieSize)
mostDecisionPointsScored if ifWrestlersWithSamePointsIsSameAsOriginal(originalTieSize)
fastest_pins if ifWrestlersWithSamePointsIsSameAsOriginal(originalTieSize)
coinFlip if ifWrestlersWithSamePointsIsSameAsOriginal(originalTieSize)
end
def headToHead
wrestlersWithSamePoints.each do |wr|
otherWrestler = wrestlersWithSamePoints.select{|w| w.id != wr.id}.first
if wr.match_against(otherWrestler).first.winner_id == wr.id
if otherWrestler and wr.match_against(otherWrestler).first.winner_id == wr.id
addPointsToWrestlersAhead(wr)
wr.pool_placement_tiebreaker = "Head to Head"
wr.save
addPoints(wr)
end
end
@@ -83,7 +87,7 @@ class PoolOrder
end
end
def deductedPoints
def deductedPoints(originalTieSize)
pointsArray = []
wrestlersWithSamePoints.each do |w|
pointsArray << w.total_points_deducted
@@ -91,12 +95,13 @@ class PoolOrder
leastPoints = pointsArray.min
wrestlersWithLeastDeductedPoints = wrestlersWithSamePoints.select{|w| w.total_points_deducted == leastPoints}
addPointsToWrestlersAhead(wrestlersWithLeastDeductedPoints.first)
if wrestlersWithLeastDeductedPoints.size != originalTieSize
wrestlersWithLeastDeductedPoints.each do |wr|
wr.pool_placement_tiebreaker = "Least Deducted Points"
wr.save
addPoints(wr)
end
end
end
def mostDecisionPointsScored
pointsArray = []
@@ -108,7 +113,6 @@ class PoolOrder
addPointsToWrestlersAhead(wrestlersWithMostPoints.first)
wrestlersWithMostPoints.each do |wr|
wr.pool_placement_tiebreaker = "Points Scored"
wr.save
addPoints(wr)
end
secondPoints = pointsArray.sort[-2]
@@ -116,7 +120,6 @@ class PoolOrder
addPointsToWrestlersAhead(wrestlersWithSecondMostPoints.first)
wrestlersWithSecondMostPoints.each do |wr|
wr.pool_placement_tiebreaker = "Points Scored"
wr.save
addPoints(wr)
end
end
@@ -135,7 +138,6 @@ class PoolOrder
addPointsToWrestlersAhead(wrestlersWithFastestPin.first)
wrestlersWithFastestPin.each do |wr|
wr.pool_placement_tiebreaker = "Pin Time"
wr.save
addPoints(wr)
end
end
@@ -151,7 +153,6 @@ class PoolOrder
addPointsToWrestlersAhead(wrestlersSortedByTeamPoints.first)
wrestlersSortedByTeamPoints.each do |wr|
wr.pool_placement_tiebreaker = "Team Points"
wr.save
addPoints(wr)
end
end
@@ -166,7 +167,6 @@ class PoolOrder
addPointsToWrestlersAhead(wrestlersSortedByFallWins.first)
wrestlersSortedByFallWins.each do |wr|
wr.pool_placement_tiebreaker = "Most Pins"
wr.save
addPoints(wr)
end
end
@@ -181,7 +181,6 @@ class PoolOrder
addPointsToWrestlersAhead(wrestlersSortedByTechWins.first)
wrestlersSortedByTechWins.each do |wr|
wr.pool_placement_tiebreaker = "Most Techs"
wr.save
addPoints(wr)
end
end
@@ -196,7 +195,6 @@ class PoolOrder
addPointsToWrestlersAhead(wrestlersSortedByMajorWins.first)
wrestlersSortedByMajorWins.each do |wr|
wr.pool_placement_tiebreaker = "Most Majors"
wr.save
addPoints(wr)
end
end
@@ -204,7 +202,6 @@ class PoolOrder
def coinFlip
wrestler = wrestlersWithSamePoints.sample
wrestler.pool_placement_tiebreaker = "Coin Flip"
wrestler.save
addPointsToWrestlersAhead(wrestler)
addPoints(wrestler)
end

View File

@@ -63,6 +63,24 @@ class PoolAdvancementTest < ActionDispatch::IntegrationTest
end_match(match_wrestler_vs("Test5","Test6"),"Test5")
end
def finishWithTieMostTeamPointsSecondPlace
end_match(match_wrestler_vs("Test1","Test2"),"Test1")
end_match(match_wrestler_vs("Test1","Test3"),"Test1")
end_match(match_wrestler_vs("Test1","Test4"),"Test1")
end_match(match_wrestler_vs("Test1","Test5"),"Test1")
end_match(match_wrestler_vs("Test1","Test6"),"Test1")
end_match_with_pin(match_wrestler_vs("Test2","Test3"),"Test2")
end_match(match_wrestler_vs("Test2","Test4"),"Test4")
end_match(match_wrestler_vs("Test2","Test5"),"Test2")
end_match(match_wrestler_vs("Test2","Test6"),"Test2")
end_match(match_wrestler_vs("Test3","Test4"),"Test3")
end_match(match_wrestler_vs("Test3","Test5"),"Test3")
end_match(match_wrestler_vs("Test3","Test6"),"Test3")
end_match(match_wrestler_vs("Test4","Test5"),"Test4")
end_match(match_wrestler_vs("Test4","Test6"),"Test4")
end_match(match_wrestler_vs("Test5","Test6"),"Test5")
end
def finishWithTieMostTeamPointsTwoWayTie
end_match_with_pin(match_wrestler_vs("Test1","Test2"),"Test1")
end_match_with_pin(match_wrestler_vs("Test1","Test3"),"Test3")
@@ -273,6 +291,20 @@ class PoolAdvancementTest < ActionDispatch::IntegrationTest
assert Wrestler.find(translate_name_to_id("Test6")).pool_placement = 6
end
test "Pool order three way tie with most team points where first place won by wins" do
finishWithTieMostTeamPointsSecondPlace
assert Wrestler.find(translate_name_to_id("Test1")).pool_placement = 1
assert Wrestler.find(translate_name_to_id("Test1")).pool_placement_tiebreaker = ""
assert Wrestler.find(translate_name_to_id("Test2")).pool_placement = 2
assert Wrestler.find(translate_name_to_id("Test2")).pool_placement_tiebreaker = "Team Points"
assert Wrestler.find(translate_name_to_id("Test3")).pool_placement = 3
assert Wrestler.find(translate_name_to_id("Test3")).pool_placement_tiebreaker = "Head to Head"
assert Wrestler.find(translate_name_to_id("Test4")).pool_placement = 4
assert Wrestler.find(translate_name_to_id("Test4")).pool_placement_tiebreaker = ""
assert Wrestler.find(translate_name_to_id("Test5")).pool_placement = 5
assert Wrestler.find(translate_name_to_id("Test6")).pool_placement = 6
end
test "Pool order three way tie with most team points but most team points are tied between two wrestlers" do
finishWithTieMostTeamPointsTwoWayTie
assert Wrestler.find(translate_name_to_id("Test1")).pool_placement = 2