VRFS-3276 : Add a delete-calendar directive when RSVP is canceled.

This commit is contained in:
Steven Miers 2015-07-02 11:19:26 -05:00
parent bd23b28cd0
commit 3ff5910f1f
5 changed files with 34 additions and 8 deletions

View File

@ -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,

View File

@ -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,

View File

@ -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]

View File

@ -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

View File

@ -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)