diff options
author | Mark Chao <mchao@gitlab.com> | 2018-07-06 11:37:58 +0800 |
---|---|---|
committer | Mark Chao <mchao@gitlab.com> | 2018-07-06 17:03:39 +0800 |
commit | 389a22e7b72c7514ede515c7c4124719edf2d5a6 (patch) | |
tree | 9c79e94ed535c0a64db67ab36f4363215fff2e9f /spec/services/projects/autocomplete_service_spec.rb | |
parent | 83f79ced3fd98031194e5667c4d80f66d7987c67 (diff) | |
download | gitlab-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.rb | 54 |
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 |