* fix test bugs, get VRFS-1135 sorts resolved, and fix for easydropdown not destroying topmost div
This commit is contained in:
parent
e33e3a519f
commit
7449de7aad
|
|
@ -5,32 +5,55 @@ module JamRuby
|
|||
belongs_to :recording, class_name: "JamRuby::Recording", inverse_of: :feed, foreign_key: 'recording_id'
|
||||
belongs_to :music_session_history, class_name: "JamRuby::MusicSessionHistory", inverse_of: :feed, foreign_key: 'music_session_id'
|
||||
|
||||
def self.index(params = {start:0, limit:20, sort: 'date'})
|
||||
|
||||
start = params[:start]
|
||||
start ||= 0
|
||||
FIXNUM_MAX = (2**(0.size * 8 -2) -1)
|
||||
SORT_TYPES = ['date', 'plays', 'likes']
|
||||
|
||||
def self.index(params = {limit:20, sort: 'date'})
|
||||
limit = params[:limit]
|
||||
limit ||= 20
|
||||
|
||||
# validate sort
|
||||
sort = params[:sort]
|
||||
sort ||= 'date'
|
||||
raise "not valid sort #{sort}" unless ['date', 'plays', 'likes'].include?(sort)
|
||||
raise "not valid sort #{sort}" unless SORT_TYPES.include?(sort)
|
||||
|
||||
query = Feed.includes(:recording => :plays).includes(:music_session_history => :plays).offset(start).limit(limit)
|
||||
|
||||
start = params[:start]
|
||||
if sort == 'date'
|
||||
start ||= FIXNUM_MAX
|
||||
else
|
||||
start ||= 0
|
||||
end
|
||||
|
||||
query = Feed.includes([:recording]).includes([:music_session_history]).limit(limit)
|
||||
|
||||
if sort == 'date'
|
||||
query = query.where("id < #{start}")
|
||||
query = query.order('id DESC')
|
||||
elsif sort == 'plays'
|
||||
query = query.offset(start)
|
||||
query = query.order("COALESCE(recordings.play_count, music_sessions_history.play_count) DESC ")
|
||||
elsif sort == 'likes'
|
||||
query = query.offset(start)
|
||||
query = query.order("COALESCE(recordings.like_count, music_sessions_history.like_count) DESC ")
|
||||
else
|
||||
raise "sort not implemented: #{sort}"
|
||||
end
|
||||
|
||||
query
|
||||
#query = query.order('claimed_recordings.created_at')
|
||||
|
||||
if query.length == 0
|
||||
[query, nil]
|
||||
elsif query.length < limit
|
||||
[query, nil]
|
||||
else
|
||||
if sort == 'date'
|
||||
[query, query.last.id]
|
||||
else
|
||||
[query, start + limit]
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -8,13 +8,14 @@ describe Feed do
|
|||
let (:user4) { FactoryGirl.create(:user) }
|
||||
|
||||
it "no result" do
|
||||
Feed.index().length.should == 0
|
||||
feeds, start = Feed.index()
|
||||
feeds.length.should == 0
|
||||
end
|
||||
|
||||
it "one claimed recording" do
|
||||
claimed_recording = FactoryGirl.create(:claimed_recording)
|
||||
MusicSessionHistory.delete_all # the factory makes a music_session while making the recording/claimed_recording
|
||||
feeds = Feed.index()
|
||||
feeds, start = Feed.index()
|
||||
feeds.length.should == 1
|
||||
feeds[0].recording == claimed_recording.recording
|
||||
end
|
||||
|
|
@ -29,13 +30,13 @@ describe Feed do
|
|||
# verify the mess above only made one recording
|
||||
Recording.count.should == 1
|
||||
|
||||
feeds = Feed.index()
|
||||
feeds, start = Feed.index
|
||||
feeds.length.should == 1
|
||||
end
|
||||
|
||||
it "one music session" do
|
||||
music_session = FactoryGirl.create(:music_session)
|
||||
feeds = Feed.index()
|
||||
feeds, start = Feed.index
|
||||
feeds.length.should == 1
|
||||
feeds[0].music_session_history == music_session.music_session_history
|
||||
end
|
||||
|
|
@ -44,7 +45,7 @@ describe Feed do
|
|||
it "sorts by index (date) DESC" do
|
||||
claimed_recording = FactoryGirl.create(:claimed_recording)
|
||||
|
||||
feeds = Feed.index()
|
||||
feeds, start = Feed.index
|
||||
feeds.length.should == 2
|
||||
feeds[0].recording.should == claimed_recording.recording
|
||||
feeds[1].music_session_history.should == claimed_recording.recording.music_session.music_session_history
|
||||
|
|
@ -56,13 +57,13 @@ describe Feed do
|
|||
|
||||
FactoryGirl.create(:recording_play, recording: claimed_recording1.recording, user:claimed_recording1.user)
|
||||
|
||||
feeds = Feed.index(:sort => 'plays')
|
||||
feeds, start = Feed.index(:sort => 'plays')
|
||||
feeds.length.should == 4
|
||||
|
||||
FactoryGirl.create(:recording_play, recording: claimed_recording2.recording, user:claimed_recording1.user)
|
||||
FactoryGirl.create(:recording_play, recording: claimed_recording2.recording, user:claimed_recording2.user)
|
||||
|
||||
feeds = Feed.index(:sort => 'plays')
|
||||
feeds, start = Feed.index(:sort => 'plays')
|
||||
feeds.length.should == 4
|
||||
feeds[0].recording.should == claimed_recording2.recording
|
||||
feeds[1].recording.should == claimed_recording1.recording
|
||||
|
|
@ -72,7 +73,7 @@ describe Feed do
|
|||
FactoryGirl.create(:music_session_play, music_session: claimed_recording1.recording.music_session.music_session_history, user: user3)
|
||||
|
||||
|
||||
feeds = Feed.index(:sort => 'plays')
|
||||
feeds, start = Feed.index(:sort => 'plays')
|
||||
feeds.length.should == 4
|
||||
feeds[0].music_session_history.should == claimed_recording1.recording.music_session.music_session_history
|
||||
feeds[1].recording.should == claimed_recording2.recording
|
||||
|
|
@ -85,13 +86,13 @@ describe Feed do
|
|||
|
||||
FactoryGirl.create(:recording_like, recording: claimed_recording1.recording, user:claimed_recording1.user)
|
||||
|
||||
feeds = Feed.index(:sort => 'likes')
|
||||
feeds, start = Feed.index(:sort => 'likes')
|
||||
feeds.length.should == 4
|
||||
|
||||
FactoryGirl.create(:recording_like, recording: claimed_recording2.recording, user:claimed_recording1.user)
|
||||
FactoryGirl.create(:recording_like, recording: claimed_recording2.recording, user:claimed_recording2.user)
|
||||
|
||||
feeds = Feed.index(:sort => 'likes')
|
||||
feeds, start = Feed.index(:sort => 'likes')
|
||||
feeds.length.should == 4
|
||||
feeds[0].recording.should == claimed_recording2.recording
|
||||
feeds[1].recording.should == claimed_recording1.recording
|
||||
|
|
@ -100,7 +101,7 @@ describe Feed do
|
|||
FactoryGirl.create(:music_session_like, music_session_history: claimed_recording1.recording.music_session.music_session_history, user: user2)
|
||||
FactoryGirl.create(:music_session_like, music_session_history: claimed_recording1.recording.music_session.music_session_history, user: user3)
|
||||
|
||||
feeds = Feed.index(:sort => 'likes')
|
||||
feeds, start = Feed.index(:sort => 'likes')
|
||||
feeds.length.should == 4
|
||||
feeds[0].music_session_history.should == claimed_recording1.recording.music_session.music_session_history
|
||||
feeds[1].recording.should == claimed_recording2.recording
|
||||
|
|
@ -109,22 +110,65 @@ describe Feed do
|
|||
end
|
||||
|
||||
describe "pagination" do
|
||||
it "supports pagination" do
|
||||
it "supports date pagination" do
|
||||
claimed_recording = FactoryGirl.create(:claimed_recording)
|
||||
|
||||
options = {limit: 1}
|
||||
feeds = Feed.index(options)
|
||||
feeds, start = Feed.index(options)
|
||||
feeds.length.should == 1
|
||||
feeds[0].recording.should == claimed_recording.recording
|
||||
|
||||
options[:start] = 1
|
||||
feeds = Feed.index(options)
|
||||
options[:start] = start
|
||||
feeds, start = Feed.index(options)
|
||||
feeds.length.should == 1
|
||||
feeds[0].music_session_history.should == claimed_recording.recording.music_session.music_session_history
|
||||
|
||||
options[:start] = 2
|
||||
feeds = Feed.index(options)
|
||||
options[:start] = start
|
||||
feeds, start = Feed.index(options)
|
||||
feeds.length.should == 0
|
||||
start.should be_nil
|
||||
end
|
||||
|
||||
it "supports likes pagination" do
|
||||
claimed_recording1 = FactoryGirl.create(:claimed_recording)
|
||||
|
||||
FactoryGirl.create(:music_session_like, music_session_history: claimed_recording1.recording.music_session.music_session_history, user: user1)
|
||||
|
||||
options = {limit: 1, sort: 'likes'}
|
||||
feeds, start = Feed.index(options)
|
||||
feeds.length.should == 1
|
||||
feeds[0].music_session_history.should == claimed_recording1.recording.music_session.music_session_history
|
||||
|
||||
options[:start] = start
|
||||
feeds, start = Feed.index(options)
|
||||
feeds.length.should == 1
|
||||
feeds[0].recording.should == claimed_recording1.recording
|
||||
|
||||
options[:start] = start
|
||||
feeds, start = Feed.index(options)
|
||||
feeds.length.should == 0
|
||||
start.should be_nil
|
||||
end
|
||||
|
||||
it "supports plays pagination" do
|
||||
claimed_recording1 = FactoryGirl.create(:claimed_recording)
|
||||
|
||||
FactoryGirl.create(:music_session_play, music_session: claimed_recording1.recording.music_session.music_session_history, user: user1)
|
||||
|
||||
options = {limit: 1, sort: 'plays'}
|
||||
feeds, start = Feed.index(options)
|
||||
feeds.length.should == 1
|
||||
feeds[0].music_session_history.should == claimed_recording1.recording.music_session.music_session_history
|
||||
|
||||
options[:start] = start
|
||||
feeds, start = Feed.index(options)
|
||||
feeds.length.should == 1
|
||||
feeds[0].recording.should == claimed_recording1.recording
|
||||
|
||||
options[:start] = start
|
||||
feeds, start = Feed.index(options)
|
||||
feeds.length.should == 0
|
||||
start.should be_nil
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -263,7 +263,6 @@
|
|||
|
||||
$.each(joins, function(i,v) {
|
||||
if (v.client_id != clientId) {
|
||||
|
||||
client.ParticipantJoined(newSession, v);
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -3,26 +3,10 @@ class ApiFeedsController < ApiController
|
|||
respond_to :json
|
||||
|
||||
def index
|
||||
# parse out since parameter
|
||||
since = params[:since]
|
||||
if since
|
||||
start, limit = since.split(':')
|
||||
start = start.to_i
|
||||
limit = limit.to_i
|
||||
else
|
||||
start = 0
|
||||
limit = 20
|
||||
end
|
||||
|
||||
limit = params[:limit].to_i if params[:limit] # override limit if specified
|
||||
|
||||
@feeds = Feed.index({user: current_user, start: start, limit: limit})
|
||||
|
||||
if @feeds.length < limit
|
||||
@next = nil
|
||||
else
|
||||
@next = "#{start + limit}:#{limit}"
|
||||
end
|
||||
@feeds, @next = Feed.index(user: current_user,
|
||||
start: params[:since],
|
||||
limit: params[:limit],
|
||||
sort: params[:sort])
|
||||
|
||||
render "api_feeds/index", :layout => nil
|
||||
end
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@
|
|||
|
||||
<div class="mb5">Musician Access:</div>
|
||||
<div>
|
||||
<div class="left mr20" style="width:75px;">
|
||||
<div class="left mr20 musician_access" style="width:75px;">
|
||||
<select id="musician-access" class="easydropdown">
|
||||
<option selected="selected" value="true">Public</option>
|
||||
<option value="false">Private</option>
|
||||
|
|
@ -66,7 +66,7 @@
|
|||
|
||||
<div class="mb5">Fan Access:</div>
|
||||
<div>
|
||||
<div class="left mr20" style="width:75px;">
|
||||
<div class="left mr20 fan_access" style="width:75px;">
|
||||
<select id="fan-access" class="easydropdown">
|
||||
<option value="true">Public</option>
|
||||
<option selected="selected" value="false">Private</option>
|
||||
|
|
|
|||
|
|
@ -56,8 +56,8 @@ end
|
|||
|
||||
def sign_in_poltergeist(user)
|
||||
visit signin_path
|
||||
fill_in "Email", with: user.email
|
||||
fill_in "Password", with: user.password
|
||||
fill_in "Email Address:", with: user.email
|
||||
fill_in "Password:", with: user.password
|
||||
click_button "SIGN IN"
|
||||
|
||||
if Capybara.javascript_driver == :poltergeist
|
||||
|
|
@ -165,6 +165,9 @@ def create_session(creator = FactoryGirl.create(:user), unique_session_desc = ni
|
|||
fill_in('description', :with => unique_session_desc)
|
||||
#select(genre, :from => 'genres', :visible => false) # this works, but is 'cheating' because easydropdown hides the native select element
|
||||
jk_select(genre, '#create-session-form select[name="genres"]')
|
||||
jk_select('Public', '#create-session-form select#musician-access')
|
||||
jk_select('Public', '#create-session-form select#fan-access')
|
||||
find('#create-session-form div.musician-access-false.iradio_minimal').trigger(:click)
|
||||
find('div.intellectual-property ins').trigger(:click)
|
||||
find('#btn-create-session').trigger(:click) # fails if page width is low
|
||||
end
|
||||
|
|
|
|||
|
|
@ -422,9 +422,10 @@
|
|||
destroy: function(){
|
||||
var self = this;
|
||||
self.unbindHandlers();
|
||||
self.$select.unwrap().siblings().remove();
|
||||
self.$select.unwrap();
|
||||
delete Object.getPrototypeOf(self).instances[self.$select[0].id];
|
||||
self.$select.unwrap().siblings().remove();
|
||||
self.$select.unwrap();
|
||||
delete Object.getPrototypeOf(self).instances[self.$select[0].id];
|
||||
},
|
||||
|
||||
disable: function(){
|
||||
|
|
|
|||
Loading…
Reference in New Issue