require 'spec_helper' describe ApiUserSyncsController do render_views let(:user1) {FactoryGirl.create(:user)} let(:user2) {FactoryGirl.create(:user)} before(:each) { controller.current_user = user1 } it "requires logged in" do controller.current_user = nil get :index json = JSON.parse(response.body, :symbolize_names => true) json.should == {message: "not logged in"} end it "can return empty results" do get :index, { :format => 'json', :id => user1.id } json = JSON.parse(response.body, :symbolize_names => true) json[:next].should be_nil json[:entries].length.should == 0 end describe "one recording with two 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: user2) recording.save! recording.reload recording } let(:sorted_tracks) { Array.new(recording1.recorded_tracks).sort_by! {|rt| -rt.id} } it "no claimed_recordings" do # every is supposed to upload immediately, but no downloads until you try claim it. The assertions below validate this get :index, { :format => 'json', :id => user1.id } json = JSON.parse(response.body, :symbolize_names => true) json[:next].should be_nil json[:entries].length.should == 2 recorded_track1 = json[:entries][0] recorded_track1[:upload][:should_upload].should be_true recorded_track1[:upload][:too_many_upload_failures].should be_false recorded_track1[:download][:should_download].should be_false recorded_track1[:download][:too_many_downloads].should be_false recorded_track2 = json[:entries][1] recorded_track2[:upload][:should_upload].should be_true recorded_track2[:upload][:too_many_upload_failures].should be_false recorded_track2[:download][:should_download].should be_false recorded_track2[:download][:too_many_downloads].should be_false end it "recording isn't over" do recording1.duration = nil recording1.save! get :index, { :format => 'json', :id => user1.id } json = JSON.parse(response.body, :symbolize_names => true) json[:next].should be_nil json[:entries].length.should == 0 end it "one user decides to keep the recording" do FactoryGirl.create(:claimed_recording, user: user1, recording: recording1, discarded:false) get :index, { :format => 'json', :id => user1.id } json = JSON.parse(response.body, :symbolize_names => true) json[:next].should be_nil json[:entries].length.should == 2 recorded_track1 = json[:entries][0] recorded_track1[:upload][:should_upload].should be_true recorded_track1[:upload][:too_many_upload_failures].should be_false recorded_track1[:download][:should_download].should be_true recorded_track1[:download][:too_many_downloads].should be_false recorded_track2 = json[:entries][1] recorded_track2[:upload][:should_upload].should be_true recorded_track2[:upload][:too_many_upload_failures].should be_false recorded_track2[:download][:should_download].should be_true recorded_track2[:download][:too_many_downloads].should be_false controller.current_user = user2 get :index, { :format => 'json', :id => user2.id } json = JSON.parse(response.body, :symbolize_names => true) json[:next].should be_nil json[:entries].length.should == 2 recorded_track1 = json[:entries][0] recorded_track1[:upload][:should_upload].should be_true recorded_track1[:upload][:too_many_upload_failures].should be_false recorded_track1[:download][:should_download].should be_false recorded_track1[:download][:too_many_downloads].should be_false recorded_track2 = json[:entries][1] recorded_track2[:upload][:should_upload].should be_true recorded_track2[:upload][:too_many_upload_failures].should be_false recorded_track2[:download][:should_download].should be_false recorded_track2[:download][:too_many_downloads].should be_false end it "one user decides to discard the recording" do FactoryGirl.create(:claimed_recording, user: user1, recording: recording1, discarded:true) get :index, { :format => 'json', :id => user1.id } json = JSON.parse(response.body, :symbolize_names => true) json[:next].should be_nil json[:entries].length.should == 2 recorded_track1 = json[:entries][0] recorded_track1[:upload][:should_upload].should be_true recorded_track1[:upload][:too_many_upload_failures].should be_false recorded_track1[:download][:should_download].should be_false recorded_track1[:download][:too_many_downloads].should be_false recorded_track2 = json[:entries][1] recorded_track2[:upload][:should_upload].should be_true recorded_track2[:upload][:too_many_upload_failures].should be_false recorded_track2[:download][:should_download].should be_false recorded_track2[:download][:too_many_downloads].should be_false controller.current_user = user2 get :index, { :format => 'json', :id => user2.id } json = JSON.parse(response.body, :symbolize_names => true) json[:next].should be_nil json[:entries].length.should == 2 recorded_track1 = json[:entries][0] recorded_track1[:upload][:should_upload].should be_true recorded_track1[:upload][:too_many_upload_failures].should be_false recorded_track1[:download][:should_download].should be_false recorded_track1[:download][:too_many_downloads].should be_false recorded_track2 = json[:entries][1] recorded_track2[:upload][:should_upload].should be_true recorded_track2[:upload][:too_many_upload_failures].should be_false recorded_track2[:download][:should_download].should be_false recorded_track2[:download][:too_many_downloads].should be_false end it "both users decide to discard the recording" do recording1.all_discarded = true recording1.save! get :index, { :format => 'json', :id => user1.id } json = JSON.parse(response.body, :symbolize_names => true) json[:next].should be_nil json[:entries].length.should == 0 end end end