205 lines
7.0 KiB
Ruby
205 lines
7.0 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_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" 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
|
|
start_recording_with(creator, [joiner1])
|
|
in_client(joiner1) { stop_recording }
|
|
check_recording_finished_for([creator, joiner1])
|
|
end
|
|
|
|
# confirms that a formal leave (by hitting the 'Leave' button) will result in a good recording
|
|
it "creator starts and then leaves" do
|
|
start_recording_with(creator, [joiner1])
|
|
in_client(creator) do
|
|
find('#session-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
|
|
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 a 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
|
|
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 a 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 a Recording'
|
|
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
|
|
|
|
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.genres[0])
|
|
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.genres[0])
|
|
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
|
|
|
|
|