From 8072e31b3031d805589911579e6989bf55c64fc3 Mon Sep 17 00:00:00 2001 From: Duncan Date: Tue, 29 Oct 2024 08:07:26 +0200 Subject: [PATCH 1/4] handle case where no competitor limit is set --- app/services/registration_checker.rb | 3 ++- spec/services/registration_checker_spec.rb | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/app/services/registration_checker.rb b/app/services/registration_checker.rb index d49cc1bc..9faae9fb 100644 --- a/app/services/registration_checker.rb +++ b/app/services/registration_checker.rb @@ -173,7 +173,8 @@ def validate_update_status! raise RegistrationError.new(:unprocessable_entity, ErrorCodes::INVALID_REQUEST_DATA) unless Registration::REGISTRATION_STATES.include?(new_status) raise RegistrationError.new(:forbidden, ErrorCodes::COMPETITOR_LIMIT_REACHED) if - new_status == 'accepted' && Registration.accepted_competitors_count(@competition_info.competition_id) == @competition_info.competitor_limit + new_status == 'accepted' && Registration.accepted_competitors_count(@competition_info.competition_id) == @competition_info.competitor_limit && + @competition_info.competitor_limit != 0 raise RegistrationError.new(:forbidden, ErrorCodes::ALREADY_REGISTERED_IN_SERIES) if new_status == 'accepted' && existing_registration_in_series? diff --git a/spec/services/registration_checker_spec.rb b/spec/services/registration_checker_spec.rb index f1262875..0c02fc39 100644 --- a/spec/services/registration_checker_spec.rb +++ b/spec/services/registration_checker_spec.rb @@ -1104,6 +1104,15 @@ .not_to raise_error end + it 'organizer can accept registrations if there is no limit' do + registration = FactoryBot.create(:registration, registration_status: 'pending') + competition_info = CompetitionInfo.new(FactoryBot.build(:competition, competitor_limit: 0)) + update_request = FactoryBot.build(:update_request, :organizer_for_user, user_id: registration[:user_id], competing: { 'status' => 'accepted' }) + + expect { RegistrationChecker.update_registration_allowed!(update_request, competition_info, update_request['submitted_by']) } + .not_to raise_error + end + it 'user can change state to cancelled' do override_registration = FactoryBot.create(:registration, user_id: 188000, registration_status: 'waiting_list') update_request = FactoryBot.build(:update_request, user_id: override_registration[:user_id], competing: { 'status' => 'cancelled' }) From a805b44715a5e94d99229060a9cad055e27366e7 Mon Sep 17 00:00:00 2001 From: Duncan Date: Tue, 29 Oct 2024 08:20:25 +0200 Subject: [PATCH 2/4] rubocop --- lib/competition_info.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/competition_info.rb b/lib/competition_info.rb index 47b944f0..301c2c7b 100644 --- a/lib/competition_info.rb +++ b/lib/competition_info.rb @@ -45,7 +45,7 @@ def guest_limit end def registration_open? - @competition_json['registration_open'] <= Time.now && @competition_json['registration_close'] > Time.now + @competition_json['registration_open'] <= Time.now.utc && @competition_json['registration_close'] > Time.now.utc end def using_wca_payment? From 6830deeee42e8b190912823442906a1a405477c2 Mon Sep 17 00:00:00 2001 From: Duncan Date: Tue, 29 Oct 2024 09:28:14 +0200 Subject: [PATCH 3/4] simplification and shifting compeitor limit check --- app/services/registration_checker.rb | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/services/registration_checker.rb b/app/services/registration_checker.rb index 9faae9fb..3c9b50df 100644 --- a/app/services/registration_checker.rb +++ b/app/services/registration_checker.rb @@ -172,9 +172,12 @@ def validate_update_status! current_status = @registration.competing_status raise RegistrationError.new(:unprocessable_entity, ErrorCodes::INVALID_REQUEST_DATA) unless Registration::REGISTRATION_STATES.include?(new_status) + + competitor_limit = @competition_info.competitor_limit + accepted_competitors = Registration.accepted_competitors_count(@competition_info.competition_id) raise RegistrationError.new(:forbidden, ErrorCodes::COMPETITOR_LIMIT_REACHED) if - new_status == 'accepted' && Registration.accepted_competitors_count(@competition_info.competition_id) == @competition_info.competitor_limit && - @competition_info.competitor_limit != 0 + new_status == 'accepted' && competitor_limit > 0 && accepted_competitors == competitor_limit + raise RegistrationError.new(:forbidden, ErrorCodes::ALREADY_REGISTERED_IN_SERIES) if new_status == 'accepted' && existing_registration_in_series? From 76763e77ff4afbc0f191165e0510505789249cfa Mon Sep 17 00:00:00 2001 From: Duncan Date: Tue, 29 Oct 2024 09:38:08 +0200 Subject: [PATCH 4/4] not assigning the competitor count separately like a fool --- app/services/registration_checker.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/services/registration_checker.rb b/app/services/registration_checker.rb index 3c9b50df..09f4d084 100644 --- a/app/services/registration_checker.rb +++ b/app/services/registration_checker.rb @@ -174,9 +174,8 @@ def validate_update_status! raise RegistrationError.new(:unprocessable_entity, ErrorCodes::INVALID_REQUEST_DATA) unless Registration::REGISTRATION_STATES.include?(new_status) competitor_limit = @competition_info.competitor_limit - accepted_competitors = Registration.accepted_competitors_count(@competition_info.competition_id) raise RegistrationError.new(:forbidden, ErrorCodes::COMPETITOR_LIMIT_REACHED) if - new_status == 'accepted' && competitor_limit > 0 && accepted_competitors == competitor_limit + new_status == 'accepted' && competitor_limit > 0 && Registration.accepted_competitors_count(@competition_info.competition_id) >= competitor_limit raise RegistrationError.new(:forbidden, ErrorCodes::ALREADY_REGISTERED_IN_SERIES) if new_status == 'accepted' && existing_registration_in_series?