2020-08-07 17:10:07 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
require 'spec_helper'
|
|
|
|
|
|
|
|
RSpec.describe Mutations::DesignManagement::Move do
|
|
|
|
include DesignManagementTestHelpers
|
|
|
|
|
|
|
|
let_it_be(:issue) { create(:issue) }
|
|
|
|
let_it_be(:designs) { create_list(:design, 3, issue: issue) }
|
|
|
|
let_it_be(:developer) { create(:user, developer_projects: [issue.project]) }
|
|
|
|
|
|
|
|
let(:user) { developer }
|
|
|
|
|
|
|
|
let(:mutation) { described_class.new(object: nil, context: { current_user: user }, field: nil) }
|
|
|
|
|
|
|
|
let(:current_design) { designs.first }
|
|
|
|
let(:previous_design) { designs.second }
|
|
|
|
let(:next_design) { designs.third }
|
|
|
|
|
|
|
|
before do
|
|
|
|
enable_design_management
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "#resolve" do
|
|
|
|
subject(:resolve) do
|
|
|
|
args = {
|
|
|
|
current_design: current_design.to_global_id,
|
|
|
|
previous_design: previous_design&.to_global_id,
|
|
|
|
next_design: next_design&.to_global_id
|
|
|
|
}.compact
|
|
|
|
|
2020-10-06 08:08:38 -04:00
|
|
|
mutation.resolve(**args)
|
2020-08-07 17:10:07 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
shared_examples "resource not available" do
|
|
|
|
it "raises an error" do
|
|
|
|
expect { resolve }.to raise_error(Gitlab::Graphql::Errors::ResourceNotAvailable)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'when the feature is not available' do
|
|
|
|
before do
|
|
|
|
enable_design_management(false)
|
|
|
|
end
|
|
|
|
|
|
|
|
it_behaves_like 'resource not available'
|
|
|
|
end
|
|
|
|
|
|
|
|
%i[current_design previous_design next_design].each do |binding|
|
|
|
|
context "When #{binding} cannot be found" do
|
|
|
|
let(binding) { build_stubbed(:design) }
|
|
|
|
|
|
|
|
it_behaves_like 'resource not available'
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'the service runs' do
|
|
|
|
before do
|
|
|
|
expect_next_instance_of(::DesignManagement::MoveDesignsService) do |service|
|
|
|
|
expect(service).to receive(:execute).and_return(service_result)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'raising an error' do
|
|
|
|
let(:service_result) { ServiceResponse.error(message: 'bang!') }
|
|
|
|
|
|
|
|
it 'reports the service-level error' do
|
|
|
|
expect(resolve).to include(errors: ['bang!'], design_collection: eq(issue.design_collection))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'successfully' do
|
|
|
|
let(:service_result) { ServiceResponse.success }
|
|
|
|
|
|
|
|
it 'reports the service-level error' do
|
|
|
|
expect(resolve).to include(errors: be_empty, design_collection: eq(issue.design_collection))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|