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)