diff --git a/app/controllers/weights_controller.rb b/app/controllers/weights_controller.rb
index 5ee391a..f2d8c57 100644
--- a/app/controllers/weights_controller.rb
+++ b/app/controllers/weights_controller.rb
@@ -79,7 +79,6 @@ class WeightsController < ApplicationController
format.json { head :no_content }
end
end
-
def pool_order
pool = params[:pool_to_order].to_i
diff --git a/app/models/weight.rb b/app/models/weight.rb
index 7b04943..b0195f8 100644
--- a/app/models/weight.rb
+++ b/app/models/weight.rb
@@ -155,7 +155,7 @@ class Weight < ApplicationRecord
wrestlers.select{|w| w.pool == nil}
end
- def calculate_bracket_size()
+ def calculate_bracket_size
num_wrestlers = wrestlers.reload.size
return nil if num_wrestlers <= 0 # Handle invalid input
diff --git a/app/services/tournament_services/generate_tournament_matches.rb b/app/services/tournament_services/generate_tournament_matches.rb
index 18a3f3d..a8c6059 100644
--- a/app/services/tournament_services/generate_tournament_matches.rb
+++ b/app/services/tournament_services/generate_tournament_matches.rb
@@ -3,25 +3,6 @@ class GenerateTournamentMatches
@tournament = tournament
end
- def generateWeight(weight)
- if Rails.env.production?
- self.delay(:job_owner_id => @tournament.id, :job_owner_type => "Generate matches for weights class #{weight.max}").generate_weight_raw(weight)
- else
- self.generate_weight_raw(weight)
- end
- end
-
- def generate_weight_raw(weight)
- @tournament.clear_errored_deferred_jobs
- WipeTournamentMatches.new(@tournament).wipeWeightMatches(weight)
- @tournament.curently_generating_matches = 1
- @tournament.save
- unAssignBouts
- PoolToBracketMatchGeneration.new(@tournament).generatePoolToBracketMatchesWeight(weight) if @tournament.tournament_type == "Pool to bracket"
- postMatchCreationActions
- PoolToBracketGenerateLoserNames.new(@tournament).assignLoserNamesWeight(weight) if @tournament.tournament_type == "Pool to bracket"
- end
-
def generate
if Rails.env.production?
self.delay(:job_owner_id => @tournament.id, :job_owner_type => "Generate matches for all weights").generate_raw
@@ -45,7 +26,7 @@ class GenerateTournamentMatches
@tournament.curently_generating_matches = 1
@tournament.save
WipeTournamentMatches.new(@tournament).setUpMatchGeneration
- TournamentSeeding.new(@tournament).setSeeds
+ TournamentSeeding.new(@tournament).set_seeds
end
def postMatchCreationActions
diff --git a/app/services/tournament_services/tournament_seeding.rb b/app/services/tournament_services/tournament_seeding.rb
index 38d9cdb..77a74d1 100644
--- a/app/services/tournament_services/tournament_seeding.rb
+++ b/app/services/tournament_services/tournament_seeding.rb
@@ -3,42 +3,63 @@ class TournamentSeeding
@tournament = tournament
end
- def setSeeds
- @tournament.weights.each do |w|
- resetAllSeeds(w)
- setOriginalSeeds(w)
- randomSeeding(w)
+ def set_seeds
+ @tournament.weights.each do |weight|
+ wrestlers = weight.wrestlers
+ bracket_size = weight.calculate_bracket_size
+
+ wrestlers = reset_bracket_line_for_lines_higher_than_bracket_size(wrestlers, bracket_size)
+ wrestlers = set_original_seed_to_bracket_line(wrestlers)
+ wrestlers = random_seeding(wrestlers, bracket_size)
+ wrestlers.each(&:save)
end
end
- def randomSeeding(weight)
- wrestlerWithSeeds = weight.wrestlers.select{|w| w.original_seed != nil }.sort_by{|w| w.original_seed}
- if wrestlerWithSeeds.size > 0
- highestSeed = wrestlerWithSeeds.last.bracket_line
- seed = highestSeed + 1
- else
- seed = 1
+ def random_seeding(wrestlers, bracket_size)
+ available_bracket_lines = (1..bracket_size).to_a
+
+ # remove bracket lines that are taken from available_bracket_lines
+ wrestlers_with_bracket_lines = wrestlers.select{|w| w.bracket_line != nil }
+ wrestlers_with_bracket_lines.each do |wrestler|
+ available_bracket_lines.delete(wrestler.bracket_line)
end
- wrestlersWithoutSeed = weight.wrestlers.select{|w| w.original_seed == nil }
- wrestlersWithoutSeed.shuffle.each do |w|
- w.bracket_line = seed
- w.save
- seed += 1
+
+ wrestlers_without_bracket_lines = wrestlers.select{|w| w.bracket_line == nil }
+ # Iterrate over the list randomly
+ wrestlers_without_bracket_lines.shuffle.each do |wrestler|
+ random_available_bracket_line = available_bracket_lines.sample
+ wrestler.bracket_line = random_available_bracket_line
+ available_bracket_lines.delete(random_available_bracket_line)
end
+ return wrestlers
end
- def setOriginalSeeds(weight)
- wrestlerWithSeeds = weight.wrestlers.select{|w| w.original_seed != nil }
- wrestlerWithSeeds.each do |w|
- w.bracket_line = w.original_seed
- w.save
+ def set_original_seed_to_bracket_line(wrestlers)
+ wrestlers_with_seeds = wrestlers.select{|w| w.original_seed != nil }
+ wrestlers_with_seeds.each do |wrestler|
+ wrestlers_with_seeded_wrestlers_bracket_line = wrestlers.select{|w| w.bracket_line == wrestler.original_seed && w.id != wrestler.id}
+ wrestlers_with_seeded_wrestlers_bracket_line.each do |wrestler_with_wrong_bracket_line|
+ wrestler_with_wrong_bracket_line.bracket_line = nil
+ end
+
+ wrestler.bracket_line = wrestler.original_seed
end
+ return wrestlers
end
- def resetAllSeeds(weight)
- weight.wrestlers.each do |w|
+ def reset_bracket_line_for_lines_higher_than_bracket_size(wrestlers, bracket_size)
+ wrestlers.each do |w|
+ if w.bracket_line && w.bracket_line > bracket_size
+ w.bracket_line = nil
+ end
+ end
+ return wrestlers
+ end
+
+ def reset_all_seeds(wrestlers)
+ wrestlers.each do |w|
w.bracket_line = nil
- w.save
end
+ return wrestlers
end
end
\ No newline at end of file
diff --git a/app/views/weights/show.html.erb b/app/views/weights/show.html.erb
index e2d829d..0b237ec 100644
--- a/app/views/weights/show.html.erb
+++ b/app/views/weights/show.html.erb
@@ -35,7 +35,7 @@
<% end %>
<% if can? :manage, @tournament %>
- <%= link_to '', wrestler, method: :delete, data: { confirm: "Are you sure you want to delete #{wrestler.name}?" } , :class=>"fas fa-trash-alt" %>
+ <%= link_to '', wrestler, method: :delete, data: { confirm: "Are you sure you want to delete #{wrestler.name}? THIS WILL DELETE ALL MATCHES." } , :class=>"fas fa-trash-alt" %>
|
<% end %>
@@ -43,7 +43,7 @@
<% end %>
-
*All wrestlers without a seed (determined by tournament director) will be assigned a bracket line.
+
*All wrestlers without a seed (determined by tournament director) will be assigned a random bracket line.
<% if can? :manage, @tournament %>
<%= submit_tag "Save Seeds", :class=>"btn btn-success"%>
diff --git a/config/application.rb b/config/application.rb
index 281725d..d9de515 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -30,12 +30,9 @@ module Wrestling
DeviseController.respond_to :html, :json
end
- config.autoload_paths << "#{config.root}/app/services/tournament_services"
- config.autoload_paths << "#{config.root}/app/services/wrestler_services"
- config.autoload_paths << "#{config.root}/app/services/weight_services"
- config.autoload_paths << "#{config.root}/app/services/bracket_advancement"
- config.autoload_paths << "#{config.root}/app/services/school_services"
- config.add_autoload_paths_to_load_path = false
+ # Add all folders under app/services to the autoload paths
+ config.autoload_paths += Dir[Rails.root.join('app', 'services', '**', '*')]
+ # config.add_autoload_paths_to_load_path = false
config.active_support.cache_format_version = 7.2
config.load_defaults 7.2
diff --git a/test/integration/double_elimination_eight_man_1_6_run_through_test.1.rb b/test/integration/double_elimination_eight_man_1_6_run_through_test.rb
similarity index 100%
rename from test/integration/double_elimination_eight_man_1_6_run_through_test.1.rb
rename to test/integration/double_elimination_eight_man_1_6_run_through_test.rb
diff --git a/test/integration/double_elimination_tournament_seeding_test.rb b/test/integration/double_elimination_tournament_seeding_test.rb
new file mode 100644
index 0000000..da07dfd
--- /dev/null
+++ b/test/integration/double_elimination_tournament_seeding_test.rb
@@ -0,0 +1,160 @@
+require 'test_helper'
+
+class EightManDoubleEliminationSixPlacesRunThrough < ActionDispatch::IntegrationTest
+ def setup
+ create_double_elim_tournament_single_weight(8, "Regular Double Elimination 1-8")
+ @tournament.wrestlers.each do | wrestler |
+ if wrestler.original_seed > 4
+ wrestler.original_seed = nil
+ wrestler.bracket_line = nil
+ wrestler.save
+ end
+ GenerateTournamentMatches.new(@tournament.reload).generate
+ end
+ end
+
+ test "Wrestlers with seeds should go on certain lines and it should be random for everyone else" do
+ matches = @tournament.reload.matches
+
+ matches.select{|m| m.round == 1}.each do | match |
+ assert(match.wrestler1.original_seed != nil)
+ assert(match.wrestler2.original_seed == nil)
+ end
+ end
+
+ test "Regenerating matches without changes should keep lines the same" do
+ wrestlers = @tournament.wrestlers
+ test_one_bracket_line_original = wrestlers.select{|w|w.name == "Test1"}.first.bracket_line
+ test_two_bracket_line_original = wrestlers.select{|w|w.name == "Test2"}.first.bracket_line
+ test_three_bracket_line_original = wrestlers.select{|w|w.name == "Test3"}.first.bracket_line
+ test_four_bracket_line_original = wrestlers.select{|w|w.name == "Test4"}.first.bracket_line
+ test_five_bracket_line_original = wrestlers.select{|w|w.name == "Test5"}.first.bracket_line
+ test_six_bracket_line_original = wrestlers.select{|w|w.name == "Test6"}.first.bracket_line
+ test_seven_bracket_line_original = wrestlers.select{|w|w.name == "Test7"}.first.bracket_line
+ test_eight_bracket_line_original = wrestlers.select{|w|w.name == "Test8"}.first.bracket_line
+
+ GenerateTournamentMatches.new(@tournament.reload).generate
+
+ wrestlers = @tournament.reload.wrestlers
+ test_one_bracket_line_second = wrestlers.select{|w|w.name == "Test1"}.first.bracket_line
+ test_two_bracket_line_second = wrestlers.select{|w|w.name == "Test2"}.first.bracket_line
+ test_three_bracket_line_second = wrestlers.select{|w|w.name == "Test3"}.first.bracket_line
+ test_four_bracket_line_second = wrestlers.select{|w|w.name == "Test4"}.first.bracket_line
+ test_five_bracket_line_second = wrestlers.select{|w|w.name == "Test5"}.first.bracket_line
+ test_six_bracket_line_second = wrestlers.select{|w|w.name == "Test6"}.first.bracket_line
+ test_seven_bracket_line_second = wrestlers.select{|w|w.name == "Test7"}.first.bracket_line
+ test_eight_bracket_line_second = wrestlers.select{|w|w.name == "Test8"}.first.bracket_line
+
+ assert(test_one_bracket_line_original == test_one_bracket_line_second)
+ assert(test_two_bracket_line_original == test_two_bracket_line_second)
+ assert(test_three_bracket_line_original == test_three_bracket_line_second)
+ assert(test_four_bracket_line_original == test_four_bracket_line_second)
+ assert(test_five_bracket_line_original == test_five_bracket_line_second)
+ assert(test_six_bracket_line_original == test_six_bracket_line_second)
+ assert(test_seven_bracket_line_original == test_seven_bracket_line_second)
+ assert(test_eight_bracket_line_original == test_eight_bracket_line_second)
+ end
+
+ test "Deleting a wrestler and generating produces a BYE for the person who lost their opponent" do
+ wrestler_three_first_round = @tournament.reload.matches.select{|m| m.round == 1 && m.wrestler1.name == "Test3"}.first
+ wrestler_three_first_round.wrestler2.destroy
+ GenerateTournamentMatches.new(@tournament.reload).generate
+ matches = @tournament.reload.matches
+
+ match_with_bye = matches.select{|m|m.loser2_name == "BYE"}.first
+ assert(match_with_bye.wrestler1.name == "Test3")
+ end
+
+ test "Deleting a seeded wrestler reseeding and generating produces a BYE for the non seeded opponent who lost their match" do
+ wrestler_two_first_round = @tournament.reload.matches.select{|m| m.round == 1 && m.wrestler1.name == "Test2"}.first
+ wrestler_four_first_round = @tournament.matches.select{|m| m.round == 1 && m.wrestler1.name == "Test4"}.first
+ wrestler_four_first_round_opponent = wrestler_four_first_round.wrestler2.id
+ wrestler_two_first_round.wrestler1.destroy
+
+ wrestlers = @tournament.wrestlers
+ wrestler_three = wrestlers.select{|w| w.name == "Test3"}.first
+ wrestler_three.original_seed = 2
+ wrestler_three.save
+ wrestler_four = wrestlers.select{|w| w.name == "Test4"}.first
+ wrestler_four.original_seed = 3
+ wrestler_four.save
+ GenerateTournamentMatches.new(@tournament.reload).generate
+ matches = @tournament.reload.matches
+
+ assert(matches.select{|m| m.round == 1 && m.w2 == wrestler_four_first_round_opponent}.first.loser1_name == "BYE")
+ end
+
+ test "Swapping seeds should change just the bracket line of the two wrestlers swapped" do
+ wrestlers = @tournament.wrestlers
+ test_one_bracket_line_original = wrestlers.select{|w|w.name == "Test1"}.first.bracket_line
+ test_two_bracket_line_original = wrestlers.select{|w|w.name == "Test2"}.first.bracket_line
+ test_three_bracket_line_original = wrestlers.select{|w|w.name == "Test3"}.first.bracket_line
+ test_four_bracket_line_original = wrestlers.select{|w|w.name == "Test4"}.first.bracket_line
+ test_five_bracket_line_original = wrestlers.select{|w|w.name == "Test5"}.first.bracket_line
+ test_six_bracket_line_original = wrestlers.select{|w|w.name == "Test6"}.first.bracket_line
+ test_seven_bracket_line_original = wrestlers.select{|w|w.name == "Test7"}.first.bracket_line
+ test_eight_bracket_line_original = wrestlers.select{|w|w.name == "Test8"}.first.bracket_line
+
+ wrestler_three = wrestlers.select{|w| w.name == "Test3"}.first
+ wrestler_three.original_seed = 4
+ wrestler_three.save
+ wrestler_four = wrestlers.select{|w| w.name == "Test4"}.first
+ wrestler_four.original_seed = 3
+ wrestler_four.save
+
+ GenerateTournamentMatches.new(@tournament.reload).generate
+
+ wrestlers = @tournament.reload.wrestlers
+ test_one_bracket_line_second = wrestlers.select{|w|w.name == "Test1"}.first.bracket_line
+ test_two_bracket_line_second = wrestlers.select{|w|w.name == "Test2"}.first.bracket_line
+ test_three_bracket_line_second = wrestlers.select{|w|w.name == "Test3"}.first.bracket_line
+ test_four_bracket_line_second = wrestlers.select{|w|w.name == "Test4"}.first.bracket_line
+ test_five_bracket_line_second = wrestlers.select{|w|w.name == "Test5"}.first.bracket_line
+ test_six_bracket_line_second = wrestlers.select{|w|w.name == "Test6"}.first.bracket_line
+ test_seven_bracket_line_second = wrestlers.select{|w|w.name == "Test7"}.first.bracket_line
+ test_eight_bracket_line_second = wrestlers.select{|w|w.name == "Test8"}.first.bracket_line
+
+ # Other people not swapped
+ assert(test_one_bracket_line_original == test_one_bracket_line_second)
+ assert(test_two_bracket_line_original == test_two_bracket_line_second)
+ assert(test_five_bracket_line_original == test_five_bracket_line_second)
+ assert(test_six_bracket_line_original == test_six_bracket_line_second)
+ assert(test_seven_bracket_line_original == test_seven_bracket_line_second)
+ assert(test_eight_bracket_line_original == test_eight_bracket_line_second)
+ # Two people swapped
+ assert(test_three_bracket_line_original == test_four_bracket_line_second)
+ assert(test_four_bracket_line_original == test_three_bracket_line_second)
+ end
+
+ test "Changing a wrestler from not seeded to seeded should only change his line and the person who had the line they now get" do
+ matches_original = @tournament.matches.select{|m| m.round == 1}
+ original_wrestler4_opponent_name = matches_original.select{|m| m.wrestler1.name == "Test4"}.first.wrestler2.name
+
+ wrestler_seven = @tournament.wrestlers.select{|w| w.name == "Test7"}.first
+ wrestler_seven.original_seed = 5
+ wrestler_seven.save
+
+ GenerateTournamentMatches.new(@tournament.reload).generate
+
+ matches_second = @tournament.reload.matches.select{|m| m.round == 1}
+ # everyone else should have the same opponent
+ matches_original.each do |match|
+ match_wrestler1_name = @tournament.wrestlers.select{|w| w.id == match.w1}.first.name
+ match_wrestler2_name = @tournament.wrestlers.select{|w| w.id == match.w2}.first.name
+ matching_second_match = matches_second.select{|m| m.bracket_position_number == match.bracket_position_number}.first
+ match_second_wrestler1_name = @tournament.wrestlers.select{|w| w.id == matching_second_match.w1}.first.name
+ match_second_wrestler2_name = @tournament.wrestlers.select{|w| w.id == matching_second_match.w2}.first.name
+ # Test4 should now wrestle Test7 since Test7 is now 5th seed
+ if match_wrestler1_name == "Test4"
+ assert match_second_wrestler2_name == "Test7"
+ # Test4's original opponenet should now wrestle Test7's original opponent
+ elsif match_wrestler2_name == "Test7"
+ assert match_second_wrestler2_name == original_wrestler4_opponent_name
+ # Everyone else should have their original opponent
+ else
+ assert match_wrestler2_name == match_second_wrestler2_name
+ end
+ end
+ end
+
+end
\ No newline at end of file