Files
old-holivud2/spec/controllers/file_infos_controller_spec.rb
2020-05-31 22:38:19 +02:00

74 lines
2.3 KiB
Ruby

require "rails_helper"
RSpec.describe FileInfosController, type: :controller do
render_views
let(:current_user) { create(:user) }
let(:project) { create(:project, account: current_user.accounts.first) }
let(:acquired_media_release) { create(:acquired_media_release, project: project) }
before do
sign_in(current_user)
end
shared_examples "a file infoable releases controller" do
describe "#edit" do
it "responds successfully" do
get :edit, params: { "#{subject.model_name.param_key}_id" => subject }
expect(response).to be_successful
end
end
describe "#update" do
context "when releasable updated successfully" do
it "responds with a redirect" do
patch :update, params: { "#{subject.model_name.param_key}_id": subject, subject.model_name.param_key => release_params }
expect(response).to be_redirect
expect(response).to redirect_to [project, subject.model_name.plural]
expect(flash.notice).to eq(t("file_infos.update.notice"))
end
it "enqueues tagging job" do
expect {
patch :update, params: { "#{subject.model_name.param_key}_id": subject, subject.model_name.param_key => {} }
}.to have_enqueued_job(SetTagsForReleasableJob).with(subject.class.last)
end
end
end
context "when releasable NOT updated successfully" do
before do
allow_any_instance_of(subject.class).to receive(:update).and_return(false)
end
it "renders edit with flash message" do
patch :update, params: { "#{subject.model_name.param_key}_id": subject, subject.model_name.param_key => release_params }
expect(controller).to have_rendered(:edit)
end
it "does not enqueue tagging job" do
expect {
patch :update, params: { "#{subject.model_name.param_key}_id": subject, subject.model_name.param_key => release_params }
}.not_to have_enqueued_job(SetTagsForReleasableJob)
end
end
end
context "for acquired media releases" do
subject { create(:acquired_media_release, project: project) }
it_behaves_like "a file infoable releases controller"
end
private
def release_params
files = 2.times.map { Rack::Test::UploadedFile.new(file_fixture("audio.mp3"), "audio/mp3") }
{ file_infos_attributes: files }
end
end