diff --git a/lib/jam_ruby/models/music_session.rb b/lib/jam_ruby/models/music_session.rb index e8fd7d2bf..d6813cbfa 100644 --- a/lib/jam_ruby/models/music_session.rb +++ b/lib/jam_ruby/models/music_session.rb @@ -29,13 +29,20 @@ module JamRuby end # Verifies that the specified user can join this music session - def can_join? user - if self.musician_access - return true + def can_join? user, as_musician + + if as_musician + if self.musician_access + return true + else + # the creator can always join, and the invited users can join + return self.creator == user || self.invited_musicians.exists?(user) + end else - # the creator can always join, and the invited users can join - return self.creator == user || self.invited_musicians.exists?(user) + # it's a fan, and the only way a fan can join is if fan_access is true + return self.fan_access end + end # Verifies that the specified user can see this music session diff --git a/spec/jam_ruby/connection_manager_spec.rb b/spec/jam_ruby/connection_manager_spec.rb index ba71b0b5f..ef9ee8ac4 100644 --- a/spec/jam_ruby/connection_manager_spec.rb +++ b/spec/jam_ruby/connection_manager_spec.rb @@ -16,9 +16,11 @@ describe ConnectionManager do end end - def create_music_session(user_id) + def create_music_session(user_id, options={}) + default_options = {:musician_access => true, :fan_chat => true, :fan_access => true, :approval_required=> false} + options = default_options.merge(options) description = "some session" - @conn.exec("INSERT INTO music_sessions (user_id, description, musician_access, approval_required, fan_chat, fan_access) VALUES ($1, $2, $3, $4, $5, $6) RETURNING id", [user_id, description, true, false, true, true]) do |result| + @conn.exec("INSERT INTO music_sessions (user_id, description, musician_access, approval_required, fan_chat, fan_access) VALUES ($1, $2, $3, $4, $5, $6) RETURNING id", [user_id, description, options[:musician_access], options[:approval_required], options[:fan_chat], options[:fan_access]]) do |result| return result.getvalue(0, 0) end end @@ -278,15 +280,15 @@ describe ConnectionManager do end - it "join_music_session fails if fan_access=true and the user is a fan" do + it "join_music_session fails if fan_access=false and the user is a fan" do - client_id = "client_id10.2" - user_id = create_user("test", "user10.2", "user10.2@jamkazam.com", :musician => false) + client_id = "client_id10.3" + user_id = create_user("test", "user10.3", "user10.3@jamkazam.com", :musician => false) music_session_id = create_music_session(user_id, :fan_access => false) @conn.transaction do - expect { @connman.join_music_session(user_id, client_id, music_session_id, 'blarg') }.to raise_error(JamRuby::PermissionError) + expect { @connman.join_music_session(user_id, client_id, music_session_id, false) }.to raise_error(JamRuby::PermissionError) end end diff --git a/spec/jam_ruby/models/music_session_spec.rb b/spec/jam_ruby/models/music_session_spec.rb index e0195e16e..ae1450f90 100644 --- a/spec/jam_ruby/models/music_session_spec.rb +++ b/spec/jam_ruby/models/music_session_spec.rb @@ -29,9 +29,9 @@ describe MusicSession do music_session = FactoryGirl.create(:music_session, :creator => user1, :musician_access => true) - music_session.can_join?(user1).should == true - music_session.can_join?(user2).should == true - music_session.can_join?(user3).should == true + music_session.can_join?(user1, true).should == true + music_session.can_join?(user2, true).should == true + music_session.can_join?(user3, true).should == true end it 'no one but invited people can join closed music session' do @@ -42,18 +42,18 @@ describe MusicSession do music_session = FactoryGirl.create(:music_session, :creator => user1, :musician_access => false) FactoryGirl.create(:connection, :user => user1, :music_session => music_session) - music_session.can_join?(user1).should == true - music_session.can_join?(user2).should == false - music_session.can_join?(user3).should == false + music_session.can_join?(user1, true).should == true + music_session.can_join?(user2, true).should == false + music_session.can_join?(user3, true).should == false # invite user 2 FactoryGirl.create(:friendship, :user => user1, :friend => user2) FactoryGirl.create(:friendship, :user => user2, :friend => user1) FactoryGirl.create(:invitation, :sender => user1, :receiver => user2, :music_session => music_session) - music_session.can_join?(user1).should == true - music_session.can_join?(user2).should == true - music_session.can_join?(user3).should == false + music_session.can_join?(user1, true).should == true + music_session.can_join?(user2, true).should == true + music_session.can_join?(user3, true).should == false end it 'no one but invited people can see closed music session' do