Skip to content

Commit f79c151

Browse files
authored
v3 nits: Competition argument in validate_update and event_ids.nil check (#10161)
* moved event_ids present check * event changes and bulk update changes * removed competition id from requests in bulk update * rubocop * fixing request tests
1 parent 3ca0c3c commit f79c151

File tree

6 files changed

+98
-95
lines changed

6 files changed

+98
-95
lines changed

app/controllers/api/v1/registrations/registrations_controller.rb

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,21 +60,24 @@ def validate_create_request
6060

6161
def update
6262
if params[:competing]
63-
updated_registration = Registrations::Lanes::Competing.update!(params, @current_user.id)
63+
updated_registration = Registrations::Lanes::Competing.update!(params, @competition, @current_user.id)
6464
return render json: { status: 'ok', registration: updated_registration.to_v2_json(admin: true, history: true) }, status: :ok
6565
end
6666
render json: { status: 'bad request', message: 'You need to supply at least one lane' }, status: :bad_request
6767
end
6868

6969
def validate_update_request
70-
Registrations::RegistrationChecker.update_registration_allowed!(params, @current_user)
70+
@competition = Competition.find(params[:competition_id])
71+
Registrations::RegistrationChecker.update_registration_allowed!(params, @competition, @current_user)
7172
end
7273

7374
def bulk_update
7475
updated_registrations = {}
7576
update_requests = params[:requests]
77+
competition = Competition.find(params[:competition_id])
78+
7679
update_requests.each do |update|
77-
updated_registrations[update['user_id']] = Registrations::Lanes::Competing.update!(update, @current_user)
80+
updated_registrations[update['user_id']] = Registrations::Lanes::Competing.update!(update, competition, @current_user)
7881
end
7982

8083
render json: { status: 'ok', updated_registrations: updated_registrations }

app/models/competition.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,7 @@ def main_event
400400
end
401401

402402
def events_held?(desired_event_ids)
403-
desired_event_ids.present? && (desired_event_ids & self.event_ids) == desired_event_ids
403+
(desired_event_ids & self.event_ids) == desired_event_ids
404404
end
405405

406406
def enforces_qualifications?

lib/registrations/lanes/competing.rb

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,16 @@ def self.process!(lane_params, user_id, competition_id)
1919
registration.add_history_entry(changes, "worker", user_id, "Worker processed")
2020
end
2121

22-
def self.update!(update_params, current_user_id)
22+
def self.update!(update_params, competition, current_user_id)
2323
guests = update_params[:guests]
2424
status = update_params.dig('competing', 'status')
2525
comment = update_params.dig('competing', 'comment')
2626
event_ids = update_params.dig('competing', 'event_ids')
2727
admin_comment = update_params.dig('competing', 'admin_comment')
2828
waiting_list_position = update_params.dig('competing', 'waiting_list_position')
2929
user_id = update_params[:user_id]
30-
competition_id = update_params[:competition_id]
3130

32-
registration = Registration.find_by(competition_id: competition_id, user_id: user_id)
31+
registration = Registration.find_by(competition_id: competition.id, user_id: user_id)
3332
old_status = registration.competing_status
3433

3534
if old_status == Registrations::Helper::STATUS_WAITING_LIST || status == Registrations::Helper::STATUS_WAITING_LIST

lib/registrations/registration_checker.rb

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,11 @@ def self.create_registration_allowed!(registration_request, current_user)
1515
validate_comment!(registration_request.dig('competing', 'comment'), competition)
1616
end
1717

18-
def self.update_registration_allowed!(update_request, current_user)
19-
registration = Registration.find_by(competition_id: update_request['competition_id'], user_id: update_request['user_id'])
18+
def self.update_registration_allowed!(update_request, competition, current_user)
19+
registration = Registration.find_by(competition_id: competition.id, user_id: update_request['user_id'])
2020
raise WcaExceptions::RegistrationError.new(:not_found, Registrations::ErrorCodes::REGISTRATION_NOT_FOUND) unless registration.present?
2121

2222
target_user = User.find(update_request['user_id'])
23-
competition = Competition.find(update_request['competition_id'])
2423
waiting_list_position = update_request.dig('competing', 'waiting_list_position')
2524
comment = update_request.dig('competing', 'comment')
2625
guests = update_request['guests']
@@ -49,7 +48,7 @@ def self.bulk_update_allowed!(bulk_update_request, current_user)
4948

5049
errors = {}
5150
bulk_update_request['requests'].each do |update_request|
52-
update_registration_allowed!(update_request, current_user)
51+
update_registration_allowed!(update_request, competition, current_user)
5352
rescue WcaExceptions::RegistrationError => e
5453
errors[update_request['user_id']] = e.error
5554
end
@@ -98,7 +97,8 @@ def can_administer_or_current_user?(competition, current_user, target_user)
9897
def validate_create_events!(request, competition)
9998
event_ids = request['competing']['event_ids']
10099
# Event submitted must be held at the competition
101-
raise WcaExceptions::RegistrationError.new(:unprocessable_entity, Registrations::ErrorCodes::INVALID_EVENT_SELECTION) unless competition.events_held?(event_ids)
100+
raise WcaExceptions::RegistrationError.new(:unprocessable_entity, Registrations::ErrorCodes::INVALID_EVENT_SELECTION) unless
101+
event_ids.present? && competition.events_held?(event_ids)
102102

103103
event_limit = competition.events_per_registration_limit
104104
raise WcaExceptions::RegistrationError.new(:forbidden, Registrations::ErrorCodes::INVALID_EVENT_SELECTION) if event_limit.present? && event_ids.count > event_limit
@@ -197,7 +197,8 @@ def validate_update_status!(new_status, competition, current_user, target_user,
197197
end
198198

199199
def validate_update_events!(event_ids, competition)
200-
raise WcaExceptions::RegistrationError.new(:unprocessable_entity, Registrations::ErrorCodes::INVALID_EVENT_SELECTION) unless competition.events_held?(event_ids)
200+
raise WcaExceptions::RegistrationError.new(:unprocessable_entity, Registrations::ErrorCodes::INVALID_EVENT_SELECTION) unless
201+
event_ids.present? && competition.events_held?(event_ids)
201202

202203
event_limit = competition.events_per_registration_limit
203204
raise WcaExceptions::RegistrationError.new(:forbidden, Registrations::ErrorCodes::INVALID_EVENT_SELECTION) if event_limit.present? && event_ids.count > event_limit

spec/factories/registration_request_factory.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
submitted_by { other_user.id }
7272
end
7373

74-
initialize_with { attributes.stringify_keys }
74+
initialize_with { attributes.compact.stringify_keys }
7575

7676
after(:build) do |instance, evaluator|
7777
instance['guests'] = evaluator.guests if evaluator.guests
@@ -90,7 +90,7 @@
9090

9191
requests do
9292
user_ids.map do |user_id|
93-
FactoryBot.build(:update_request, user_id: user_id, competition_id: competition_id, competing: { 'status' => 'deleted' })
93+
FactoryBot.build(:update_request, user_id: user_id, competing: { 'status' => 'deleted' })
9494
end
9595
end
9696

0 commit comments

Comments
 (0)