* VRFS-1880 - fixed issue and added test

This commit is contained in:
Seth Call 2014-07-07 16:08:36 -05:00
parent 74b63c5aa5
commit 27fe4f4ae9
9 changed files with 80 additions and 23 deletions

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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 += '<img src="' + inst + '" width="24" height="24" />&nbsp;';
instrumentLogoHtml += '<img data-instrument-id="' + instrument.id + '" src="' + inst + '" width="24" height="24" />&nbsp;';
})
}
@ -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;
}

View File

@ -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 }

View File

@ -28,7 +28,7 @@
.box-header
%h2.left
RSVPs
.right
.right.rsvp-help-notice
{{data.notification_msg}}
.clearall
#pendingRSVPs

View File

@ -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

View File

@ -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

View File

@ -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)