jam-cloud/web/spec/requests/music_sessions_api_spec.rb

134 lines
5.4 KiB
Ruby

require 'spec_helper'
describe "Scheduled Music Session API ", :type => :api do
include Rack::Test::Methods
subject { page }
before(:each) do
MusicSession.delete_all
end
def login(user)
post '/sessions', "session[email]" => user.email, "session[password]" => user.password
rack_mock_session.cookie_jar["remember_token"].should == user.remember_token
end
describe "profile page" do
let(:user) { FactoryGirl.create(:user) }
# defopts are used to setup default options for the session
let(:defopts) { { :name => "session name", :description => "session description",
:genres => ["classical"], :musician_access => true, :approval_required => false,
:fan_chat => true, :fan_access => true,
:legal_policy => true, :language => 'english',
:timezone => "utc"} }
before do
#sign_in user
ActiveMusicSession.delete_all
MusicSession.delete_all
login(user)
end
it "should create session" do
post '/api/sessions.json', defopts.to_json, "CONTENT_TYPE" => 'application/json'
last_response.status.should eql(201)
music_session = JSON.parse(last_response.body)
music_session[:name] = defopts[:name]
music_session[:description] = defopts[:description]
music_session[:musician_access] = defopts[:musician_access]
music_session[:fan_chat] = defopts[:fan_chat]
music_session[:fan_access] = defopts[:fan_access]
music_session[:language] = defopts[:language]
music_session[:timezone] = defopts[:timezone]
end
it "should list scheduled sessions" do
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 + 7.hours}).to_json, "CONTENT_TYPE" => 'application/json'
last_response.status.should eql(201)
post '/api/sessions.json', defopts.merge({start: Time.now + 15.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(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
it "should update music session" 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)
music_session = JSON.parse(last_response.body)
post "/api/sessions/#{music_session["id"]}.json", {:name => "changed name"}.to_json, "CONTENT_TYPE" => 'application/json'
last_response.status.should eql(201)
changed_session = JSON.parse(last_response.body)
changed_session["name"].should == "changed name"
post "/api/sessions/#{music_session["id"]}.json", {:genres => ["fake genres"]}.to_json, "CONTENT_TYPE" => 'application/json'
last_response.status.should eql(422)
changed_session = JSON.parse(last_response.body)
changed_session["errors"].should == {"genre"=>["can't be blank"]}
login(user2)
post "/api/sessions/#{music_session["id"]}.json", {:name => "changed name"}.to_json
last_response.status.should eql(404)
JSON.parse(last_response.body)["message"].should == ValidationMessages::PERMISSION_VALIDATION_ERROR
end
end
end