115 lines
3.4 KiB
Ruby
115 lines
3.4 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe "Music Session", :js => true, :type => :feature, :capybara_feature => true do
|
|
pending "fails intermittently on build server"
|
|
|
|
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')
|
|
find('div.intellectual-property ins').trigger(:click)
|
|
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
|
|
|
|
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
|
|
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
|