Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouglas Barbosa Alexandre <dbalexandre@gmail.com>2016-09-16 14:46:03 +0300
committerDouglas Barbosa Alexandre <dbalexandre@gmail.com>2016-09-16 16:56:48 +0300
commit12a2b893b241de93f079248fae0430caba1d6682 (patch)
treefd60e77efe65da70d5b3ba7ce06523b80026ed20
parent0435028d180cdabe89c464a2272adacdde3fe39d (diff)
Replicate global labels when creating a new group
-rw-r--r--app/services/groups/create_service.rb3
-rw-r--r--app/services/labels/replicate_service.rb12
-rw-r--r--spec/services/groups/create_service_spec.rb33
-rw-r--r--spec/services/labels/replicate_service_spec.rb38
-rw-r--r--spec/services/projects/create_service_spec.rb6
5 files changed, 71 insertions, 21 deletions
diff --git a/app/services/groups/create_service.rb b/app/services/groups/create_service.rb
index 2bccd584dde..f36615f3343 100644
--- a/app/services/groups/create_service.rb
+++ b/app/services/groups/create_service.rb
@@ -15,6 +15,9 @@ module Groups
@group.name ||= @group.path.dup
@group.save
@group.add_owner(current_user)
+
+ Labels::ReplicateService.new(@group, current_user).execute
+
@group
end
end
diff --git a/app/services/labels/replicate_service.rb b/app/services/labels/replicate_service.rb
index 344e5495a2c..92efc8c3e24 100644
--- a/app/services/labels/replicate_service.rb
+++ b/app/services/labels/replicate_service.rb
@@ -1,8 +1,8 @@
module Labels
class ReplicateService < Labels::BaseService
def execute
- global_labels.each { |label| replicate_label(label, :global_label) }
- group_labels.each { |label| replicate_label(label, :group_label) }
+ replicate_global_labels
+ replicate_group_labels unless subject.is_a?(Group)
end
private
@@ -15,6 +15,14 @@ module Labels
subject.group.present? ? subject.group.labels : []
end
+ def replicate_global_labels
+ global_labels.each { |label| replicate_label(label, :global_label) }
+ end
+
+ def replicate_group_labels
+ group_labels.each { |label| replicate_label(label, :group_label) }
+ end
+
def replicate_label(label, label_type)
subject.labels.find_or_create_by!(title: label.title) do |replicated|
replicated.color = label.color
diff --git a/spec/services/groups/create_service_spec.rb b/spec/services/groups/create_service_spec.rb
index 71a0b8e2a12..9f57da8b3f3 100644
--- a/spec/services/groups/create_service_spec.rb
+++ b/spec/services/groups/create_service_spec.rb
@@ -1,20 +1,33 @@
require 'spec_helper'
describe Groups::CreateService, services: true do
- let!(:user) { create(:user) }
- let!(:group_params) { { path: "group_path", visibility_level: Gitlab::VisibilityLevel::PUBLIC } }
+ let(:user) { create(:user) }
- describe "execute" do
- let!(:service) { described_class.new(user, group_params ) }
- subject { service.execute }
+ let(:params) do
+ { path: 'group_path', visibility_level: Gitlab::VisibilityLevel::PUBLIC }
+ end
+
+ describe '#execute' do
+ subject(:service) { described_class.new(user, params) }
+
+ it 'create groups without restricted visibility level' do
+ group = service.execute
+
+ expect(group).to be_persisted
+ end
+
+ it 'cannot create group with restricted visibility level' do
+ allow_any_instance_of(ApplicationSetting).to receive(:restricted_visibility_levels).and_return([Gitlab::VisibilityLevel::PUBLIC])
- context "create groups without restricted visibility level" do
- it { is_expected.to be_persisted }
+ group = service.execute
+
+ expect(group).not_to be_persisted
end
- context "cannot create group with restricted visibility level" do
- before { allow_any_instance_of(ApplicationSetting).to receive(:restricted_visibility_levels).and_return([Gitlab::VisibilityLevel::PUBLIC]) }
- it { is_expected.not_to be_persisted }
+ it 'delegates the label replication to Labels::ReplicateService' do
+ expect_any_instance_of(Labels::ReplicateService).to receive(:execute).once
+
+ service.execute
end
end
end
diff --git a/spec/services/labels/replicate_service_spec.rb b/spec/services/labels/replicate_service_spec.rb
index 189a3bd0885..b1c44e1e26f 100644
--- a/spec/services/labels/replicate_service_spec.rb
+++ b/spec/services/labels/replicate_service_spec.rb
@@ -2,21 +2,41 @@ require 'spec_helper'
describe Labels::ReplicateService, services: true do
describe '#execute' do
- let(:group) { create(:group) }
- let(:project) { create(:empty_project, group: group) }
+ context 'when subject is a group' do
+ let(:group) { create(:group) }
- subject(:service) { described_class.new(project, double) }
+ subject(:service) { described_class.new(group, double) }
- it 'replicates global labels' do
- create_list(:global_label, 2)
+ it 'replicates global labels' do
+ create_list(:global_label, 2)
- expect { service.execute }.to change(project.labels, :count).by(2)
+ expect { service.execute }.to change(group.labels, :count).by(2)
+ end
+
+ it 'does not replicate group labels' do
+ create_list(:group_label, 2, subject: group)
+
+ expect { service.execute }.not_to change(group.labels, :count)
+ end
end
- it 'replicates group labels' do
- create_list(:group_label, 2, subject: group)
+ context 'when subject is a project' do
+ let(:group) { create(:group) }
+ let(:project) { create(:empty_project, group: group) }
+
+ subject(:service) { described_class.new(project, double) }
+
+ it 'replicates global labels' do
+ create_list(:global_label, 2)
+
+ expect { service.execute }.to change(project.labels, :count).by(2)
+ end
+
+ it 'replicates group labels' do
+ create_list(:group_label, 2, subject: group)
- expect { service.execute }.to change(project.labels, :count).by(2)
+ expect { service.execute }.to change(project.labels, :count).by(2)
+ end
end
end
end
diff --git a/spec/services/projects/create_service_spec.rb b/spec/services/projects/create_service_spec.rb
index 03eaec7d337..f7c4f7fa4e9 100644
--- a/spec/services/projects/create_service_spec.rb
+++ b/spec/services/projects/create_service_spec.rb
@@ -135,6 +135,12 @@ describe Projects::CreateService, services: true do
expect(project.namespace).to eq(@user.namespace)
end
end
+
+ it 'delegates the label replication to Labels::ReplicateService' do
+ expect_any_instance_of(Labels::ReplicateService).to receive(:execute).once
+
+ create_project(@user, @opts)
+ end
end
def create_project(user, opts)