jam-cloud/web/spec/features/music_sessions_spec.rb

116 lines
3.4 KiB
Ruby

require 'spec_helper'
describe "Music Session", :js => true, :type => :feature, :capybara_feature => true do
def create_music_session
uu = FactoryGirl.create(:user)
sign_in_poltergeist uu
visit "/client#/createSession"
within('#create-session-form') do
fill_in('description', :with => 'foobar')
select('Ambient', :from => 'genres')
check('intellectual-property')
click_link('btn-create-session')
end
uu
end
def leave_music_session_sleep_delay
# add a buffer of 10% to ensure we have enough time and avoid race condition
sleep_dur = (Rails.application.config.websocket_gateway_connect_time_stale +
Rails.application.config.websocket_gateway_connect_time_expire) * 1.1
sleep sleep_dur
end
def leave_music_session_cleanly(usr)
usr.music_session_histories.count.should be == 1
usr.music_session_user_histories.count.should be == 1
usr.music_session_histories[0].session_removed_at.should_not be_nil
usr.music_session_user_histories[0].session_removed_at.should_not be_nil
end
subject { page }
before(:all) do
Capybara.javascript_driver = :poltergeist
Capybara.current_driver = Capybara.javascript_driver
Capybara.default_wait_time = 10
end
context "last person" do
before(:each) do
UserMailer.deliveries.clear
@user1 = create_music_session
end
describe "cleanly leaves music session", :slow => true do
it "should update music session user session history" do
should have_link('session-leave')
click_link('session-leave')
leave_music_session_sleep_delay
@user1.reload
@user1.connections.count.should be == 1
leave_music_session_cleanly(@user1)
end
end
describe "abruptly leaves music session", :slow => true do
it "should delete connection and update music session user session history" do
should have_link('session-leave')
page.evaluate_script("JK.JamServer.close(true)")
leave_music_session_sleep_delay
@user1.reload
@user1.connections.count.should be == 0
leave_music_session_cleanly(@user1)
end
end
end
context "second-to-last person " do
before(:each) do
UserMailer.deliveries.clear
in_client(:user1_music_session) do
@user1 = create_music_session
end
end
describe "cleanly leaves music session", :slow => true do
it "should update music session and user session history" do
pending
in_client(:user2_music_session) do
@user2 = create_music_session
sleep 5
should have_link('session-leave')
click_link('session-leave')
leave_music_session_sleep_delay
@user2.reload
@user2.connections.count.should be == 1
leave_music_session_cleanly(@user2)
end
end
end
describe "abruptly leaves music session", :slow => true do
it "should update music session and user session history" do
pending
in_client(:user2_music_session) do
@user2 = create_music_session
sleep 5
should have_link('session-leave')
page.evaluate_script("JK.JamServer.close(true)")
leave_music_session_sleep_delay
@user2.reload
@user2.connections.count.should be == 0
leave_music_session_cleanly(@user2)
end
end
end
end
end