149 lines
4.5 KiB
Ruby
149 lines
4.5 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe ApiJamTrackMixdownsController, type: :controller do
|
|
render_views
|
|
|
|
let(:user) { FactoryGirl.create(:user) }
|
|
let(:jam_track) { FactoryGirl.create(:jam_track) }
|
|
let(:mixdown) { FactoryGirl.create(:jam_track_mixdown, user: user, jam_track: jam_track) }
|
|
let(:jam_track_right) { FactoryGirl.create(:jam_track_right, jam_track: jam_track, user:user)}
|
|
let(:package) {FactoryGirl.create(:jam_track_mixdown_package, jam_track_mixdown: mixdown)}
|
|
|
|
before(:each) do
|
|
controller.current_user = user
|
|
JamTrackMixdown.destroy_all
|
|
end
|
|
|
|
describe "index" do
|
|
|
|
it "one result" do
|
|
|
|
# make a mixdown with no packages
|
|
get :index, {id: mixdown.jam_track.id}
|
|
response.status.should eq(200)
|
|
json = JSON.parse(response.body)
|
|
json["next"].should be_nil
|
|
json["count"].should eq(1)
|
|
json["mixdowns"][0]["settings"].should eq({"speed" => 5})
|
|
|
|
# and then add a package
|
|
package = FactoryGirl.create(:jam_track_mixdown_package, jam_track_mixdown: mixdown)
|
|
|
|
get :index, {id: mixdown.jam_track.id}
|
|
response.status.should eq(200)
|
|
json = JSON.parse(response.body)
|
|
json["next"].should be_nil
|
|
json["count"].should eq(1)
|
|
json["mixdowns"][0]["packages"][0]["signing_state"].should eq('QUIET')
|
|
end
|
|
end
|
|
|
|
describe "create" do
|
|
|
|
it "success" do
|
|
post :create, {:format => 'json', jamTrackID: jam_track.id, name: 'some name', description: 'some description', settings: {speed:5}}
|
|
|
|
response.status.should eq(200)
|
|
|
|
json = JSON.parse(response.body)
|
|
json["name"].should eq('some name')
|
|
json["jam_track_id"].should eq(jam_track.id)
|
|
json["description"].should eq('some description')
|
|
json["settings"].should eq({"speed" => 5})
|
|
json["packages"].should eq([])
|
|
end
|
|
|
|
it "validates name" do
|
|
post :create, {:format => 'json', jamTrackID: jam_track.id, description: 'some description', settings: {speed:5}}
|
|
|
|
response.status.should eq(422)
|
|
|
|
json = JSON.parse(response.body)
|
|
json["errors"]["name"].should eq(["can't be blank"])
|
|
end
|
|
end
|
|
|
|
describe "enqueue" do
|
|
it "success" do
|
|
|
|
jam_track_right.touch
|
|
post :enqueue, {:format => 'json', id: mixdown.id, file_type: JamTrackMixdownPackage::FILE_TYPE_AAC, encrypt_type: nil, sample_rate: 48}
|
|
|
|
response.status.should eq(200)
|
|
|
|
json = JSON.parse(response.body)
|
|
puts json
|
|
json["id"].should_not be_nil
|
|
|
|
package = JamTrackMixdownPackage.find(json["id"])
|
|
package.file_type.should eq(JamTrackMixdownPackage::FILE_TYPE_AAC)
|
|
package.encrypt_type.should eq(nil)
|
|
package.sample_rate.should eq(48)
|
|
end
|
|
|
|
it "validates file_type" do
|
|
jam_track_right.touch
|
|
post :enqueue, {:format => 'json', id: mixdown.id, file_type: 'wrong', encrypt_type: nil, sample_rate: 48}
|
|
|
|
response.status.should eq(422)
|
|
|
|
json = JSON.parse(response.body)
|
|
json["errors"]["file_type"].should eq(["is not included in the list"])
|
|
end
|
|
|
|
it "finds existing package to enqueue" do
|
|
jam_track_right.touch
|
|
package.touch
|
|
JamTrackMixdownPackage.count.should eq(1)
|
|
|
|
package.jam_track_mixdown.should eq(mixdown)
|
|
post :enqueue, {:format => 'json', id: mixdown.id, file_type: package.file_type, encrypt_type: package.encrypt_type, sample_rate: package.sample_rate}
|
|
|
|
response.status.should eq(200)
|
|
|
|
json = JSON.parse(response.body)
|
|
puts json
|
|
json["id"].should eq(package.id)
|
|
JamTrackMixdownPackage.count.should eq(1)
|
|
end
|
|
end
|
|
|
|
describe "download" do
|
|
|
|
it "enqueues if not available" do
|
|
|
|
jam_track_right.touch
|
|
package.touch
|
|
|
|
post :download, {:format => 'json', id: mixdown.id, file_type: package.file_type, encrypt_type: package.encrypt_type, sample_rate: package.sample_rate}
|
|
|
|
response.status.should eq(202)
|
|
|
|
json = JSON.parse(response.body)
|
|
json["message"].should eq("not available, digitally signing Jam Track Mixdown offline.")
|
|
|
|
package.reload
|
|
package.signing_state.should eq('QUEUED')
|
|
end
|
|
|
|
it "success" do
|
|
|
|
jam_track_right.touch
|
|
package.touch
|
|
package.enqueue_if_needed
|
|
package.signed = true
|
|
package.url = 'some/bogus/place'
|
|
package.save!
|
|
|
|
post :download, {:format => 'json', id: mixdown.id, file_type: package.file_type, encrypt_type: package.encrypt_type, sample_rate: package.sample_rate}
|
|
|
|
response.status.should eq(302)
|
|
|
|
response['Location'].should include('/some/bogus/place')
|
|
|
|
end
|
|
|
|
end
|
|
end
|
|
|