281 lines
9.5 KiB
Ruby
281 lines
9.5 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe "Session Recordings", :js => true, :type => :feature, :capybara_feature => true, :slow => true do
|
|
|
|
subject { page }
|
|
|
|
before(:all) do
|
|
Capybara.javascript_driver = :poltergeist
|
|
Capybara.current_driver = Capybara.javascript_driver
|
|
Capybara.default_max_wait_time = 30 # these tests are SLOOOOOW
|
|
end
|
|
|
|
let(:creator) { FactoryGirl.create(:user) }
|
|
let(:joiner1) { FactoryGirl.create(:user) }
|
|
let(:joiner2) { FactoryGirl.create(:user) }
|
|
let(:some_genre) { random_genre }
|
|
|
|
before(:each) do
|
|
ActiveMusicSession.delete_all
|
|
end
|
|
|
|
# creates a recording, and stops it, and confirms the 'Finished Recording' dialog shows for both
|
|
it "creator start/stop", intermittent: true do
|
|
start_recording_with(creator, [joiner1])
|
|
in_client(creator) { stop_recording }
|
|
check_recording_finished_for([creator, joiner1])
|
|
end
|
|
|
|
# confirms that anyone can start/stop a recording
|
|
it "creator starts and other stops" do
|
|
pending "popup problems"
|
|
start_recording_with(creator, [joiner1])
|
|
in_client(joiner1) { stop_recording }
|
|
check_recording_finished_for([creator])
|
|
check_recording_finished_for([joiner1])
|
|
end
|
|
|
|
# confirms that a formal leave (by hitting the 'Leave' button) will result in a good recording
|
|
it "creator starts and then leaves", intermittent: true do
|
|
start_recording_with(creator, [joiner1])
|
|
in_client(creator) do
|
|
find('.session-leave.leave').trigger(:click)
|
|
expect(page).to have_selector('h2', text: 'feed')
|
|
end
|
|
|
|
formal_leave_by creator
|
|
check_recording_finished_for [creator, joiner1]
|
|
end
|
|
|
|
# confirms that if someone leaves 'ugly' (without calling 'Leave' REST API), that the recording is junked
|
|
it "creator starts and then abruptly leave" do
|
|
pending "shows 'recording finished'"
|
|
start_recording_with(creator, [joiner1])
|
|
|
|
in_client(creator) do
|
|
visit "/request_reset_password" # kills websocket, looking like an abrupt leave
|
|
end
|
|
|
|
in_client(joiner1) do
|
|
find('#notification').should have_content 'Recording Discarded'
|
|
find('#notification').should have_content 'did not respond to the stop signal'
|
|
find('#recording-status').should have_content 'Make Recording'
|
|
end
|
|
end
|
|
|
|
it "creator starts/stops, with 3 total participants" do
|
|
start_recording_with(creator, [joiner1, joiner2])
|
|
|
|
in_client(creator) do
|
|
stop_recording
|
|
end
|
|
|
|
check_recording_finished_for [creator, joiner1, joiner2]
|
|
end
|
|
|
|
it "creator starts with session leave to stop, with 3 total participants" do
|
|
start_recording_with(creator, [joiner1, joiner2])
|
|
|
|
formal_leave_by creator
|
|
check_recording_finished_for [creator, joiner1, joiner2]
|
|
end
|
|
|
|
|
|
# confirms that if someone leaves 'ugly' (without calling 'Leave' REST API), that the recording is junked with 3 participants
|
|
it "creator starts and then abruptly leave with 3 participants" do
|
|
pending "shows 'recording finished'"
|
|
start_recording_with(creator, [joiner1, joiner2])
|
|
|
|
in_client(creator) do
|
|
visit "/request_reset_password" # kills websocket, looking like an abrupt leave
|
|
end
|
|
|
|
in_client(joiner1) do
|
|
find('#notification').should have_content 'Recording Discarded'
|
|
find('#notification').should have_content 'did not respond to the stop signal'
|
|
find('#recording-status').should have_content 'Make Recording'
|
|
end
|
|
|
|
in_client(joiner2) do
|
|
find('#notification').should have_content 'Recording Discarded'
|
|
find('#notification').should have_content 'did not respond to the stop signal'
|
|
find('#recording-status').should have_content 'Make Recording'
|
|
end
|
|
end
|
|
# POPUP PROBLEMS
|
|
|
|
=begin
|
|
|
|
describe "mixing after the recording" do
|
|
before(:each) do
|
|
|
|
RecordedTrack.delete_all
|
|
ClaimedRecording.delete_all
|
|
MusicSession.delete_all
|
|
ActiveMusicSession.delete_all
|
|
QuickMix.delete_all
|
|
|
|
start_recording_with(creator, [joiner1], some_genre)
|
|
|
|
in_client(joiner1) do
|
|
stop_recording
|
|
end
|
|
|
|
@users = [creator, joiner1]
|
|
check_recording_finished_for @users
|
|
|
|
@music_session = ActiveMusicSession.first()
|
|
@recording = @music_session.recordings.first()
|
|
|
|
@users.each do |user|
|
|
name = "#{user.name}'s recording"
|
|
desc = "#{user.name}'s description"
|
|
|
|
in_client(user) do
|
|
claim_recording(name, desc)
|
|
claimed_recording = @recording.claimed_recordings.where(:user_id => user.id).first
|
|
expect(claimed_recording.name).to eq(name)
|
|
expect(claimed_recording.description).to eq(desc)
|
|
expect(claimed_recording.is_public).to be true
|
|
expect(claimed_recording.genre).to eq(@music_session.genre)
|
|
end
|
|
end
|
|
end
|
|
|
|
it "notifications show" do
|
|
quick_mix = QuickMix.first
|
|
quick_mix.finish(100, 'abc') # should send out notifications to all people who claimed the recording
|
|
|
|
in_client(creator) do
|
|
find('#notification h2', text: 'Recording Stream Mix Complete')
|
|
find('#notification #buttons a', text: 'SHARE').trigger(:click)
|
|
end
|
|
|
|
in_client(joiner1) do
|
|
find('#notification h2', text: 'Recording Stream Mix Complete')
|
|
find('#notification #buttons a', text: 'SHARE').trigger(:click)
|
|
find('h1', text: 'share this recording')
|
|
find('.dialog-inner a.button-orange[layout-action="close"]', text: 'X CLOSE').trigger(:click)
|
|
|
|
open_notifications
|
|
|
|
notification = Notification.where(target_user_id: joiner1.id, recording_id: @recording.id).first!
|
|
|
|
find("li[notification-id='#{notification.id}'] a#btn-notification-action", text: 'SHARE').trigger(:click)
|
|
find('h1', text: 'share this recording')
|
|
find('.dialog-inner a.button-orange[layout-action="close"]', text: 'X CLOSE').trigger(:click)
|
|
|
|
end
|
|
end
|
|
end
|
|
|
|
# creates a recording, and stops it, and confirms the 'Finished Recording' dialog shows for both
|
|
describe "Finished Recording Dialog" do
|
|
before(:each) do
|
|
|
|
RecordedTrack.delete_all
|
|
ClaimedRecording.delete_all
|
|
MusicSession.delete_all
|
|
ActiveMusicSession.delete_all
|
|
QuickMix.delete_all
|
|
|
|
start_recording_with(creator, [joiner1], some_genre)
|
|
|
|
in_client(joiner1) do
|
|
stop_recording
|
|
end
|
|
|
|
@users = [creator, joiner1]
|
|
check_recording_finished_for @users
|
|
end
|
|
|
|
it "discard the recording" do
|
|
# pending "fails intermittently on the build server"
|
|
in_client(creator) do
|
|
find('#recording-finished-dialog h1')
|
|
find('#discard-session-recording').trigger(:click)
|
|
should have_no_selector('h1', text: 'recording finished')
|
|
music_session = ActiveMusicSession.first()
|
|
recording = music_session.recordings.first()
|
|
tracks = recording.recorded_tracks_for_user(creator)
|
|
tracks.length.should == 1
|
|
tracks[0].discard.should be true
|
|
end
|
|
|
|
in_client(joiner1) do
|
|
find('#recording-finished-dialog h1')
|
|
find('#discard-session-recording').trigger(:click)
|
|
should have_no_selector('h1', text: 'recording finished')
|
|
music_session = ActiveMusicSession.first()
|
|
recording = music_session.recordings.first()
|
|
tracks = recording.recorded_tracks_for_user(joiner1)
|
|
tracks.length.should == 1
|
|
tracks[0].discard.should be true
|
|
end
|
|
end
|
|
|
|
it "claim recording with unique names/descriptions" do
|
|
# pending "intermittent failure on build server, hard to repro on local system"
|
|
@users.each do |user|
|
|
name = "#{user.name}'s recording"
|
|
desc = "#{user.name}'s description"
|
|
|
|
in_client(user) do
|
|
claim_recording(name, desc)
|
|
music_session = ActiveMusicSession.first()
|
|
recording = music_session.recordings.first()
|
|
claimed_recording = recording.claimed_recordings.where(:user_id => user.id).first
|
|
expect(claimed_recording.name).to eq(name)
|
|
expect(claimed_recording.description).to eq(desc)
|
|
expect(claimed_recording.is_public).to be true
|
|
expect(claimed_recording.genre).to eq(music_session.genre)
|
|
end
|
|
end
|
|
end
|
|
|
|
it "a 'Recording Name' is required" do
|
|
@users.each do |user|
|
|
in_client(user) do
|
|
find('#recording-finished-dialog h1')
|
|
fill_in "claim-recording-name", with: ''
|
|
fill_in "claim-recording-description", with: "my description"
|
|
find('#keep-session-recording').trigger(:click)
|
|
should have_content("can't be blank")
|
|
save_screenshot("tmp/name#{user.name}.png")
|
|
end
|
|
end
|
|
end
|
|
|
|
it "a 'Description' is optional" do
|
|
# pending "intermittent failure on build server, hard to repro on local system"
|
|
@users.each do |user|
|
|
in_client(user) do
|
|
claim_recording("my recording", '')
|
|
music_session = ActiveMusicSession.first()
|
|
recording = music_session.recordings.first()
|
|
claimed_recording = recording.claimed_recordings.where(:user_id => user.id).first
|
|
expect(claimed_recording.name).to eq("my recording")
|
|
expect(claimed_recording.description).to eq('')
|
|
expect(claimed_recording.is_public).to be true
|
|
expect(claimed_recording.genre).to eq(music_session.genre)
|
|
end
|
|
end
|
|
end
|
|
|
|
it "genre is pre-set with the genre selected for the session" do
|
|
@users.each do |user|
|
|
in_client(user) do
|
|
find('#recording-finished-dialog h1')
|
|
g = selected_genres('#recording-finished-dialog div.genre-selector')
|
|
expect(some_genre).to match(%r{#{g}}i)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
=end
|
|
|
|
end
|
|
|
|
|