diff --git a/ruby/lib/jam_ruby/models/user.rb b/ruby/lib/jam_ruby/models/user.rb
index ba0d7d494..de284dfce 100644
--- a/ruby/lib/jam_ruby/models/user.rb
+++ b/ruby/lib/jam_ruby/models/user.rb
@@ -19,9 +19,6 @@ module JamRuby
# updating_password corresponds to a lost_password
attr_accessor :updating_password, :updating_email, :updated_email, :update_email_confirmation_url, :administratively_created, :current_password, :setting_password, :confirm_current_password, :updating_avatar, :updating_progression_field, :mods_json
- # checks if user has submitted RSVP to a session
- attr_accessor :has_rsvp
-
belongs_to :icecast_server_group, class_name: "JamRuby::IcecastServerGroup", inverse_of: :users, foreign_key: 'icecast_server_group_id'
# authorizations (for facebook, etc -- omniauth)
@@ -1254,6 +1251,7 @@ module JamRuby
User.where(:email => email).limit(1).pluck(:id).first
end
+ # checks if user has submitted RSVP to a session
def has_rsvp(session)
slots = RsvpSlot.find_by_sql(%Q{select rs.*
from rsvp_slots rs
diff --git a/ruby/spec/factories.rb b/ruby/spec/factories.rb
index b28b059f3..2241ff7df 100644
--- a/ruby/spec/factories.rb
+++ b/ruby/spec/factories.rb
@@ -506,17 +506,32 @@ FactoryGirl.define do
cancel_all false
association :user, :factory => :user
- # creates *number* slots for a new rsvp_request
+ # creates *number* slots for a new rsvp_request (the case were you are too lazy / don't care to set up slots)
factory :rsvp_request_for_multiple_slots do
ignore do
music_session nil
- number nil
+ number 1
+ chosen nil
end
after(:create) { |rsvp_request, evaluator |
evaluator.number.times do |i|
slot = FactoryGirl.create(:rsvp_slot, music_session: evaluator.music_session, instrument: Instrument.order(:id).limit(1).offset(i).first, proficiency_level: 1)
- FactoryGirl.create(:rsvp_request_rsvp_slot, chosen:true, rsvp_request: rsvp_request, rsvp_slot:slot)
+ FactoryGirl.create(:rsvp_request_rsvp_slot, chosen: evaluator.chosen, rsvp_request: rsvp_request, rsvp_slot:slot)
+ end
+ }
+ end
+
+ # creates a rsvp_request for the specified slots (helps when you already have a slot(s), and need to request to them)
+ factory :rsvp_request_for_slots do
+ ignore do
+ slots nil
+ chosen nil
+ end
+
+ after(:create) { |rsvp_request, evaluator |
+ evaluator.slots.each do |slot|
+ FactoryGirl.create(:rsvp_request_rsvp_slot, chosen:evaluator.chosen, rsvp_request: rsvp_request, rsvp_slot:slot)
end
}
end
diff --git a/ruby/spec/jam_ruby/models/music_session_spec.rb b/ruby/spec/jam_ruby/models/music_session_spec.rb
index acfa689d0..210076d5f 100644
--- a/ruby/spec/jam_ruby/models/music_session_spec.rb
+++ b/ruby/spec/jam_ruby/models/music_session_spec.rb
@@ -246,7 +246,7 @@ describe MusicSession do
it "handles 2 instruments for a single request correctly" do
- rsvp_request = FactoryGirl.create(:rsvp_request_for_multiple_slots, user: some_user, music_session: music_session1, number: 2)
+ rsvp_request = FactoryGirl.create(:rsvp_request_for_multiple_slots, user: some_user, music_session: music_session1, number: 2, chosen:true)
approved_rsvps = music_session1.approved_rsvps
approved_rsvps.length.should == 2
diff --git a/web/app/assets/javascripts/sessionList.js b/web/app/assets/javascripts/sessionList.js
index a1026573a..83c3d879b 100644
--- a/web/app/assets/javascripts/sessionList.js
+++ b/web/app/assets/javascripts/sessionList.js
@@ -164,7 +164,7 @@
}
if(session['is_unstructured_rsvp?']) {
- openSlots = true;
+ openSlots = true; // unstructured RSVP means there are always open slots
openSlotsHtml += sessionUtils.createOpenSlot($openSlotsTemplate, {description: 'Any Instrument'})
}
@@ -188,15 +188,7 @@
var showRsvpLink = true;
var noLinkText = '';
- if (!openRsvps && !hasInvitation) {
- showRsvpLink = false;
- noLinkText = 'You need an invitation to RSVP to this session.';
- }
- else if(!openSlots) {
- showRsvpLink = false
- noLinkText = 'No more openings in this session.';
- }
- else if(approvedRsvpId) {
+ if(approvedRsvpId) {
showRsvpLink = false;
noLinkText = $('You have been confirmed for this session. Cancel');
noLinkText.find('a').click(function() {
@@ -228,6 +220,16 @@
return false;
});
}
+ else if(!openSlots) {
+ showRsvpLink = false
+ noLinkText = 'No more openings in this session.';
+ }
+ else if (!openRsvps && !hasInvitation) {
+ showRsvpLink = false;
+ noLinkText = 'You need an invitation to RSVP to this session.';
+ }
+
+
// notation files
if (session.music_notations) {
diff --git a/web/spec/factories.rb b/web/spec/factories.rb
index 8e5877eb8..c8244c948 100644
--- a/web/spec/factories.rb
+++ b/web/spec/factories.rb
@@ -517,6 +517,36 @@ FactoryGirl.define do
factory :rsvp_request, class: JamRuby::RsvpRequest do
canceled false
cancel_all false
+
+ # creates *number* slots for a new rsvp_request
+ factory :rsvp_request_for_multiple_slots do
+ ignore do
+ music_session nil
+ number 1
+ chosen nil
+ end
+
+ after(:create) { |rsvp_request, evaluator |
+ evaluator.number.times do |i|
+ slot = FactoryGirl.create(:rsvp_slot, music_session: evaluator.music_session, instrument: Instrument.order(:id).limit(1).offset(i).first, proficiency_level: 1)
+ FactoryGirl.create(:rsvp_request_rsvp_slot, chosen: evaluator.chosen, rsvp_request: rsvp_request, rsvp_slot:slot)
+ end
+ }
+ end
+
+ # creates a rsvp_request for the specified slots
+ factory :rsvp_request_for_slots do
+ ignore do
+ slots nil
+ chosen nil
+ end
+
+ after(:create) { |rsvp_request, evaluator |
+ evaluator.slots.each do |slot|
+ FactoryGirl.create(:rsvp_request_rsvp_slot, chosen:evaluator.chosen, rsvp_request: rsvp_request, rsvp_slot:slot)
+ end
+ }
+ end
end
factory :rsvp_request_rsvp_slot, class: JamRuby::RsvpRequestRsvpSlot do
diff --git a/web/spec/features/find_sessions_spec.rb b/web/spec/features/find_sessions_spec.rb
index 5c40a3ed0..08011f6a8 100644
--- a/web/spec/features/find_sessions_spec.rb
+++ b/web/spec/features/find_sessions_spec.rb
@@ -179,7 +179,7 @@ describe "Find Session", :js => true, :type => :feature, :capybara_feature => tr
end
it "RSVP text shows correctly" do
- music_session = FactoryGirl.create(:music_session, creator: user, is_unstructured_rsvp: true)
+ music_session = FactoryGirl.create(:music_session, creator: user)
fast_signin(user, Nav.find_session)
@@ -187,11 +187,34 @@ describe "Find Session", :js => true, :type => :feature, :capybara_feature => tr
sign_out
+ # create a slot so the session can be joined
+ rsvp_slot = FactoryGirl.create(:rsvp_slot, music_session: music_session)
go_to_root
-
fast_signin(finder, Nav.find_session)
+ find("#sessions-scheduled .rsvp-link")
+ # now manipulate the database to make different states for the rsvp link/text area in find sessions
+ # make a request (not yet chosen)
+ rsvp_request = FactoryGirl.create(:rsvp_request_for_slots, chosen: nil, user: finder, slots: [rsvp_slot])
+
+ # first state: an unconfirmed RSVP
+ go_to_root
+ fast_signin(finder, Nav.find_session)
+ find("#sessions-scheduled .rsvp-msg span.text", text: "You have RSVP'ed to this session. ")
+
+ rsvp_request.rsvp_requests_rsvp_slots[0].chosen = true
+ rsvp_request.rsvp_requests_rsvp_slots[0].save!
+
+ # second state: a connfirmed RSVP
+ go_to_root
+ fast_signin(finder, Nav.find_session)
find("#sessions-scheduled .rsvp-msg span.text", text: "You have been confirmed for this session. ")
+
+
+ # need to now CANCEL, and check what it says: // VRFS-1891
+
+ # also need to check that it is open_rsvp = false.
+
end
end
end