gitlab-org--gitlab-foss/spec/services/design_management/generate_image_versions_ser...

78 lines
2.4 KiB
Ruby

# frozen_string_literal: true
require 'spec_helper'
describe DesignManagement::GenerateImageVersionsService do
let_it_be(:project) { create(:project) }
let_it_be(:issue) { create(:issue, project: project) }
let_it_be(:version) { create(:design, :with_lfs_file, issue: issue).versions.first }
let_it_be(:action) { version.actions.first }
describe '#execute' do
it 'generates the image' do
expect { described_class.new(version).execute }
.to change { action.reload.image_v432x230.file }
.from(nil).to(CarrierWave::SanitizedFile)
end
it 'skips generating image versions if the mime type is not whitelisted' do
stub_const('DesignManagement::DesignV432x230Uploader::MIME_TYPE_WHITELIST', [])
described_class.new(version).execute
expect(action.reload.image_v432x230.file).to eq(nil)
end
it 'skips generating image versions if the design file size is too large' do
stub_const("#{described_class.name}::MAX_DESIGN_SIZE", 1.byte)
described_class.new(version).execute
expect(action.reload.image_v432x230.file).to eq(nil)
end
it 'returns the status' do
result = described_class.new(version).execute
expect(result[:status]).to eq(:success)
end
it 'returns the version' do
result = described_class.new(version).execute
expect(result[:version]).to eq(version)
end
it 'logs if the raw image cannot be found' do
version.designs.first.update(filename: 'foo.png')
expect(Gitlab::AppLogger).to receive(:error).with("No design file found for Action: #{action.id}")
described_class.new(version).execute
end
context 'when an error is encountered when generating the image versions' do
before do
expect_next_instance_of(DesignManagement::DesignV432x230Uploader) do |uploader|
expect(uploader).to receive(:cache!).and_raise(CarrierWave::DownloadError, 'foo')
end
end
it 'logs the error' do
expect(Gitlab::AppLogger).to receive(:error).with('foo')
described_class.new(version).execute
end
it 'tracks the error' do
expect(Gitlab::ErrorTracking).to receive(:track_exception).with(
instance_of(CarrierWave::DownloadError),
project_id: project.id, version_id: version.id, design_id: version.designs.first.id
)
described_class.new(version).execute
end
end
end
end