148 lines
5.4 KiB
Ruby
148 lines
5.4 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe ApiUserSyncsController, type: :controller 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, as: 'json', params: {id: ''}
|
|
json = JSON.parse(response.body, :symbolize_names => true)
|
|
json.should == {message: "not logged in"}
|
|
end
|
|
|
|
it "can return empty results" do
|
|
get :index, :as => 'json', params: { :id => user1.id }
|
|
json = JSON.parse(response.body, :symbolize_names => true)
|
|
json[:next].should be_nil
|
|
json[:entries].length.should == 0
|
|
end
|
|
|
|
it "deletables" do
|
|
post :deletables, :as => 'json', params: { :id => user1.id, recording_ids: ['1'] }
|
|
json = JSON.parse(response.body, :symbolize_names => true)
|
|
json[:recording_ids].should eq(['1'])
|
|
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
|
|
|
|
# if there are no claims, then no one wants the recording. no usersyncs
|
|
get :index, :as => 'json', params: { :id => user1.id }
|
|
json = JSON.parse(response.body, :symbolize_names => true)
|
|
json[:next].should be_nil
|
|
json[:entries].length.should == 0
|
|
end
|
|
|
|
it "recording isn't over" do
|
|
recording1.duration = nil
|
|
recording1.save!
|
|
|
|
get :index, :as => 'json', params: { :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)
|
|
|
|
recording1.recorded_tracks[0].fully_uploaded = false
|
|
recording1.recorded_tracks[0].save!
|
|
|
|
get :index, :as => 'json', params: { :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, :as => 'json', params: { :id => user2.id }
|
|
json = JSON.parse(response.body, :symbolize_names => true)
|
|
json[:next].should be_nil
|
|
json[:entries].length.should == 1
|
|
|
|
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
|
|
|
|
end
|
|
|
|
it "one user decides to discard the recording" do
|
|
FactoryGirl.create(:claimed_recording, user: user1, recording: recording1, discarded:true)
|
|
FactoryGirl.create(:claimed_recording, user: user2, recording: recording1, discarded:false)
|
|
|
|
# it's a length of zero because recorded_tracks default to 'fully_uploaded = true'. so nothing to do for this user
|
|
get :index, :as => 'json', params: { :id => user1.id }
|
|
json = JSON.parse(response.body, :symbolize_names => true)
|
|
json[:next].should be_nil
|
|
json[:entries].length.should == 0
|
|
|
|
controller.current_user = user2
|
|
get :index, :as => 'json', params: { :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 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
|
|
end
|
|
|
|
it "both users decide to discard the recording" do
|
|
recording1.all_discarded = true
|
|
recording1.save!
|
|
|
|
get :index, :as => 'json', params: { :id => user1.id }
|
|
json = JSON.parse(response.body, :symbolize_names => true)
|
|
json[:next].should be_nil
|
|
json[:entries].length.should == 0
|
|
|
|
end
|
|
end
|
|
|
|
end
|