Merge branch 'develop' of bitbucket.org:jamkazam/jam-cloud into develop
This commit is contained in:
commit
4d94f85421
|
|
@ -21,6 +21,8 @@
|
|||
var $templateOpenSlots = null;
|
||||
var instrument_logo_map = context.JK.getInstrumentIconMap24();
|
||||
var invitationDialog = null;
|
||||
var inviteMusiciansUtil = null;
|
||||
var friendInput=null;
|
||||
|
||||
|
||||
var LATENCY = {
|
||||
|
|
@ -42,7 +44,11 @@
|
|||
function inviteMusicians(e) {
|
||||
e.preventDefault();
|
||||
|
||||
invitationDialog.showEmailDialog();
|
||||
friendInput = inviteMusiciansUtil.inviteSessionUpdate('#update-session-invite-musicians',
|
||||
sessionId);
|
||||
inviteMusiciansUtil.loadFriends();
|
||||
$(friendInput).show();
|
||||
// invitationDialog.showEmailDialog();
|
||||
}
|
||||
|
||||
function cancelRsvpRequest(e) {
|
||||
|
|
@ -120,6 +126,7 @@
|
|||
$sessionPageBtn.on('click', openSessionPage);
|
||||
$screen.find(".approveRsvpRequest").on('click', approveRsvpRequest);
|
||||
$screen.find(".declineRsvpRequest").on('click', declineRsvpRequest);
|
||||
$(friendInput).focus(function() { $(this).val(''); })
|
||||
|
||||
$screen.find(".cancelSessionRsvp").on('click', function(e) {
|
||||
e.preventDefault();
|
||||
|
|
@ -393,6 +400,10 @@
|
|||
$sessionDetail = $screen.find("#account-session-detail-div");
|
||||
$shareUrl = $screen.find('.share-url');
|
||||
invitationDialog = invitationDlg;
|
||||
|
||||
inviteMusiciansUtil = new JK.InviteMusiciansUtil(JK.app);
|
||||
inviteMusiciansUtil.initialize(JK.FriendSelectorDialogInstance);
|
||||
|
||||
$templateOpenSlots = $('#template-open-slots');
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -59,6 +59,8 @@
|
|||
addInvitation(dd.name, dd.id);
|
||||
});
|
||||
}).fail(app.ajaxError);
|
||||
|
||||
return friendInput;
|
||||
}
|
||||
|
||||
this.clearSelections = function() {
|
||||
|
|
@ -133,7 +135,7 @@
|
|||
|
||||
} else {
|
||||
$(friendInput).select();
|
||||
context.alert('Invitation already exists for this musician.');
|
||||
// context.alert('Invitation already exists for this musician.');
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@
|
|||
var playbackControls = null;
|
||||
var promptLeave = false;
|
||||
var rateSessionDialog = null;
|
||||
var friendInput=null;
|
||||
|
||||
var rest = context.JK.Rest();
|
||||
|
||||
|
|
@ -133,6 +134,7 @@
|
|||
.done(function(){
|
||||
initializeSession();
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
function notifyWithUserInfo(title , text, clientId) {
|
||||
|
|
@ -1354,7 +1356,10 @@
|
|||
}
|
||||
|
||||
function inviteMusicians() {
|
||||
inviteMusiciansUtil.inviteSessionUpdate('#update-session-invite-musicians', sessionId);
|
||||
friendInput = inviteMusiciansUtil.inviteSessionUpdate('#update-session-invite-musicians',
|
||||
sessionId);
|
||||
inviteMusiciansUtil.loadFriends();
|
||||
$(friendInput).show();
|
||||
}
|
||||
|
||||
function events() {
|
||||
|
|
@ -1365,6 +1370,7 @@
|
|||
$('#recording-start-stop').on('click', startStopRecording);
|
||||
$('#open-a-recording').on('click', openRecording);
|
||||
$('#session-invite-musicians').on('click', inviteMusicians);
|
||||
$('#session-invite-musicians2').on('click', inviteMusicians);
|
||||
$('#track-settings').click(function() {
|
||||
configureTrackDialog.refresh();
|
||||
configureTrackDialog.showVoiceChatPanel(true);
|
||||
|
|
@ -1376,6 +1382,7 @@
|
|||
.on('pause', onPause)
|
||||
.on('play', onPlay)
|
||||
.on('change-position', onChangePlayPosition);
|
||||
$(friendInput).focus(function() { $(this).val(''); })
|
||||
}
|
||||
|
||||
this.initialize = function(localRecordingsDialogInstance, recordingFinishedDialogInstance, friendSelectorDialog) {
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@
|
|||
.right
|
||||
%a.cancel-rsvp.button-orange{href: "#"} CANCEL RSVP
|
||||
%a.session-detail-page.button-orange{href: "#", rel:'external'} SESSION PAGE
|
||||
%a.invite-others.button-orange{href: "#"} INVITE OTHERS
|
||||
%a.invite-others.button-orange{'layout-link' => 'select-invites','href' => "#"} INVITE OTHERS
|
||||
.clearall
|
||||
|
||||
#account-session-detail-div
|
||||
|
|
@ -160,4 +160,4 @@
|
|||
|
||||
%script{type: 'text/template', id: 'template-account-session-latency'}
|
||||
.latency{class: "{{data.latency_style}}"}
|
||||
{{data.latency_text}}
|
||||
{{data.latency_text}}
|
||||
|
|
|
|||
|
|
@ -78,7 +78,7 @@
|
|||
<div id="session-livetracks-container">
|
||||
<p class="when-empty">
|
||||
No Live Tracks:<br/>
|
||||
<a>Invite Other Musicians</a> to<br/>
|
||||
<a layout-link="select-invites", href="#" id="session-invite-musicians2">Invite Other Musicians</a> to<br/>
|
||||
Add Live Tracks
|
||||
</p>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe "Create Session Flow", :js => true, :type => :feature, :capybara_feature => true do
|
||||
describe "Create Session UI", :js => true, :type => :feature, :capybara_feature => true do
|
||||
let(:user1) { FactoryGirl.create(:user) }
|
||||
let(:user2) { FactoryGirl.create(:user) }
|
||||
|
||||
|
|
@ -13,8 +13,7 @@ describe "Create Session Flow", :js => true, :type => :feature, :capybara_featur
|
|||
page.driver.resize(1500, 800) # makes sure all the elements are visible
|
||||
emulate_client
|
||||
sign_in_poltergeist user1
|
||||
wait_until_curtain_gone
|
||||
visit "/client#/createSession"
|
||||
page.find('.createsession').trigger(:click)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -211,48 +210,4 @@ describe "Create Session Flow", :js => true, :type => :feature, :capybara_featur
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "create session flow backend" do
|
||||
describe "schedule a session" do
|
||||
it "schedule a session" do
|
||||
schedule_session({creator: user1})
|
||||
end
|
||||
|
||||
it "start a session after scheduling" do
|
||||
MusicSession.delete_all
|
||||
|
||||
schedule_session({creator: user1})
|
||||
|
||||
in_client(user1) do
|
||||
visit "/client#/createSession"
|
||||
|
||||
find('li[create-type="start-scheduled"] ins').trigger(:click)
|
||||
|
||||
find('.btn-next').trigger(:click)
|
||||
find('.btn-next').trigger(:click)
|
||||
|
||||
expect(page).to have_selector('h2', text: 'my tracks')
|
||||
find('#session-screen .session-mytracks .session-track')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
it "start quick session" do
|
||||
page.driver.resize(1500, 800) # makes sure all the elements are visible
|
||||
emulate_client
|
||||
sign_in_poltergeist user1
|
||||
wait_until_curtain_gone
|
||||
visit "/client#/createSession"
|
||||
expect(page).to have_selector('h1', text: 'create session')
|
||||
|
||||
find('li[create-type="quick-start"] ins').trigger(:click)
|
||||
find('div[info-id="quick-start"]')
|
||||
|
||||
find('.btn-next').trigger(:click)
|
||||
find('.btn-next', text: 'START SESSION').trigger(:click)
|
||||
|
||||
expect(page).to have_selector('h2', text: 'my tracks')
|
||||
find('#session-screen .session-mytracks .session-track')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,231 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe "Create Session", :js => true, :type => :feature, :capybara_feature => true do
|
||||
let(:user1) { FactoryGirl.create(:user) }
|
||||
let(:user2) { FactoryGirl.create(:user) }
|
||||
|
||||
context "functionally test all ways to Create Session" do
|
||||
|
||||
context "I have already scheduled a session..." do
|
||||
let (:now) { Time.now - 5.hours }
|
||||
let (:first_session) { FactoryGirl.create(:music_session, creator: user1, name: "First one", scheduled_start: now + 5.minutes) }
|
||||
let (:second_session) { FactoryGirl.create(:music_session, creator: user1, name: "Second one", scheduled_start: now + 2.hours) }
|
||||
let (:third_session) { FactoryGirl.create(:music_session, creator: user1, name: "Third one", scheduled_start: now + 17.days) }
|
||||
let (:not_my_session) { FactoryGirl.create(:music_session, creator: user2, name: "Who cares", scheduled_start: now + 30.minutes) }
|
||||
|
||||
before do
|
||||
#instantiate these test sessions in non-sequential order
|
||||
third_session.touch; first_session.touch; not_my_session.touch; second_session.touch;
|
||||
#[first_session, second_session, third_session, not_my_session].each { |s| puts "#{s.name}: #{s.id}" }
|
||||
|
||||
emulate_client
|
||||
page.driver.resize(1500, 800) #purely aesthetic
|
||||
sign_in_poltergeist user1
|
||||
find('.createsession').trigger(:click)
|
||||
wait_for_ajax
|
||||
expect(page).to have_selector 'li[create-type="start-scheduled"] ins'
|
||||
end
|
||||
|
||||
it "sessions are shown in schedule order on the Create Session screen" do
|
||||
sleep 2 #arg
|
||||
radio_buttons = page.all('ul#scheduled-session-list li')
|
||||
first, second, third = *radio_buttons[0..2]
|
||||
expect(first.text).to include first_session.name
|
||||
expect(second.text).to include second_session.name
|
||||
expect(third.text).to include third_session.name
|
||||
expect(first).to have_selector 'input[checked=checked]'
|
||||
expect(page).to_not have_text not_my_session.name
|
||||
end
|
||||
|
||||
it "future sessions can be edited from the Create Session screen" do
|
||||
#pending "possible bug, does not occur when testing manually"
|
||||
page.find('a#edit_scheduled_sessions').trigger(:click)
|
||||
#expect(page).to have_selector "div[data-id='#{first_session.id}']" #see pending note
|
||||
expect(page).to have_selector "div[data-id='#{second_session.id}']"
|
||||
expect(page).to have_selector "div[data-id='#{third_session.id}']"
|
||||
expect(page).to_not have_selector "div[data-id='#{not_my_session.id}']"
|
||||
end
|
||||
|
||||
context "...start it now" do
|
||||
it "starts the first one" do
|
||||
sleep 1
|
||||
find('.btn-next').trigger(:click)
|
||||
sleep 1
|
||||
expect(page).to have_selector('.session-step-title', text: 'Review & Confirm')
|
||||
expect(page).to have_content first_session.name
|
||||
find('.btn-next').trigger(:click)
|
||||
expect(page).to have_selector('h2', text: 'my tracks')
|
||||
find('#session-screen .session-mytracks .session-track')
|
||||
end
|
||||
|
||||
context "attempt to start a session more than an hour from now" do
|
||||
let (:first_session) { FactoryGirl.create(:music_session, creator: user1, scheduled_start: now + 75.minutes) }
|
||||
|
||||
it "warns the user that session starts in the future, and user can start session" do
|
||||
sleep 1
|
||||
find('.btn-next').trigger(:click)
|
||||
sleep 2
|
||||
expect(page).to have_selector('h1', text: 'Future Session')
|
||||
expect(page).to have_content "Are you sure"
|
||||
find('#btn-confirm-ok', text: 'Start Session Now').trigger(:click)
|
||||
sleep 1
|
||||
expect(page).to have_selector('.session-step-title', text: 'Review & Confirm')
|
||||
expect(page).to have_content first_session.name
|
||||
find('.btn-next').trigger(:click)
|
||||
expect(page).to have_selector('h2', text: 'my tracks')
|
||||
find('#session-screen .session-mytracks .session-track')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
shared_examples_for :a_future_session do
|
||||
specify "creator can see the session on Create Session page" do
|
||||
in_client(creator) do
|
||||
page.find('.createsession').trigger(:click)
|
||||
expect(page).to have_selector('h1', text: 'create session')
|
||||
sessions = page.first('ul#scheduled-session-list li')
|
||||
expect(sessions.text).to include session_name
|
||||
end
|
||||
end
|
||||
|
||||
specify "creator can see the session on Find Session page" do
|
||||
in_client(creator) do
|
||||
visit "/client#/findSession"
|
||||
wait_until_curtain_gone
|
||||
expect(page).to have_selector('#session-name-disp', text: "#{session_name} (#{session_genre})")
|
||||
#expect(page).to have_selector('#session-name-disp', text: @session_genre)
|
||||
end
|
||||
end
|
||||
|
||||
specify "another user can see the session on Find Session page" do
|
||||
in_client(someone_else) do
|
||||
emulate_client
|
||||
page.driver.resize(1500, 800)
|
||||
sign_in_poltergeist someone_else
|
||||
visit "/client#/findSession"
|
||||
wait_until_curtain_gone
|
||||
expect(find('table#sessions-scheduled')).to have_content session_name
|
||||
expect(find('table#sessions-scheduled')).to have_content session_genre
|
||||
end
|
||||
end
|
||||
|
||||
specify "another user can RSVP to the session" do
|
||||
in_client(someone_else) do
|
||||
emulate_client
|
||||
page.driver.resize(1500, 800)
|
||||
sign_in_poltergeist someone_else
|
||||
visit "/client#/findSession"
|
||||
wait_until_curtain_gone
|
||||
|
||||
within('table#sessions-scheduled') do
|
||||
find('a.rsvp-link').trigger(:click)
|
||||
end
|
||||
|
||||
within('div.dialog-inner') do
|
||||
find('div.session-name').should have_content session_name
|
||||
find('div.slot-instructions').should have_content "Check the box(es) next to the track(s) you want to play"
|
||||
# fill_in '.txtComment', with: "Looking forward to the session"
|
||||
#first('div.rsvp-instruments input').trigger(:click)
|
||||
sleep 1
|
||||
find('#btnSubmitRsvp').trigger(:click)
|
||||
sleep 2
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
specify "creator can start the session" do
|
||||
in_client(creator) do
|
||||
page.find('.createsession').trigger(:click)
|
||||
expect(page).to have_selector('h1', text: 'create session')
|
||||
expect(page).to have_content session_name
|
||||
find('li[create-type="start-scheduled"] ins').trigger(:click)
|
||||
find('.btn-next').trigger(:click)
|
||||
find('.btn-next').trigger(:click)
|
||||
expect(page).to have_selector('h2', text: 'my tracks')
|
||||
find('#session-screen .session-mytracks .session-track')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "I want to schedule a session for a specific future time" do
|
||||
before do
|
||||
MusicSession.delete_all
|
||||
@creator, @session_name, @session_genre = schedule_session(creator: user1)
|
||||
end
|
||||
|
||||
it_should_behave_like :a_future_session do
|
||||
let(:creator) { @creator }
|
||||
let(:session_name) { @session_name }
|
||||
let(:session_genre) { @session_genre }
|
||||
let(:someone_else) { FactoryGirl.create(:user) }
|
||||
end
|
||||
end
|
||||
|
||||
context "I want to choose the time after others RSVP to my session" do
|
||||
before do
|
||||
MusicSession.delete_all
|
||||
@creator, @session_name, @session_genre = schedule_session(creator: user1, rsvp: true)
|
||||
end
|
||||
|
||||
it_should_behave_like :a_future_session do
|
||||
let(:creator) { @creator }
|
||||
let(:session_name) { @session_name }
|
||||
let(:session_genre) { @session_genre }
|
||||
let(:someone_else) { FactoryGirl.create(:user) }
|
||||
end
|
||||
end
|
||||
|
||||
context "I want to start a new session right now for others to join" do
|
||||
before do
|
||||
MusicSession.delete_all
|
||||
@creator, @session_name, @session_genre = schedule_session(creator: user1, immediate: true)
|
||||
end
|
||||
|
||||
specify "creator is in the session" do
|
||||
in_client @creator do
|
||||
expect(page).to have_selector('h2', text: 'my tracks')
|
||||
find('#session-screen .session-mytracks .session-track')
|
||||
end
|
||||
end
|
||||
|
||||
specify "another user can see this active session on Find Session page" do
|
||||
in_client(user2) do
|
||||
emulate_client
|
||||
page.driver.resize(1500, 800)
|
||||
sign_in_poltergeist user2
|
||||
visit "/client#/findSession"
|
||||
wait_until_curtain_gone
|
||||
expect(find('table#sessions-active')).to have_content @session_name
|
||||
expect(find('table#sessions-active')).to have_content @session_genre
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "I want to quick start a test session just for me" do
|
||||
before do
|
||||
MusicSession.delete_all
|
||||
@creator, @session_name, @session_genre = schedule_session(creator: user1, quickstart: true)
|
||||
end
|
||||
|
||||
specify "creator is in the session" do
|
||||
in_client @creator do
|
||||
expect(page).to have_selector('h2', text: 'my tracks')
|
||||
find('#session-screen .session-mytracks .session-track')
|
||||
end
|
||||
end
|
||||
|
||||
specify "another user does NOT see the session on Find Session page" do
|
||||
in_client(user2) do
|
||||
emulate_client
|
||||
page.driver.resize(1500, 800)
|
||||
sign_in_poltergeist user2
|
||||
visit "/client#/findSession"
|
||||
wait_until_curtain_gone
|
||||
expect(find('table#sessions-scheduled')).to_not have_content @session_name
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -335,6 +335,9 @@ def schedule_session(options = {})
|
|||
fan_chat = options[:fan_chat].nil? ? false : options[:fan_chat]
|
||||
musician_access_value = 'Musicians may join by approval'
|
||||
fan_permission_value = 'Fans may listen, chat with each other'
|
||||
rsvp = options[:rsvp]
|
||||
immediate = options[:immediate]
|
||||
quickstart = options[:quickstart]
|
||||
|
||||
if musician_access && !approval_required
|
||||
musician_access_value = 'Musicians may join at will'
|
||||
|
|
@ -356,26 +359,40 @@ def schedule_session(options = {})
|
|||
expect(page).to have_selector('h1', text: 'create session')
|
||||
|
||||
within('#create-session-form') do
|
||||
|
||||
find('li[create-type="schedule-future"] ins').trigger(:click)
|
||||
find('.btn-next').trigger(:click)
|
||||
|
||||
jk_select(genre, '#create-session-form select[name="genres"]')
|
||||
fill_in('session-name', :with => unique_session_name)
|
||||
fill_in('session-description', :with => unique_session_desc)
|
||||
find('.btn-next').trigger(:click)
|
||||
if rsvp
|
||||
find('li[create-type="rsvp"] ins').trigger(:click)
|
||||
elsif immediate
|
||||
find('li[create-type="immediately"] ins').trigger(:click)
|
||||
elsif quickstart
|
||||
find('li[create-type="quick-start"] ins').trigger(:click)
|
||||
else
|
||||
find('li[create-type="schedule-future"] ins').trigger(:click)
|
||||
end
|
||||
|
||||
find('.btn-next').trigger(:click)
|
||||
|
||||
find('div#divSessionPolicy ins').trigger(:click)
|
||||
jk_select(musician_access_value, '#session-musician-access')
|
||||
jk_select(fan_permission_value, '#session-fans-access')
|
||||
find('.btn-next').trigger(:click)
|
||||
unless quickstart
|
||||
jk_select(genre, '#create-session-form select[name="genres"]')
|
||||
fill_in('session-name', :with => unique_session_name)
|
||||
fill_in('session-description', :with => unique_session_desc)
|
||||
find('.btn-next').trigger(:click)
|
||||
|
||||
find('.btn-next', text: 'PUBLISH SESSION').trigger(:click)
|
||||
find('.btn-next').trigger(:click)
|
||||
|
||||
find('div#divSessionPolicy ins').trigger(:click)
|
||||
jk_select(musician_access_value, '#session-musician-access')
|
||||
jk_select(fan_permission_value, '#session-fans-access')
|
||||
find('.btn-next').trigger(:click)
|
||||
end
|
||||
|
||||
unless quickstart || immediate
|
||||
find('.btn-next', text: 'PUBLISH SESSION').trigger(:click)
|
||||
else
|
||||
find('.btn-next', text: 'START SESSION').trigger(:click)
|
||||
end
|
||||
end
|
||||
|
||||
find('h2', text: 'create session')
|
||||
# find('h2', text: 'create session') unless quickstart || immediate
|
||||
|
||||
sleep 1 # to get rid of this, we need to verify that the URL is /client#/home.. otherwise intermittent fails
|
||||
end
|
||||
|
|
|
|||
Loading…
Reference in New Issue