diff --git a/web/app/assets/javascripts/sessionList.js b/web/app/assets/javascripts/sessionList.js index 49af23e00..af030147e 100644 --- a/web/app/assets/javascripts/sessionList.js +++ b/web/app/assets/javascripts/sessionList.js @@ -137,7 +137,7 @@ // wire up the Join Link to the T&Cs dialog var $parentRow = $('tr[id=' + session.id + ']', tbGroup); - $('#join-link', $parentRow).click(function(evt) { + $('.join-link', $parentRow).click(function(evt) { joinClick(session.id); }); } diff --git a/web/app/views/clients/_findSession.html.erb b/web/app/views/clients/_findSession.html.erb index 562dc7f06..af1d851c6 100644 --- a/web/app/views/clients/_findSession.html.erb +++ b/web/app/views/clients/_findSession.html.erb @@ -72,7 +72,7 @@ - + <%= image_tag "content/icon_join.png", :size => "19x22" %> diff --git a/web/spec/features/find_sessions_spec.rb b/web/spec/features/find_sessions_spec.rb index 8a1f618b2..680add9fc 100644 --- a/web/spec/features/find_sessions_spec.rb +++ b/web/spec/features/find_sessions_spec.rb @@ -31,33 +31,6 @@ describe "Find Session", :js => true, :type => :feature, :capybara_feature => tr it "finds another public session", :slow => true do - - @unique_session_desc = 'Description found easily' - - # create session in one client - in_client(:one) do - page.driver.resize(1500, 600) # crude hack - sign_in_poltergeist user - visit "/client#/createSession" - - within('#create-session-form') do - fill_in('description', :with => @unique_session_desc) - select('Rock', :from => 'genres') - find('div.intellectual-property ins').trigger(:click) - click_link('btn-create-session') # fails if page width is low - end - - # verify that the in-session page is showing - expect(page).to have_selector('h2', text: 'my tracks') - end - - # find session in second client - in_client(:two) do - sign_in_poltergeist finder - visit "/client#/findSession" - - # verify the session description is seen by second client - expect(page).to have_text(@unique_session_desc) - end + create_join_session(user, [finder]) end end diff --git a/web/spec/features/music_sessions_spec.rb b/web/spec/features/music_sessions_spec.rb index 149d22802..d09112208 100644 --- a/web/spec/features/music_sessions_spec.rb +++ b/web/spec/features/music_sessions_spec.rb @@ -2,20 +2,6 @@ require 'spec_helper' describe "Music Session", :js => true, :type => :feature, :capybara_feature => true, :slow => true do - def create_music_session - uu = FactoryGirl.create(:user) - sign_in_poltergeist uu - visit "/client#/createSession" - sleep 3 - 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 to ensure WSG has enough time to expire sleep_dur = (Rails.application.config.websocket_gateway_connect_time_stale + @@ -42,7 +28,7 @@ describe "Music Session", :js => true, :type => :feature, :capybara_feature => t before(:each) do UserMailer.deliveries.clear pending - @user1 = create_music_session + @user1, session_description = create_session end describe "cleanly leaves music session" do @@ -77,14 +63,14 @@ describe "Music Session", :js => true, :type => :feature, :capybara_feature => t before(:each) do UserMailer.deliveries.clear in_client(:user1_music_session) do - @user1 = create_music_session + @user1, session_description = create_session end end describe "cleanly leaves" do it "should update music session and user session history" do in_client(:user2_music_session) do - @user2 = create_music_session + @user2, session_description = create_session sleep 5 should have_link('session-leave') click_link('session-leave') @@ -100,7 +86,7 @@ describe "Music Session", :js => true, :type => :feature, :capybara_feature => t describe "abruptly leaves" do it "should update music session and user session history" do in_client(:user2_music_session) do - @user2 = create_music_session + @user2, session_description = create_session sleep 5 should have_link('session-leave') page.evaluate_script("JK.JamServer.close(true)") diff --git a/web/spec/support/utilities.rb b/web/spec/support/utilities.rb index 16cf3cb5e..7ad7153dc 100644 --- a/web/spec/support/utilities.rb +++ b/web/spec/support/utilities.rb @@ -6,7 +6,7 @@ end def in_client(name) # to assist multiple-client RSpec/Capybara testing - Capybara.session_name = name + Capybara.session_name = name.class == JamRuby::User ? name.id : name yield end @@ -70,4 +70,70 @@ end def wait_until_curtain_gone should have_no_selector('.curtain') +end + +def determine_test_name(metadata, test_name_buffer = '') + description = metadata[:description_args] + if description.kind_of?(Array) + description = description[0] + end + if metadata.has_key? :example_group + return determine_test_name(metadata[:example_group], "#{description} #{test_name_buffer}") + else + return "#{description} #{test_name_buffer}" + end +end + +# takes, or creates, a unique session description which is returned for subsequent calls to join_session to use +# in finding this session) +def create_session(creator = FactoryGirl.create(:user), unique_session_desc = "create_join_session #{SecureRandom.urlsafe_base64}") + + # create session in one client + in_client(creator) do + page.driver.resize(1500, 600) # makes sure all the elements are visible + sign_in_poltergeist creator + wait_until_curtain_gone + visit "/client#/createSession" + expect(page).to have_selector('h2', text: 'session info') + + within('#create-session-form') do + fill_in('description', :with => unique_session_desc) + select('Rock', :from => 'genres') + find('div.intellectual-property ins').trigger(:click) + find('#btn-create-session').trigger(:click) # fails if page width is low + end + + # verify that the in-session page is showing + expect(page).to have_selector('h2', text: 'my tracks') + end + + return creator, unique_session_desc + +end + + +# this code assumes that there are no music sessions in the database. it should fail on the +# find('.join-link') call if > 1 session exists because capybara will complain of multile matches +def join_session(joiner, unique_session_desc) + + in_client(joiner) do + sign_in_poltergeist joiner + wait_until_curtain_gone + visit "/client#/findSession" + + # verify the session description is seen by second client + expect(page).to have_text(unique_session_desc) + find('.join-link').trigger(:click) + find('#btn-accept-terms').trigger(:click) + expect(page).to have_selector('h2', text: 'my tracks') + end +end + +def create_join_session(creator, joiners=[]) + creator, unique_session_desc = create_session(creator) + + # find session in second client + joiners.each do |joiner| + join_session(joiner, unique_session_desc) + end end \ No newline at end of file