diff --git a/app/models/match.rb b/app/models/match.rb index 9e1fdee..1f18b3b 100644 --- a/app/models/match.rb +++ b/app/models/match.rb @@ -5,7 +5,13 @@ class Match < ApplicationRecord has_many :wrestlers, :through => :weight has_many :schools, :through => :wrestlers validate :score_validation, :win_type_validation, :bracket_position_validation, :overtime_type_validation - after_update :after_finished_actions, :if => :saved_change_to_finished? or :saved_change_to_winner_id? or :saved_change_to_win_type? or :saved_change_to_score? + after_update :after_finished_actions, if: -> { + saved_change_to_finished? || + saved_change_to_winner_id? || + saved_change_to_win_type? || + saved_change_to_score? || + saved_change_to_overtime_type? + } def after_finished_actions if self.w1 @@ -14,7 +20,7 @@ class Match < ApplicationRecord if self.w2 wrestler2.touch end - if self.finished == 1 && self.winner_id != nil + if self.reload.finished == 1 && self.reload.winner_id != nil if self.mat self.mat.assign_next_match end diff --git a/test/integration/fix_match_winner_test.rb b/test/integration/fix_match_winner_test.rb new file mode 100644 index 0000000..d754367 --- /dev/null +++ b/test/integration/fix_match_winner_test.rb @@ -0,0 +1,74 @@ +require 'test_helper' + +class FixMatchWinner < ActionDispatch::IntegrationTest + def setup + end + + def winner_by_name(winner_name,match) + wrestler = @tournament.weights.first.wrestlers.select{|w| w.name == winner_name}.first + match.winner_id = wrestler.id + match.finished = 1 + match.win_type = "Decision" + match.score = "1-0" + match.save + end + + test "Double elimination advance wrestler should run if the winner changes" do + create_double_elim_tournament_single_weight(4, "Regular Double Elimination 1-8") + + round1 = @tournament.reload.matches.select{|m| m.round == 1} + winner_by_name("Test1", round1.select{|m| m.bracket_position_number == 1}.first) + winner_by_name("Test2", round1.select{|m| m.bracket_position_number == 2}.first) + + round1 = @tournament.reload.matches.select{|m| m.round == 1} + winner_by_name("Test4", round1.select{|m| m.bracket_position_number == 1}.first) + + first_finals = @tournament.reload.matches.select{|m| m.bracket_position == "1/2"}.first + third_finals = @tournament.reload.matches.select{|m| m.bracket_position == "3/4"}.first + + assert first_finals.wrestler1.name == "Test4" + assert first_finals.wrestler2.name == "Test2" + + assert third_finals.wrestler1.name == "Test1" + assert third_finals.wrestler2.name == "Test3" + end + + test "Pool to bracket pool order should run if the winner changes" do + create_pool_tournament_single_weight(6) + + 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(match_wrestler_vs("Test2","Test3"),"Test2") + end_match(match_wrestler_vs("Test2","Test4"),"Test2") + 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") + + assert Wrestler.find(translate_name_to_id("Test1")).pool_placement == 1 + assert Wrestler.find(translate_name_to_id("Test2")).pool_placement == 2 + assert Wrestler.find(translate_name_to_id("Test3")).pool_placement == 3 + assert Wrestler.find(translate_name_to_id("Test4")).pool_placement == 4 + assert Wrestler.find(translate_name_to_id("Test5")).pool_placement == 5 + assert Wrestler.find(translate_name_to_id("Test6")).pool_placement == 6 + + end_match(match_wrestler_vs("Test1","Test2"),"Test2") + assert Wrestler.find(translate_name_to_id("Test2")).pool_placement == 1 + assert Wrestler.find(translate_name_to_id("Test1")).pool_placement == 2 + assert Wrestler.find(translate_name_to_id("Test3")).pool_placement == 3 + assert Wrestler.find(translate_name_to_id("Test4")).pool_placement == 4 + assert Wrestler.find(translate_name_to_id("Test5")).pool_placement == 5 + assert Wrestler.find(translate_name_to_id("Test6")).pool_placement == 6 + end +end \ No newline at end of file