* fix test bugs, get VRFS-1135 sorts resolved, and fix for easydropdown not destroying topmost div

This commit is contained in:
Seth Call 2014-02-18 18:53:16 +00:00
parent e33e3a519f
commit 7449de7aad
7 changed files with 105 additions and 51 deletions

View File

@ -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

View File

@ -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

View File

@ -263,7 +263,6 @@
$.each(joins, function(i,v) {
if (v.client_id != clientId) {
client.ParticipantJoined(newSession, v);
}
});

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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(){