Merge pull request #1334 from siddhantbajaj/DeleteEventSchedules

Fixed DeleteEventSchedules issue
This commit is contained in:
Ana María Martínez Gómez 2017-04-26 13:38:54 +02:00 committed by GitHub
commit 5be1ad52ee
5 changed files with 39 additions and 10 deletions

View file

@ -120,6 +120,10 @@ Metrics/ClassLength:
Exclude:
- 'app/models/conference.rb'
Metrics/BlockLength:
Exclude:
- 'spec/models/conference_spec.rb'
#################### Lint ###############################
# Wrap your assignment in condition if you mean it, otherwise it is most likely equality check

View file

@ -82,7 +82,6 @@ module Admin
short_title = @conference.short_title
@conference.assign_attributes(conference_params)
send_mail_on_conf_update = @conference.notify_on_dates_changed?
delete_event_schedules if @conference.start_hour_changed? || @conference.end_hour_changed?
if @conference.update_attributes(conference_params)
ConferenceDateUpdateMailJob.perform_later(@conference) if send_mail_on_conf_update
@ -189,14 +188,5 @@ module Admin
:targets, :targets_attributes,
:campaigns, :campaigns_attributes, :registration_limit)
end
def delete_event_schedules
event_schedules = EventSchedule.select do |e|
e.start_time.strftime('%H').to_i < @conference.start_hour ||
e.end_time.strftime('%H').to_i > @conference.end_hour ||
(e.end_time.strftime('%H').to_i == @conference.end_hour && e.end_time.strftime('%M').to_i > 0)
end
event_schedules.each(&:destroy)
end
end
end

View file

@ -67,6 +67,7 @@ class Conference < ActiveRecord::Base
before_create :create_email_settings
after_create :create_free_ticket
after_update :delete_event_schedules
##
# Checks if the user is registered to the conference
@ -80,6 +81,20 @@ class Conference < ActiveRecord::Base
user.present? && registrations.where(user_id: user.id).count > 0
end
##
# Delete all EventSchedules that are not in the hours range
# After the conference has been successfully updated
def delete_event_schedules
if start_hour_changed? || end_hour_changed?
event_schedules = program.event_schedules.select do |event_schedule|
event_schedule.start_time.hour < start_hour ||
event_schedule.end_time.hour > end_hour ||
(event_schedule.end_time.hour == end_hour && event_schedule.end_time.minute > 0)
end
event_schedules.each(&:destroy)
end
end
##
# Checks if the registration for the conference is currently open
#

View file

@ -10,6 +10,7 @@ class Program < ActiveRecord::Base
has_many :tracks, dependent: :destroy
has_many :difficulty_levels, dependent: :destroy
has_many :schedules, dependent: :destroy
has_many :event_schedules, through: :schedules
belongs_to :selected_schedule, class_name: 'Schedule'
has_many :events, dependent: :destroy do
def require_registration

View file

@ -1639,4 +1639,23 @@ describe Conference do
expect(free_ticket.price_cents).to eq(0)
end
end
describe 'after_update' do
let(:conference) { create(:conference) }
let(:scheduled_event_before_conference) { create(:event_scheduled, program: conference.program, hour: conference.start_date + conference.start_hour.hours) }
let(:scheduled_event_after_conference) { create(:event_scheduled, program: conference.program, hour: conference.start_date + conference.end_hour.hours - 1.hour) }
let!(:scheduled_event_during_conference) { create(:event_scheduled, program: conference.program, hour: conference.start_date + conference.start_hour.hours + 3.hours) }
it 'delete event schedules that are not in hour ranges, when conference start hour is updated' do
scheduled_event_before_conference
conference.start_hour = conference.start_hour + 1
expect{ conference.save }.to change{ EventSchedule.count }.from(2).to(1)
end
it 'delete event schedules that are not in hour ranges, when conference end hour is updated' do
scheduled_event_after_conference
conference.end_hour = conference.end_hour - 2
expect{ conference.save }.to change{ EventSchedule.count }.from(2).to(1)
end
end
end