176 lines
7.0 KiB
Ruby
176 lines
7.0 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe Feed do
|
|
|
|
let (:user1) { FactoryGirl.create(:user) }
|
|
let (:user2) { FactoryGirl.create(:user) }
|
|
let (:user3) { FactoryGirl.create(:user) }
|
|
let (:user4) { FactoryGirl.create(:user) }
|
|
|
|
it "no result" do
|
|
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, start = Feed.index()
|
|
feeds.length.should == 1
|
|
feeds[0].recording == claimed_recording.recording
|
|
end
|
|
|
|
it "two claimed recordings for the same recording should only return one" do
|
|
recording = FactoryGirl.create(:claimed_recording).recording
|
|
second_track = FactoryGirl.create(:recorded_track, recording: recording)
|
|
recording.recorded_tracks << second_track
|
|
FactoryGirl.create(:claimed_recording, recording: recording, user: second_track.user)
|
|
MusicSessionHistory.delete_all
|
|
|
|
# verify the mess above only made one recording
|
|
Recording.count.should == 1
|
|
|
|
feeds, start = Feed.index
|
|
feeds.length.should == 1
|
|
end
|
|
|
|
it "one music session" do
|
|
music_session = FactoryGirl.create(:music_session)
|
|
feeds, start = Feed.index
|
|
feeds.length.should == 1
|
|
feeds[0].music_session_history == music_session.music_session_history
|
|
end
|
|
|
|
describe "sorting" do
|
|
it "sorts by index (date) DESC" do
|
|
claimed_recording = FactoryGirl.create(:claimed_recording)
|
|
|
|
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
|
|
end
|
|
|
|
it "sort by plays DESC" do
|
|
claimed_recording1 = FactoryGirl.create(:claimed_recording)
|
|
claimed_recording2 = FactoryGirl.create(:claimed_recording)
|
|
|
|
FactoryGirl.create(:recording_play, recording: claimed_recording1.recording, user:claimed_recording1.user)
|
|
|
|
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, start = Feed.index(:sort => 'plays')
|
|
feeds.length.should == 4
|
|
feeds[0].recording.should == claimed_recording2.recording
|
|
feeds[1].recording.should == claimed_recording1.recording
|
|
|
|
FactoryGirl.create(:music_session_play, music_session: claimed_recording1.recording.music_session.music_session_history, user: user1)
|
|
FactoryGirl.create(:music_session_play, music_session: claimed_recording1.recording.music_session.music_session_history, user: user2)
|
|
FactoryGirl.create(:music_session_play, music_session: claimed_recording1.recording.music_session.music_session_history, user: user3)
|
|
|
|
|
|
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
|
|
feeds[2].recording.should == claimed_recording1.recording
|
|
end
|
|
|
|
it "sort by likes DESC" do
|
|
claimed_recording1 = FactoryGirl.create(:claimed_recording)
|
|
claimed_recording2 = FactoryGirl.create(:claimed_recording)
|
|
|
|
FactoryGirl.create(:recording_like, recording: claimed_recording1.recording, user:claimed_recording1.user)
|
|
|
|
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, start = Feed.index(:sort => 'likes')
|
|
feeds.length.should == 4
|
|
feeds[0].recording.should == claimed_recording2.recording
|
|
feeds[1].recording.should == claimed_recording1.recording
|
|
|
|
FactoryGirl.create(:music_session_like, music_session_history: claimed_recording1.recording.music_session.music_session_history, user: user1)
|
|
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, 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
|
|
feeds[2].recording.should == claimed_recording1.recording
|
|
end
|
|
end
|
|
|
|
describe "pagination" do
|
|
it "supports date pagination" do
|
|
claimed_recording = FactoryGirl.create(:claimed_recording)
|
|
|
|
options = {limit: 1}
|
|
feeds, start = Feed.index(options)
|
|
feeds.length.should == 1
|
|
feeds[0].recording.should == claimed_recording.recording
|
|
|
|
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] = 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
|
|
|
|
end
|