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

View File

@@ -63,6 +63,24 @@ class PoolAdvancementTest < ActionDispatch::IntegrationTest
end_match(match_wrestler_vs("Test5","Test6"),"Test5") end_match(match_wrestler_vs("Test5","Test6"),"Test5")
end 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 def finishWithTieMostTeamPointsTwoWayTie
end_match_with_pin(match_wrestler_vs("Test1","Test2"),"Test1") end_match_with_pin(match_wrestler_vs("Test1","Test2"),"Test1")
end_match_with_pin(match_wrestler_vs("Test1","Test3"),"Test3") 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 assert Wrestler.find(translate_name_to_id("Test6")).pool_placement = 6
end 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 test "Pool order three way tie with most team points but most team points are tied between two wrestlers" do
finishWithTieMostTeamPointsTwoWayTie finishWithTieMostTeamPointsTwoWayTie
assert Wrestler.find(translate_name_to_id("Test1")).pool_placement = 2 assert Wrestler.find(translate_name_to_id("Test1")).pool_placement = 2