From 700ef04edf773683f5aded17f045fbc0ee46b0ed Mon Sep 17 00:00:00 2001 From: Seth Call Date: Fri, 4 Apr 2014 23:16:38 +0100 Subject: [PATCH] * VRFS-1531, and a fix for feed test having 'dirt' in it from other tests. also reverting batch mailer test --- ruby/lib/jam_ruby/models/email_batch.rb | 2 +- ruby/lib/jam_ruby/models/music_session.rb | 2 + ruby/spec/mailers/batch_mailer_spec.rb | 2 + web/app/assets/javascripts/bandProfile.js | 4 +- web/app/assets/javascripts/findSession.js | 4 +- web/app/assets/javascripts/searchResults.js | 8 +-- web/app/assets/javascripts/sessionList.js | 5 +- .../stylesheets/minimal/minimal.css.scss | 8 +++ .../stylesheets/minimal/minimal_main.css.scss | 11 ++++ web/app/controllers/videos_controller.rb | 8 +++ web/app/views/layouts/minimal.html.erb | 60 +++++++++++++++++++ web/app/views/videos/show_dialog.html.haml | 0 web/config/application.rb | 1 + web/config/routes.rb | 2 + web/spec/features/feed_spec.rb | 9 ++- web/spec/features/home_spec.rb | 2 +- web/spec/features/in_session_spec.rb | 29 ++++++--- web/spec/features/twitter_auth_spec.rb | 2 +- web/spec/features/welcome_spec.rb | 2 +- web/spec/features/whats_next_spec.rb | 4 +- web/spec/support/utilities.rb | 48 ++++++++++----- 21 files changed, 172 insertions(+), 41 deletions(-) create mode 100644 web/app/assets/stylesheets/minimal/minimal.css.scss create mode 100644 web/app/assets/stylesheets/minimal/minimal_main.css.scss create mode 100644 web/app/controllers/videos_controller.rb create mode 100644 web/app/views/layouts/minimal.html.erb create mode 100644 web/app/views/videos/show_dialog.html.haml diff --git a/ruby/lib/jam_ruby/models/email_batch.rb b/ruby/lib/jam_ruby/models/email_batch.rb index dc909ac27..9b13f1f4d 100644 --- a/ruby/lib/jam_ruby/models/email_batch.rb +++ b/ruby/lib/jam_ruby/models/email_batch.rb @@ -88,7 +88,7 @@ FOO def send_test_batch self.perform_event('do_test_run!') - BatchMailer.send_batch_email_test(self.id).deliver! + BatchMailer.send_batch_email_test(self.id).deliver end def merged_body(user) diff --git a/ruby/lib/jam_ruby/models/music_session.rb b/ruby/lib/jam_ruby/models/music_session.rb index 899f738fe..5a1090b28 100644 --- a/ruby/lib/jam_ruby/models/music_session.rb +++ b/ruby/lib/jam_ruby/models/music_session.rb @@ -270,6 +270,8 @@ module JamRuby query = query.where( %Q{ musician_access = true + OR + music_sessions.user_id = '#{current_user.id}' OR invitations.id IS NOT NULL } diff --git a/ruby/spec/mailers/batch_mailer_spec.rb b/ruby/spec/mailers/batch_mailer_spec.rb index b915999e8..fc430a233 100644 --- a/ruby/spec/mailers/batch_mailer_spec.rb +++ b/ruby/spec/mailers/batch_mailer_spec.rb @@ -8,6 +8,8 @@ describe BatchMailer do batch = FactoryGirl.create(:email_batch) batch.send_test_batch + sleep + mail = BatchMailer.deliveries.detect { |dd| dd['to'].to_s.split(',')[0] == batch.test_emails.split(',')[0]} # let (:mail) { BatchMailer.deliveries[0] } # it { mail['to'].to_s.split(',')[0].should == batch.test_emails.split(',')[0] } diff --git a/web/app/assets/javascripts/bandProfile.js b/web/app/assets/javascripts/bandProfile.js index 2fc6a68b6..dbd840463 100644 --- a/web/app/assets/javascripts/bandProfile.js +++ b/web/app/assets/javascripts/bandProfile.js @@ -41,7 +41,7 @@ $('#band-profile-social').hide(); $('.band-profile-nav a.active').removeClass('active'); - $('.band-profile-nav a.#band-profile-about-link').addClass('active'); + $('.band-profile-nav a#band-profile-about-link').addClass('active'); } /****************** MAIN PORTION OF SCREEN *****************/ @@ -170,7 +170,7 @@ $('#band-profile-social').hide(); $('.band-profile-nav a.active').removeClass('active'); - $('.band-profile-nav a.#band-profile-about-link').addClass('active'); + $('.band-profile-nav a#band-profile-about-link').addClass('active'); bindAbout(); } diff --git a/web/app/assets/javascripts/findSession.js b/web/app/assets/javascripts/findSession.js index a684081cb..11001f3e3 100644 --- a/web/app/assets/javascripts/findSession.js +++ b/web/app/assets/javascripts/findSession.js @@ -36,13 +36,13 @@ } function removeSpinner() { - $('') + $('div[layout-id=findSession] .content').append('
') } function loadSessionsOriginal() { diff --git a/web/app/assets/javascripts/searchResults.js b/web/app/assets/javascripts/searchResults.js index 975da29e3..7cb7a0f9d 100644 --- a/web/app/assets/javascripts/searchResults.js +++ b/web/app/assets/javascripts/searchResults.js @@ -67,8 +67,8 @@ function resultDivVisibility(val, isSidebar) { if (isSidebar) { - $('div[layout=sidebar user-id=' + val.id + '].sidebar-search-connected').hide(); - $('div[layout=sidebar user-id=' + val.id + '].sidebar-search-result').show(); + $('div[layout="sidebar"][user-id="' + val.id + '"].sidebar-search-connected').hide(); + $('div[layout="sidebar"][user-id="' + val.id + '"].sidebar-search-result').show(); } else { $('div[user-id=' + val.id + '].search-connected').hide(); @@ -202,8 +202,8 @@ function friendRequestCallbackSidebar(userId) { // toggle the pre-click and post-click divs - $('div[layout=sidebar] div[user-id=' + userId + '].sidebar-search-connected').show(); - $('div[layout=sidebar] div[user-id=' + userId + '].sidebar-search-result').hide(); + $('div[layout=sidebar] div[user-id="' + userId + '"].sidebar-search-connected').show(); + $('div[layout=sidebar] div[user-id="' + userId + '"].sidebar-search-result').hide(); } function friendRequestCallbackSearchResults(userId) { diff --git a/web/app/assets/javascripts/sessionList.js b/web/app/assets/javascripts/sessionList.js index 81dfc77b3..37539b3b0 100644 --- a/web/app/assets/javascripts/sessionList.js +++ b/web/app/assets/javascripts/sessionList.js @@ -190,7 +190,10 @@ openTerms(sessionId); } else { - if (session.musician_access) { + if(session.user_id == JK.currentUserId) { + openTerms(sessionId); + } + else if (session.musician_access) { if (session.approval_required) { openAlert(sessionId); } diff --git a/web/app/assets/stylesheets/minimal/minimal.css.scss b/web/app/assets/stylesheets/minimal/minimal.css.scss new file mode 100644 index 000000000..ad673a435 --- /dev/null +++ b/web/app/assets/stylesheets/minimal/minimal.css.scss @@ -0,0 +1,8 @@ +/** +*= require client/ie +*= require client/jamkazam +*= require client/screen_common +*= require client/content +*= require client/ftue +*= require minimal/minimial_main +*/ \ No newline at end of file diff --git a/web/app/assets/stylesheets/minimal/minimal_main.css.scss b/web/app/assets/stylesheets/minimal/minimal_main.css.scss new file mode 100644 index 000000000..5a170e128 --- /dev/null +++ b/web/app/assets/stylesheets/minimal/minimal_main.css.scss @@ -0,0 +1,11 @@ +html { + height:100%; +} + +body { + //position:absolute !important; + padding:0 !important; + overflow: visible !important; + height:100%; + margin:0 !important; +} diff --git a/web/app/controllers/videos_controller.rb b/web/app/controllers/videos_controller.rb new file mode 100644 index 000000000..a63343776 --- /dev/null +++ b/web/app/controllers/videos_controller.rb @@ -0,0 +1,8 @@ + +class VideosController < ApplicationController + + def show_dialog + @video_id = @params[:video_id] + end + +end \ No newline at end of file diff --git a/web/app/views/layouts/minimal.html.erb b/web/app/views/layouts/minimal.html.erb new file mode 100644 index 000000000..e0f490bab --- /dev/null +++ b/web/app/views/layouts/minimal.html.erb @@ -0,0 +1,60 @@ + + + + <%= full_title(yield(:title)) %> + + + + + + <%= stylesheet_link_tag "minimal/minimal", media: "all" %> + <% if bugsnag? %> + + + <% end %> + <%= include_gon(:init => true) %> + <%= csrf_meta_tags %> + <% if content_for?(:social_meta) %> + <%= yield(:social_meta) %> + <% else %> + <%= render "layouts/social_meta" %> + <% end %> + + +
+ <%= javascript_include_tag "minimal/minimal" %> + <%= yield %> +
+ + + + <%= render "shared/ga" %> + + + +c \ No newline at end of file diff --git a/web/app/views/videos/show_dialog.html.haml b/web/app/views/videos/show_dialog.html.haml new file mode 100644 index 000000000..e69de29bb diff --git a/web/config/application.rb b/web/config/application.rb index 5f1e18959..5175e0e1d 100644 --- a/web/config/application.rb +++ b/web/config/application.rb @@ -83,6 +83,7 @@ if defined?(Bundler) config.assets.precompile += %w( landing/landing.js landing/landing.css ) config.assets.precompile += %w( corp/corporate.js corp/corporate.css ) config.assets.precompile += %w( web/web.js web/web.css ) + config.assets.precompile += %w( minimal/minimal.js minimal/minimal.css ) # where is rabbitmq? diff --git a/web/config/routes.rb b/web/config/routes.rb index 9f95134a5..7408b0f1e 100644 --- a/web/config/routes.rb +++ b/web/config/routes.rb @@ -63,6 +63,8 @@ SampleApp::Application.routes.draw do match '/events/:slug', to: 'events#show', :via => :get, :as => 'event' + match '/video/dialog/:id', to: 'videos#show', :via => :get + # temporarily allow for debugging--only allows admini n match '/listen_in', to: 'spikes#listen_in' diff --git a/web/spec/features/feed_spec.rb b/web/spec/features/feed_spec.rb index 49c98b9d0..343d26bb7 100644 --- a/web/spec/features/feed_spec.rb +++ b/web/spec/features/feed_spec.rb @@ -3,12 +3,17 @@ require 'spec_helper' describe "Feed", :js => true, :type => :feature, :capybara_feature => true do let (:user) { FactoryGirl.create(:user) } - + + before(:all) do + MusicSessionHistory.delete_all + Recording.delete_all + end + describe "sessions" do before(:each) do - create_session(user) + create_session(creator: user) formal_leave_by(user) end diff --git a/web/spec/features/home_spec.rb b/web/spec/features/home_spec.rb index b4a529407..31abb2387 100644 --- a/web/spec/features/home_spec.rb +++ b/web/spec/features/home_spec.rb @@ -114,7 +114,7 @@ describe "Home Screen", :js => true, :type => :feature, :capybara_feature => tru describe 'Home Screen while in Native Client' do before(:each) do UserMailer.deliveries.clear - page.driver.headers = { 'User-Agent' => ' JamKazam ' } + emulate_client sign_in_poltergeist user visit "/client" end diff --git a/web/spec/features/in_session_spec.rb b/web/spec/features/in_session_spec.rb index 992e459a9..bb24708da 100644 --- a/web/spec/features/in_session_spec.rb +++ b/web/spec/features/in_session_spec.rb @@ -5,8 +5,6 @@ describe "In a Session", :js => true, :type => :feature, :capybara_feature => tr subject { page } before(:all) do - Capybara.javascript_driver = :poltergeist - Capybara.current_driver = Capybara.javascript_driver Capybara.default_wait_time = 15 end @@ -20,26 +18,29 @@ describe "In a Session", :js => true, :type => :feature, :capybara_feature => tr it "can't see a private session until it is made public", :slow => true do - pending "fails on build server" - create_session(user, description = "Public or private, I cant decide!") + description = "Public or private, I cant decide!" + create_session(creator: user, description: description) in_client(user) do set_session_as_private end in_client(finder) do + emulate_client sign_in_poltergeist finder visit "/client#/findSession" expect(page).to have_selector('#sessions-none-found') # verify private session is not found + sign_out_poltergeist(validate: true) end in_client(user) do set_session_as_public end - join_session(finder, description) # verify the public session is able to be joined + join_session(finder, description: description) # verify the public session is able to be joined end it "can open the Configure Tracks modal, and Add New Audio Gear", :slow => true do - create_session(user, description = "I'm gonna bail at some point!") - join_session(finder, description) + description = "I'm gonna bail at some point!" + create_session(creator: user, description: description) + join_session(finder, description: description) assert_all_tracks_seen(users=[user, finder]) @@ -72,7 +73,7 @@ describe "In a Session", :js => true, :type => :feature, :capybara_feature => tr end it "a user can change the genre and the Find Session screen will be updated" do - create_session(user) + create_session(creator: user) in_client(finder) { sign_in_poltergeist finder } 2.times do in_client(user) do @@ -83,4 +84,16 @@ describe "In a Session", :js => true, :type => :feature, :capybara_feature => tr end end end + + it "can rejoin private session as creator" do + creator, description = create_join_session(user, [finder]) + + in_client(user) do + set_session_as_private + formal_leave_by user + sign_out_poltergeist user + end + + join_session(user, description: description) + end end diff --git a/web/spec/features/twitter_auth_spec.rb b/web/spec/features/twitter_auth_spec.rb index 5c20e5076..40962ef94 100644 --- a/web/spec/features/twitter_auth_spec.rb +++ b/web/spec/features/twitter_auth_spec.rb @@ -25,7 +25,7 @@ describe "Welcome", :js => true, :type => :feature, :capybara_feature => true d User.where(email: 'twitter_user1@jamkazam.com').delete_all User.where(email: 'twitter_user2@jamkazam.com').delete_all - page.driver.headers = { 'User-Agent' => ' JamKazam ' } + emulate_client sign_in_poltergeist user visit "/" find('h1', text: 'Play music together over the Internet as if in the same room') diff --git a/web/spec/features/welcome_spec.rb b/web/spec/features/welcome_spec.rb index 355593c3d..7c23d26e7 100644 --- a/web/spec/features/welcome_spec.rb +++ b/web/spec/features/welcome_spec.rb @@ -16,7 +16,7 @@ describe "Welcome", :js => true, :type => :feature, :capybara_feature => true d MusicSessionHistory.delete_all Recording.delete_all - page.driver.headers = { 'User-Agent' => ' JamKazam ' } + emulate_client visit "/" find('h1', text: 'Play music together over the Internet as if in the same room') diff --git a/web/spec/features/whats_next_spec.rb b/web/spec/features/whats_next_spec.rb index 4562dbdb3..9073e09ce 100644 --- a/web/spec/features/whats_next_spec.rb +++ b/web/spec/features/whats_next_spec.rb @@ -12,7 +12,7 @@ describe "Home Screen", :js => true, :type => :feature, :capybara_feature => tru before(:each) do sign_in_poltergeist user - page.driver.headers = { 'User-Agent' => ' JamKazam ' } + emulate_client visit "/client" end @@ -62,7 +62,7 @@ describe "Home Screen", :js => true, :type => :feature, :capybara_feature => tru # needed because we poke the server with an updateUser call, but their is no indication in the UI that it's done wait_for_ajax - page.driver.headers = { 'User-Agent' => ' JamKazam ' } + emulate_client sleep 1 visit "/client" wait_until_curtain_gone diff --git a/web/spec/support/utilities.rb b/web/spec/support/utilities.rb index 8529365e1..74474cc65 100644 --- a/web/spec/support/utilities.rb +++ b/web/spec/support/utilities.rb @@ -187,14 +187,17 @@ 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 = nil, genre = nil) - unique_session_desc ||= "create_join_session #{SecureRandom.urlsafe_base64}" - genre ||= 'Rock' +def create_session(options={}) + creator = options[:creator] || FactoryGirl.create(:user) + unique_session_desc = options[:description] || "create_join_session #{SecureRandom.urlsafe_base64}" + genre = options[:genre] || 'Rock' + musician_access = options[:musician_access].nil? ? true : options[:musician_access] + fan_access = options[:fan_access].nil? ? true : options[:fan_access] # create session in one client in_client(creator) do page.driver.resize(1500, 800) # makes sure all the elements are visible - page.driver.headers = { 'User-Agent' => ' JamKazam ' } + emulate_client sign_in_poltergeist creator wait_until_curtain_gone visit "/client#/createSession" @@ -204,8 +207,9 @@ def create_session(creator = FactoryGirl.create(:user), unique_session_desc = ni fill_in('description', :with => unique_session_desc) #select(genre, :from => 'genres', :visible => false) # this works, but is 'cheating' because easydropdown hides the native select element jk_select(genre, '#create-session-form select[name="genres"]') - jk_select('Public', '#create-session-form select#musician-access') - jk_select('Public', '#create-session-form select#fan-access') + + jk_select(musician_access ? 'Public' : 'Private', '#create-session-form select#musician-access') + jk_select(fan_access ? 'Public' : 'Private', '#create-session-form select#fan-access') find('#create-session-form div.musician-access-false.iradio_minimal').trigger(:click) find('div.intellectual-property ins').trigger(:click) find('#btn-create-session').trigger(:click) # fails if page width is low @@ -220,18 +224,20 @@ def create_session(creator = FactoryGirl.create(:user), unique_session_desc = ni 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 multiple matches -def join_session(joiner, unique_session_desc) +def join_session(joiner, options) + description = options[:description] in_client(joiner) do + page.driver.resize(1500, 800) # makes sure all the elements are visible + emulate_client 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) + expect(page).to have_text(description) find('.join-link').trigger(:click) find('#btn-accept-terms').trigger(:click) expect(page).to have_selector('h2', text: 'my tracks') @@ -240,13 +246,21 @@ def join_session(joiner, unique_session_desc) end -def create_join_session(creator, joiners=[], genre=nil) - creator, unique_session_desc = create_session(creator, nil, genre) + +def emulate_client + page.driver.headers = { 'User-Agent' => ' JamKazam ' } +end + +def create_join_session(creator, joiners=[], options={}) + options[:creator] = creator + creator, unique_session_desc = create_session(options) # find session in second client joiners.each do |joiner| - join_session(joiner, unique_session_desc) + join_session(joiner, description: unique_session_desc) end + + return creator, unique_session_desc end def formal_leave_by user @@ -258,7 +272,7 @@ def formal_leave_by user end def start_recording_with(creator, joiners=[], genre=nil) - create_join_session(creator, joiners, genre) + create_join_session(creator, joiners, {genre: genre}) in_client(creator) do find('#recording-start-stop').trigger(:click) find('#recording-status').should have_content 'Stop Recording' @@ -299,15 +313,17 @@ end def set_session_as_private() find('#session-settings-button').trigger(:click) within('#session-settings-dialog') do - select('Private', :from => 'session-settings-musician-access') - find('#session-settings-dialog-submit').trigger(:click) + jk_select("Private", '#session-settings-dialog #session-settings-musician-access') + #select('Private', :from => 'session-settings-musician-access') + find('#session-settings-dialog-submit').trigger(:click) end end def set_session_as_public() find('#session-settings-button').trigger(:click) within('#session-settings-dialog') do - select('Public', :from => 'session-settings-musician-access') + jk_select("Public", '#session-settings-dialog #session-settings-musician-access') + # select('Public', :from => 'session-settings-musician-access') find('#session-settings-dialog-submit').trigger(:click) end end