summaryrefslogtreecommitdiff
path: root/spec/services/tags/create_service_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/services/tags/create_service_spec.rb')
-rw-r--r--spec/services/tags/create_service_spec.rb53
1 files changed, 53 insertions, 0 deletions
diff --git a/spec/services/tags/create_service_spec.rb b/spec/services/tags/create_service_spec.rb
new file mode 100644
index 00000000000..5478b8c9ec0
--- /dev/null
+++ b/spec/services/tags/create_service_spec.rb
@@ -0,0 +1,53 @@
+require 'spec_helper'
+
+describe Tags::CreateService, services: true do
+ let(:project) { create(:project) }
+ let(:repository) { project.repository }
+ let(:user) { create(:user) }
+ let(:service) { described_class.new(project, user) }
+
+ describe '#execute' do
+ it 'creates the tag and returns success' do
+ response = service.execute('v42.42.42', 'master', 'Foo')
+
+ expect(response[:status]).to eq(:success)
+ expect(response[:tag]).to be_a Gitlab::Git::Tag
+ expect(response[:tag].name).to eq('v42.42.42')
+ end
+
+ context 'when target is invalid' do
+ it 'returns an error' do
+ response = service.execute('v1.1.0', 'foo', 'Foo')
+
+ expect(response).to eq(status: :error,
+ message: 'Target foo is invalid')
+ end
+ end
+
+ context 'when tag already exists' do
+ it 'returns an error' do
+ expect(repository).to receive(:add_tag).
+ with(user, 'v1.1.0', 'master', 'Foo').
+ and_raise(Rugged::TagError)
+
+ response = service.execute('v1.1.0', 'master', 'Foo')
+
+ expect(response).to eq(status: :error,
+ message: 'Tag v1.1.0 already exists')
+ end
+ end
+
+ context 'when pre-receive hook fails' do
+ it 'returns an error' do
+ expect(repository).to receive(:add_tag).
+ with(user, 'v1.1.0', 'master', 'Foo').
+ and_raise(GitHooksService::PreReceiveError, 'something went wrong')
+
+ response = service.execute('v1.1.0', 'master', 'Foo')
+
+ expect(response).to eq(status: :error,
+ message: 'something went wrong')
+ end
+ end
+ end
+end