From 282c43eca855d41c7d1f5a72ba0fbab6505ad418 Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Tue, 15 Oct 2013 14:50:57 -0500 Subject: [PATCH] vrfs-492: added second-to-last-person test cases; refactored test methods; added contexts --- web/spec/features/music_sessions_spec.rb | 131 +++++++++++++++-------- 1 file changed, 84 insertions(+), 47 deletions(-) diff --git a/web/spec/features/music_sessions_spec.rb b/web/spec/features/music_sessions_spec.rb index 9923e70b8..7a55b5b0b 100644 --- a/web/spec/features/music_sessions_spec.rb +++ b/web/spec/features/music_sessions_spec.rb @@ -2,6 +2,33 @@ 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 "/#/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 @@ -10,64 +37,74 @@ describe "Music Session", :js => true, :type => :feature, :capybara_feature => t Capybara.default_wait_time = 10 end - let(:user) { FactoryGirl.create(:user) } + context "last person" do + before(:each) do + UserMailer.deliveries.clear + @user1 = create_music_session + end - before(:each) do - UserMailer.deliveries.clear - @user = user - sign_in_poltergeist @user - visit "/#/createSession" + 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 - within('#create-session-form') do - fill_in('description', :with => 'foobar') - select('Ambient', :from => 'genres') - check('intellectual-property') - click_link('btn-create-session') + @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 - describe "last person cleanly leaves session", :slow => true do - it "should update music session and user session history" do - should have_link('session-leave') - click_link('session-leave') - # add a buffer of 10% to ensure we have enough time - sleep_dur = (Rails.application.config.websocket_gateway_connect_time_stale + - Rails.application.config.websocket_gateway_connect_time_expire) * 1.1 - sleep sleep_dur - - user.reload - user.music_session_histories.count.should be == 1 - user.music_session_user_histories.count.should be == 1 - user.music_session_histories[0].session_removed_at.should_not be_nil - user.music_session_user_histories[0].session_removed_at.should_not be_nil + context "second-to-last person " do + before(:each) do + UserMailer.deliveries.clear + in_client(:user1_music_session) do + @user1 = create_music_session + end end - end - describe "last person abruptly leaves session", :slow => true do - it "should delete connection and update music session and user session history" do - should have_link('session-leave') - page.evaluate_script("JK.JamServer.close(true)") + 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 + should have_link('session-leave') + click_link('session-leave') + leave_music_session_sleep_delay - # add a buffer of 10% to ensure we have enough time - sleep_dur = (Rails.application.config.websocket_gateway_connect_time_stale + - Rails.application.config.websocket_gateway_connect_time_expire) * 1.1 - sleep sleep_dur - - user.reload - user.connections.count.should be == 0 - user.music_session_histories.count.should be == 1 - user.music_session_user_histories.count.should be == 1 - user.music_session_histories[0].session_removed_at.should_not be_nil - user.music_session_user_histories[0].session_removed_at.should_not be_nil + @user2.reload + @user2.connections.count.should be == 1 + leave_music_session_cleanly(@user2) + end + end end - end - describe "person cleanly leaves session" do - pending - 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 + should have_link('session-leave') + page.evaluate_script("JK.JamServer.close(true)") + leave_music_session_sleep_delay - describe "person abruptly leaves session" do - pending + @user2.reload + @user2.connections.count.should be == 0 + leave_music_session_cleanly(@user2) + end + end + end end end