mirror of
https://github.com/jcwimer/wrestlingApp
synced 2026-03-25 01:14:43 +00:00
221 lines
6.8 KiB
Ruby
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
|