VRFS-3276 : Add a delete-calendar directive when RSVP is canceled.
This commit is contained in:
parent
bd23b28cd0
commit
3ff5910f1f
|
|
@ -1,6 +1,7 @@
|
|||
CREATE TABLE calendars (
|
||||
id VARCHAR(64) PRIMARY KEY DEFAULT uuid_generate_v4() NOT NULL,
|
||||
user_id VARCHAR(64) NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
target_uid VARCHAR(64) NOT NULL,
|
||||
name VARCHAR(128),
|
||||
description VARCHAR(8000),
|
||||
trigger_delete BOOLEAN DEFAULT FALSE,
|
||||
|
|
|
|||
|
|
@ -6,6 +6,19 @@ module JamRuby
|
|||
@log = Logging.logger[self]
|
||||
end
|
||||
|
||||
def cancel_ics_event(music_session, user)
|
||||
Calendar.where(
|
||||
user_id: user.id,
|
||||
target_uid: music_session.id,
|
||||
name: music_session.description)
|
||||
.first_or_create(
|
||||
description: music_session.description,
|
||||
start_at: music_session.scheduled_start,
|
||||
end_at: music_session.scheduled_start+music_session.safe_scheduled_duration,
|
||||
trigger_delete: true)
|
||||
|
||||
end
|
||||
|
||||
# @return event (as ICS string) for a given music session
|
||||
def ics_event_from_music_session(music_session, delete=false)
|
||||
# Determine properties of calendar event and create:
|
||||
|
|
@ -29,7 +42,7 @@ module JamRuby
|
|||
end
|
||||
|
||||
create_ics_event(
|
||||
calendar.id,
|
||||
calendar.target_uid,
|
||||
"JamKazam Session #{calendar.name}",
|
||||
calendar.description,
|
||||
calendar.start_at,
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ module JamRuby
|
|||
class Calendar < ActiveRecord::Base
|
||||
include HtmlSanitize
|
||||
html_sanitize strict: [:name, :description]
|
||||
attr_accessible :name, :description, :trigger_delete, :start_at, :end_at
|
||||
attr_accessible :name, :description, :target_uid, :trigger_delete, :start_at, :end_at
|
||||
|
||||
@@log = Logging.logger[Calendar]
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ module JamRuby
|
|||
validates :user, presence: true
|
||||
validates :canceled, :inclusion => {:in => [nil, true, false]}
|
||||
validate :creator_rsvp_cancel
|
||||
before_save :cancel_calendar
|
||||
|
||||
# pulls all instruments from the associated rsvp_slots
|
||||
def instrument_list
|
||||
|
|
@ -305,6 +306,15 @@ module JamRuby
|
|||
errors.add(:canceled, "can't be canceled by the session organizer")
|
||||
end
|
||||
end
|
||||
|
||||
def cancel_calendar
|
||||
calendar_manager = CalendarManager.new
|
||||
if self.canceled
|
||||
self.rsvp_slots.each do |slot|
|
||||
calendar_manager.cancel_ics_event(slot.music_session, user)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
|||
|
|
@ -30,10 +30,10 @@ describe RsvpRequest do
|
|||
|
||||
@slot1 = FactoryGirl.build(:rsvp_slot, :music_session => @music_session, :instrument => JamRuby::Instrument.find('electric guitar'))
|
||||
@slot1.save
|
||||
|
||||
|
||||
@slot2 = FactoryGirl.build(:rsvp_slot, :music_session => @music_session, :instrument => JamRuby::Instrument.find('drums'))
|
||||
@slot2.save
|
||||
|
||||
|
||||
@invitation = FactoryGirl.build(:invitation, :sender => @session_creator, :receiver => @session_invitee, :music_session => @music_session)
|
||||
@invitation.save
|
||||
end
|
||||
|
|
@ -53,12 +53,12 @@ describe RsvpRequest do
|
|||
@music_session.save
|
||||
|
||||
RsvpRequest.create({:session_id => @music_session.id, :rsvp_slots => [@slot1.id, @slot2.id]}, @non_session_invitee)
|
||||
expect {RsvpRequest.create({:session_id => @music_session.id, :rsvp_slots => [@slot1.id, @slot2.id]}, @non_session_invitee)}.to raise_error(JamRuby::StateError)
|
||||
expect {RsvpRequest.create({:session_id => @music_session.id, :rsvp_slots => [@slot1.id, @slot2.id]}, @non_session_invitee)}.to raise_error(JamRuby::StateError)
|
||||
end
|
||||
|
||||
it "should allow invitee to RSVP to session with closed RSVPs" do
|
||||
rsvp = RsvpRequest.create({:session_id => @music_session.id, :rsvp_slots => [@slot1.id, @slot2.id], :message => "We be jammin!"}, @session_invitee)
|
||||
|
||||
|
||||
# verify comment
|
||||
comment = SessionInfoComment.find_by_creator_id(@session_invitee)
|
||||
comment.comment.should == "We be jammin!"
|
||||
|
|
@ -373,12 +373,14 @@ describe RsvpRequest do
|
|||
comment = SessionInfoComment.find_by_creator_id(@session_invitee)
|
||||
comment.comment.should == "Let's Jam!"
|
||||
|
||||
# cancel
|
||||
expect {RsvpRequest.cancel({:id => rsvp.id, :session_id => @music_session.id, :cancelled => "all", :message => "Sorry, I'm bailing for all sessions"}, @session_invitee)}.to_not raise_error
|
||||
calendar_count = Calendar.find(:all).count
|
||||
|
||||
# cancel & check that calendar has been added:
|
||||
expect {RsvpRequest.cancel({:id => rsvp.id, :session_id => @music_session.id, :cancelled => "all", :message => "Sorry, I'm bailing for all sessions"}, @session_invitee)}.to_not raise_error
|
||||
rsvp = RsvpRequest.find_by_id(rsvp.id)
|
||||
rsvp.canceled.should == true
|
||||
rsvp.cancel_all.should == true
|
||||
(Calendar.find(:all).count - calendar_count).should eq(1)
|
||||
|
||||
# verify comment
|
||||
comment = SessionInfoComment.find_by_creator_id(@session_invitee)
|
||||
|
|
|
|||
Loading…
Reference in New Issue