diff --git a/ruby/lib/jam_ruby/lib/nav.rb b/ruby/lib/jam_ruby/lib/nav.rb index 1bce0f133..588816f8d 100644 --- a/ruby/lib/jam_ruby/lib/nav.rb +++ b/ruby/lib/jam_ruby/lib/nav.rb @@ -19,6 +19,10 @@ module JamRuby Nav.home(dialog: 'accept-friend-request', dialog_opts: {d1: friend_request_id}) end + def self.session_detail(music_session) + "#{base_url}/account/sessionDetail/#{music_session.id}" + end + private def self.base_url diff --git a/ruby/lib/jam_ruby/models/rsvp_request.rb b/ruby/lib/jam_ruby/models/rsvp_request.rb index 71334edfc..8567acc9c 100644 --- a/ruby/lib/jam_ruby/models/rsvp_request.rb +++ b/ruby/lib/jam_ruby/models/rsvp_request.rb @@ -4,9 +4,15 @@ module JamRuby belongs_to :user, :class_name => "JamRuby::User" has_many :rsvp_requests_rsvp_slots, :class_name => "JamRuby::RsvpRequestRsvpSlot", :foreign_key => "rsvp_request_id" has_many :rsvp_slots, :class_name => "JamRuby::RsvpSlot", :through => :rsvp_requests_rsvp_slots - + + validates :user, presence: true validates :canceled, :inclusion => {:in => [nil, true, false]} + # pulls all instruments from the associated rsvp_slots + def instrument_list + rsvp_slots.map(&:instrument) + end + def self.index(music_session, user=nil, options={}) query = RsvpRequest .includes(:user) diff --git a/ruby/spec/jam_ruby/models/rsvp_request_spec.rb b/ruby/spec/jam_ruby/models/rsvp_request_spec.rb index 4052ba922..5d3cd8771 100644 --- a/ruby/spec/jam_ruby/models/rsvp_request_spec.rb +++ b/ruby/spec/jam_ruby/models/rsvp_request_spec.rb @@ -351,4 +351,16 @@ describe RsvpRequest do expect {RsvpRequest.cancel({:id => rsvp.id, :session_id => @music_session.id, :cancelled => "all", :message => "I'm gonna cancel all your RSVPs"}, user)}.to raise_error(PermissionError) end end + + describe "instrument_list" do + it "single instrument" do + rsvp_request = FactoryGirl.create(:rsvp_request, rsvp_slots: [@slot1], user: @session_invitee) + rsvp_request.instrument_list.should == [ JamRuby::Instrument.find('electric guitar')] + end + + it "multiple instruments" do + rsvp_request = FactoryGirl.create(:rsvp_request, rsvp_slots: [@slot1, @slot2], user: @session_invitee) + rsvp_request.instrument_list.should == [ @slot1.instrument, @slot2.instrument ] + end + end end \ No newline at end of file diff --git a/web/app/assets/javascripts/accounts_session_detail.js b/web/app/assets/javascripts/accounts_session_detail.js index 5a116b2f7..627d7609a 100644 --- a/web/app/assets/javascripts/accounts_session_detail.js +++ b/web/app/assets/javascripts/accounts_session_detail.js @@ -173,13 +173,13 @@ var latencyHtml = ""; $.each(sessionData.pending_rsvp_requests, function(index, request) { if (request.user_id != context.JK.currentUserId) { - if ("instrument_list" in request.user && request.user.instrument_list != null) { - $.each(request.user.instrument_list, function (index, instrument) { - var inst = '../assets/content/icon_instrument_default24.png'; + if ("instrument_list" in request && request.instrument_list != null) { + $.each(request.instrument_list, function (index, instrument) { + var inst = '/assets/content/icon_instrument_default24.png'; if (instrument.id in instrument_logo_map) { inst = instrument_logo_map[instrument.id].asset; } - instrumentLogoHtml += ' '; + instrumentLogoHtml += ' '; }) } @@ -215,7 +215,7 @@ $.each(sessionData.approved_rsvps, function(index, request) { if ("instrument_list" in request) { $.each(request.instrument_list, function(index, instrument) { - var inst = '../assets/content/icon_instrument_default24.png'; + var inst = '/assets/content/icon_instrument_default24.png'; if (instrument.id in instrument_logo_map) { inst = instrument_logo_map[instrument.id].asset; } @@ -250,7 +250,7 @@ var resultHtml = ""; var slotHtml = ""; $.each(sessionData.open_slots, function(index, slot) { - var inst = '../assets/content/icon_instrument_default24.png'; + var inst = '/assets/content/icon_instrument_default24.png'; if ("instrument_id" in slot) { inst = instrument_logo_map[slot.instrument_id].asset; } diff --git a/web/app/views/api_music_sessions/show_history.rabl b/web/app/views/api_music_sessions/show_history.rabl index 664fd4bc0..d1f783d50 100644 --- a/web/app/views/api_music_sessions/show_history.rabl +++ b/web/app/views/api_music_sessions/show_history.rabl @@ -107,10 +107,10 @@ else } child({:pending_rsvp_requests => :pending_rsvp_requests}) { - attributes :id, :email, :photo_url, :user_id + attributes :id, :email, :photo_url, :user_id, :instrument_list child({:user => :user}) { - attributes :id, :photo_url, :name, :first_name, :last_name, :instrument_list + attributes :id, :photo_url, :name, :first_name, :last_name node do |user| { latency: user_score(user.id), name: user.name } diff --git a/web/app/views/clients/_account_session_detail.html.haml b/web/app/views/clients/_account_session_detail.html.haml index f0a89ac81..c581571a9 100644 --- a/web/app/views/clients/_account_session_detail.html.haml +++ b/web/app/views/clients/_account_session_detail.html.haml @@ -28,7 +28,7 @@ .box-header %h2.left RSVPs - .right + .right.rsvp-help-notice {{data.notification_msg}} .clearall #pendingRSVPs diff --git a/web/spec/factories.rb b/web/spec/factories.rb index 4f59a0493..8e5877eb8 100644 --- a/web/spec/factories.rb +++ b/web/spec/factories.rb @@ -488,7 +488,8 @@ FactoryGirl.define do factory :rsvp_slot, class: JamRuby::RsvpSlot do proficiency_level 'beginner' - instrument { Instrument.find('electric guitar') } + instrument { Instrument.find('electric guitar') } + association :music_session, :factory => :music_session factory :chosen_rsvp_slot do ignore do @@ -500,6 +501,17 @@ FactoryGirl.define do rsvp_request_rsvp_slot = FactoryGirl.create(:rsvp_request_rsvp_slot, chosen:true, rsvp_request: rsvp_request, rsvp_slot:rsvp_slot) } end + + factory :requested_rsvp_slot do + ignore do + user nil + end + + after(:create) { |rsvp_slot, evaluator| + rsvp_request = FactoryGirl.create(:rsvp_request, user: evaluator.user) + rsvp_request_rsvp_slot = FactoryGirl.create(:rsvp_request_rsvp_slot, chosen:nil, rsvp_request: rsvp_request, rsvp_slot:rsvp_slot) + } + end end factory :rsvp_request, class: JamRuby::RsvpRequest do diff --git a/web/spec/features/session_detail_spec.rb b/web/spec/features/session_detail_spec.rb new file mode 100644 index 000000000..71b1df6fe --- /dev/null +++ b/web/spec/features/session_detail_spec.rb @@ -0,0 +1,29 @@ +require 'spec_helper' + +describe "Session Detail", :js => true, :type => :feature, :capybara_feature => true do + + + let(:searcher) { FactoryGirl.create(:user) } + let(:requested_rsvp_slot) {FactoryGirl.create(:requested_rsvp_slot, user: searcher)} + + before(:each) do + SessionInfoComment.delete_all + Notification.delete_all + RsvpRequestRsvpSlot.delete_all + RsvpRequest.delete_all + RsvpSlot.delete_all + Invitation.delete_all + MusicSession.delete_all + + stub_const("APP_CONFIG", web_config) + end + + it "view pending requests" do + fast_signin(requested_rsvp_slot.music_session.creator, Nav.session_detail(requested_rsvp_slot.music_session)) + + find('h2', text: 'RSVPs') + find('div.rsvp-help-notice', text: 'You have new RSVPs to review and approve, see details.') + find('#pendingRSVPs .rsvp-table td', text: searcher.name) + find("#pendingRSVPs .rsvp-table img[data-instrument-id='#{requested_rsvp_slot.instrument_id}']") + end +end diff --git a/web/spec/features/session_info_spec.rb b/web/spec/features/session_info_spec.rb index bf76e81e4..23b9d88e8 100644 --- a/web/spec/features/session_info_spec.rb +++ b/web/spec/features/session_info_spec.rb @@ -37,25 +37,19 @@ describe "Session Info", :js => true, :type => :feature, :capybara_feature => tr FactoryGirl.create(:friendship, :user => @rsvp_declined_user, :friend => @session_creator) FactoryGirl.create(:friendship, :user => @session_creator, :friend => @rsvp_declined_user) - @music_session = FactoryGirl.build(:music_session, :creator => @session_creator, :scheduled_start => Time.now.utc + 2.days, :musician_access => true, :approval_required => true, :open_rsvps => false) - @music_session.save + @music_session = FactoryGirl.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 = FactoryGirl.build(:rsvp_slot, :music_session => @music_session, :instrument => JamRuby::Instrument.find('electric guitar')) - @slot1.save + @slot1 = FactoryGirl.create(:rsvp_slot, :music_session => @music_session, :instrument => JamRuby::Instrument.find('electric guitar')) - @slot2 = FactoryGirl.build(:rsvp_slot, :music_session => @music_session, :instrument => JamRuby::Instrument.find('drums')) - @slot2.save + @slot2 = FactoryGirl.create(:rsvp_slot, :music_session => @music_session, :instrument => JamRuby::Instrument.find('drums')) - @invitation = FactoryGirl.build(:invitation, :sender => @session_creator, :receiver => @session_invitee, :music_session => @music_session) - @invitation.save + @invitation = FactoryGirl.create(:invitation, :sender => @session_creator, :receiver => @session_invitee, :music_session => @music_session) - @invitation = FactoryGirl.build(:invitation, :sender => @session_creator, :receiver => @rsvp_approved_user, :music_session => @music_session) - @invitation.save + @invitation = FactoryGirl.create(:invitation, :sender => @session_creator, :receiver => @rsvp_approved_user, :music_session => @music_session) - @invitation = FactoryGirl.build(:invitation, :sender => @session_creator, :receiver => @rsvp_declined_user, :music_session => @music_session) - @invitation.save + @invitation = FactoryGirl.create(:invitation, :sender => @session_creator, :receiver => @rsvp_declined_user, :music_session => @music_session) # create RSVP request 1 @rsvp1 = RsvpRequest.create({:session_id => @music_session.id, :rsvp_slots => [@slot1.id, @slot2.id], :message => "Let's Jam!"}, @rsvp_approved_user)