From d58cf2a048de47a993f64cf609fa5e4e16f69079 Mon Sep 17 00:00:00 2001 From: Seth Call Date: Wed, 7 Jan 2015 16:16:57 -0600 Subject: [PATCH] * VRFS-2617 - allow only purchased jamtracks to be returned by list method. (reuse existing API) --- ruby/lib/jam_ruby/models/jam_track.rb | 10 ++++- ruby/spec/factories.rb | 7 ++++ ruby/spec/jam_ruby/models/email_batch_spec.rb | 4 ++ ruby/spec/jam_ruby/models/jam_track_spec.rb | 41 +++++++++++++++++++ .../controllers/api_jam_tracks_controller.rb | 2 +- .../api_jam_tracks_controller_spec.rb | 3 +- web/spec/factories.rb | 1 - 7 files changed, 62 insertions(+), 6 deletions(-) diff --git a/ruby/lib/jam_ruby/models/jam_track.rb b/ruby/lib/jam_ruby/models/jam_track.rb index af28ba855..89117323e 100644 --- a/ruby/lib/jam_ruby/models/jam_track.rb +++ b/ruby/lib/jam_ruby/models/jam_track.rb @@ -54,7 +54,7 @@ module JamRuby accepts_nested_attributes_for :jam_track_tap_ins, allow_destroy: true class << self - def index(options = {}, force_all=false) + def index(options, user) limit = options[:limit] limit ||= 20 limit = limit.to_i @@ -65,12 +65,18 @@ module JamRuby query = JamTrack.joins(:jam_track_tracks) .offset(start) .limit(limit) + + if options[:show_purchased_only] + query = query.joins(:jam_track_rights) + query = query.where("jam_track_rights.user_id = ?", user.id) + end - query = query.where("jam_tracks.available = ?", true) unless force_all + query = query.where("jam_tracks.available = ?", true) unless user.admin query = query.where("jam_tracks.genre_id = '#{options[:genre]}'") unless options[:genre].blank? query = query.where("jam_track_tracks.instrument_id = '#{options[:instrument]}'") unless options[:instrument].blank? query = query.where("jam_tracks.sales_region = '#{options[:availability]}'") unless options[:availability].blank? query = query.group("jam_tracks.id") + query = query.order('jam_tracks.name') if query.length == 0 [query, nil] diff --git a/ruby/spec/factories.rb b/ruby/spec/factories.rb index ce2d5c4f0..36b8de639 100644 --- a/ruby/spec/factories.rb +++ b/ruby/spec/factories.rb @@ -715,9 +715,16 @@ FactoryGirl.define do reproduction_royalty_amount 0.999 licensor_royalty_amount 0.999 pro_royalty_amount 0.999 + available true genre JamRuby::Genre.first association :licensor, factory: :jam_track_licensor + + factory :jam_track_with_tracks do + after(:create) do |jam_track, evaluator| + FactoryGirl.create(:jam_track_track, jam_track: jam_track) + end + end end factory :jam_track_track, :class => JamRuby::JamTrackTrack do diff --git a/ruby/spec/jam_ruby/models/email_batch_spec.rb b/ruby/spec/jam_ruby/models/email_batch_spec.rb index 42c20f585..2a85316a5 100644 --- a/ruby/spec/jam_ruby/models/email_batch_spec.rb +++ b/ruby/spec/jam_ruby/models/email_batch_spec.rb @@ -2,6 +2,10 @@ require 'spec_helper' describe EmailBatch do + before(:all) do + User.delete_all + end + after(:each) do Timecop.return end diff --git a/ruby/spec/jam_ruby/models/jam_track_spec.rb b/ruby/spec/jam_ruby/models/jam_track_spec.rb index 1bddfc5ab..0c3ab5936 100644 --- a/ruby/spec/jam_ruby/models/jam_track_spec.rb +++ b/ruby/spec/jam_ruby/models/jam_track_spec.rb @@ -6,6 +6,7 @@ describe JamTrack do include CarrierWave::Test::Matchers include UsesTempFiles + let(:user) {FactoryGirl.create(:user)} it "created" do jam_track = FactoryGirl.create(:jam_track) @@ -13,6 +14,46 @@ describe JamTrack do jam_track.licensor.jam_tracks.should == [jam_track] end + describe "index" do + it "empty query" do + query, pager = JamTrack.index({}, user) + query.size.should == 0 + end + + it "sorts by name" do + jam_track1 = FactoryGirl.create(:jam_track_with_tracks, name: 'a') + jam_track2 = FactoryGirl.create(:jam_track_with_tracks, name: 'b') + + query, pager = JamTrack.index({}, user) + query.size.should == 2 + + query[0].should eq(jam_track1) + query[1].should eq(jam_track2) + + # flip order by mucking with name + jam_track1.name = 'c' + jam_track1.save! + + query, pager = JamTrack.index({}, user) + query[0].should eq(jam_track2) + query[1].should eq(jam_track1) + end + + it "supports showing purchased only" do + jam_track1 = FactoryGirl.create(:jam_track_with_tracks, name: 'a') + + # no results yet + query, pager = JamTrack.index({show_purchased_only:true}, user) + query.size.should == 0 + + # but after the user buys it, it is returned + FactoryGirl.create(:jam_track_right, jam_track: jam_track1, user: user) + query, pager = JamTrack.index({show_purchased_only:true}, user) + query.size.should == 1 + query[0].should eq(jam_track1) + end + end + describe "validations" do describe "bpm" do it "1" do diff --git a/web/app/controllers/api_jam_tracks_controller.rb b/web/app/controllers/api_jam_tracks_controller.rb index f0ed01e44..5ecb29774 100644 --- a/web/app/controllers/api_jam_tracks_controller.rb +++ b/web/app/controllers/api_jam_tracks_controller.rb @@ -7,7 +7,7 @@ class ApiJamTracksController < ApiController respond_to :json def index - data = JamTrack.index(params, current_user.admin) + data = JamTrack.index(params, current_user) @jam_tracks, @next = data[0], data[1] render "api_jam_tracks/index", :layout => nil diff --git a/web/spec/controllers/api_jam_tracks_controller_spec.rb b/web/spec/controllers/api_jam_tracks_controller_spec.rb index 817c3ad3d..ddb44ab32 100644 --- a/web/spec/controllers/api_jam_tracks_controller_spec.rb +++ b/web/spec/controllers/api_jam_tracks_controller_spec.rb @@ -149,10 +149,9 @@ describe ApiJamTracksController do response.status.should == 200 json = JSON.parse(response.body) json.length.should == 1 - puts json.inspect json[0]['id'].should == @jam_track.id json[0]['private'].should be_nil - json[0]['error'].should == 'not_purchased' + json[0]['error'].should == 'not_purchased' end it "track with no key" do diff --git a/web/spec/factories.rb b/web/spec/factories.rb index 1f1308a77..4a6b981dd 100644 --- a/web/spec/factories.rb +++ b/web/spec/factories.rb @@ -721,7 +721,6 @@ FactoryGirl.define do after(:create) do |jam_track, evaluator| FactoryGirl.create(:jam_track_track, jam_track: jam_track) if evaluator.make_track end - end factory :jam_track_track, :class => JamRuby::JamTrackTrack do