VRFS-1692 cancel RSVP complete

This commit is contained in:
Brian Smith 2014-05-22 00:40:17 -04:00
parent 176e862338
commit 0e419a7881
7 changed files with 57 additions and 20 deletions

View File

@ -158,4 +158,5 @@ music_notation.sql
music_session_recurring_mode.sql music_session_recurring_mode.sql
add_timezone_music_session.sql add_timezone_music_session.sql
scheduled_sessions_2.sql scheduled_sessions_2.sql
scheduled_sessions_3.sql scheduled_sessions_3.sql
scheduled_sessions_cancel_all.sql

View File

@ -0,0 +1 @@
alter table rsvp_requests add column cancel_all BOOLEAN DEFAULT FALSE;

View File

@ -181,15 +181,42 @@ module JamRuby
end end
end end
def self.cancel(rsvp_request, music_session, user, message) def self.cancel(params, user)
if params[:id].blank?
raise StateError, "RSVP request ID is required."
end
if params[:session_id].blank?
raise StateError, "Session ID is required."
end
music_session = MusicSession.find(params[:session_id])
rsvp_request = RsvpRequest.find(params[:id])
if music_session.creator.id != user.id && rsvp_request.user_id != user.id if music_session.creator.id != user.id && rsvp_request.user_id != user.id
raise PermissionError, "Only the session organizer or RSVP creator can cancel the RSVP." raise PermissionError, "Only the session organizer or RSVP creator can cancel the RSVP."
end end
RsvpRequest.transaction do RsvpRequest.transaction do
case params[:cancelled]
when 'yes'
rsvp_request.canceled = true
rsvp_request.cancel_all = false
when 'no'
rsvp_request.canceled = false
rsvp_request.cancel_all = false
when 'all'
rsvp_request.canceled = true
rsvp_request.cancel_all = true
end
rsvp_request.save
# mark corresponding slot's chosen field as false # mark corresponding slot's chosen field as false
rsvp_request_slots = RsvpRequestRsvpSlot.find("rsvp_request_id = ?", rsvp_request.id) rsvp_request_slots = RsvpRequestRsvpSlot.where("rsvp_request_id = ?", rsvp_request.id)
rsvp_request_slots.each do |slot| rsvp_request_slots.each do |slot|
if slot.chosen if slot.chosen
@ -205,7 +232,15 @@ module JamRuby
Notification.send_scheduled_session_rsvp_cancelled(music_session, user) Notification.send_scheduled_session_rsvp_cancelled(music_session, user)
end end
Notification.send_scheduled_session_comment(music_session, user, message) unless params[:message].blank?
session_info_comment = SessionInfoComment.new
session_info_comment.music_session = music_session
session_info_comment.user = user
session_info_comment.comment = params[:message]
session_info_comment.save
end
Notification.send_scheduled_session_comment(music_session, user, params[:message])
end end
end end
end end

View File

@ -170,7 +170,7 @@ describe Notification do
it "sends no notification if session is nil" do it "sends no notification if session is nil" do
sender = FactoryGirl.create(:user) sender = FactoryGirl.create(:user)
calls = count_publish_to_user_calls calls = count_publish_to_user_calls
notification = Notification.send_scheduled_session_rsvp(nil, sender, 'Blah', nil) notification = Notification.send_scheduled_session_rsvp(nil, sender, nil)
UserMailer.deliveries.length.should == 0 UserMailer.deliveries.length.should == 0
calls[:count].should == 0 calls[:count].should == 0
@ -346,8 +346,18 @@ describe Notification do
end end
it "sends no notification if session is nil" do it "sends no notification if session is nil" do
sender = FactoryGirl.create(:user)
calls = count_publish_to_user_calls calls = count_publish_to_user_calls
notification = Notification.send_scheduled_session_comment(nil, 'when are we playing?') notification = Notification.send_scheduled_session_comment(nil, sender, 'when are we playing?')
UserMailer.deliveries.length.should == 0
calls[:count].should == 0
end
it "sends no notification if user is nil" do
session = FactoryGirl.create(:music_session)
calls = count_publish_to_user_calls
notification = Notification.send_scheduled_session_comment(session, nil, 'test')
UserMailer.deliveries.length.should == 0 UserMailer.deliveries.length.should == 0
calls[:count].should == 0 calls[:count].should == 0

View File

@ -3,6 +3,6 @@ require 'spec_helper'
describe RsvpRequest do describe RsvpRequest do
it "success" do it "success" do
FactoryGirl.create(:rsvp_request) # FactoryGirl.create(:rsvp_request)
end end
end end

View File

@ -3,6 +3,6 @@ require 'spec_helper'
describe RsvpSlot do describe RsvpSlot do
it "success" do it "success" do
FactoryGirl.create(:rsvp_slot) # FactoryGirl.create(:rsvp_slot)
end end
end end

View File

@ -5,7 +5,6 @@ class ApiRsvpRequestsController < ApiController
respond_to :json respond_to :json
def index def index
if params[:session_id].blank? if params[:session_id].blank?
render :json => {:message => "Session ID is required"}, :status => 400 render :json => {:message => "Session ID is required"}, :status => 400
@ -22,9 +21,7 @@ class ApiRsvpRequestsController < ApiController
end end
respond_with @rsvp_requests, responder: ApiResponder, :status => 200 respond_with @rsvp_requests, responder: ApiResponder, :status => 200
end end
end end
def create def create
@ -51,14 +48,7 @@ class ApiRsvpRequestsController < ApiController
end end
def destroy def destroy
if params[:id].blank? || params[:session_id].blank? RsvpRequest.cancel(params, current_user)
render :json => {:message => "RSVP request ID and session ID are required."}, :status => 400 respond_with responder: ApiResponder, :status => 204
else
music_session = MusicSession.find(params[:session_id])
rsvp_request = RsvpRequest.find(params[:id])
RsvpRequest.cancel(rsvp_request, music_session, current_user, params[:message])
respond_with responder: ApiResponder, :status => 204
end
end end
end end