158 lines
6.8 KiB
Ruby
158 lines
6.8 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe "Events", :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
|
|
|
|
before(:each) do
|
|
UserMailer.deliveries.clear
|
|
ActiveMusicSession.delete_all
|
|
@event = FactoryGirl.create(:event, :slug => 'so_latency', show_sponser:true)
|
|
visit "/events/so_latency"
|
|
end
|
|
|
|
it "should not break as page gets more and more well-defined" do
|
|
find('h1', text: @event.title)
|
|
find('h2', text: 'ARTIST LINEUP')
|
|
find('p', text: @event.description)
|
|
find('.landing-sidebar')
|
|
find('.sponsor span', 'SPONSORED BY:')
|
|
|
|
# add an event session to the event, with nothing defined
|
|
@event_session = FactoryGirl.create(:event_session, event: @event)
|
|
visit "/events/so_latency"
|
|
find('.landing-band.event img')['src'].include?('/assets/web/logo-256').should be true
|
|
find('.event-title', text: 'TBD')
|
|
find('.time strong', text: 'TBD')
|
|
|
|
# define the event better by associating with a band
|
|
band = FactoryGirl.create(:band)
|
|
@event_session.band = band
|
|
@event_session.save!
|
|
visit "/events/so_latency"
|
|
find('.landing-details.event .bio', text: band.biography)
|
|
find('.landing-band.event img')['src'].include?('/assets/shared/avatar_generic_band').should be true
|
|
|
|
# update starts at
|
|
starts_at = 1.hours.ago
|
|
@event_session.starts_at = starts_at
|
|
@event_session.save!
|
|
visit "/events/so_latency"
|
|
timezone = ActiveSupport::TimeZone.new('Central Time (US & Canada)')
|
|
find('.time strong', text: timezone.at(@event_session.starts_at.to_i).strftime('%l:%M %P').strip)
|
|
|
|
# update ends at
|
|
ends_at = 1.hours.from_now
|
|
@event_session.ends_at = ends_at
|
|
@event_session.save!
|
|
visit "/events/so_latency"
|
|
# UI shouldn't change; as long as it doesn't crash we are OK
|
|
|
|
# now start a session, and don't sent session_removed_at
|
|
music_session = FactoryGirl.create(:active_music_session, band: band)
|
|
music_session = music_session.music_session
|
|
music_session.session_removed_at.should be_nil
|
|
visit "/events/so_latency"
|
|
find('.landing-details .session-button span', text:'LISTEN NOW')
|
|
find('.landing-details .session-button a').trigger(:click)
|
|
find('.sessions-page .landing-band', text: band.name) # indication of session landing page
|
|
find(".session-controls[data-music-session=\"#{music_session.id}\"]")
|
|
|
|
# force the pinned_state to say 'not_started'
|
|
@event_session.pinned_state = 'not_started'
|
|
@event_session.save!
|
|
visit "/events/so_latency"
|
|
expect(page).not_to have_css('.landing-details .session-button a') # no button at all
|
|
|
|
# force the pinned_state to say 'not_started'
|
|
@event_session.pinned_state = 'over'
|
|
@event_session.save!
|
|
visit "/events/so_latency"
|
|
find('.landing-details .session-button a', text:'SESSION ENDED').trigger(:click)
|
|
find('.sessions-page .landing-band', text: band.name) # indication of session landing page
|
|
find(".session-controls[data-music-session=\"#{music_session.id}\"]")
|
|
|
|
# unpin
|
|
@event_session.pinned_state = nil
|
|
@event_session.save!
|
|
|
|
|
|
# turn fan_access = false... this will hide the button
|
|
music_session.fan_access = false
|
|
music_session.save!
|
|
visit "/events/so_latency"
|
|
expect(page).not_to have_css('.landing-details .session-button a') # no button at all
|
|
|
|
|
|
# now start a second session, and don't sent session_removed_at
|
|
music_session = FactoryGirl.create(:active_music_session, band: band)
|
|
music_session = music_session.music_session
|
|
music_session.session_removed_at.should be_nil
|
|
visit "/events/so_latency"
|
|
find('.landing-details .session-button span', text:'LISTEN NOW')
|
|
find('.landing-details .session-button a').trigger(:click)
|
|
find('.sessions-page .landing-band', text: band.name) # indication of session landing page
|
|
find(".session-controls[data-music-session=\"#{music_session.id}\"]")
|
|
visit "/events/so_latency"
|
|
|
|
# then end it, and see session_ended
|
|
music_session.session_removed_at = Time.now
|
|
music_session.save!
|
|
visit "/events/so_latency"
|
|
find('.landing-details .session-button a', text:'SESSION ENDED').trigger(:click)
|
|
find('.sessions-page .landing-band', text: band.name) # indication of session landing page
|
|
find(".session-controls[data-music-session=\"#{music_session.id}\"]")
|
|
|
|
# test that it sorts correctly by putting this earlier event first
|
|
@event_session2 = FactoryGirl.create(:event_session, event: @event)
|
|
@event_session2.starts_at = 4.hours.ago
|
|
@event_session2.save!
|
|
visit "/events/so_latency"
|
|
first(".landing-band.event[data-event-session='#{@event_session2.id}']:nth-child(1)")
|
|
|
|
# test that it sorts correctly by putting this later event second
|
|
@event_session2.starts_at = 4.hours.from_now
|
|
@event_session2.save!
|
|
visit "/events/so_latency"
|
|
first(".landing-band.event[data-event-session='#{@event_session.id}']:nth-child(1)")
|
|
|
|
# test that it sorts correctly by putting this later event first, because ordinal is specified
|
|
@event_session2.ordinal = 0
|
|
@event_session2.save!
|
|
visit "/events/so_latency"
|
|
first(".landing-band.event[data-event-session='#{@event_session2.id}']:nth-child(1)")
|
|
|
|
# associate a recording, and verify that the display changes to have no description, but has a recording widget
|
|
mix = FactoryGirl.create(:mix)
|
|
mix.recording.music_session_id = music_session.id
|
|
mix.recording.save!
|
|
visit "/events/so_latency"
|
|
find(".feed-entry.recording-entry[data-claimed-recording-id='#{mix.recording.candidate_claimed_recording.id}']")
|
|
|
|
# associate a second recording, and verify it's ordered by name
|
|
mix2 = FactoryGirl.create(:mix)
|
|
mix2.recording.music_session_id = music_session.id
|
|
mix2.recording.save!
|
|
mix2.recording.claimed_recordings.length.should == 1
|
|
mix2.recording.claimed_recordings[0].name = '____AAA'
|
|
mix2.recording.claimed_recordings[0].save!
|
|
visit "/events/so_latency"
|
|
find(".feed-entry.recording-entry[data-claimed-recording-id='#{mix2.recording.candidate_claimed_recording.id}']:nth-child(1)")
|
|
find(".feed-entry.recording-entry[data-claimed-recording-id='#{mix.recording.candidate_claimed_recording.id}']:nth-child(3)")
|
|
|
|
# and do a re-order test
|
|
mix2.recording.claimed_recordings[0].name = 'zzzzz'
|
|
mix2.recording.claimed_recordings[0].save!
|
|
visit "/events/so_latency"
|
|
find('.feed-entry.recording-entry .name', text:'zzzzz')
|
|
find(".feed-entry.recording-entry[data-claimed-recording-id='#{mix.recording.candidate_claimed_recording.id}']:nth-child(1)")
|
|
find(".feed-entry.recording-entry[data-claimed-recording-id='#{mix2.recording.candidate_claimed_recording.id}']:nth-child(3)")
|
|
end
|
|
end
|