134 lines
5.4 KiB
Ruby
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 |