VRFS-157 track API development

This commit is contained in:
Brian Smith 2012-12-15 02:10:42 -05:00
parent 16c0421464
commit 3d2bfe5f4f
11 changed files with 99 additions and 13 deletions

View File

@ -47,9 +47,8 @@ class ApiInvitationsController < ApiController
@invitation.save
User.save_session_settings(current_user, music_session)
unless @invitation.errors.any?
User.save_session_settings(current_user, music_session)
invitation_notification = @message_factory.session_invitation(receiver.id, @invitation.id)
@mq_router.publish_to_user(receiver.id, invitation_notification)
respond_with @invitation, :responder => ApiResponder, :location => api_invitation_detail_url(@invitation)

View File

@ -90,5 +90,41 @@ class ApiMusicSessionsController < ApiController
respond_with @connection, responder: ApiResponder
end
def track_show
#TODO: auth user
@track = Track.find(params[:track_id])
end
def track_index
@tracks = Track.index(current_user, params[:id])
end
def track_create
# TODO: verify
@track = Track.save(nil,
params[:connection_id],
params[:instrument_id],
params[:sound])
respond_with @track, responder: ApiResponder, :status => 201, :location => api_session_track_detail_url(@track)
end
def track_update
@track = Track.save(params[:track_id],
nil,
params[:instrument_id],
params[:sound])
respond_with @track, responder: ApiResponder, :status => 200
end
def track_destroy
@track = Track.find(params[:track_id])
unless @track.nil?
@track.delete
respond_with responder: ApiResponder, :status => 204
end
render :json => { :message => ValidationMessages::TRACK_NOT_FOUND }, :status => 404
end
end

View File

@ -206,8 +206,6 @@ class ApiUsersController < ApiController
###################### FAVORITES ########################
def favorite_index
@user = User.find(params[:id])
# TODO: get band followings and merge (@user.band_followings)
end
def favorite_create
@ -225,7 +223,7 @@ class ApiUsersController < ApiController
respond_with responder: ApiResponder, :status => 204
end
###################### FRIENDS (TODO: refactor resource paths) ##########################
###################### FRIENDS ##########################
def friend_request_index
auth_user(params[:id])
# get all outgoing and incoming friend requests
@ -285,7 +283,7 @@ class ApiUsersController < ApiController
def band_invitation_index
auth_user(params[:id])
@user = current_user
@invitations = @user.received_band_invitations#.merge(@user.sent_band_invitations)
@invitations = @user.received_band_invitations
respond_with @invitations, responder: ApiResponder, :status => 200
end

View File

@ -4,6 +4,6 @@ attributes :ip_address, :client_id
node(:user_id, :if => lambda { |connection| connection.user.friends?(current_user) }) do |connection|
connection.user_id
end
child(:connection_tracks => :tracks) {
child(:tracks => :tracks) {
attributes :id, :instrument_id, :sound
}

View File

@ -12,7 +12,7 @@ child(:connections => :participants) {
node(:user_id, :if => lambda { |connection| connection.user.friends?(current_user) }) do |connection|
connection.user_id
end
child(:connection_tracks => :tracks) {
child(:tracks => :tracks) {
attributes :id, :instrument_id, :sound
}
}

View File

@ -0,0 +1,3 @@
object @track
extends "api_music_sessions/track_show"

View File

@ -0,0 +1,3 @@
object @tracks
extends "api_music_sessions/track_show"

View File

@ -0,0 +1,3 @@
object @track
attributes :id, :connection_id, :sound, :instrument_id

View File

@ -0,0 +1,3 @@
object @track
extends "api_music_sessions/track_show"

View File

@ -43,6 +43,13 @@ SampleApp::Application.routes.draw do
match '/sessions' => 'api_music_sessions#index', :via => :get
match '/sessions' => 'api_music_sessions#create', :via => :post
# music session tracks
match '/sessions/:id/tracks' => 'api_music_sessions#track_create', :via => :post
match '/sessions/:id/tracks' => 'api_music_sessions#track_index', :via => :get
match '/sessions/:id/tracks/:track_id' => 'api_music_sessions#track_update', :via => :post
match '/sessions/:id/tracks/:track_id' => 'api_music_sessions#track_show', :via => :get, :as => 'api_session_track_detail'
match '/sessions/:id/tracks/:track_id' => 'api_music_sessions#track_destroy', :via => :delete
# genres
match '/genres' => 'api_genres#index', :via => :get
@ -55,7 +62,7 @@ SampleApp::Application.routes.draw do
match '/users/confirm/:signup_token' => 'api_users#signup_confirm', :via => :post, :as => 'api_signup_confirmation'
# session settings
match '/musicians/:id/session_settings' => 'api_users#session_settings_show', :via => :get
match '/users/:id/session_settings' => 'api_users#session_settings_show', :via => :get
# login/logout
match '/auth_session' => 'api_users#auth_session_create', :via => :post

View File

@ -70,14 +70,48 @@ describe "Music Session API ", :type => :api do
track["instrument_id"].should == "electric guitar"
track["sound"].should == "mono"
get '/api/musicians/' + user.id + '/session_settings.json'
# test session settings
get '/api/users/' + user.id + '/session_settings.json'
session_settings = JSON.parse(last_response.body)
session_settings["musician_access"].should be_true
session_settings["approval_required"].should be_false
session_settings["fan_chat"].should be_true
session_settings["fan_access"].should be_true
end
# test Track-specific APIs
get "/api/sessions/#{music_session["id"]}/tracks.json", "CONTENT_TYPE" => 'application/json'
last_response.status.should == 200
tracks = JSON.parse(last_response.body)
tracks.size.should == 1
tracks[0]["instrument_id"].should == "electric guitar"
tracks[0]["sound"].should == "mono"
# change instrument
post "/api/sessions/#{music_session["id"]}/tracks/#{tracks[0]["id"]}.json", { :instrument_id => "drums" }.to_json, "CONTENT_TYPE" => 'application/json'
last_response.status.should == 200
# get individual track
get "/api/sessions/#{music_session["id"]}/tracks/#{tracks[0]["id"]}.json", "CONTENT_TYPE" => 'application/json'
last_response.status.should == 200
updated_track = JSON.parse(last_response.body)
updated_track["instrument_id"].should == "drums"
updated_track["sound"].should == "mono"
# change sound
post "/api/sessions/#{music_session["id"]}/tracks/#{tracks[0]["id"]}.json", { :sound => "stereo" }.to_json, "CONTENT_TYPE" => 'application/json'
last_response.status.should == 200
# get individual track
get "/api/sessions/#{music_session["id"]}/tracks/#{tracks[0]["id"]}.json", "CONTENT_TYPE" => 'application/json'
last_response.status.should == 200
updated_track = JSON.parse(last_response.body)
updated_track["instrument_id"].should == "drums"
updated_track["sound"].should == "stereo"
# create a 2nd track for this session
#post "/api/sessions/#{music_session["id"]}/tracks.json", :tracks => [{"connection_id" => "#{}", "instrument_id" => "electric guitar", "sound" => "mono"}], "CONTENT_TYPE" => 'application/json'
#last_response.status.should == 201
end
it "should delete session" do
# check that there are no sessions
@ -252,7 +286,7 @@ describe "Music Session API ", :type => :api do
post '/api/sessions.json', defopts.merge({:client_id => client.client_id, :tracks => [{"instrument_id" => "electric guitar", "sound" => "mom"}]}).to_json, "CONTENT_TYPE" => 'application/json'
last_response.status.should eql(422)
JSON.parse(last_response.body)["errors"]["connection_tracks"][0].should == "is invalid"
JSON.parse(last_response.body)["errors"]["tracks"][0].should == "is invalid"
# check that the transaction was rolled back
MusicSession.all().length.should == original_count