diff --git a/app/controllers/api_music_sessions_controller.rb b/app/controllers/api_music_sessions_controller.rb index f74f86869..88ad7047e 100644 --- a/app/controllers/api_music_sessions_controller.rb +++ b/app/controllers/api_music_sessions_controller.rb @@ -27,6 +27,11 @@ class ApiMusicSessionsController < ApiController @music_session.creator = current_user @music_session.description = params[:description] @music_session.musician_access = params[:musician_access] + @music_session.approval_required = params[:approval_required] + @music_session.fan_chat = params[:fan_chat] + @music_session.fan_access = params[:fan_access] + @music_session.band = Band.find(params[:band]) unless params[:band].nil? + genres = params[:genres] logger.debug "Genres class: " + genres.class.to_s() diff --git a/app/controllers/api_users_controller.rb b/app/controllers/api_users_controller.rb index 49227eba0..521a9038f 100644 --- a/app/controllers/api_users_controller.rb +++ b/app/controllers/api_users_controller.rb @@ -87,7 +87,7 @@ class ApiUsersController < ApiController end def following_create - + if !params[:user_id].nil? @follower = UserFollower.new() @follower.user_id = params[:user_id] diff --git a/app/views/api_music_sessions/show.rabl b/app/views/api_music_sessions/show.rabl index b2dff9e34..ba89625a8 100644 --- a/app/views/api_music_sessions/show.rabl +++ b/app/views/api_music_sessions/show.rabl @@ -1,6 +1,6 @@ object @music_session -attributes :id, :description, :musician_access +attributes :id, :description, :musician_access, :approval_required, :fan_access, :fan_chat, :band_id node :genres do |item| item.genres.map(&:id) @@ -17,7 +17,14 @@ child(:connections => :participants) { } } -child(:invitations => :invitations) { - collection @music_sessions, :object_root => false +node :invitations do |music_session| + +end + +child({:invitations => :invitations}) { + attributes :id, :sender_id +} + +child({:fan_invitations => :fan_invitations}) { attributes :id, :sender_id } diff --git a/config/routes.rb b/config/routes.rb index 4933f03ac..4d9db6c94 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -56,8 +56,8 @@ SampleApp::Application.routes.draw do match '/users/confirm/:signup_token' => 'api_users#signup_confirm', :via => :post, :as => 'api_signup_confirmation' # login/logout - match '/auth_sessions' => 'api_users#auth_session_create', :via => :post - match '/auth_sessions' => 'api_users#auth_session_delete', :via => :delete + match '/auth_session' => 'api_users#auth_session_create', :via => :post + match '/auth_session' => 'api_users#auth_session_delete', :via => :delete # friend requests match '/users/:id/friend_requests' => 'api_users#friend_request_index', :via => :get diff --git a/spec/factories.rb b/spec/factories.rb index dc5552132..93fb0d62a 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -11,9 +11,12 @@ FactoryGirl.define do end end - factory :music_session, :class => JamRuby::MusicSession do - sequence(:description) { |n| "Music Session #{n}" } - musician_access true + factory :music_session, :class => "JamRuby::MusicSession" do + sequence(:description) { |n| "Music Session #{n}" } + fan_chat true + fan_access true + approval_required false + musician_access true end factory :connection, :class => JamRuby::Connection do diff --git a/spec/requests/music_session_pages_spec.rb b/spec/requests/music_session_pages_spec.rb index cf1aa0c9f..41448a5a8 100644 --- a/spec/requests/music_session_pages_spec.rb +++ b/spec/requests/music_session_pages_spec.rb @@ -13,6 +13,9 @@ describe "Music Session API ", :type => :api do describe "profile page" do let(:user) { FactoryGirl.create(:user) } + + # defopts are used to setup default options for the session + let(:defopts) { { :description => "a session", :fan_chat => true, :fan_access => true, :approval_required => false, :genres => ["classical"], :musician_access => true, :tracks => [{"instrument_id" => "electric guitar", "sound" => "mono"}]} } before do #sign_in user MusicSession.delete_all @@ -27,7 +30,7 @@ describe "Music Session API ", :type => :api do it "should create session" do client = FactoryGirl.create(:connection, :user => user, :ip_address => "1.1.1.1", :client_id => "1") - post '/api/sessions.json', { :description => "a session", :client_id => client.client_id, :genres => ["classical"], :musician_access => true, :tracks => [{"instrument_id" => "electric guitar", "sound" => "mono"}]}.to_json, "CONTENT_TYPE" => 'application/json' + post '/api/sessions.json', defopts.merge({:client_id => client.client_id}).to_json, "CONTENT_TYPE" => 'application/json' last_response.status.should eql(201) # now fetch it's data @@ -38,8 +41,12 @@ describe "Music Session API ", :type => :api do music_sessions = JSON.parse(last_response.body) music_session = music_sessions[0] music_session["id"].should == music_session["id"] - music_session["musician_access"].should == true + music_session["musician_access"].should be_true music_session["invitations"].should == [] + music_session["fan_invitations"].should == [] + music_session["approval_required"].should be_false + music_session["fan_chat"].should be_true + music_session["fan_access"].should be_true music_session["participants"].length.should == 1 participant = music_session["participants"][0] participant["ip_address"].should == client.ip_address @@ -59,7 +66,7 @@ describe "Music Session API ", :type => :api do # create the session client = FactoryGirl.create(:connection, :user => user, :ip_address => "1.1.1.1") - post '/api/sessions.json', { :description => "a session", :client_id => client.client_id, :genres => ["classical"], :musician_access => true, :tracks => [{"instrument_id" => "electric guitar", "sound" => "mono"}]}.to_json, "CONTENT_TYPE" => 'application/json' + post '/api/sessions.json', defopts.merge({:client_id => client.client_id}).to_json, "CONTENT_TYPE" => 'application/json' last_response.status.should eql(201) # now fetch it's data @@ -82,7 +89,7 @@ describe "Music Session API ", :type => :api do it "should add/remove member from session" do # create the session client = FactoryGirl.create(:connection, :user => user, :ip_address => "1.1.1.1") - post '/api/sessions.json', { :description => "a session", :client_id => client.client_id, :genres => ["classical"], :musician_access => true, :tracks => [{"instrument_id" => "electric guitar", "sound" => "mono"}]}.to_json, "CONTENT_TYPE" => 'application/json' + post '/api/sessions.json', defopts.merge({:client_id => client.client_id}).to_json, "CONTENT_TYPE" => 'application/json' last_response.status.should eql(201) # now fetch it's data @@ -112,11 +119,11 @@ describe "Music Session API ", :type => :api do it "should add a second member to the second" do - - user2 = FactoryGirl.create(:user) + + user2 = FactoryGirl.create(:user) client = FactoryGirl.create(:connection, :user => user, :ip_address => "1.1.1.1") client2 = FactoryGirl.create(:connection, :user => user2, :ip_address => "2.2.2.2") - post '/api/sessions.json', { :description => "a session", :client_id => client.client_id, :genres => ["classical"], :musician_access => true, :tracks => [{"instrument_id" => "electric guitar", "sound" => "mono"}]}.to_json, "CONTENT_TYPE" => 'application/json' + post '/api/sessions.json', defopts.merge({:client_id => client.client_id}).to_json, "CONTENT_TYPE" => 'application/json' last_response.status.should eql(201) # now fetch it's data @@ -177,14 +184,14 @@ describe "Music Session API ", :type => :api do # create the session original_count = MusicSession.all().length client = FactoryGirl.create(:connection, :user => user, :ip_address => "1.1.1.1") - post '/api/sessions.json', { :description => "a session", :client_id => client.client_id, :musician_access => true, :tracks => [{"instrument_id" => "electric guitar", "sound" => "mono"}]}.to_json, "CONTENT_TYPE" => 'application/json' + post '/api/sessions.json', { :description => "a session", :client_id => client.client_id, :musician_access => true, :tracks => [{"instrument_id" => "electric guitar", "sound" => "mono"}], :fan_chat=>true, :fan_access=>true, :approval_required=>false}.to_json, "CONTENT_TYPE" => 'application/json' last_response.status.should eql(422) MusicSession.all().length.should == original_count end it "should error with invalid genre specified" do client = FactoryGirl.create(:connection, :user => user, :ip_address => "1.1.1.1") - post '/api/sessions.json', { :description => "a session", :client_id => client.client_id, :genres => ["Junk"], :musician_access => true, :tracks => [{"instrument_id" => "electric guitar", "sound" => "mono"}]}.to_json, "CONTENT_TYPE" => 'application/json' + post '/api/sessions.json', { :description => "a session", :client_id => client.client_id, :genres => ["Junk"], :musician_access => true, :tracks => [{"instrument_id" => "electric guitar", "sound" => "mono"}], :fan_chat=>true, :fan_access=>true, :approval_required=>false}.to_json, "CONTENT_TYPE" => 'application/json' last_response.status.should eql(404) end @@ -192,7 +199,7 @@ describe "Music Session API ", :type => :api do original_count = MusicSession.all().length client = FactoryGirl.create(:connection, :user => user, :ip_address => "1.1.1.1") - post '/api/sessions.json', { :description => "a session", :client_id => client.client_id, :musician_access => true, :genres => ["classical"]}.to_json, "CONTENT_TYPE" => 'application/json' + post '/api/sessions.json', { :description => "a session", :client_id => client.client_id, :musician_access => true, :genres => ["classical"], :fan_chat=>true, :fan_access=>true, :approval_required=>false}.to_json, "CONTENT_TYPE" => 'application/json' last_response.status.should eql(422) JSON.parse(last_response.body)["errors"]["genres"][0].should == Connection::SELECT_AT_LEAST_ONE @@ -204,7 +211,7 @@ describe "Music Session API ", :type => :api do original_count = MusicSession.all().length client = FactoryGirl.create(:connection, :user => user, :ip_address => "1.1.1.1") - post '/api/sessions.json', { :description => "a session", :client_id => client.client_id, :genres => ["classical"], :musician_access => true, :tracks => [{"instrument_id" => "mom", "sound" => "mono"}]}.to_json, "CONTENT_TYPE" => 'application/json' + post '/api/sessions.json', { :description => "a session", :client_id => client.client_id, :genres => ["classical"], :musician_access => true, :tracks => [{"instrument_id" => "mom", "sound" => "mono"}], :fan_chat=>true, :fan_access=>true, :approval_required=>false}.to_json, "CONTENT_TYPE" => 'application/json' last_response.status.should eql(404) # check that the transaction was rolled back @@ -215,7 +222,7 @@ describe "Music Session API ", :type => :api do original_count = MusicSession.all().length client = FactoryGirl.create(:connection, :user => user, :ip_address => "1.1.1.1") - post '/api/sessions.json', { :description => "a session", :client_id => client.client_id, :genres => ["classical"], :musician_access => true, :tracks => [{"instrument_id" => "electric guitar", "sound" => "mom"}]}.to_json, "CONTENT_TYPE" => 'application/json' + post '/api/sessions.json', { :description => "a session", :client_id => client.client_id, :genres => ["classical"], :musician_access => true, :tracks => [{"instrument_id" => "electric guitar", "sound" => "mom"}], :fan_chat=>true, :fan_access=>true, :approval_required=>false}.to_json, "CONTENT_TYPE" => 'application/json' last_response.status.should eql(422) JSON.parse(last_response.body)["errors"]["connection_tracks"][0].should == "is invalid" @@ -233,7 +240,7 @@ describe "Music Session API ", :type => :api do client = FactoryGirl.create(:connection, :user => user, :ip_address => "1.1.1.1") - post '/api/sessions.json', { :description => "a session", :client_id => client.client_id, :genres => ["classical"], :musician_access => false, :tracks => [{"instrument_id" => "electric guitar", "sound" => "mono"}]}.to_json, "CONTENT_TYPE" => 'application/json' + post '/api/sessions.json', defopts.merge({:client_id => client.client_id, :musician_access => false}).to_json, "CONTENT_TYPE" => 'application/json' last_response.status.should eql(201) session = JSON.parse(last_response.body) @@ -249,6 +256,7 @@ describe "Music Session API ", :type => :api do music_session["id"].should == session["id"] music_session["musician_access"].should == false music_session["invitations"].should == [] + music_session["fan_invitations"].should == [] music_session["participants"].length.should == 1 participant = music_session["participants"][0] participant["ip_address"].should == client.ip_address @@ -262,7 +270,7 @@ describe "Music Session API ", :type => :api do client = FactoryGirl.create(:connection, :user => user, :ip_address => "1.1.1.1") - post '/api/sessions.json', { :description => "a session", :client_id => client.client_id, :genres => ["classical"], :musician_access => false, :tracks => [{"instrument_id" => "electric guitar", "sound" => "mono"}]}.to_json, "CONTENT_TYPE" => 'application/json' + post '/api/sessions.json', defopts.merge({:client_id => client.client_id, :musician_access => false}).to_json, "CONTENT_TYPE" => 'application/json' last_response.status.should eql(201) session = JSON.parse(last_response.body) @@ -283,6 +291,8 @@ describe "Music Session API ", :type => :api do invitation = music_session["invitations"][0] invitation["id"].should == invitation_model.id + music_session["fan_invitations"].should == [] + music_session["participants"].length.should == 1 participant = music_session["participants"][0] participant["client_id"].should == client.client_id @@ -300,7 +310,7 @@ describe "Music Session API ", :type => :api do client = FactoryGirl.create(:connection, :user => user, :ip_address => "1.1.1.1", :client_id => "3") - post '/api/sessions.json', { :description => "a session", :client_id => client.client_id, :genres => ["classical"], :musician_access => false, :tracks => [{"instrument_id" => "electric guitar", "sound" => "mono"}]}.to_json, "CONTENT_TYPE" => 'application/json' + post '/api/sessions.json', defopts.merge({:client_id => client.client_id, :musician_access => false}).to_json, "CONTENT_TYPE" => 'application/json' last_response.status.should eql(201) session = JSON.parse(last_response.body) diff --git a/spec/requests/users_api_spec.rb b/spec/requests/users_api_spec.rb index 34441498d..7c6f41bc8 100644 --- a/spec/requests/users_api_spec.rb +++ b/spec/requests/users_api_spec.rb @@ -20,7 +20,7 @@ describe "User API ", :type => :api do last_response.status.should == 403 # login - post '/api/auth_sessions.json', { :email => user.email, :password => user.password }.to_json, "CONTENT_TYPE" => 'application/json' + post '/api/auth_session.json', { :email => user.email, :password => user.password }.to_json, "CONTENT_TYPE" => 'application/json' last_response.status.should == 200 JSON.parse(last_response.body).should == { "success" => true } @@ -29,7 +29,7 @@ describe "User API ", :type => :api do last_response.status.should == 200 # log back out - delete '/api/auth_sessions.json', "CONTENT_TYPE" => 'application/json' + delete '/api/auth_session.json', "CONTENT_TYPE" => 'application/json' # can't access most apis; not logged in yet!' get '/api/users.json', "CONTENT_TYPE" => 'application/json' @@ -38,7 +38,7 @@ describe "User API ", :type => :api do it "bad login" do # login - post '/api/auth_sessions.json', { :email => "nothing", :password => "mur" }.to_json, "CONTENT_TYPE" => 'application/json' + post '/api/auth_session.json', { :email => "nothing", :password => "mur" }.to_json, "CONTENT_TYPE" => 'application/json' last_response.status.should == 404 JSON.parse(last_response.body).should == { "success" => false }