diff --git a/app/models/weight.rb b/app/models/weight.rb index 19c88db..05574dd 100644 --- a/app/models/weight.rb +++ b/app/models/weight.rb @@ -90,6 +90,26 @@ class Weight < ActiveRecord::Base end end + def pool_full(pool) + current_wrestlers = wrestlers_in_pool(pool) + if self.pool_bracket_type == "twoPoolsToSemi" + max = 4 + elsif self.pool_bracket_type == "twoPoolsToFinal" + max = 5 + elsif self.pool_bracket_type == "fourPoolsToQuarter" + max = 3 + elsif self.pool_bracket_type == "fourPoolsToSemi" + max = 4 + elsif self.pool_bracket_type == "eightPoolsToQuarter" + max = 3 + end + if max == current_wrestlers + true + else + false + end + end + def pool_rounds(matches) matchups = matches.select{|m| m.weight_id == self.id} pool_matches = matchups.select{|m| m.bracket_position == "Pool"} diff --git a/app/services/weight_services/generate_pool_numbers.rb b/app/services/weight_services/generate_pool_numbers.rb index 472791a..fd8c981 100644 --- a/app/services/weight_services/generate_pool_numbers.rb +++ b/app/services/weight_services/generate_pool_numbers.rb @@ -4,6 +4,11 @@ class GeneratePoolNumbers end def savePoolNumbers + @weight.wrestlers.each do |wrestler| + if wrestler.pool and (wrestler.pool) > (@weight.pools) + resetPool + end + end if @weight.pools == 4 saveFourPoolNumbers(@weight.wrestlers_without_pool_assignment) elsif @weight.pools == 2 @@ -13,6 +18,28 @@ class GeneratePoolNumbers elsif @weight.pools == 8 saveEightPoolNumbers(@weight.wrestlers_without_pool_assignment) end + saveRandomPool(@weight.reload.wrestlers_without_pool_assignment) + end + + def resetPool + @weight.wrestlers.each do |wrestler| + wrestler.pool = nil + wrestler.save + @weight.reload + end + end + + def saveRandomPool(poolWrestlers) + pool = 1 + poolWrestlers.sort_by{|x| x.bracket_line }.reverse.each do |wrestler| + wrestler.pool = pool + wrestler.save + if pool < @weight.pools + pool = pool + 1 + else + pool = 1 + end + end end def saveOnePoolNumbers(poolWrestlers) @@ -24,7 +51,6 @@ class GeneratePoolNumbers def saveTwoPoolNumbers(poolWrestlers) - pool = 1 poolWrestlers.sort_by{|x| x.bracket_line }.reverse.each do |w| if w.bracket_line == 1 w.pool = 1 @@ -34,20 +60,12 @@ class GeneratePoolNumbers w.pool = 2 elsif w.bracket_line == 4 w.pool = 1 - else - w.pool = pool - end - if pool < 2 - pool = pool + 1 - else - pool = 1 end w.save end end def saveFourPoolNumbers(poolWrestlers) - pool = 1 poolWrestlers.sort_by{|x| x.bracket_line }.reverse.each do |w| if w.bracket_line == 1 w.pool = 1 @@ -65,20 +83,12 @@ class GeneratePoolNumbers w.pool = 3 elsif w.bracket_line == 5 w.pool = 4 - else - w.pool = pool - end - if pool < 4 - pool = pool + 1 - else - pool = 1 end w.save end end def saveEightPoolNumbers(poolWrestlers) - pool = 1 poolWrestlers.sort_by{|x| x.bracket_line }.reverse.each do |w| if w.bracket_line == 1 w.pool = 1 @@ -96,13 +106,6 @@ class GeneratePoolNumbers w.pool = 7 elsif w.bracket_line == 8 w.pool = 8 - else - w.pool = pool - end - if pool < 8 - pool = pool + 1 - else - pool = 1 end w.save end diff --git a/test/integration/eight_pool_to_four_pool_changes_test.rb b/test/integration/eight_pool_to_four_pool_changes_test.rb new file mode 100644 index 0000000..997b832 --- /dev/null +++ b/test/integration/eight_pool_to_four_pool_changes_test.rb @@ -0,0 +1,27 @@ +require 'test_helper' + +class EightPoolToFourPoolChangesTest < ActionDispatch::IntegrationTest + def setup + @tournament = Tournament.find(4) + end + + test "All wrestlers get matches after a weight switches from 8 pool to 4 pool" do + GenerateTournamentMatches.new(@tournament).generate + assert @tournament.matches.count == 36 + assert @tournament.weights.first.pools == 8 + count = 1 + @tournament.reload.weights.first.wrestlers.sort_by{|wrestler| wrestler.pool}.each do |wrestler| + if count <= 8 + wrestler.destroy + count = count + 1 + end + end + GenerateTournamentMatches.new(@tournament.reload).generate + assert @tournament.matches.count == 32 + assert @tournament.weights.first.pools == 4 + @tournament.reload.weights.first.wrestlers.each do |wrestler| + assert wrestler.pool <= 4 + assert wrestler.all_matches.count > 0 + end + end +end \ No newline at end of file