102 lines
3.2 KiB
Ruby
102 lines
3.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
RSpec.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
|
|
context "CarrierWave::IntegrityError" do
|
|
before do
|
|
expect_next_instance_of(DesignManagement::DesignV432x230Uploader) do |uploader|
|
|
expect(uploader).to receive(:cache!).and_raise(CarrierWave::IntegrityError, 'foo')
|
|
end
|
|
end
|
|
|
|
it 'logs the exception' do
|
|
expect(Gitlab::ErrorTracking).to receive(:log_exception).with(
|
|
instance_of(CarrierWave::IntegrityError),
|
|
project_id: project.id, version_id: version.id, design_id: version.designs.first.id
|
|
)
|
|
|
|
described_class.new(version).execute
|
|
end
|
|
|
|
it 'logs the error' do
|
|
expect(Gitlab::AppLogger).to receive(:error).with('foo')
|
|
|
|
described_class.new(version).execute
|
|
end
|
|
end
|
|
|
|
context "CarrierWave::UploadError" do
|
|
before do
|
|
expect_next_instance_of(DesignManagement::DesignV432x230Uploader) do |uploader|
|
|
expect(uploader).to receive(:cache!).and_raise(CarrierWave::UploadError, '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::UploadError),
|
|
project_id: project.id, version_id: version.id, design_id: version.designs.first.id
|
|
)
|
|
|
|
described_class.new(version).execute
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|