summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorSean McGivern <sean@mcgivern.me.uk>2017-04-26 09:40:12 +0000
committerSean McGivern <sean@mcgivern.me.uk>2017-04-26 09:40:12 +0000
commit3ff8d8020e495df319f0b0921bc94b1c3470f6f0 (patch)
tree088b1e58e8eba3aad4ee45e19993897eb2cf5b4f /spec
parentf2da2df43a6901061a7e6b861c79025644d3b469 (diff)
parenta78eeefd6e76c956751a2a7f03efeaee28f83b46 (diff)
downloadgitlab-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.rb37
-rw-r--r--spec/lib/gitlab/issuable_sorter_spec.rb62
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