VRFS-1677 fixed

This commit is contained in:
Bert Owen 2014-05-22 16:02:48 +08:00
parent a1f288fe4d
commit 57f1fab935
7 changed files with 70 additions and 2 deletions

View File

@ -157,4 +157,5 @@ notification_scheduled_session.sql
music_notation.sql
music_session_recurring_mode.sql
add_timezone_music_session.sql
scheduled_sessions_2.sql
scheduled_sessions_2.sql
started_at_music_session.sql

View File

@ -0,0 +1 @@
ALTER TABLE music_sessions ADD COLUMN started_at TIMESTAMP WITHOUT TIME ZONE;

View File

@ -375,6 +375,9 @@ module JamRuby
active_music_session.save
unless active_music_session.errors.any?
music_session.started_at = active_music_session.created_at
music_session.save(:validate => false)
# save session parameters for next session
User.save_session_settings(user, music_session)

View File

@ -235,6 +235,10 @@ module JamRuby
active_music_session && active_music_session.mount
end
def can_delete? user
self.creator == user && self.started_at.nil?
end
def recordings
Recording.where(music_session_id: self.id)
end

View File

@ -3,7 +3,7 @@ require 'aws-sdk'
class ApiMusicSessionsController < ApiController
# have to be signed in currently to see this screen
before_filter :api_signed_in_user, :except => [ :add_like, :show, :history_show ]
before_filter :api_signed_in_user, :except => [ :add_like, :show, :show_history ]
before_filter :lookup_session, only: [:show, :update, :delete, :claimed_recording_start, :claimed_recording_stop, :track_sync]
skip_before_filter :api_signed_in_user, only: [:perf_upload]
@ -164,6 +164,23 @@ class ApiMusicSessionsController < ApiController
end
end
def destroy
begin
music_session = MusicSession.find(params[:id])
if music_session.can_delete? current_user
Notification.send_scheduled_session_cancelled music_session
music_session.destroy
respond_with responder: ApiResponder, :status => 204
else
render :json => { :message => ValidationMessages::PERMISSION_VALIDATION_ERROR }, :status => 404
end
rescue ActiveRecord::RecordNotFound
render :json => { :message => ValidationMessages::SESSION_NOT_FOUND }, :status => 404
end
end
def participant_show
@connection = Connection.find_by_client_id(params[:id])
end

View File

@ -151,6 +151,7 @@ SampleApp::Application.routes.draw do
match '/sessions/scheduled' => 'api_music_sessions#scheduled', :via => :get
match '/sessions/:id' => 'api_music_sessions#show', :via => :get, :as => 'api_session_detail'
match '/sessions/:id' => 'api_music_sessions#update', :via => :put
match '/sessions/:id' => 'api_music_sessions#destroy', :via => :delete
match '/sessions' => 'api_music_sessions#index', :via => :get
match '/sessions' => 'api_music_sessions#create', :via => :post
match '/sessions/nindex/:client_id' => 'api_music_sessions#nindex', :via => :get

View File

@ -27,6 +27,7 @@ describe "Scheduled Music Session API ", :type => :api do
before do
#sign_in user
ActiveMusicSession.delete_all
MusicSession.delete_all
login(user)
@ -65,5 +66,45 @@ describe "Scheduled Music Session API ", :type => :api do
music_sessions.count.should eql(2)
expect(Time.parse(music_sessions[0]["scheduled_start"]).to_i).to be < Time.parse(music_sessions[1]["scheduled_start"]).to_i
end
it "should delete scheduled sessions" do
user2 = FactoryGirl.create(:user)
login(user)
post '/api/sessions.json', defopts.merge({start: Time.now + 3.hours}).to_json, "CONTENT_TYPE" => 'application/json'
last_response.status.should eql(201)
post '/api/sessions.json', defopts.merge({start: Time.now + 5.hours}).to_json, "CONTENT_TYPE" => 'application/json'
last_response.status.should eql(201)
post '/api/sessions.json', defopts.merge({start: Time.now + 7.hours}).to_json, "CONTENT_TYPE" => 'application/json'
last_response.status.should eql(201)
get '/api/sessions/scheduled.json'
last_response.status.should eql(200)
music_sessions = JSON.parse(last_response.body)
music_sessions.count.should eql(3)
client = FactoryGirl.create(:connection, :user => user, :ip_address => "1.1.1.1", :client_id => "3")
post "/api/sessions/#{music_sessions[0]["id"]}/participants.json",
{ :client_id => client.client_id, :as_musician => true,
:tracks => [{"instrument_id" => "electric guitar",
"sound" => "mono",
'client_track_id' => "client_track_guid"}]
}.to_json, "CONTENT_TYPE" => 'application/json'
last_response.status.should eql(201)
delete "/api/sessions/#{music_sessions[0]["id"]}.json"
last_response.status.should eql(404)
JSON.parse(last_response.body)["message"].should == ValidationMessages::PERMISSION_VALIDATION_ERROR
delete "/api/sessions/#{music_sessions[1]["id"]}.json"
last_response.status.should eql(204)
login(user2)
delete "/api/sessions/#{music_sessions[2]["id"]}.json"
last_response.status.should eql(404)
JSON.parse(last_response.body)["message"].should == ValidationMessages::PERMISSION_VALIDATION_ERROR
end
end
end