Skip to content

Commit

Permalink
Fixed bug with event registration mass update
Browse files Browse the repository at this point in the history
  • Loading branch information
abhisek committed Mar 7, 2020
1 parent 3849092 commit 4b169d5
Show file tree
Hide file tree
Showing 4 changed files with 82 additions and 26 deletions.
17 changes: 15 additions & 2 deletions app/controllers/leads/event_registrations_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,27 @@ def index
def mass_update
@event_registrations = @event.event_registrations

errors = []
if params[:token] == form_authenticity_token
params[:event_registrations].each do |event_registration|
@event_registrations.find(event_registration[:id]).set_state!(event_registration[:state]) rescue nil # Lets avoid raising on invalid states
begin
@event_registrations.find(event_registration[:id]).set_state!(event_registration[:state])
rescue => e
errors << {
registration_id: event_registration[:id],
error_message: e.message
}
end
end
end

respond_to do |format|
format.json { render :json => {'status' => 'OK'} }
if errors.any?
format.json { render :json => {'status' => 'OK'} }
else
# Some or all have raised error
format.json { render :json => {'status' => 'FAILED', 'errors' => errors } }
end
end
end

Expand Down
26 changes: 4 additions & 22 deletions app/models/event_registration.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,8 @@ class EventRegistration < ActiveRecord::Base

validates :event, :user, :presence => true
validates :user_id, :uniqueness => { :scope => [:event_id], :message => 'has already registered for the event' }
validate :registration_validator
validate :new_registration_validator, :if => :new_record?

#before_create :set_acceptance! # DEPRECATED
before_create :set_default_state!

STATE_PROVISIONAL = "Provisional"
Expand Down Expand Up @@ -55,17 +54,6 @@ def confirmed?
self.state == STATE_CONFIRMED
end

# DEPRECATED
# def accepted!
# self.accepted = true
# self.save!
# end

# def rejected!
# self.accepted = false
# self.save!
# end

private

def set_default_state!
Expand All @@ -76,14 +64,8 @@ def set_default_state!
end
end

# By default we set acceptance for non invite only events
# DEPRECATED
# def set_acceptance!
# self.accepted = !self.event.invite_only?
# true # This is required else record won't be saved if false is returned
# end

def registration_validator
errors.add(:event, "registration not allowed") unless event.registration_allowed? and event.registration_active?
def new_registration_validator
errors.add(:event, "is not allowed") if !event.registration_allowed?
errors.add(:event, "is not active") if !event.registration_active?
end
end
4 changes: 2 additions & 2 deletions app/views/leads/event_registrations/index.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,6 @@


$('#export_report').click(function() {
$('.table2excel').TableCSVExport();
});
$('.table2excel').TableCSVExport();
});
</script>
61 changes: 61 additions & 0 deletions test/unit/event_registration_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,65 @@ class EventRegistrationTest < ActiveSupport::TestCase
# This is where upgrade triggered regression
assert e.visible_registrations.includes(:user).to_a.slice!(0, 1000).count > 0
end

test "test registration validation" do
e = events(:two)
u = ::User.first

# Force update bypassing validation
assert e.update_column(:registration_end_time, Time.now - 1.day)

er = e.event_registrations.new
er.visible = true
er.event = e
er.user = u

assert_not er.save

# Force reload due to update_column
e.reload

e.start_time = Time.now + 10.day
e.registration_start_time = Time.now + 1.day
e.registration_end_time = Time.now + 3.days
e.max_registration = 1

assert e.save

u = ::User.second
er = e.event_registrations.new
er.visible = true
er.event = e
er.user = u

assert_not e.save
end

test "event registration state update" do
e = events(:two)
u = ::User.first

er = e.event_registrations.new
er.visible = true
er.event = e
er.user = u

assert er.save

assert_nothing_raised do
er.set_state!('Confirmed')
end

assert_raise do
er.set_state!('Confirmed-INVALID')
end

e.max_registration = 1
e.start_time = Time.now + 1.days
assert e.save

assert_nothing_raised do
er.set_state!('Provisional')
end
end
end

0 comments on commit 4b169d5

Please sign in to comment.