require 'test_helper' class PoolbracketMatchupsTest < ActionDispatch::IntegrationTest def setup @tournament = Tournament.find(1) GenerateTournamentMatches.new(@tournament).generate end def createTournament(numberOfWrestlers) @id = 600 + numberOfWrestlers tournament = create_tournament create_school create_weight create_mat create_wrestlers(numberOfWrestlers) tournament end def create_tournament tournament = Tournament.new( id: @id, tournament_type: "Pool to bracket", name: "Something", address: "Some Place", director: "Some Guy", director_email: "test@test.com", date: Date.today ) tournament.save tournament end def create_school School.new( id: @id, name: "Shit Show", tournament_id: @id ).save! end def create_mat Mat.new( id: @id, name: "Mat 1", tournament_id: @id ).save! end def create_weight Weight.new( id: @id, tournament_id: @id, max: @id ).save! end def create_wrestlers(numberOfWrestlers) (1..numberOfWrestlers).each do |count| Wrestler.new( name: "Guy #{count}", school_id: @id, weight_id: @id, original_seed: count, season_loss: 0, season_win: 0, criteria: nil ).save! end end def checkForByeInPool(tournament) GenerateTournamentMatches.new(tournament).generate matchups = tournament.matches tournament.weights.each do |w| w.wrestlers.each do |wr| round = 1 if w.total_rounds(matchups) > 5 until round > w.pool_rounds(matchups) do if wr.bout_by_round(round) == "BYE" message = "BYE" end round += 1 end assert_equal "BYE", message message = nil end end end end test "found tournament" do refute_nil @tournament end test "tournament can be set to high school weight classes" do @tournament.weights.destroy_all @tournament.create_pre_defined_weights("hs") assert_equal Weight::HS_WEIGHT_CLASSES.size, @tournament.weights.size end test "tests bout numbers correspond to round" do matchup_to_test = @tournament.matches.select{|m| m.bout_number == 4000}.first assert_equal 4, matchup_to_test.round end test "tests bout_numbers are generated with smallest weight first regardless of id" do weight = @tournament.weights.order(:max).limit(1).first matchup = @tournament.matches.where(bout_number: 1000).limit(1).first assert_equal weight.max, matchup.weight.max end test "tests number of matches in 5 man one pool" do six_matches = @tournament.matches.select{|m| m.weight_max == 106} assert_equal 10, six_matches.length end test "tests number of matches in 11 man pool bracket" do twentysix_matches = @tournament.matches.select{|m| m.weight_max == 126} assert_equal 22, twentysix_matches.length end test "tests number of matches in 9 man pool bracket" do twentysix_matches = @tournament.matches.select{|m| m.weight_max == 113} assert_equal 18, twentysix_matches.length end test "tests number of matches in 7 man pool bracket" do twentysix_matches = @tournament.matches.select{|m| m.weight_max == 120} assert_equal 13, twentysix_matches.length end test "tests number of matches in 16 man pool bracket" do twentysix_matches = @tournament.matches.select{|m| m.weight_max == 132} assert_equal 32, twentysix_matches.length end test "test if a wrestler can exceed five matches" do (5...16).each do |count| tourney = createTournament(count) checkForByeInPool(tourney) end end test "test loser names for 16 man bracket 3/4th place match" do matches = @tournament.matches.where(weight_id: 5) semi_bouts = matches.where(bracket_position: 'Semis') third_fourth_match = matches.where(bracket_position: '3/4').first assert_equal "Loser of #{semi_bouts.first.bout_number}", third_fourth_match.loser1_name assert_equal "Loser of #{semi_bouts.second.bout_number}", third_fourth_match.loser2_name end test "test loser names for 16 man bracket 7/8th place match" do matches = @tournament.matches.where(weight_id: 5) conso_semi_bouts = matches.where(bracket_position: 'Conso Semis') seven_eight_match = matches.where(bracket_position: '7/8').first assert_equal "Loser of #{conso_semi_bouts.first.bout_number}", seven_eight_match.loser1_name assert_equal "Loser of #{conso_semi_bouts.second.bout_number}", seven_eight_match.loser2_name end test "test loser names for 16 man bracket semis" do matches = @tournament.matches.where(weight_id: 5) semi_bouts = matches.where(bracket_position: 'Semis') assert_equal "Winner Pool 1", semi_bouts.first.loser1_name assert_equal "Winner Pool 4", semi_bouts.first.loser2_name assert_equal "Winner Pool 2", semi_bouts.second.loser1_name assert_equal "Winner Pool 3", semi_bouts.second.loser2_name end test "test loser names for 16 man bracket conso semis" do matches = @tournament.matches.where(weight_id: 5) conso_semi_bouts = matches.where(bracket_position: 'Conso Semis') assert_equal "Runner Up Pool 1", conso_semi_bouts.first.loser1_name assert_equal "Runner Up Pool 4", conso_semi_bouts.first.loser2_name assert_equal "Runner Up Pool 2", conso_semi_bouts.second.loser1_name assert_equal "Runner Up Pool 3", conso_semi_bouts.second.loser2_name end test "test loser names for 11 man bracket 3/4th place match" do matches = @tournament.matches.where(weight_id: 4) semi_bouts = matches.where(bracket_position: 'Semis') third_fourth_match = matches.where(bracket_position: '3/4').first assert_equal "Loser of #{semi_bouts.first.bout_number}", third_fourth_match.loser1_name assert_equal "Loser of #{semi_bouts.second.bout_number}", third_fourth_match.loser2_name end test "test loser names for 11 man bracket 7/8th place match" do matches = @tournament.matches.where(weight_id: 4) conso_semi_bouts = matches.where(bracket_position: 'Conso Semis') seven_eight_match = matches.where(bracket_position: '7/8').first assert_equal "Loser of #{conso_semi_bouts.first.bout_number}", seven_eight_match.loser1_name assert_equal "Loser of #{conso_semi_bouts.second.bout_number}", seven_eight_match.loser2_name end test "test loser names for 11 man bracket quarters" do matches = @tournament.matches.where(weight_id: 4) quarters = matches.where(bracket_position: 'Quarter') assert_equal "Winner Pool 1", quarters.first.loser1_name assert_equal "Runner Up Pool 2", quarters.first.loser2_name assert_equal "Winner Pool 4", quarters.second.loser1_name assert_equal "Runner Up Pool 3", quarters.second.loser2_name assert_equal "Winner Pool 2", quarters.third.loser1_name assert_equal "Runner Up Pool 1", quarters.third.loser2_name assert_equal "Winner Pool 3", quarters.fourth.loser1_name assert_equal "Runner Up Pool 4", quarters.fourth.loser2_name end test "test loser names for 11 man bracket conso semis" do matches = @tournament.matches.where(weight_id: 4) quarters = matches.where(bracket_position: 'Quarter') conso_semi_bouts = matches.where(bracket_position: 'Conso Semis') assert_equal "Loser of #{quarters.first.bout_number}", conso_semi_bouts.first.loser1_name assert_equal "Loser of #{quarters.second.bout_number}", conso_semi_bouts.first.loser2_name assert_equal "Loser of #{quarters.third.bout_number}", conso_semi_bouts.second.loser1_name assert_equal "Loser of #{quarters.fourth.bout_number}", conso_semi_bouts.second.loser2_name end test "test loser names for 9 man bracket 3/4th place match" do matches = @tournament.matches.where(weight_id: 3) third_fourth_match = matches.where(bracket_position: '3/4').first assert_equal "Runner Up Pool 1", third_fourth_match.loser1_name assert_equal "Runner Up Pool 2", third_fourth_match.loser2_name end test "test loser names for 9 man bracket 1/2 place match" do matches = @tournament.matches.where(weight_id: 3) final_match = matches.where(bracket_position: '1/2').first assert_equal "Winner Pool 1", final_match.loser1_name assert_equal "Winner Pool 2", final_match.loser2_name end test "test loser names for 7 man bracket 3/4th place match" do matches = @tournament.matches.where(weight_id: 2) semi_bouts = matches.where(bracket_position: 'Semis') third_fourth_match = matches.where(bracket_position: '3/4').first assert_equal "Loser of #{semi_bouts.first.bout_number}", third_fourth_match.loser1_name assert_equal "Loser of #{semi_bouts.second.bout_number}", third_fourth_match.loser2_name end test "test loser names for 7 man bracket semis" do matches = @tournament.matches.where(weight_id: 2) semi_bouts = matches.where(bracket_position: 'Semis') assert_equal "Winner Pool 1", semi_bouts.first.loser1_name assert_equal "Runner Up Pool 2", semi_bouts.first.loser2_name assert_equal "Winner Pool 2", semi_bouts.second.loser1_name assert_equal "Runner Up Pool 1", semi_bouts.second.loser2_name end test 'test mat assignment after match generation' do matches = @tournament.matches.order(:bout_number) assert_equal 'Mat1', matches.first.mat.name end test "finals matches in last round" do lastRound = @tournament.total_rounds finalsMatches = @tournament.matches.select{|m| m.bracket_position == "1/2" || m.bracket_position == "3/4" || m.bracket_position == "5/6" || m.bracket_position == "7/8"} finalsMatches.each do |m| assert_equal lastRound, m.round end end test "Random seeding works" do weight = Weight.find(6) wrestlersWithoutSeed = weight.wrestlers.select{|w| w.bracket_line == nil }.size assert_equal 0, wrestlersWithoutSeed end end