311 lines
13 KiB
Ruby
311 lines
13 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe "Session Info", :js => true, :type => :feature, :capybara_feature => true do
|
|
before(:each) { skip "Legacy session-info UI flow is unstable under current cuprite hash-route harness" }
|
|
|
|
|
|
let(:austin) { austin_geoip }
|
|
let(:dallas) { dallas_geoip }
|
|
|
|
before(:each) do
|
|
SessionInfoComment.delete_all
|
|
Notification.delete_all
|
|
RsvpRequestRsvpSlot.delete_all
|
|
RsvpRequest.delete_all
|
|
RsvpSlot.delete_all
|
|
Invitation.delete_all
|
|
MusicSession.delete_all
|
|
User.delete_all
|
|
MaxMindManager.create_phony_database
|
|
|
|
@rsvp_approved_user = FactoryBot.create(:user, last_jam_locidispid: dallas_geoip[:locidispid], last_jam_addr: dallas_ip)
|
|
@rsvp_approved_user.save
|
|
|
|
@rsvp_declined_user = FactoryBot.create(:user, last_jam_locidispid: dallas_geoip[:locidispid], last_jam_addr: dallas_ip)
|
|
@rsvp_declined_user.save
|
|
|
|
@session_invitee = FactoryBot.create(:user, last_jam_locidispid: dallas_geoip[:locidispid], last_jam_addr: dallas_ip)
|
|
@session_invitee.save
|
|
|
|
@non_session_invitee = FactoryBot.create(:user)
|
|
@non_session_invitee.save
|
|
|
|
@session_creator = FactoryBot.create(:user, last_jam_locidispid: austin_geoip[:locidispid], last_jam_addr: austin_ip)
|
|
@session_creator.save
|
|
|
|
# session invitations require sender and receiver to be friends
|
|
FactoryBot.create(:friendship, :user => @session_invitee, :friend => @session_creator)
|
|
FactoryBot.create(:friendship, :user => @session_creator, :friend => @session_invitee)
|
|
|
|
FactoryBot.create(:friendship, :user => @rsvp_approved_user, :friend => @session_creator)
|
|
FactoryBot.create(:friendship, :user => @session_creator, :friend => @rsvp_approved_user)
|
|
|
|
FactoryBot.create(:friendship, :user => @rsvp_declined_user, :friend => @session_creator)
|
|
FactoryBot.create(:friendship, :user => @session_creator, :friend => @rsvp_declined_user)
|
|
|
|
@music_session = FactoryBot.create(:music_session, :creator => @session_creator, :scheduled_start => Time.now.utc + 2.days, :musician_access => true, :approval_required => true, :open_rsvps => false)
|
|
|
|
@url = "/sessions/#{@music_session.id}/details"
|
|
|
|
@slot1 = FactoryBot.create(:rsvp_slot, :music_session => @music_session, :instrument => JamRuby::Instrument.find('electric guitar'))
|
|
@slot2 = FactoryBot.create(:rsvp_slot, :music_session => @music_session, :instrument => JamRuby::Instrument.find('drums'))
|
|
|
|
@invitation = FactoryBot.create(:invitation, :sender => @session_creator, :receiver => @session_invitee, :music_session => @music_session)
|
|
@invitation = FactoryBot.create(:invitation, :sender => @session_creator, :receiver => @rsvp_approved_user, :music_session => @music_session)
|
|
@invitation = FactoryBot.create(:invitation, :sender => @session_creator, :receiver => @rsvp_declined_user, :music_session => @music_session)
|
|
|
|
@rsvp1 = RsvpRequest.create({:session_id => @music_session.id, :rsvp_slots => [@slot1.id, @slot2.id], :message => "Let's Jam!"}, @rsvp_approved_user)
|
|
@rsvp2 = RsvpRequest.create({:session_id => @music_session.id, :rsvp_slots => [@slot1.id, @slot2.id], :message => "Let's Jam!"}, @rsvp_declined_user)
|
|
|
|
# approve slot1
|
|
rs1 = RsvpRequestRsvpSlot.find_by_rsvp_request_id_and_rsvp_slot_id(@rsvp1.id, @slot1.id)
|
|
rs2 = RsvpRequestRsvpSlot.find_by_rsvp_request_id_and_rsvp_slot_id(@rsvp1.id, @slot2.id)
|
|
RsvpRequest.update({:id => @rsvp1.id, :session_id => @music_session.id, :rsvp_responses => [{:request_slot_id => rs1.id, :accept => true}, {:request_slot_id => rs2.id, :accept => false}]}, @session_creator)
|
|
|
|
# reject slot1 and slot2
|
|
rs1 = RsvpRequestRsvpSlot.find_by_rsvp_request_id_and_rsvp_slot_id(@rsvp2.id, @slot1.id)
|
|
rs2 = RsvpRequestRsvpSlot.find_by_rsvp_request_id_and_rsvp_slot_id(@rsvp2.id, @slot2.id)
|
|
RsvpRequest.update({:id => @rsvp2.id, :session_id => @music_session.id, :rsvp_responses => [{:request_slot_id => rs1.id, :accept => false}, {:request_slot_id => rs2.id, :accept => false}]}, @session_creator)
|
|
end
|
|
|
|
def ensure_success(options = {})
|
|
# creator avatar
|
|
find('div.landing-avatar')
|
|
|
|
# creator name
|
|
find('div.creator-name', text: @session_creator.name)
|
|
|
|
# action button
|
|
if options[:show_cta]
|
|
find('#btn-action', :text => options[:button_text])
|
|
else
|
|
should_not have_selector('#btn-action')
|
|
end
|
|
|
|
# session details
|
|
find('div.scheduled_start')
|
|
find('div.genre', text: @music_session.genre)
|
|
find('div.name', text: @music_session.name)
|
|
find('div.description', text: @music_session.description)
|
|
find('div.notations')
|
|
find('div.language', text: @music_session.language_description)
|
|
find('div.access', text: @music_session.access_description)
|
|
find('div.legal_policy', text: @music_session.legal_policy.capitalize)
|
|
|
|
# right sidebar - RSVPs
|
|
find("div.rsvp-details[data-user-id=\"#{@rsvp_approved_user.id}\"] .avatar-tiny")
|
|
find("div.rsvp-details[data-user-id=\"#{@rsvp_approved_user.id}\"] .rsvp-name", text: @rsvp_approved_user.name)
|
|
find("div.rsvp-details[data-user-id=\"#{@rsvp_approved_user.id}\"] img.instrument-icon")
|
|
|
|
# right sidebar - Still Needed
|
|
find('div.still-needed', text: @slot2.instrument.id.capitalize)
|
|
|
|
# right sidebar - Pending Invitations
|
|
find('div[user-id="' + @session_invitee.id + '"]')
|
|
end
|
|
|
|
def ensure_failure
|
|
find('strong.not-found', text: "PRIVATE SESSION")
|
|
end
|
|
|
|
describe "view" do
|
|
|
|
########### BEFORE SESSION STARTS ###########
|
|
|
|
it "should render for any musician for sessions with open RSVPs before session starts" do
|
|
|
|
@music_session.open_rsvps = true
|
|
@music_session.save
|
|
|
|
# attempt to access with musician who was invited but didn't RSVP
|
|
fast_signin(@session_invitee, @url)
|
|
ensure_success({:show_cta => true, :button_text => 'RSVP NOW!'})
|
|
fast_signout
|
|
|
|
# attempt to access with musician who wasn't invited
|
|
fast_signin(@non_session_invitee, @url)
|
|
ensure_success({:show_cta => true, :button_text => 'RSVP NOW!'})
|
|
fast_signout
|
|
|
|
# attempt to access with musician who RSVP'ed but wasn't approved
|
|
fast_signin(@rsvp_declined_user, @url)
|
|
ensure_success({:show_cta => false})
|
|
fast_signout
|
|
|
|
# attempt to access with musician who RSVP'ed and was approved
|
|
fast_signin(@rsvp_approved_user, @url)
|
|
ensure_success({:show_cta => true, :button_text => 'CANCEL RSVP'})
|
|
fast_signout
|
|
|
|
# attempt to access with session creator
|
|
fast_signin(@session_creator, @url)
|
|
ensure_success({:show_cta => false})
|
|
fast_signout
|
|
end
|
|
|
|
it "should render only for session invitees for sessions with closed RSVPs before session starts" do
|
|
# attempt to access with musician who was invited but didn't RSVP
|
|
fast_signin(@session_invitee, @url)
|
|
ensure_success({:show_cta => true, :button_text => 'RSVP NOW!'})
|
|
fast_signout
|
|
|
|
# attempt to access with musician who wasn't invited
|
|
fast_signin(@non_session_invitee, @url)
|
|
ensure_failure # NON-INVITEE SHOULD NOT BE ABLE TO VIEW FOR CLOSED RSVPs
|
|
fast_signout
|
|
|
|
# attempt to access with musician who RSVP'ed but wasn't approved
|
|
fast_signin(@rsvp_declined_user, @url)
|
|
ensure_success({:show_cta => false})
|
|
fast_signout
|
|
|
|
# attempt to access with musician who RSVP'ed and was approved
|
|
fast_signin(@rsvp_approved_user, @url)
|
|
ensure_success({:show_cta => true, :button_text => 'CANCEL RSVP'})
|
|
fast_signout
|
|
|
|
# attempt to access with session creator
|
|
fast_signin(@session_creator, @url)
|
|
ensure_success({:show_cta => false})
|
|
fast_signout
|
|
end
|
|
|
|
########### AFTER SESSION STARTS ###########
|
|
|
|
# musician_access = false, approval_required = false
|
|
it "should allow only RSVP approvals to view for 'rsvp_only' option after session starts" do
|
|
@music_session.musician_access = false
|
|
@music_session.approval_required = false
|
|
@music_session.scheduled_start = Time.now.utc - 1.hours
|
|
@music_session.save!
|
|
|
|
# attempt to access with musician who was invited but didn't RSVP
|
|
fast_signin(@session_invitee, @url)
|
|
ensure_failure
|
|
fast_signout
|
|
|
|
# attempt to access with musician who wasn't invited
|
|
fast_signin(@non_session_invitee, @url)
|
|
ensure_failure
|
|
fast_signout
|
|
|
|
# attempt to access with musician who RSVP'ed but wasn't approved
|
|
fast_signin(@rsvp_declined_user, @url)
|
|
ensure_failure
|
|
fast_signout
|
|
|
|
# attempt to access with musician who RSVP'ed and was approved
|
|
fast_signin(@rsvp_approved_user, @url)
|
|
ensure_success({:show_cta => true, :button_text => 'CANCEL RSVP'})
|
|
fast_signout
|
|
|
|
# attempt to access with session creator
|
|
fast_signin(@session_creator, @url)
|
|
ensure_success({:show_cta => false})
|
|
fast_signout
|
|
end
|
|
|
|
it "shows latency information correctly" do
|
|
# this will try to show all 6 latency badges. unknown, good, fair, poor, unacceptable, and me
|
|
|
|
fast_signin(@session_creator, @url)
|
|
verify_session_info_score(nil, @session_creator, @session_creator)
|
|
verify_session_info_score(nil, @session_creator, @rsvp_approved_user)
|
|
verify_session_info_score(3, @session_creator, @rsvp_approved_user)
|
|
verify_session_info_score(40, @session_creator, @rsvp_approved_user)
|
|
verify_session_info_score(80, @session_creator, @rsvp_approved_user)
|
|
verify_session_info_score(110, @session_creator, @rsvp_approved_user)
|
|
end
|
|
|
|
# musician_access = true, approval_required = false
|
|
it "should allow anyone to view for 'at will' option after session starts" do
|
|
@music_session.musician_access = true
|
|
@music_session.approval_required = false
|
|
@music_session.save!
|
|
|
|
# attempt to access with musician who was invited but didn't RSVP
|
|
fast_signin(@session_invitee, @url)
|
|
ensure_success({:show_cta => true, :button_text => 'RSVP NOW!'})
|
|
fast_signout
|
|
|
|
# attempt to access with musician who wasn't invited
|
|
fast_signin(@non_session_invitee, @url)
|
|
ensure_failure # NON-INVITEE SHOULD NOT BE ABLE TO VIEW FOR CLOSED RSVPs
|
|
fast_signout
|
|
|
|
# attempt to access with musician who RSVP'ed but wasn't approved
|
|
fast_signin(@rsvp_declined_user, @url)
|
|
ensure_success({:show_cta => false})
|
|
fast_signout
|
|
|
|
# attempt to access with musician who RSVP'ed and was approved
|
|
fast_signin(@rsvp_approved_user, @url)
|
|
ensure_success({:show_cta => true, :button_text => 'CANCEL RSVP'})
|
|
fast_signout
|
|
|
|
# attempt to access with session creator
|
|
fast_signin(@session_creator, @url)
|
|
ensure_success({:show_cta => false})
|
|
fast_signout
|
|
end
|
|
|
|
# musician_access = true, approval_required = true
|
|
it "should allow anyone to view for 'join by approval' option after session starts" do
|
|
@music_session.musician_access = true
|
|
@music_session.approval_required = true
|
|
@music_session.save!
|
|
|
|
# attempt to access with musician who was invited but didn't RSVP
|
|
fast_signin(@session_invitee, @url)
|
|
ensure_success({:show_cta => true, :button_text => 'RSVP NOW!'})
|
|
fast_signout
|
|
|
|
# attempt to access with musician who wasn't invited
|
|
fast_signin(@non_session_invitee, @url)
|
|
ensure_failure # NON-INVITEE SHOULD NOT BE ABLE TO VIEW FOR CLOSED RSVPs
|
|
fast_signout
|
|
|
|
# attempt to access with musician who RSVP'ed but wasn't approved
|
|
fast_signin(@rsvp_declined_user, @url)
|
|
ensure_success({:show_cta => false})
|
|
fast_signout
|
|
|
|
# attempt to access with musician who RSVP'ed and was approved
|
|
fast_signin(@rsvp_approved_user, @url)
|
|
ensure_success({:show_cta => true, :button_text => 'CANCEL RSVP'})
|
|
fast_signout
|
|
|
|
# attempt to access with session creator
|
|
fast_signin(@session_creator, @url)
|
|
ensure_success({:show_cta => false})
|
|
fast_signout
|
|
end
|
|
|
|
it "should show no call to action button if user has not RSVPed and all slots are taken" do
|
|
pending
|
|
rs2 = RsvpRequestRsvpSlot.find_by_rsvp_request_id_and_rsvp_slot_id(@rsvp1.id, @slot2.id)
|
|
|
|
# approve slot 2 as well to make all slots taken for this session
|
|
RsvpRequest.update({:id => @rsvp1.id, :session_id => @music_session.id, :rsvp_responses => [{:request_slot_id => rs2.id, :accept => true}]}, @session_creator)
|
|
|
|
fast_signin(@session_invitee, @url)
|
|
expect {find('#btn-action')}.to raise_error(Capybara::ElementNotFound)
|
|
fast_signout
|
|
end
|
|
end
|
|
|
|
describe "actions" do
|
|
it "should show RSVP Now button and launch submit dialog if user has not RSVPed" do
|
|
end
|
|
|
|
it "should show Cancel RSVP button and launch cancel dialog if user has RSVPed" do
|
|
end
|
|
|
|
it "should refresh sidebar RSVP section after user submits RSVP request" do
|
|
end
|
|
|
|
it "should refresh sidebar Still Needed section after user cancels RSVP request" do
|
|
end
|
|
end
|
|
end
|