1
0
mirror of https://github.com/jcwimer/wrestlingApp synced 2026-03-25 01:14:43 +00:00
Files
wrestlingdev.com/test/controllers/tournament_backups_controller_test.rb

221 lines
6.8 KiB
Ruby

require "test_helper"
class TournamentBackupsControllerTest < ActionController::TestCase
include Devise::Test::ControllerHelpers
setup do
@tournament = Tournament.find(1)
TournamentBackupService.new(@tournament, 'Manual backup').create_backup
@backup = @tournament.tournament_backups.first
end
def sign_in_owner
sign_in users(:one)
end
def sign_in_non_owner
sign_in users(:two)
end
def sign_in_delegate
sign_in users(:three)
end
def sign_in_school_delegate
sign_in users(:four)
end
def success
assert_response :success
end
def redirect
assert_redirected_to '/static_pages/not_allowed'
end
# Index endpoint tests
test "logged in tournament owner can access index" do
sign_in_owner
get :index, params: { tournament_id: @tournament.id }
assert_response :success
end
test "logged in delegate can access index" do
sign_in_delegate
get :index, params: { tournament_id: @tournament.id }
assert_response :success
end
test "non-tournament owner cannot access index" do
sign_in_non_owner
get :index, params: { tournament_id: @tournament.id }
redirect
end
test "school delegate cannot access index" do
sign_in_school_delegate
get :index, params: { tournament_id: @tournament.id }
redirect
end
# Show endpoint tests
test "tournament owner can view a backup" do
sign_in_owner
get :show, params: { tournament_id: @tournament.id, id: @backup.id }
assert_response :success
end
test "delegate can view a backup" do
sign_in_delegate
get :show, params: { tournament_id: @tournament.id, id: @backup.id }
assert_response :success
end
test "non-tournament owner cannot view a backup" do
sign_in_non_owner
get :show, params: { tournament_id: @tournament.id, id: @backup.id }
redirect
end
test "school delegate cannot view a backup" do
sign_in_school_delegate
get :show, params: { tournament_id: @tournament.id, id: @backup.id }
redirect
end
# Destroy endpoint tests
test "tournament owner can delete a backup" do
sign_in_owner
assert_difference("TournamentBackup.count", -1) do
delete :destroy, params: { tournament_id: @tournament.id, id: @backup.id }
end
assert_redirected_to tournament_tournament_backups_path(@tournament)
end
test "delegate can delete a backup" do
sign_in_delegate
assert_difference("TournamentBackup.count", -1) do
delete :destroy, params: { tournament_id: @tournament.id, id: @backup.id }
end
assert_redirected_to tournament_tournament_backups_path(@tournament)
end
test "non-tournament owner cannot delete a backup" do
sign_in_non_owner
assert_no_difference("TournamentBackup.count") do
delete :destroy, params: { tournament_id: @tournament.id, id: @backup.id }
end
redirect
end
test "school delegate cannot delete a backup" do
sign_in_school_delegate
assert_no_difference("TournamentBackup.count") do
delete :destroy, params: { tournament_id: @tournament.id, id: @backup.id }
end
redirect
end
# Restore endpoint tests
test "tournament owner can restore a backup" do
sign_in_owner
post :restore, params: { tournament_id: @tournament.id, id: @backup.id }
assert_redirected_to tournament_path(@tournament)
end
test "delegate can restore a backup" do
sign_in_delegate
post :restore, params: { tournament_id: @tournament.id, id: @backup.id }
assert_redirected_to tournament_path(@tournament)
end
test "non-tournament owner cannot restore a backup" do
sign_in_non_owner
post :restore, params: { tournament_id: @tournament.id, id: @backup.id }
redirect
end
test "school delegate cannot restore a backup" do
sign_in_school_delegate
post :restore, params: { tournament_id: @tournament.id, id: @backup.id }
redirect
end
# Import manual tests
test "tournament owner can manually import a backup" do
sign_in_owner
post :import_manual, params: { tournament_id: @tournament.id, tournament: { import_text: Base64.decode64(@backup.backup_data) } }
assert_redirected_to tournament_path(@tournament)
end
test "delegate can manually import a backup" do
sign_in_delegate
post :import_manual, params: { tournament_id: @tournament.id, tournament: { import_text: Base64.decode64(@backup.backup_data) } }
assert_redirected_to tournament_path(@tournament)
end
test "non-tournament owner cannot manually import a backup" do
sign_in_non_owner
post :import_manual, params: { tournament_id: @tournament.id, tournament: { import_text: Base64.decode64(@backup.backup_data) } }
redirect
end
test "school delegate cannot manually import a backup" do
sign_in_school_delegate
post :import_manual, params: { tournament_id: @tournament.id, tournament: { import_text: Base64.decode64(@backup.backup_data) } }
redirect
end
test "index shows empty list when no backups exist" do
@tournament.tournament_backups.destroy_all
sign_in_owner
get :index, params: { tournament_id: @tournament.id }
assert_response :success
assert_select 'tbody tr', 0 # Ensure no rows are rendered in the table
end
test "show action for non-existent backup" do
sign_in_owner
assert_raises(ActiveRecord::RecordNotFound) do
get :show, params: { tournament_id: @tournament.id, id: 9999 } # Use a non-existent backup ID
end
end
test "destroy action for non-existent backup" do
sign_in_owner
assert_no_difference("TournamentBackup.count") do
assert_raises(ActiveRecord::RecordNotFound) do
delete :destroy, params: { tournament_id: @tournament.id, id: 9999 } # Use a non-existent backup ID
end
end
end
test "restore action for non-existent backup" do
sign_in_owner
assert_raises(ActiveRecord::RecordNotFound) do
post :restore, params: { tournament_id: @tournament.id, id: 9999 } # Use a non-existent backup ID
end
end
test "manual import with blank input" do
sign_in_owner
post :import_manual, params: { tournament_id: @tournament.id, tournament: { import_text: '' } }
assert_redirected_to tournament_tournament_backups_path(@tournament)
assert_equal 'Import text cannot be blank.', flash[:alert]
end
test "manual import restores associations" do
schools_count = @tournament.schools.count
wrestlers_count = @tournament.wrestlers.count
matches_count = @tournament.matches.count
sign_in_owner
valid_backup_data = Base64.decode64(@backup.backup_data)
post :import_manual, params: { tournament_id: @tournament.id, tournament: { import_text: valid_backup_data } }
@tournament.reload
assert_equal schools_count, @tournament.schools.count
assert_equal wrestlers_count, @tournament.wrestlers.count
assert_equal matches_count, @tournament.matches.count
end
end