* VRFS-1022 finished
This commit is contained in:
parent
35466433ca
commit
96768b7979
|
|
@ -90,4 +90,5 @@ mix_job_watch.sql
|
|||
music_session_constraints.sql
|
||||
mixes_drop_manifest_add_retry.sql
|
||||
music_sessions_unlogged.sql
|
||||
integrate_icecast_into_sessions.sql
|
||||
integrate_icecast_into_sessions.sql
|
||||
icecast_config_changed.sql
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
-- track when config_changed is set to 0, so that we know roughly which music_sessions (mounts) are valid
|
||||
ALTER TABLE icecast_servers ADD COLUMN config_updated_at TIMESTAMP;
|
||||
|
|
@ -191,10 +191,10 @@ module JamRuby
|
|||
end
|
||||
|
||||
|
||||
def get_media_url
|
||||
raise "Unassociated server to mount" if self.server_mount.nil?
|
||||
def url
|
||||
raise "Unassociated server to mount" if self.server.nil?
|
||||
|
||||
"http://" + server_mount.server.hostname + self.name
|
||||
"http://#{server.hostname}:#{server.pick_listen_socket(:port)}#{self.name}"
|
||||
end
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ module JamRuby
|
|||
attr_accessor :skip_config_changed_flag
|
||||
|
||||
attr_accessible :template_id, :mount_template_id, :limit_id, :admin_auth_id, :directory_id, :master_relay_id, :path_id, :logging_id,
|
||||
:security_id, :config_changed, :hostname, :location, :admin_email, :fileserve, :icecast_server_group_id, as: :admin
|
||||
:security_id, :config_changed, :config_updated_at, :hostname, :location, :admin_email, :fileserve, :icecast_server_group_id, as: :admin
|
||||
|
||||
|
||||
belongs_to :template, class_name: "JamRuby::IcecastTemplate", foreign_key: 'template_id', inverse_of: :servers
|
||||
|
|
@ -58,7 +58,7 @@ module JamRuby
|
|||
|
||||
def after_save
|
||||
# if we set config_changed, then queue up a job
|
||||
if config_changed_was == 0 && config_changed == 1
|
||||
if config_changed == 1
|
||||
IcecastConfigWriter.enqueue(self.server_id)
|
||||
end
|
||||
end
|
||||
|
|
@ -70,6 +70,7 @@ module JamRuby
|
|||
self.skip_config_changed_flag = true
|
||||
|
||||
self.config_changed = 0
|
||||
self.config_updated_at = Time.now
|
||||
begin
|
||||
self.save!
|
||||
rescue
|
||||
|
|
@ -83,7 +84,7 @@ module JamRuby
|
|||
def pick_listen_socket(field)
|
||||
current_listen_sockets = listen_sockets.length > 0 ? listen_sockets : template.listen_sockets
|
||||
socket = current_listen_sockets.first
|
||||
socket[:field] if socket
|
||||
socket[field] if socket
|
||||
end
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -75,7 +75,13 @@ module JamRuby
|
|||
|
||||
# This is a little confusing. You can specify *BOTH* friends_only and my_bands_only to be true
|
||||
# If so, then it's an OR condition. If both are false, you can get sessions with anyone.
|
||||
def self.index(current_user, participants = nil, genres = nil, friends_only = false, my_bands_only = false, keyword = nil)
|
||||
def self.index(current_user, options = {})
|
||||
participants = options[:participants]
|
||||
genres = options[:genres]
|
||||
keyword = options[:keyword]
|
||||
friends_only = options[:friends_only].nil? ? false : options[:friends_only]
|
||||
my_bands_only = options[:my_bands_only].nil? ? false : options[:my_bands_only]
|
||||
as_musician = options[:as_musician].nil? ? true : options[:as_musician]
|
||||
|
||||
query = MusicSession
|
||||
.joins(
|
||||
|
|
@ -118,13 +124,23 @@ module JamRuby
|
|||
music_sessions.created_at DESC
|
||||
}
|
||||
)
|
||||
.where(
|
||||
%Q{
|
||||
musician_access = true
|
||||
OR
|
||||
invitations.id IS NOT NULL
|
||||
}
|
||||
|
||||
if as_musician
|
||||
query = query.where(
|
||||
%Q{
|
||||
musician_access = true
|
||||
OR
|
||||
invitations.id IS NOT NULL
|
||||
}
|
||||
)
|
||||
else
|
||||
# if you are trying to join the session as a fan/listener,
|
||||
# we have to have a mount, fan_access has to be true, and we have to allow for the reload of icecast to have taken effect
|
||||
query = query.joins('INNER JOIN icecast_mounts ON icecast_mounts.music_session_id = music_sessions.id INNER JOIN icecast_servers ON icecast_mounts.icecast_server_id = icecast_servers.id')
|
||||
query = query.where(:fan_access => true)
|
||||
query = query.where("
|
||||
(music_sessions.created_at < icecast_servers.config_updated_at AND NOW() - icecast_servers.config_updated_at > interval '#{APP_CONFIG.icecast_reload_slush} seconds')")
|
||||
end
|
||||
|
||||
query = query.where("music_sessions.description like '%#{keyword}%'") unless keyword.nil?
|
||||
query = query.where("connections.user_id" => participants.split(',')) unless participants.nil?
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ module JamRuby
|
|||
|
||||
def validate
|
||||
raise "icecast_server_id not spceified" unless icecast_server_id
|
||||
raise "queue routing mismatch error" unless icecast_server_id == APP_CONFIG.icecast_server_id
|
||||
raise "queue routing mismatch error. requested icecast_server_id: #{icecast_server_id}, configured icceast_server_id: #{APP_CONFIG.icecast_server_id}" unless icecast_server_id == APP_CONFIG.icecast_server_id
|
||||
end
|
||||
|
||||
def execute(cmd)
|
||||
|
|
|
|||
|
|
@ -23,6 +23,13 @@ FactoryGirl.define do
|
|||
factory :admin do
|
||||
admin true
|
||||
end
|
||||
|
||||
factory :single_user_session do
|
||||
after(:create) do |user, evaluator|
|
||||
music_session = FactoryGirl.create(:music_session, :creator => user)
|
||||
connection = FactoryGirl.create(:connection, :user => user, :music_session => music_session)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
factory :music_session, :class => JamRuby::MusicSession do
|
||||
|
|
@ -34,6 +41,11 @@ FactoryGirl.define do
|
|||
legal_terms true
|
||||
genres [JamRuby::Genre.first]
|
||||
association :creator, :factory => :user
|
||||
|
||||
factory :music_session_with_mount do
|
||||
association :mount, :factory => :icecast_mount
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
factory :music_session_history, :class => JamRuby::MusicSessionHistory do
|
||||
|
|
@ -249,7 +261,7 @@ FactoryGirl.define do
|
|||
|
||||
factory :icecast_server, :class => JamRuby::IcecastServer do
|
||||
sequence(:hostname) { |n| "hostname-#{n}"}
|
||||
sequence(:server_id) { |n| "server-#{n}"}
|
||||
sequence(:server_id) { |n| "test-server-#{n}"}
|
||||
|
||||
factory :icecast_server_minimal do
|
||||
association :template, :factory => :icecast_template_minimal
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@ describe MusicSession do
|
|||
|
||||
before(:each) do
|
||||
MusicSession.delete_all
|
||||
IcecastServer.delete_all
|
||||
IcecastMount.delete_all
|
||||
end
|
||||
it 'can grant access to valid user' do
|
||||
|
||||
|
|
@ -79,175 +81,237 @@ describe MusicSession do
|
|||
end
|
||||
|
||||
|
||||
it "orders two sessions by created_at starting with most recent" do
|
||||
creator = FactoryGirl.create(:user)
|
||||
creator2 = FactoryGirl.create(:user)
|
||||
describe "index" do
|
||||
it "orders two sessions by created_at starting with most recent" do
|
||||
creator = FactoryGirl.create(:user)
|
||||
creator2 = FactoryGirl.create(:user)
|
||||
|
||||
earlier_session = FactoryGirl.create(:music_session, :creator => creator, :description => "Earlier Session")
|
||||
FactoryGirl.create(:connection, :user => creator, :music_session => earlier_session)
|
||||
earlier_session = FactoryGirl.create(:music_session, :creator => creator, :description => "Earlier Session")
|
||||
FactoryGirl.create(:connection, :user => creator, :music_session => earlier_session)
|
||||
|
||||
later_session = FactoryGirl.create(:music_session, :creator => creator2, :description => "Later Session")
|
||||
FactoryGirl.create(:connection, :user => creator2, :music_session => later_session)
|
||||
later_session = FactoryGirl.create(:music_session, :creator => creator2, :description => "Later Session")
|
||||
FactoryGirl.create(:connection, :user => creator2, :music_session => later_session)
|
||||
|
||||
user = FactoryGirl.create(:user)
|
||||
user = FactoryGirl.create(:user)
|
||||
|
||||
#ActiveRecord::Base.logger = Logger.new(STDOUT)
|
||||
music_sessions = MusicSession.index(user)
|
||||
music_sessions.length.should == 2
|
||||
music_sessions.first.id.should == later_session.id
|
||||
#ActiveRecord::Base.logger = Logger.new(STDOUT)
|
||||
music_sessions = MusicSession.index(user)
|
||||
music_sessions.length.should == 2
|
||||
music_sessions.first.id.should == later_session.id
|
||||
end
|
||||
|
||||
it "orders sessions with inviteds first, even if created first" do
|
||||
creator1 = FactoryGirl.create(:user)
|
||||
creator2 = FactoryGirl.create(:user)
|
||||
|
||||
earlier_session = FactoryGirl.create(:music_session, :creator => creator1, :description => "Earlier Session")
|
||||
FactoryGirl.create(:connection, :user => creator1, :music_session => earlier_session)
|
||||
later_session = FactoryGirl.create(:music_session, :creator => creator2, :description => "Later Session")
|
||||
FactoryGirl.create(:connection, :user => creator2, :music_session => later_session)
|
||||
user = FactoryGirl.create(:user)
|
||||
FactoryGirl.create(:connection, :user => creator1, :music_session => earlier_session)
|
||||
FactoryGirl.create(:friendship, :user => creator1, :friend => user)
|
||||
FactoryGirl.create(:friendship, :user => user, :friend => creator1)
|
||||
FactoryGirl.create(:invitation, :sender => creator1, :receiver => user, :music_session => earlier_session)
|
||||
|
||||
music_sessions = MusicSession.index(user)
|
||||
music_sessions.length.should == 2
|
||||
music_sessions.first.id.should == earlier_session.id
|
||||
end
|
||||
|
||||
|
||||
it "orders sessions with friends in the session first, even if created first" do
|
||||
|
||||
creator1 = FactoryGirl.create(:user)
|
||||
creator2 = FactoryGirl.create(:user)
|
||||
earlier_session = FactoryGirl.create(:music_session, :creator => creator1, :description => "Earlier Session")
|
||||
FactoryGirl.create(:connection, :user => creator1, :music_session => earlier_session)
|
||||
later_session = FactoryGirl.create(:music_session, :creator => creator2, :description => "Later Session")
|
||||
FactoryGirl.create(:connection, :user => creator2, :music_session => later_session)
|
||||
|
||||
user = FactoryGirl.create(:user)
|
||||
FactoryGirl.create(:friendship, :user => creator1, :friend => user)
|
||||
FactoryGirl.create(:friendship, :user => user, :friend => creator1)
|
||||
FactoryGirl.create(:connection, :user => creator1, :music_session => earlier_session)
|
||||
FactoryGirl.create(:connection, :user => creator2, :music_session => earlier_session)
|
||||
|
||||
music_sessions = MusicSession.index(user)
|
||||
music_sessions.length.should == 2
|
||||
music_sessions.first.id.should == earlier_session.id
|
||||
end
|
||||
|
||||
it "doesn't list a session if musician_access is set to false" do
|
||||
creator = FactoryGirl.create(:user)
|
||||
session = FactoryGirl.create(:music_session, :creator => creator, :description => "Session", :musician_access => false)
|
||||
user = FactoryGirl.create(:user)
|
||||
|
||||
music_sessions = MusicSession.index(user)
|
||||
music_sessions.length.should == 0
|
||||
end
|
||||
|
||||
it "does list a session if musician_access is set to false but user was invited" do
|
||||
creator = FactoryGirl.create(:user)
|
||||
session = FactoryGirl.create(:music_session, :creator => creator, :description => "Session", :musician_access => false)
|
||||
user = FactoryGirl.create(:user)
|
||||
FactoryGirl.create(:connection, :user => creator, :music_session => session)
|
||||
FactoryGirl.create(:friendship, :user => creator, :friend => user)
|
||||
FactoryGirl.create(:friendship, :user => user, :friend => creator)
|
||||
FactoryGirl.create(:invitation, :sender => creator, :receiver => user, :music_session => session)
|
||||
|
||||
music_sessions = MusicSession.index(user)
|
||||
music_sessions.length.should == 1
|
||||
end
|
||||
|
||||
it "lists a session if the genre matches" do
|
||||
creator = FactoryGirl.create(:user)
|
||||
genre = FactoryGirl.create(:genre)
|
||||
session = FactoryGirl.create(:music_session, :creator => creator, :description => "Session", :genres => [genre])
|
||||
FactoryGirl.create(:connection, :user => creator, :music_session => session)
|
||||
user = FactoryGirl.create(:user)
|
||||
|
||||
music_sessions = MusicSession.index(user, genres: [genre.id])
|
||||
music_sessions.length.should == 1
|
||||
end
|
||||
|
||||
it "does not list a session if the genre fails to match" do
|
||||
creator = FactoryGirl.create(:user)
|
||||
genre1 = FactoryGirl.create(:genre)
|
||||
genre2 = FactoryGirl.create(:genre)
|
||||
session = FactoryGirl.create(:music_session, :creator => creator, :description => "Session", :genres => [genre1])
|
||||
user = FactoryGirl.create(:user)
|
||||
|
||||
music_sessions = MusicSession.index(user, genres: [genre2.id])
|
||||
music_sessions.length.should == 0
|
||||
end
|
||||
|
||||
it "does not list a session if friends_only is set and no friends are in it" do
|
||||
creator = FactoryGirl.create(:user)
|
||||
session = FactoryGirl.create(:music_session, :creator => creator, :description => "Session")
|
||||
user = FactoryGirl.create(:user)
|
||||
|
||||
music_sessions = MusicSession.index(user, friends_only: true)
|
||||
music_sessions.length.should == 0
|
||||
end
|
||||
|
||||
it "lists a session properly if a friend is in it" do
|
||||
creator = FactoryGirl.create(:user)
|
||||
session = FactoryGirl.create(:music_session, :creator => creator, :description => "Session")
|
||||
user = FactoryGirl.create(:user)
|
||||
FactoryGirl.create(:friendship, :user => creator, :friend => user)
|
||||
FactoryGirl.create(:friendship, :user => user, :friend => creator)
|
||||
FactoryGirl.create(:connection, :user => creator, :music_session => session)
|
||||
|
||||
music_sessions = MusicSession.index(user)
|
||||
music_sessions.length.should == 1
|
||||
music_sessions = MusicSession.index(user, friends_only: true)
|
||||
music_sessions.length.should == 1
|
||||
music_sessions = MusicSession.index(user, friends_only: false, my_bands_only: true)
|
||||
music_sessions.length.should == 0
|
||||
music_sessions = MusicSession.index(user, friends_only: true, my_bands_only: true)
|
||||
music_sessions.length.should == 1
|
||||
end
|
||||
|
||||
it "does not list a session if it has no participants" do
|
||||
# it's a design goal that there should be no sessions with 0 connections;
|
||||
# however, this bug continually crops up so the .index method will protect against this common bug
|
||||
|
||||
creator = FactoryGirl.create(:user)
|
||||
session = FactoryGirl.create(:music_session, :creator => creator, :description => "Session")
|
||||
session.connections.delete_all # should leave a bogus, 0 participant session around
|
||||
|
||||
music_sessions = MusicSession.index(creator)
|
||||
music_sessions.length.should == 0
|
||||
|
||||
end
|
||||
|
||||
it "does not list a session if my_bands_only is set and it's not my band" do
|
||||
creator = FactoryGirl.create(:user)
|
||||
session = FactoryGirl.create(:music_session, :creator => creator, :description => "Session")
|
||||
user = FactoryGirl.create(:user)
|
||||
|
||||
music_sessions = MusicSession.index(user, friends_only: false, my_bands_only: true)
|
||||
music_sessions.length.should == 0
|
||||
end
|
||||
|
||||
it "lists a session properly if it's my band's session" do
|
||||
band = FactoryGirl.create(:band)
|
||||
creator = FactoryGirl.create(:user)
|
||||
session = FactoryGirl.create(:music_session, :creator => creator, :description => "Session", :band => band)
|
||||
FactoryGirl.create(:connection, :user => creator, :music_session => session)
|
||||
user = FactoryGirl.create(:user)
|
||||
FactoryGirl.create(:band_musician, :band => band, :user => creator)
|
||||
FactoryGirl.create(:band_musician, :band => band, :user => user)
|
||||
|
||||
music_sessions = MusicSession.index(user)
|
||||
music_sessions.length.should == 1
|
||||
music_sessions = MusicSession.index(user, friends_only: true)
|
||||
music_sessions.length.should == 0
|
||||
music_sessions = MusicSession.index(user, friends_only: false, my_bands_only: true)
|
||||
music_sessions.length.should == 1
|
||||
music_sessions = MusicSession.index(user, friends_only: true, my_bands_only: true)
|
||||
music_sessions.length.should == 1
|
||||
end
|
||||
|
||||
describe "index(as_musician: false)" do
|
||||
let(:fan_access) { true }
|
||||
let(:creator) { FactoryGirl.create(:user) }
|
||||
let(:session) { FactoryGirl.create(:music_session, creator: creator, fan_access: fan_access ) }
|
||||
let(:connection) { FactoryGirl.create(:connection, user: creator, :music_session => session) }
|
||||
|
||||
let(:user) {FactoryGirl.create(:user) }
|
||||
|
||||
describe "no mount" do
|
||||
|
||||
before(:each) do
|
||||
session.mount.should be_nil
|
||||
end
|
||||
|
||||
it "no session listed if mount is nil" do
|
||||
connection.touch
|
||||
sessions = MusicSession.index(user, as_musician: false)
|
||||
sessions.length.should == 0
|
||||
end
|
||||
end
|
||||
|
||||
describe "with mount" do
|
||||
let(:session_with_mount) { FactoryGirl.create(:music_session_with_mount) }
|
||||
let(:connection_with_mount) { FactoryGirl.create(:connection, user: creator, :music_session => session_with_mount) }
|
||||
|
||||
|
||||
before(:each) {
|
||||
session_with_mount.mount.should_not be_nil
|
||||
}
|
||||
|
||||
it "no session listed if icecast_server config hasn't been updated" do
|
||||
connection_with_mount.touch
|
||||
sessions = MusicSession.index(user, as_musician: false)
|
||||
sessions.length.should == 0
|
||||
end
|
||||
|
||||
it "no session listed if icecast_server config was updated but still before slush time" do
|
||||
connection_with_mount.touch
|
||||
session_with_mount.created_at = 2.minutes.ago
|
||||
session_with_mount.save!(:validate => false)
|
||||
session_with_mount.mount.server.config_updated_at = (APP_CONFIG.icecast_reload_slush - 1).second.ago
|
||||
session_with_mount.mount.server.save!(:validate => false)
|
||||
sessions = MusicSession.index(user, as_musician: false)
|
||||
sessions.length.should == 0
|
||||
end
|
||||
|
||||
it "session listed if icecast_server config has been updated" do
|
||||
connection_with_mount.touch
|
||||
session_with_mount.created_at = 2.minutes.ago
|
||||
session_with_mount.save!(:validate => false)
|
||||
session_with_mount.mount.server.config_updated_at = 1.minute.ago
|
||||
session_with_mount.mount.server.save!(:validate => false)
|
||||
sessions = MusicSession.index(user, as_musician: false)
|
||||
sessions.length.should == 1
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
it "orders sessions with inviteds first, even if created first" do
|
||||
creator1 = FactoryGirl.create(:user)
|
||||
creator2 = FactoryGirl.create(:user)
|
||||
|
||||
earlier_session = FactoryGirl.create(:music_session, :creator => creator1, :description => "Earlier Session")
|
||||
FactoryGirl.create(:connection, :user => creator1, :music_session => earlier_session)
|
||||
later_session = FactoryGirl.create(:music_session, :creator => creator2, :description => "Later Session")
|
||||
FactoryGirl.create(:connection, :user => creator2, :music_session => later_session)
|
||||
user = FactoryGirl.create(:user)
|
||||
FactoryGirl.create(:connection, :user => creator1, :music_session => earlier_session)
|
||||
FactoryGirl.create(:friendship, :user => creator1, :friend => user)
|
||||
FactoryGirl.create(:friendship, :user => user, :friend => creator1)
|
||||
FactoryGirl.create(:invitation, :sender => creator1, :receiver => user, :music_session => earlier_session)
|
||||
|
||||
music_sessions = MusicSession.index(user)
|
||||
music_sessions.length.should == 2
|
||||
music_sessions.first.id.should == earlier_session.id
|
||||
end
|
||||
|
||||
|
||||
it "orders sessions with friends in the session first, even if created first" do
|
||||
|
||||
creator1 = FactoryGirl.create(:user)
|
||||
creator2 = FactoryGirl.create(:user)
|
||||
earlier_session = FactoryGirl.create(:music_session, :creator => creator1, :description => "Earlier Session")
|
||||
FactoryGirl.create(:connection, :user => creator1, :music_session => earlier_session)
|
||||
later_session = FactoryGirl.create(:music_session, :creator => creator2, :description => "Later Session")
|
||||
FactoryGirl.create(:connection, :user => creator2, :music_session => later_session)
|
||||
|
||||
user = FactoryGirl.create(:user)
|
||||
FactoryGirl.create(:friendship, :user => creator1, :friend => user)
|
||||
FactoryGirl.create(:friendship, :user => user, :friend => creator1)
|
||||
FactoryGirl.create(:connection, :user => creator1, :music_session => earlier_session)
|
||||
FactoryGirl.create(:connection, :user => creator2, :music_session => earlier_session)
|
||||
|
||||
music_sessions = MusicSession.index(user)
|
||||
music_sessions.length.should == 2
|
||||
music_sessions.first.id.should == earlier_session.id
|
||||
end
|
||||
|
||||
it "doesn't list a session if musician_access is set to false" do
|
||||
creator = FactoryGirl.create(:user)
|
||||
session = FactoryGirl.create(:music_session, :creator => creator, :description => "Session", :musician_access => false)
|
||||
user = FactoryGirl.create(:user)
|
||||
|
||||
music_sessions = MusicSession.index(user)
|
||||
music_sessions.length.should == 0
|
||||
end
|
||||
|
||||
it "does list a session if musician_access is set to false but user was invited" do
|
||||
creator = FactoryGirl.create(:user)
|
||||
session = FactoryGirl.create(:music_session, :creator => creator, :description => "Session", :musician_access => false)
|
||||
user = FactoryGirl.create(:user)
|
||||
FactoryGirl.create(:connection, :user => creator, :music_session => session)
|
||||
FactoryGirl.create(:friendship, :user => creator, :friend => user)
|
||||
FactoryGirl.create(:friendship, :user => user, :friend => creator)
|
||||
FactoryGirl.create(:invitation, :sender => creator, :receiver => user, :music_session => session)
|
||||
|
||||
music_sessions = MusicSession.index(user)
|
||||
music_sessions.length.should == 1
|
||||
end
|
||||
|
||||
it "lists a session if the genre matches" do
|
||||
creator = FactoryGirl.create(:user)
|
||||
genre = FactoryGirl.create(:genre)
|
||||
session = FactoryGirl.create(:music_session, :creator => creator, :description => "Session", :genres => [genre])
|
||||
FactoryGirl.create(:connection, :user => creator, :music_session => session)
|
||||
user = FactoryGirl.create(:user)
|
||||
|
||||
music_sessions = MusicSession.index(user, nil, [genre.id])
|
||||
music_sessions.length.should == 1
|
||||
end
|
||||
|
||||
it "does not list a session if the genre fails to match" do
|
||||
creator = FactoryGirl.create(:user)
|
||||
genre1 = FactoryGirl.create(:genre)
|
||||
genre2 = FactoryGirl.create(:genre)
|
||||
session = FactoryGirl.create(:music_session, :creator => creator, :description => "Session", :genres => [genre1])
|
||||
user = FactoryGirl.create(:user)
|
||||
|
||||
music_sessions = MusicSession.index(user, nil, [genre2.id])
|
||||
music_sessions.length.should == 0
|
||||
end
|
||||
|
||||
it "does not list a session if friends_only is set and no friends are in it" do
|
||||
creator = FactoryGirl.create(:user)
|
||||
session = FactoryGirl.create(:music_session, :creator => creator, :description => "Session")
|
||||
user = FactoryGirl.create(:user)
|
||||
|
||||
music_sessions = MusicSession.index(user, nil, nil, true)
|
||||
music_sessions.length.should == 0
|
||||
end
|
||||
|
||||
it "lists a session properly if a friend is in it" do
|
||||
creator = FactoryGirl.create(:user)
|
||||
session = FactoryGirl.create(:music_session, :creator => creator, :description => "Session")
|
||||
user = FactoryGirl.create(:user)
|
||||
FactoryGirl.create(:friendship, :user => creator, :friend => user)
|
||||
FactoryGirl.create(:friendship, :user => user, :friend => creator)
|
||||
FactoryGirl.create(:connection, :user => creator, :music_session => session)
|
||||
|
||||
music_sessions = MusicSession.index(user, nil, nil)
|
||||
music_sessions.length.should == 1
|
||||
music_sessions = MusicSession.index(user, nil, nil, true)
|
||||
music_sessions.length.should == 1
|
||||
music_sessions = MusicSession.index(user, nil, nil, false, true)
|
||||
music_sessions.length.should == 0
|
||||
music_sessions = MusicSession.index(user, nil, nil, true, true)
|
||||
music_sessions.length.should == 1
|
||||
end
|
||||
|
||||
it "does not list a session if it has no participants" do
|
||||
# it's a design goal that there should be no sessions with 0 connections;
|
||||
# however, this bug continually crops up so the .index method will protect against this common bug
|
||||
|
||||
creator = FactoryGirl.create(:user)
|
||||
session = FactoryGirl.create(:music_session, :creator => creator, :description => "Session")
|
||||
session.connections.delete_all # should leave a bogus, 0 participant session around
|
||||
|
||||
music_sessions = MusicSession.index(creator, nil, nil)
|
||||
music_sessions.length.should == 0
|
||||
|
||||
end
|
||||
|
||||
it "does not list a session if my_bands_only is set and it's not my band" do
|
||||
creator = FactoryGirl.create(:user)
|
||||
session = FactoryGirl.create(:music_session, :creator => creator, :description => "Session")
|
||||
user = FactoryGirl.create(:user)
|
||||
|
||||
music_sessions = MusicSession.index(user, nil, nil, false, true)
|
||||
music_sessions.length.should == 0
|
||||
end
|
||||
|
||||
it "lists a session properly if it's my band's session" do
|
||||
band = FactoryGirl.create(:band)
|
||||
creator = FactoryGirl.create(:user)
|
||||
session = FactoryGirl.create(:music_session, :creator => creator, :description => "Session", :band => band)
|
||||
FactoryGirl.create(:connection, :user => creator, :music_session => session)
|
||||
user = FactoryGirl.create(:user)
|
||||
FactoryGirl.create(:band_musician, :band => band, :user => creator)
|
||||
FactoryGirl.create(:band_musician, :band => band, :user => user)
|
||||
|
||||
music_sessions = MusicSession.index(user, nil, nil)
|
||||
music_sessions.length.should == 1
|
||||
music_sessions = MusicSession.index(user, nil, nil, true)
|
||||
music_sessions.length.should == 0
|
||||
music_sessions = MusicSession.index(user, nil, nil, false, true)
|
||||
music_sessions.length.should == 1
|
||||
music_sessions = MusicSession.index(user, nil, nil, true, true)
|
||||
music_sessions.length.should == 1
|
||||
end
|
||||
|
||||
it "updates the fields of a music session properly" do
|
||||
genre1 = FactoryGirl.create(:genre)
|
||||
|
|
@ -264,110 +328,6 @@ describe MusicSession do
|
|||
session.genres[0].id.should == genre1.id
|
||||
end
|
||||
|
||||
=begin
|
||||
# mslemmer:
|
||||
# I'm going to clean this up into smaller tasks.
|
||||
it 'can list sessions with appropriate sort order' do
|
||||
|
||||
user1 = FactoryGirl.create(:user)
|
||||
user2 = FactoryGirl.create(:user)
|
||||
user3 = FactoryGirl.create(:user)
|
||||
user4 = FactoryGirl.create(:user)
|
||||
user5 = FactoryGirl.create(:user)
|
||||
|
||||
music_session = FactoryGirl.create(:music_session, :creator => user1, :musician_access => false)
|
||||
FactoryGirl.create(:connection, :user => user1, :music_session => music_session)
|
||||
|
||||
music_sessions = MusicSession.index(user2)
|
||||
music_sessions.length.should == 0
|
||||
music_session2 = FactoryGirl.create(:music_session, :creator => user3, :musician_access => true)
|
||||
FactoryGirl.create(:connection, :user => user3, :music_session => music_session2)
|
||||
|
||||
music_sessions = MusicSession.index(user2)
|
||||
music_sessions.length.should == 1
|
||||
music_sessions[0].connections[0].user.friends.length == 0
|
||||
|
||||
# users 1 and 5 are friends
|
||||
FactoryGirl.create(:friendship, :user => user1, :friend => user5)
|
||||
FactoryGirl.create(:friendship, :user => user5, :friend => user1)
|
||||
|
||||
# users 1 and 2 are friends
|
||||
FactoryGirl.create(:friendship, :user => user1, :friend => user2)
|
||||
FactoryGirl.create(:friendship, :user => user2, :friend => user1)
|
||||
|
||||
# users 2 and 4 are friends
|
||||
FactoryGirl.create(:friendship, :user => user2, :friend => user4)
|
||||
FactoryGirl.create(:friendship, :user => user4, :friend => user2)
|
||||
|
||||
# user 2 should now be able to see this session, because his friend is in the session
|
||||
music_sessions = MusicSession.index(user2)
|
||||
music_sessions.length.should == 2
|
||||
music_sessions[0].id.should == music_session.id
|
||||
music_sessions[0].connections[0].user.id.should == user1.id
|
||||
music_sessions[0].connections[0].user.friends.length == 1
|
||||
music_sessions[1].id.should == music_session2.id
|
||||
|
||||
FactoryGirl.create(:invitation, :sender => user1, :receiver => user2, :music_session => music_session)
|
||||
|
||||
music_sessions = MusicSession.index(user2)
|
||||
music_sessions.length.should == 2
|
||||
music_sessions[0].id.should == music_session.id
|
||||
music_sessions[1].id.should == music_session2.id
|
||||
|
||||
# create another, but friendy usic session with user 4
|
||||
music_session3 = FactoryGirl.create(:music_session, :creator => user4, :musician_access => false, :created_at => 1.week.ago)
|
||||
FactoryGirl.create(:connection, :user => user4, :music_session => music_session3)
|
||||
|
||||
music_sessions = MusicSession.index(user2)
|
||||
music_sessions.length.should == 3
|
||||
music_sessions[0].id.should == music_session.id
|
||||
music_sessions[1].id.should == music_session3.id
|
||||
music_sessions[2].id.should == music_session2.id
|
||||
|
||||
# verify we can inspect the data
|
||||
music_session.invitations.length.should == 1
|
||||
|
||||
|
||||
music_session4 = FactoryGirl.create(:music_session, :creator => user5, :musician_access => false, :created_at => 2.week.ago)
|
||||
FactoryGirl.create(:connection, :user => user5, :music_session => music_session4)
|
||||
|
||||
music_sessions = MusicSession.index(user2)
|
||||
music_sessions.length.should == 3
|
||||
# make this session public now
|
||||
music_session4.musician_access = true
|
||||
music_session4.save
|
||||
|
||||
music_sessions = MusicSession.index(user2)
|
||||
music_sessions.length.should == 4
|
||||
music_sessions[0].id.should == music_session.id
|
||||
music_sessions[1].id.should == music_session3.id
|
||||
music_sessions[2].id.should == music_session2.id
|
||||
music_sessions[3].id.should == music_session4.id
|
||||
|
||||
# ok let's make the public session that we just made, become a 'friendy' one
|
||||
# make user2/5 friends
|
||||
FactoryGirl.create(:friendship, :user => user2, :friend => user5)
|
||||
FactoryGirl.create(:friendship, :user => user5, :friend => user2)
|
||||
|
||||
music_sessions = MusicSession.index(user2)
|
||||
music_sessions.length.should == 4
|
||||
music_sessions[0].id.should == music_session.id
|
||||
music_sessions[1].id.should == music_session3.id
|
||||
music_sessions[2].id.should == music_session4.id
|
||||
music_sessions[3].id.should == music_session2.id
|
||||
|
||||
# and finally make it an invite
|
||||
FactoryGirl.create(:invitation, :sender => user5, :receiver => user2, :music_session => music_session4 )
|
||||
music_sessions = MusicSession.index(user2)
|
||||
music_sessions.length.should == 4
|
||||
|
||||
music_sessions[0].id.should == music_session.id
|
||||
music_sessions[1].id.should == music_session4.id
|
||||
music_sessions[2].id.should == music_session3.id
|
||||
music_sessions[3].id.should == music_session2.id
|
||||
end
|
||||
=end
|
||||
|
||||
it 'uninvited users cant join approval-required sessions without invitation' do
|
||||
user1 = FactoryGirl.create(:user) # in the jam session
|
||||
user2 = FactoryGirl.create(:user) # in the jam session
|
||||
|
|
|
|||
|
|
@ -75,8 +75,10 @@ describe IcecastConfigWriter do
|
|||
end
|
||||
|
||||
it "should have been enqueued because the config changed" do
|
||||
server.touch
|
||||
ResqueSpec.reset!
|
||||
server.save!
|
||||
# the act of just creating the IcecastServer puts a message on the queue
|
||||
# the act of just touching the IcecastServer puts a message on the queue, because config_changed = true
|
||||
IcecastConfigWriter.should have_queue_size_of(1)
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -40,17 +40,6 @@ CarrierWave.configure do |config|
|
|||
config.enable_processing = false
|
||||
end
|
||||
|
||||
|
||||
#Resque::Failure::Notifier.configure do |config|
|
||||
# config.from = 'dummy@jamkazam.com' # from address
|
||||
# config.to = 'dummy@jamkazam.com' # to address
|
||||
# config.include_payload = true # enabled by default
|
||||
#end
|
||||
#Resque::Failure::Multiple.classes = [Resque::Failure::Redis, Resque::Failure::Notifier]
|
||||
#Resque::Failure.backend = Resque::Failure::Multiple
|
||||
|
||||
|
||||
|
||||
#uncomment the following line to use spork with the debugger
|
||||
#require 'spork/ext/ruby-debug'
|
||||
|
||||
|
|
@ -58,7 +47,7 @@ Spork.prefork do
|
|||
# Loading more in this block will cause your tests to run faster. However,
|
||||
# if you change any configuration or code from libraries loaded here, you'll
|
||||
# need to restart spork for it take effect.
|
||||
# This file is copied to spec/ when you run 'rails generate rspec:install'
|
||||
# This file is copied to spec/ when you run 'rails generate rspec:install'
|
||||
#ENV["RAILS_ENV"] ||= 'test'
|
||||
#require File.expand_path("../../config/environment", __FILE__)
|
||||
require 'rspec/autorun'
|
||||
|
|
|
|||
|
|
@ -41,6 +41,10 @@ def app_config
|
|||
15 # 15 seconds
|
||||
end
|
||||
|
||||
def icecast_reload_slush
|
||||
3 # 3 seconds
|
||||
end
|
||||
|
||||
def rabbitmq_host
|
||||
"localhost"
|
||||
end
|
||||
|
|
|
|||
|
|
@ -15,7 +15,13 @@ class ApiMusicSessionsController < ApiController
|
|||
# params[:friends_only] does the obvious.
|
||||
# params[:my_bands_only] also does the obvious.
|
||||
# Importantly, friends and my_bands are ORed not ANDed. So, if you specify both as true, you'll get more results, not fewer.
|
||||
@music_sessions = MusicSession.index(current_user, params[:participants], params[:genres], params[:friends_only], params[:my_bands_only], params[:keyword])
|
||||
@music_sessions = MusicSession.index(current_user,
|
||||
participants: params[:participants],
|
||||
genres: params[:genres],
|
||||
friends_only: params[:friends_only],
|
||||
my_bands_only: params[:my_bands_only],
|
||||
keyword: params[:keyword],
|
||||
as_musician: params[:as_musician])
|
||||
end
|
||||
|
||||
def create
|
||||
|
|
|
|||
|
|
@ -36,4 +36,11 @@ class SpikesController < ApplicationController
|
|||
render :json => ret_contacts
|
||||
end
|
||||
|
||||
def listen_in
|
||||
|
||||
#as_musician = false is the critical search criteria for sessions to list correctly
|
||||
@music_sessions = MusicSession.index(current_user, as_musician: false)
|
||||
|
||||
render :layout => 'web'
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ child(:connections => :participants) {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
child({:invitations => :invitations}) {
|
||||
attributes :id, :sender_id, :receiver_id
|
||||
}
|
||||
|
|
@ -65,3 +66,8 @@ node(:claimed_recording, :if => lambda { |music_session| music_session.users.exi
|
|||
}
|
||||
}
|
||||
end
|
||||
|
||||
# only show mount info if fan_acces is public. Eventually we'll also need to show this in other scenarios, like if invited
|
||||
child({:mount => :mount}, :if => lambda { |music_session| music_session.fan_access}) {
|
||||
attributes :id, :name, :sourced, :listeners, :bitrate, :mime_type, :subtype
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,16 @@
|
|||
<% provide(:title, 'Listen In') %>
|
||||
|
||||
<div class="content-wrapper">
|
||||
<h2>Listing all Sessions Supposedly On Going</h2>
|
||||
|
||||
<% @music_sessions.each do |music_session| %>
|
||||
|
||||
<h3><%= music_session.description %></h3>
|
||||
<div>created at: <%= music_session.created_at %> </div>
|
||||
<audio controls>
|
||||
<source src="<%= music_session.mount.url %>" type="<%= music_session.mount.resolve_string(:mime_type) %>">
|
||||
</audio>
|
||||
|
||||
<% end %>
|
||||
|
||||
</div>
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
<% provide(:title, 'Register') %>
|
||||
<% provide(:title, 'Register') %>
|
||||
|
||||
<div class="content-wrapper register-page">
|
||||
<h2>Create a JamKazam account</h2>
|
||||
<div class="content-wrapper register-page">
|
||||
<h2>Create a JamKazam account</h2>
|
||||
|
||||
<%= form_for(@user, :url => @signup_postback) do |f| %>
|
||||
|
||||
|
|
|
|||
|
|
@ -178,6 +178,7 @@ include JamRuby
|
|||
config.icecast_server_id = ENV['ICECAST_SERVER_ID'] || 'localhost'
|
||||
config.icecast_max_missing_check = 2 * 60 # 2 minutes
|
||||
config.icecast_max_sourced_changed = 15 # 15 seconds
|
||||
config.icecast_reload_slush = 3 # 3 seconds
|
||||
|
||||
config.email_alerts_alias = 'nobody@jamkazam.com' # should be used for 'oh no' server down/service down sorts of emails
|
||||
config.email_generic_from = 'nobody@jamkazam.com'
|
||||
|
|
|
|||
|
|
@ -57,6 +57,7 @@ SampleApp::Application.routes.draw do
|
|||
# spikes
|
||||
match '/facebook_invite', to: 'spikes#facebook_invite'
|
||||
match '/gmail_contacts', to: 'spikes#gmail_contacts'
|
||||
match '/listen_in', to: 'spikes#listen_in'
|
||||
|
||||
# password reset
|
||||
match '/request_reset_password' => 'users#request_reset_password', :via => :get
|
||||
|
|
|
|||
|
|
@ -32,13 +32,11 @@ MusicSessionManager < BaseManager
|
|||
end
|
||||
end
|
||||
|
||||
|
||||
if fan_access
|
||||
# create an icecast mount since regular users can listen in to the broadcast
|
||||
music_session.mount = IcecastMount.build_session_mount(music_session)
|
||||
end
|
||||
|
||||
|
||||
music_session.save
|
||||
|
||||
unless music_session.errors.any?
|
||||
|
|
|
|||
|
|
@ -143,4 +143,170 @@ FactoryGirl.define do
|
|||
sequence(:lng) { |n| [-78.85029, -122.4155311][(n-1).modulo(2)] }
|
||||
end
|
||||
|
||||
factory :icecast_limit, :class => JamRuby::IcecastLimit do
|
||||
clients 5
|
||||
sources 1
|
||||
queue_size 102400
|
||||
client_timeout 30
|
||||
header_timeout 15
|
||||
source_timeout 10
|
||||
burst_size 65536
|
||||
end
|
||||
|
||||
factory :icecast_admin_authentication, :class => JamRuby::IcecastAdminAuthentication do
|
||||
source_pass Faker::Lorem.characters(10)
|
||||
admin_user Faker::Lorem.characters(10)
|
||||
admin_pass Faker::Lorem.characters(10)
|
||||
relay_user Faker::Lorem.characters(10)
|
||||
relay_pass Faker::Lorem.characters(10)
|
||||
end
|
||||
|
||||
factory :icecast_directory, :class => JamRuby::IcecastDirectory do
|
||||
yp_url_timeout 15
|
||||
yp_url Faker::Lorem.characters(10)
|
||||
end
|
||||
|
||||
factory :icecast_master_server_relay, :class => JamRuby::IcecastMasterServerRelay do
|
||||
master_server Faker::Lorem.characters(10)
|
||||
master_server_port 8000
|
||||
master_update_interval 120
|
||||
master_username Faker::Lorem.characters(10)
|
||||
master_pass Faker::Lorem.characters(10)
|
||||
relays_on_demand 1
|
||||
end
|
||||
|
||||
factory :icecast_path, :class => JamRuby::IcecastPath do
|
||||
base_dir Faker::Lorem.characters(10)
|
||||
log_dir Faker::Lorem.characters(10)
|
||||
pid_file Faker::Lorem.characters(10)
|
||||
web_root Faker::Lorem.characters(10)
|
||||
admin_root Faker::Lorem.characters(10)
|
||||
end
|
||||
|
||||
factory :icecast_logging, :class => JamRuby::IcecastLogging do
|
||||
access_log Faker::Lorem.characters(10)
|
||||
error_log Faker::Lorem.characters(10)
|
||||
log_level 3
|
||||
log_archive nil
|
||||
log_size 10000
|
||||
end
|
||||
|
||||
factory :icecast_security, :class => JamRuby::IcecastSecurity do
|
||||
chroot 0
|
||||
end
|
||||
|
||||
factory :icecast_mount, :class => JamRuby::IcecastMount do
|
||||
name "/" + Faker::Lorem.characters(10)
|
||||
source_username Faker::Lorem.characters(10)
|
||||
source_pass Faker::Lorem.characters(10)
|
||||
max_listeners 100
|
||||
max_listener_duration 3600
|
||||
fallback_mount Faker::Lorem.characters(10)
|
||||
fallback_override 1
|
||||
fallback_when_full 1
|
||||
is_public -1
|
||||
stream_name Faker::Lorem.characters(10)
|
||||
stream_description Faker::Lorem.characters(10)
|
||||
stream_url Faker::Lorem.characters(10)
|
||||
genre Faker::Lorem.characters(10)
|
||||
hidden 0
|
||||
association :server, factory: :icecast_server_with_overrides
|
||||
|
||||
factory :icecast_mount_with_auth do
|
||||
association :authentication, :factory => :icecast_user_authentication
|
||||
|
||||
factory :iceast_mount_with_template do
|
||||
association :mount_template, :factory => :icecast_mount_template
|
||||
|
||||
factory :iceast_mount_with_music_session do
|
||||
association :music_session, :factory => :music_session
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
||||
factory :icecast_listen_socket, :class => JamRuby::IcecastListenSocket do
|
||||
port 8000
|
||||
end
|
||||
|
||||
factory :icecast_relay, :class => JamRuby::IcecastRelay do
|
||||
port 8000
|
||||
mount Faker::Lorem.characters(10)
|
||||
server Faker::Lorem.characters(10)
|
||||
on_demand 1
|
||||
end
|
||||
|
||||
factory :icecast_user_authentication, :class => JamRuby::IcecastUserAuthentication do
|
||||
authentication_type 'url'
|
||||
unused_username Faker::Lorem.characters(10)
|
||||
unused_pass Faker::Lorem.characters(10)
|
||||
mount_add Faker::Lorem.characters(10)
|
||||
mount_remove Faker::Lorem.characters(10)
|
||||
listener_add Faker::Lorem.characters(10)
|
||||
listener_remove Faker::Lorem.characters(10)
|
||||
auth_header 'icecast-auth-user: 1'
|
||||
timelimit_header 'icecast-auth-timelimit:'
|
||||
end
|
||||
|
||||
factory :icecast_server, :class => JamRuby::IcecastServer do
|
||||
sequence(:hostname) { |n| "hostname-#{n}"}
|
||||
sequence(:server_id) { |n| "server-#{n}"}
|
||||
|
||||
factory :icecast_server_minimal do
|
||||
association :template, :factory => :icecast_template_minimal
|
||||
association :mount_template, :factory => :icecast_mount_template
|
||||
|
||||
factory :icecast_server_with_overrides do
|
||||
association :limit, :factory => :icecast_limit
|
||||
association :admin_auth, :factory => :icecast_admin_authentication
|
||||
association :path, :factory => :icecast_path
|
||||
association :logging, :factory => :icecast_logging
|
||||
association :security, :factory => :icecast_security
|
||||
|
||||
before(:create) do |server|
|
||||
server.listen_sockets << FactoryGirl.build(:icecast_listen_socket)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
factory :icecast_template, :class => JamRuby::IcecastTemplate do
|
||||
|
||||
sequence(:name) { |n| "name-#{n}"}
|
||||
sequence(:location) { |n| "location-#{n}"}
|
||||
|
||||
factory :icecast_template_minimal do
|
||||
association :limit, :factory => :icecast_limit
|
||||
association :admin_auth, :factory => :icecast_admin_authentication
|
||||
association :path, :factory => :icecast_path
|
||||
association :logging, :factory => :icecast_logging
|
||||
association :security, :factory => :icecast_security
|
||||
|
||||
before(:create) do |template|
|
||||
template.listen_sockets << FactoryGirl.build(:icecast_listen_socket)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
factory :icecast_mount_template, :class => JamRuby::IcecastMountTemplate do
|
||||
sequence(:name) { |n| "name-#{n}"}
|
||||
source_username Faker::Lorem.characters(10)
|
||||
source_pass Faker::Lorem.characters(10)
|
||||
max_listeners 100
|
||||
max_listener_duration 3600
|
||||
fallback_mount Faker::Lorem.characters(10)
|
||||
fallback_override 1
|
||||
fallback_when_full 1
|
||||
is_public -1
|
||||
stream_name Faker::Lorem.characters(10)
|
||||
stream_description Faker::Lorem.characters(10)
|
||||
stream_url Faker::Lorem.characters(10)
|
||||
genre Faker::Lorem.characters(10)
|
||||
hidden 0
|
||||
association :authentication, :factory => :icecast_user_authentication
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
|
|
|||
|
|
@ -585,6 +585,32 @@ describe "Music Session API ", :type => :api do
|
|||
last_response.status.should eql(422)
|
||||
JSON.parse(last_response.body)["errors"]["music_session"][0].should == ValidationMessages::CANT_JOIN_RECORDING_SESSION
|
||||
end
|
||||
|
||||
it "shows mount info based on fan_access" do
|
||||
# create the session
|
||||
server = FactoryGirl.create(:icecast_server_minimal)
|
||||
user2 = FactoryGirl.create(:user) # in the music session
|
||||
client = FactoryGirl.create(:connection, :user => user, :ip_address => "1.1.1.10", :client_id => "mount_info")
|
||||
post '/api/sessions.json', defopts.merge({:client_id => client.client_id, :fan_access => true}).to_json, "CONTENT_TYPE" => 'application/json'
|
||||
last_response.status.should eql(201)
|
||||
session = JSON.parse(last_response.body)
|
||||
music_session = MusicSession.find(session["id"])
|
||||
session["mount"].should_not be_nil
|
||||
session["mount"]["name"].should == music_session.mount.name
|
||||
session["mount"]["listeners"].should == music_session.mount.listeners
|
||||
session["mount"]["sourced"].should == music_session.mount.sourced
|
||||
|
||||
# set gfan_access to false, which should cause the mount info to hide
|
||||
music_session.fan_access = false
|
||||
music_session.save!
|
||||
|
||||
get "/api/sessions/#{session["id"]}.json"
|
||||
last_response.status.should eql(200)
|
||||
session = JSON.parse(last_response.body)
|
||||
session["mount"].should be_nil
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
it "Finds a single open session" do
|
||||
|
|
|
|||
Loading…
Reference in New Issue