1
0
mirror of https://github.com/jcwimer/wrestlingApp synced 2026-04-01 20:25:26 +00:00

Added mat assignment rules for the bout board and fixed the bug where a delegate making the tournamnet info public changes them to the owner

This commit is contained in:
2024-11-25 16:25:59 -05:00
parent bb548be81b
commit ad8e486205
19 changed files with 769 additions and 43 deletions

View File

@@ -0,0 +1,203 @@
require 'test_helper'
class MatAssignmentRulesControllerTest < ActionController::TestCase
include Devise::Test::ControllerHelpers
setup do
@tournament = tournaments(:one) # Existing fixture
@mat = mats(:one) # Existing fixture
end
# Controller actions for testing
def index
get :index, params: { tournament_id: @tournament.id }
end
def new
get :new, params: { tournament_id: @tournament.id }
end
def create_rule
post :create, params: { tournament_id: @tournament.id, mat_assignment_rule: {
mat_id: @mat.id, weight_classes: [1, 2, 3], bracket_positions: ['1/2'], rounds: [1, 2]
} }
end
def edit_rule(rule_id)
get :edit, params: { tournament_id: @tournament.id, id: rule_id }
end
def update_rule(rule_id)
patch :update, params: { tournament_id: @tournament.id, id: rule_id, mat_assignment_rule: {
weight_classes: [4, 5, 6]
} }
end
def destroy_rule(rule_id)
delete :destroy, params: { tournament_id: @tournament.id, id: rule_id }
end
# User sign-in helpers
def sign_in_owner
sign_in users(:one)
end
def sign_in_non_owner
sign_in users(:two)
end
def sign_in_tournament_delegate
sign_in users(:three)
end
def sign_in_school_delegate
sign_in users(:four)
end
# Assertion helpers
def success
assert_response :success
end
def redirect
assert_redirected_to '/static_pages/not_allowed'
end
# Tests
test "logged in tournament owner should get index" do
sign_in_owner
index
success
end
test "logged in tournament delegate should get index" do
sign_in_tournament_delegate
index
success
end
test "logged in user should not get index if not owner or delegate" do
sign_in_non_owner
index
redirect
end
test "logged school delegate should not get index" do
sign_in_school_delegate
index
redirect
end
test "logged in tournament owner should create a new rule" do
sign_in_owner
new
success
assert_difference 'MatAssignmentRule.count', 1 do
create_rule
end
assert_redirected_to tournament_mat_assignment_rules_path(@tournament)
end
test "logged in tournament delegate should create a new rule" do
sign_in_tournament_delegate
new
success
assert_difference 'MatAssignmentRule.count', 1 do
create_rule
end
assert_redirected_to tournament_mat_assignment_rules_path(@tournament)
end
test "logged in user should not create a rule if not owner or delegate" do
sign_in_non_owner
new
redirect
assert_no_difference 'MatAssignmentRule.count' do
create_rule
end
redirect
end
test "logged school delegate should not create a rule" do
sign_in_school_delegate
new
redirect
assert_no_difference 'MatAssignmentRule.count' do
create_rule
end
redirect
end
test "logged in tournament owner should edit a rule" do
rule = MatAssignmentRule.create!(mat_id: @mat.id, tournament_id: @tournament.id, weight_classes: [1, 2, 3])
sign_in_owner
edit_rule(rule.id)
success
end
test "logged in tournament delegate should edit a rule" do
rule = MatAssignmentRule.create!(mat_id: @mat.id, tournament_id: @tournament.id, weight_classes: [1, 2, 3])
sign_in_tournament_delegate
edit_rule(rule.id)
success
end
test "logged in user should not edit a rule if not owner or delegate" do
rule = MatAssignmentRule.create!(mat_id: @mat.id, tournament_id: @tournament.id, weight_classes: [1, 2, 3])
sign_in_non_owner
edit_rule(rule.id)
redirect
end
test "logged school delegate should not edit a rule" do
rule = MatAssignmentRule.create!(mat_id: @mat.id, tournament_id: @tournament.id, weight_classes: [1, 2, 3])
sign_in_school_delegate
edit_rule(rule.id)
redirect
end
test "logged in tournament owner should update a rule" do
rule = MatAssignmentRule.create!(mat_id: @mat.id, tournament_id: @tournament.id, weight_classes: [1, 2, 3])
sign_in_owner
update_rule(rule.id)
assert_redirected_to tournament_mat_assignment_rules_path(@tournament)
rule.reload
assert_equal [4, 5, 6], rule.weight_classes
end
test "logged in tournament delegate should update a rule" do
rule = MatAssignmentRule.create!(mat_id: @mat.id, tournament_id: @tournament.id, weight_classes: [1, 2, 3])
sign_in_tournament_delegate
update_rule(rule.id)
assert_redirected_to tournament_mat_assignment_rules_path(@tournament)
rule.reload
assert_equal [4, 5, 6], rule.weight_classes
end
test "logged in tournament owner should destroy a rule" do
rule = MatAssignmentRule.create!(mat_id: @mat.id, tournament_id: @tournament.id, weight_classes: [1, 2, 3])
sign_in_owner
assert_difference 'MatAssignmentRule.count', -1 do
destroy_rule(rule.id)
end
assert_redirected_to tournament_mat_assignment_rules_path(@tournament)
end
test "logged in tournament delegate should destroy a rule" do
rule = MatAssignmentRule.create!(mat_id: @mat.id, tournament_id: @tournament.id, weight_classes: [1, 2, 3])
sign_in_tournament_delegate
assert_difference 'MatAssignmentRule.count', -1 do
destroy_rule(rule.id)
end
assert_redirected_to tournament_mat_assignment_rules_path(@tournament)
end
test "logged in user should not destroy a rule if not owner or delegate" do
rule = MatAssignmentRule.create!(mat_id: @mat.id, tournament_id: @tournament.id, weight_classes: [1, 2, 3])
sign_in_non_owner
assert_no_difference 'MatAssignmentRule.count' do
destroy_rule(rule.id)
end
redirect
end
end

View File

@@ -648,4 +648,18 @@ class TournamentsControllerTest < ActionController::TestCase
post :calculate_team_scores, params: { id: 1 }
redirect
end
test "only owner can set user_id when creating a new tournament" do
# Sign in as owner and create a new tournament
sign_in_owner
post :create, params: { tournament: { name: 'New Tournament', address: '123 Main St', director: 'Director', director_email: 'director@example.com', date: '2024-01-01', tournament_type: 'Pool to bracket', is_public: false } }
new_tournament = Tournament.last
assert_equal users(:one).id, new_tournament.user_id, "The owner should be assigned as the user_id on creation"
# Sign in as non-owner and try to update the tournament without changing user_id
sign_in_non_owner
patch :update, params: { id: new_tournament.id, tournament: { name: 'Updated Tournament', is_public: true } }
updated_tournament = Tournament.find(new_tournament.id)
assert_equal users(:one).id, updated_tournament.user_id, "The user_id should not change when the tournament is edited by a non-owner"
end
end