# frozen_string_literal: true

# @param path [String] the path to file to upload. E.g. File.join('spec', 'fixtures', 'sanitized.svg')
# @param uploader [CarrierWave::Uploader::Base] uploader to handle the upload.
shared_examples 'denied carrierwave upload' do
  it 'will deny upload' do
    fixture_file = fixture_file_upload(path)
    expect { uploader.cache!(fixture_file) }.to raise_exception(CarrierWave::IntegrityError)
  end
end

# @param path [String] the path to file to upload. E.g. File.join('spec', 'fixtures', 'sanitized.svg')
# @param uploader [CarrierWave::Uploader::Base] uploader to handle the upload.
shared_examples 'accepted carrierwave upload' do
  let(:fixture_file) { fixture_file_upload(path) }

  before do
    uploader.remove!
  end

  it 'will accept upload' do
    expect { uploader.cache!(fixture_file) }.not_to raise_exception
  end

  it 'will cache uploaded file' do
    expect { uploader.cache!(fixture_file) }.to change { uploader.file }.from(nil).to(kind_of(CarrierWave::SanitizedFile))
  end
end

# @param path [String] the path to file to upload. E.g. File.join('spec', 'fixtures', 'sanitized.svg')
# @param uploader [CarrierWave::Uploader::Base] uploader to handle the upload.
# @param content_type [String] the upload file content type after cache
shared_examples 'upload with content type' do |content_type|
  let(:fixture_file) { fixture_file_upload(path, content_type) }

  it 'will not change upload file content type' do
    uploader.cache!(fixture_file)
    expect(uploader.file.content_type).to eq(content_type)
  end
end
