diff options
author | Sean McGivern <sean@mcgivern.me.uk> | 2017-04-26 09:40:12 +0000 |
---|---|---|
committer | Sean McGivern <sean@mcgivern.me.uk> | 2017-04-26 09:40:12 +0000 |
commit | 3ff8d8020e495df319f0b0921bc94b1c3470f6f0 (patch) | |
tree | 088b1e58e8eba3aad4ee45e19993897eb2cf5b4f /spec | |
parent | f2da2df43a6901061a7e6b861c79025644d3b469 (diff) | |
parent | a78eeefd6e76c956751a2a7f03efeaee28f83b46 (diff) | |
download | gitlab-ce-3ff8d8020e495df319f0b0921bc94b1c3470f6f0.tar.gz |
Merge branch '20378-natural-sort-issue-numbers' into 'master'
Change issues sentence to use natural sorting
Closes #20378
See merge request !7110
Diffstat (limited to 'spec')
-rw-r--r-- | spec/helpers/merge_requests_helper_spec.rb | 37 | ||||
-rw-r--r-- | spec/lib/gitlab/issuable_sorter_spec.rb | 62 |
2 files changed, 94 insertions, 5 deletions
diff --git a/spec/helpers/merge_requests_helper_spec.rb b/spec/helpers/merge_requests_helper_spec.rb index 25f23826648..e9037749ef2 100644 --- a/spec/helpers/merge_requests_helper_spec.rb +++ b/spec/helpers/merge_requests_helper_spec.rb @@ -22,24 +22,51 @@ describe MergeRequestsHelper do end describe '#issues_sentence' do + let(:project) { create :project } + subject { issues_sentence(issues) } let(:issues) do - [build(:issue, iid: 1), build(:issue, iid: 2), build(:issue, iid: 3)] + [build(:issue, iid: 2, project: project), + build(:issue, iid: 3, project: project), + build(:issue, iid: 1, project: project)] end - it { is_expected.to eq('#1, #2, and #3') } + it do + @project = project + + is_expected.to eq('#1, #2, and #3') + end context 'for JIRA issues' do let(:project) { create(:empty_project) } let(:issues) do [ - ExternalIssue.new('JIRA-123', project), ExternalIssue.new('JIRA-456', project), - ExternalIssue.new('FOOBAR-7890', project) + ExternalIssue.new('FOOBAR-7890', project), + ExternalIssue.new('JIRA-123', project) ] end - it { is_expected.to eq('FOOBAR-7890, JIRA-123, and JIRA-456') } + it do + @project = project + is_expected.to eq('FOOBAR-7890, JIRA-123, and JIRA-456') + end + end + + context 'for issues from multiple namespaces' do + let(:project) { create(:project) } + let(:other_project) { create(:project) } + let(:issues) do + [build(:issue, iid: 2, project: project), + build(:issue, iid: 3, project: other_project), + build(:issue, iid: 1, project: project)] + end + + it do + @project = project + + is_expected.to eq("#1, #2, and #{other_project.namespace.path}/#{other_project.path}#3") + end end end diff --git a/spec/lib/gitlab/issuable_sorter_spec.rb b/spec/lib/gitlab/issuable_sorter_spec.rb new file mode 100644 index 00000000000..c9a434b2bcf --- /dev/null +++ b/spec/lib/gitlab/issuable_sorter_spec.rb @@ -0,0 +1,62 @@ +require 'spec_helper' + +describe Gitlab::IssuableSorter, lib: true do + let(:namespace1) { build(:namespace, id: 1) } + let(:project1) { build(:project, id: 1, namespace: namespace1) } + + let(:project2) { build(:project, id: 2, path: "a", namespace: project1.namespace) } + let(:project3) { build(:project, id: 3, path: "b", namespace: project1.namespace) } + + let(:namespace2) { build(:namespace, id: 2, path: "a") } + let(:namespace3) { build(:namespace, id: 3, path: "b") } + let(:project4) { build(:project, id: 4, path: "a", namespace: namespace2) } + let(:project5) { build(:project, id: 5, path: "b", namespace: namespace2) } + let(:project6) { build(:project, id: 6, path: "a", namespace: namespace3) } + + let(:unsorted) { [sorted[2], sorted[3], sorted[0], sorted[1]] } + + let(:sorted) do + [build(:issue, iid: 1, project: project1), + build(:issue, iid: 2, project: project1), + build(:issue, iid: 10, project: project1), + build(:issue, iid: 20, project: project1)] + end + + it 'sorts references by a given key' do + expect(described_class.sort(project1, unsorted)).to eq(sorted) + end + + context 'for JIRA issues' do + let(:sorted) do + [ExternalIssue.new('JIRA-1', project1), + ExternalIssue.new('JIRA-2', project1), + ExternalIssue.new('JIRA-10', project1), + ExternalIssue.new('JIRA-20', project1)] + end + + it 'sorts references by a given key' do + expect(described_class.sort(project1, unsorted)).to eq(sorted) + end + end + + context 'for references from multiple projects and namespaces' do + let(:sorted) do + [build(:issue, iid: 1, project: project1), + build(:issue, iid: 2, project: project1), + build(:issue, iid: 10, project: project1), + build(:issue, iid: 1, project: project2), + build(:issue, iid: 1, project: project3), + build(:issue, iid: 1, project: project4), + build(:issue, iid: 1, project: project5), + build(:issue, iid: 1, project: project6)] + end + let(:unsorted) do + [sorted[3], sorted[1], sorted[4], sorted[2], + sorted[6], sorted[5], sorted[0], sorted[7]] + end + + it 'sorts references by project and then by a given key' do + expect(subject.sort(project1, unsorted)).to eq(sorted) + end + end +end |