From fb36b8e38008a8786ab60324e090f0f9ce123efd Mon Sep 17 00:00:00 2001 From: Seth Call Date: Mon, 27 Oct 2014 17:14:40 -0500 Subject: [PATCH] * VRFS-2408 - remove dup tracks from interfrace --- db/manifest | 1 + db/up/user_syncs_fix_dup_tracks_2408.sql | 32 ++++++++++++++ ruby/spec/jam_ruby/models/user_sync_spec.rb | 48 +++++++++++++++++++++ 3 files changed, 81 insertions(+) create mode 100644 db/up/user_syncs_fix_dup_tracks_2408.sql diff --git a/db/manifest b/db/manifest index 6342f4c83..c8652bebf 100755 --- a/db/manifest +++ b/db/manifest @@ -224,3 +224,4 @@ emails_from_update2.sql add_youtube_flag_to_claimed_recordings.sql add_session_create_type.sql user_syncs_and_quick_mix.sql +user_syncs_fix_dup_tracks_2408.sql diff --git a/db/up/user_syncs_fix_dup_tracks_2408.sql b/db/up/user_syncs_fix_dup_tracks_2408.sql new file mode 100644 index 000000000..2d98e8940 --- /dev/null +++ b/db/up/user_syncs_fix_dup_tracks_2408.sql @@ -0,0 +1,32 @@ +DROP VIEW user_syncs; + +CREATE VIEW user_syncs AS + SELECT DISTINCT b.id AS recorded_track_id, + CAST(NULL as BIGINT) AS mix_id, + CAST(NULL as BIGINT) as quick_mix_id, + b.id AS unified_id, + a.user_id AS user_id, + b.fully_uploaded, + recordings.created_at AS created_at, + recordings.id AS recording_id + FROM recorded_tracks a INNER JOIN recordings ON a.recording_id = recordings.id AND duration IS NOT NULL AND all_discarded = FALSE INNER JOIN recorded_tracks b ON a.recording_id = b.recording_id + UNION ALL + SELECT CAST(NULL as BIGINT) AS recorded_track_id, + mixes.id AS mix_id, + CAST(NULL as BIGINT) AS quick_mix_id, + mixes.id AS unified_id, + claimed_recordings.user_id AS user_id, + NULL as fully_uploaded, + recordings.created_at AS created_at, + recordings.id AS recording_id + FROM mixes INNER JOIN recordings ON mixes.recording_id = recordings.id INNER JOIN claimed_recordings ON recordings.id = claimed_recordings.recording_id WHERE claimed_recordings.discarded = FALSE + UNION ALL + SELECT CAST(NULL as BIGINT) AS recorded_track_id, + CAST(NULL as BIGINT) AS mix_id, + quick_mixes.id AS quick_mix_id, + quick_mixes.id AS unified_id, + quick_mixes.user_id, + quick_mixes.fully_uploaded, + recordings.created_at AS created_at, + recordings.id AS recording_id + FROM quick_mixes INNER JOIN recordings ON quick_mixes.recording_id = recordings.id AND duration IS NOT NULL AND all_discarded = FALSE; diff --git a/ruby/spec/jam_ruby/models/user_sync_spec.rb b/ruby/spec/jam_ruby/models/user_sync_spec.rb index 4781200b5..349cf706e 100644 --- a/ruby/spec/jam_ruby/models/user_sync_spec.rb +++ b/ruby/spec/jam_ruby/models/user_sync_spec.rb @@ -167,6 +167,54 @@ describe UserSync do user_syncs.length.should == 0 end end + + describe "one recording with multi-track users" do + let!(:recording1) { + recording = FactoryGirl.create(:recording, owner: user1, band: nil, duration:1) + recording.recorded_tracks << FactoryGirl.create(:recorded_track, recording: recording, user: recording.owner) + recording.recorded_tracks << FactoryGirl.create(:recorded_track, recording: recording, user: recording.owner) + recording.recorded_tracks << FactoryGirl.create(:recorded_track, recording: recording, user: user2) + recording.recorded_tracks << FactoryGirl.create(:recorded_track, recording: recording, user: user2) + recording.save! + recording.reload + recording + } + + let(:sorted_tracks) { + Array.new(recording1.recorded_tracks).sort! {|a, b| + if a.created_at == b.created_at + a.id <=> b.id + else + a.created_at <=> b.created_at + end + } + } + + + it "one user decides to keep the recording" do + claimed_recording = FactoryGirl.create(:claimed_recording, user: user1, recording: recording1, discarded:false) + claimed_recording.recording.should == recording1 + + data = UserSync.index({user_id: user1.id}) + data[:next].should be_nil + user_syncs = data[:query] + user_syncs.length.should == 4 + user_syncs[0].recorded_track.should == sorted_tracks[0] + user_syncs[1].recorded_track.should == sorted_tracks[1] + user_syncs[2].recorded_track.should == sorted_tracks[2] + user_syncs[3].recorded_track.should == sorted_tracks[3] + + data = UserSync.index({user_id: user2.id}) + data[:next].should be_nil + user_syncs = data[:query] + user_syncs.length.should == 4 + user_syncs[0].recorded_track.should == sorted_tracks[0] + user_syncs[1].recorded_track.should == sorted_tracks[1] + user_syncs[2].recorded_track.should == sorted_tracks[2] + user_syncs[3].recorded_track.should == sorted_tracks[3] + end + end + end describe "pagination" do