summaryrefslogtreecommitdiff
path: root/spec/services/projects/autocomplete_service_spec.rb
diff options
context:
space:
mode:
authorMark Chao <mchao@gitlab.com>2018-07-06 11:37:58 +0800
committerMark Chao <mchao@gitlab.com>2018-07-06 17:03:39 +0800
commit389a22e7b72c7514ede515c7c4124719edf2d5a6 (patch)
tree9c79e94ed535c0a64db67ab36f4363215fff2e9f /spec/services/projects/autocomplete_service_spec.rb
parent83f79ced3fd98031194e5667c4d80f66d7987c67 (diff)
downloadgitlab-ce-389a22e7b72c7514ede515c7c4124719edf2d5a6.tar.gz
Backport of EE changes in https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/6195
Refactor AutocompleteSources#label: 1. The return value was inconsistent, sometimes returning a hash and sometimes returning an ActiveModel. 2. It was inconsistent with respect to other methods in the class since they all return ActiveModels.
Diffstat (limited to 'spec/services/projects/autocomplete_service_spec.rb')
-rw-r--r--spec/services/projects/autocomplete_service_spec.rb54
1 files changed, 54 insertions, 0 deletions
diff --git a/spec/services/projects/autocomplete_service_spec.rb b/spec/services/projects/autocomplete_service_spec.rb
index 6fd73a50511..e98df375d48 100644
--- a/spec/services/projects/autocomplete_service_spec.rb
+++ b/spec/services/projects/autocomplete_service_spec.rb
@@ -131,4 +131,58 @@ describe Projects::AutocompleteService do
end
end
end
+
+ describe '#labels_as_hash' do
+ def expect_labels_to_equal(labels, expected_labels)
+ expect(labels.size).to eq(expected_labels.size)
+ extract_title = lambda { |label| label['title'] }
+ expect(labels.map(&extract_title)).to eq(expected_labels.map(&extract_title))
+ end
+
+ let(:user) { create(:user) }
+ let(:group) { create(:group, :nested) }
+ let!(:sub_group) { create(:group, parent: group) }
+ let(:project) { create(:project, :public, group: group) }
+ let(:issue) { create(:issue, project: project) }
+
+ let!(:label1) { create(:label, project: project) }
+ let!(:label2) { create(:label, project: project) }
+ let!(:sub_group_label) { create(:group_label, group: sub_group) }
+ let!(:parent_group_label) { create(:group_label, group: group.parent) }
+
+ before do
+ create(:group_member, group: group, user: user)
+ end
+
+ it 'returns labels from project and ancestor groups' do
+ service = described_class.new(project, user)
+ results = service.labels_as_hash
+ expected_labels = [label1, label2, parent_group_label]
+
+ expect_labels_to_equal(results, expected_labels)
+ end
+
+ context 'some labels are already assigned' do
+ before do
+ issue.labels << label1
+ end
+
+ it 'marks already assigned as set' do
+ service = described_class.new(project, user)
+ results = service.labels_as_hash(issue)
+ expected_labels = [label1, label2, parent_group_label]
+
+ expect_labels_to_equal(results, expected_labels)
+
+ assigned_label_titles = issue.labels.map(&:title)
+ results.each do |hash|
+ if assigned_label_titles.include?(hash['title'])
+ expect(hash[:set]).to eq(true)
+ else
+ expect(hash.key?(:set)).to eq(false)
+ end
+ end
+ end
+ end
+ end
end