* VRFS-100; as_musician almost done
This commit is contained in:
parent
35f5c13283
commit
7b32358afa
|
|
@ -157,23 +157,33 @@ module JamRuby
|
|||
end
|
||||
end
|
||||
|
||||
def join_music_session(user_id, client_id, music_session_id)
|
||||
def join_music_session(user_id, client_id, music_session_id, as_musician)
|
||||
conn = @pg_conn
|
||||
|
||||
lock_connections(conn)
|
||||
|
||||
previous_music_session_id = check_already_session(conn, client_id)
|
||||
|
||||
user = User.find(user_id)
|
||||
|
||||
if as_musician != true && as_musician != false # checks that a boolean was passed in
|
||||
raise JamArgumentError, "as_musician incorrectly specified"
|
||||
end
|
||||
|
||||
if as_musician && !user.musician
|
||||
raise PermissionError, "a fan can not join a music session as a musician"
|
||||
end
|
||||
|
||||
# determine if the user can join; if not, throw a PermissionError
|
||||
music_session = MusicSession.find(music_session_id)
|
||||
unless music_session.can_join?(User.find(user_id))
|
||||
unless music_session.can_join?(user, as_musician)
|
||||
@log.debug "user can not join a session user_id=#{user_id} and client_id=#{client_id}"
|
||||
raise PermissionError, "unable to join the specified session"
|
||||
end
|
||||
|
||||
begin
|
||||
# we include user_id in the query as an act o security, so that a user can't access someone else' client connection
|
||||
conn.exec("UPDATE connections SET music_session_id = $1 WHERE client_id = $2 and user_id = $3", [music_session_id, client_id, user_id]) do |result|
|
||||
conn.exec("UPDATE connections SET music_session_id = $1, as_musician = $2 WHERE client_id = $3 and user_id = $4", [music_session_id, as_musician, client_id, user_id]) do |result|
|
||||
if result.cmd_tuples == 1
|
||||
@log.debug "associated music_session with connection for client=#{client_id}, music_session=#{music_session_id}, and user=#{user_id}"
|
||||
|
||||
|
|
@ -215,7 +225,7 @@ module JamRuby
|
|||
end
|
||||
|
||||
# can throw exception if the session is deleted just before this
|
||||
conn.exec("UPDATE connections SET music_session_id = NULL WHERE client_id = $1 AND user_id =$2", [client_id, user_id]) do |result|
|
||||
conn.exec("UPDATE connections SET music_session_id = NULL, as_musician = NULL WHERE client_id = $1 AND user_id =$2", [client_id, user_id]) do |result|
|
||||
if result.cmd_tuples == 1
|
||||
@log.debug("deassociated music_session with connection for client_id=#{client_id}, user_id=#{user_id}")
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
module JamRuby
|
||||
# if a bad argument is supplied.
|
||||
# Why not use the default one? This allows us to know our API layer threw this, versus us using some core library incorrectly
|
||||
# Why not use the default ruby argument error? Using this one allows us to know our API layer threw this, versus us using some core library incorrectly
|
||||
class JamArgumentError < ArgumentError
|
||||
|
||||
end
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ module JamRuby
|
|||
validates :fan_access, :inclusion => {:in => [true, false]}
|
||||
validates :approval_required, :inclusion => {:in => [true, false]}
|
||||
validates :musician_access, :inclusion => {:in => [true, false]}
|
||||
validates :creator, :presence => true, :if => "creator.musician?"
|
||||
|
||||
def self.index(current_user)
|
||||
return MusicSession.includes(:invitations, :connections => [:user => [:friendships]]).order("(invitations.id is NULL) ASC, (friendships.friend_id != '#{current_user.id}' OR friendships.friend_id is NULL) ASC, music_sessions.created_at DESC").where("invitations.receiver_id = '#{current_user.id}' OR (friendships.friend_id = '#{current_user.id}') OR musician_access = true")
|
||||
|
|
|
|||
|
|
@ -88,6 +88,10 @@ module JamRuby
|
|||
@photo_url = "http://www.jamkazam.com/images/users/photos/#{self.id}.gif";
|
||||
end
|
||||
|
||||
def name
|
||||
return "#{first_name} #{last_name}"
|
||||
end
|
||||
|
||||
def location
|
||||
# TODO: implement a single string version of location;
|
||||
# this will be indexed into elasticsearch and returned in search
|
||||
|
|
|
|||
|
|
@ -10,8 +10,8 @@ describe ConnectionManager do
|
|||
@message_factory = MessageFactory.new
|
||||
end
|
||||
|
||||
def create_user(first_name, last_name, email)
|
||||
@conn.exec("INSERT INTO users (first_name, last_name, email, password_digest) VALUES ($1, $2, $3, $4) RETURNING id", [first_name, last_name, email, '1']) do |result|
|
||||
def create_user(first_name, last_name, email, options = {:musician => true})
|
||||
@conn.exec("INSERT INTO users (first_name, last_name, email, musician, password_digest) VALUES ($1, $2, $3, $4, $5) RETURNING id", [first_name, last_name, email, options[:musician], '1']) do |result|
|
||||
return result.getvalue(0, 0)
|
||||
end
|
||||
end
|
||||
|
|
@ -223,7 +223,7 @@ describe ConnectionManager do
|
|||
|
||||
@conn.transaction do
|
||||
@connman.create_connection(user_id, client_id, "1.1.1.1")
|
||||
@connman.join_music_session(user_id, client_id, music_session_id)
|
||||
@connman.join_music_session(user_id, client_id, music_session_id, true)
|
||||
end
|
||||
|
||||
assert_session_exists(music_session_id, true)
|
||||
|
|
@ -247,7 +247,46 @@ describe ConnectionManager do
|
|||
music_session_id = create_music_session(user_id)
|
||||
|
||||
@conn.transaction do
|
||||
expect { @connman.join_music_session(user_id, client_id, music_session_id) }.to raise_error(ActiveRecord::RecordNotFound)
|
||||
expect { @connman.join_music_session(user_id, client_id, music_session_id, true) }.to raise_error(ActiveRecord::RecordNotFound)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
it "join_music_session fails if user is a fan but wants to join as a musician" do
|
||||
|
||||
client_id = "client_id10.1"
|
||||
user_id = create_user("test", "user10.1", "user10.1@jamkazam.com", :musician => false)
|
||||
|
||||
music_session_id = create_music_session(user_id)
|
||||
|
||||
@conn.transaction do
|
||||
expect { @connman.join_music_session(user_id, client_id, music_session_id, true) }.to raise_error(JamRuby::PermissionError)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
it "join_music_session fails if invalid value for as_musician specified" do
|
||||
|
||||
client_id = "client_id10.2"
|
||||
user_id = create_user("test", "user10.2", "user10.2@jamkazam.com", :musician => false)
|
||||
|
||||
music_session_id = create_music_session(user_id)
|
||||
|
||||
@conn.transaction do
|
||||
expect { @connman.join_music_session(user_id, client_id, music_session_id, 'blarg') }.to raise_error(JamRuby::JamArgumentError)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
it "join_music_session fails if fan_access=true 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)
|
||||
|
||||
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)
|
||||
end
|
||||
|
||||
end
|
||||
|
|
@ -262,7 +301,7 @@ describe ConnectionManager do
|
|||
@conn.transaction do
|
||||
@connman.create_connection(user_id, client_id, "1.1.1.1")
|
||||
# specify real user id, but not associated with this session
|
||||
expect { @connman.join_music_session(user_id2, client_id, music_session_id) } .to raise_error(ActiveRecord::RecordNotFound)
|
||||
expect { @connman.join_music_session(user_id2, client_id, music_session_id, true) } .to raise_error(ActiveRecord::RecordNotFound)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -276,7 +315,7 @@ describe ConnectionManager do
|
|||
end
|
||||
|
||||
@conn.transaction do
|
||||
expect { @connman.join_music_session(user_id, client_id, "some_bogus_music_session_id") }.to raise_error(ActiveRecord::RecordNotFound)
|
||||
expect { @connman.join_music_session(user_id, client_id, "some_bogus_music_session_id", true) }.to raise_error(ActiveRecord::RecordNotFound)
|
||||
end
|
||||
|
||||
end
|
||||
|
|
@ -306,7 +345,7 @@ describe ConnectionManager do
|
|||
end
|
||||
|
||||
@conn.transaction do
|
||||
@connman.join_music_session(user_id, client_id, music_session_id)
|
||||
@connman.join_music_session(user_id, client_id, music_session_id, true)
|
||||
end
|
||||
|
||||
@conn.transaction do
|
||||
|
|
@ -326,7 +365,7 @@ describe ConnectionManager do
|
|||
end
|
||||
|
||||
@conn.transaction do
|
||||
@connman.join_music_session(user_id, client_id, music_session_id)
|
||||
@connman.join_music_session(user_id, client_id, music_session_id, true)
|
||||
end
|
||||
|
||||
assert_session_exists(music_session_id, true)
|
||||
|
|
|
|||
Loading…
Reference in New Issue