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

gitlab.com/gitlab-org/gitaly.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Koller <mkoller@gitlab.com>2020-02-19 20:29:03 +0300
committerMarkus Koller <mkoller@gitlab.com>2020-02-26 18:27:37 +0300
commit0892b53d374705a88768a758755c7644c127044d (patch)
tree09592f7ea06d0c60e60f26ef30f6c61acf116009
parentf3a99ea285e4d0756783a7812003a8858e2d6220 (diff)
Add specs for wiki titles with special characters
Also remove page deletions in specs, since we create a fresh repository for each example anyway.
-rw-r--r--ruby/spec/lib/gitlab/git/wiki_spec.rb89
1 files changed, 53 insertions, 36 deletions
diff --git a/ruby/spec/lib/gitlab/git/wiki_spec.rb b/ruby/spec/lib/gitlab/git/wiki_spec.rb
index 9069968ad..e24109662 100644
--- a/ruby/spec/lib/gitlab/git/wiki_spec.rb
+++ b/ruby/spec/lib/gitlab/git/wiki_spec.rb
@@ -7,6 +7,36 @@ describe Gitlab::Git::Wiki do
subject { described_class.new(repository) }
+ shared_examples_for 'title with special characters' do
+ let(:page) { subject.pages.first }
+ let(:title) { '<foo> !@#$%^&*()[]{}=_+\'"\\|<>? <bar>' }
+
+ it 'preserves special characters in the title' do
+ expect(page.title).to eq(title)
+ end
+
+ it 'preserves special characters in the path' do
+ expect(page.path).to eq("#{title.gsub(' ', '-')}.md")
+ end
+
+ it 'replaces spaces with hyphens in the path' do
+ expect(page.path).not_to include(' ')
+ end
+
+ it 'can be found by original or escaped title' do
+ [
+ title,
+ title.gsub(' ', '-'),
+ title.gsub(/[<>+]/, '-')
+ ].each do |format|
+ page = subject.page(title: format)
+
+ expect(page).not_to be_nil
+ expect(page.title).to eq(title)
+ end
+ end
+ end
+
describe '#pages' do
let(:pages) { subject.pages }
@@ -15,22 +45,17 @@ describe Gitlab::Git::Wiki do
create_page('page2', 'content2')
end
- after do
- destroy_page('page1')
- destroy_page('page2')
- end
-
it 'returns all the pages' do
expect(pages.count).to eq(2)
- expect(pages.first.title).to eq 'page1'
- expect(pages.last.title).to eq 'page2'
+ expect(pages.first.title).to eq('page1')
+ expect(pages.last.title).to eq('page2')
end
it 'returns only one page' do
pages = subject.pages(limit: 1)
expect(pages.count).to eq(1)
- expect(pages.first.title).to eq 'page1'
+ expect(pages.first.title).to eq('page1')
end
it 'returns formatted data' do
@@ -44,14 +69,9 @@ describe Gitlab::Git::Wiki do
create_page('foo/page1', 'content foo/page1')
end
- after do
- destroy_page('page1')
- destroy_page('page1', 'foo')
- end
-
it 'returns the right page' do
- expect(subject.page(title: 'page1', dir: '').url_path).to eq 'page1'
- expect(subject.page(title: 'page1', dir: 'foo').url_path).to eq 'foo/page1'
+ expect(subject.page(title: 'page1', dir: '').url_path).to eq('page1')
+ expect(subject.page(title: 'page1', dir: 'foo').url_path).to eq('foo/page1')
end
it 'returns formatted data' do
@@ -59,19 +79,23 @@ describe Gitlab::Git::Wiki do
end
end
- describe '#delete_page' do
- after do
- destroy_page('page1')
+ describe '#write_page' do
+ it_behaves_like 'title with special characters' do
+ before do
+ create_page(title, 'content')
+ end
end
+ end
+ describe '#delete_page' do
it 'only removes the page with the same path' do
create_page('page1', 'content')
create_page('*', 'content')
subject.delete_page('*', commit_details('whatever'))
- expect(subject.pages.count).to eq 1
- expect(subject.pages.first.title).to eq 'page1'
+ expect(subject.pages.count).to eq(1)
+ expect(subject.pages.first.title).to eq('page1')
end
end
@@ -84,24 +108,25 @@ describe Gitlab::Git::Wiki do
before do
create_page(old_title, 'some content')
end
- after do
- destroy_page(new_title)
- rescue Gitlab::Git::Wiki::PageNotFound
- destroy_page(old_title)
- end
it 'can update the page' do
subject.update_page(old_title, new_title, :markdown, new_content, deets)
- expect(subject.pages.count).to eq 1
- expect(subject.pages.first.title).to eq new_title
- expect(subject.pages.first.text_data).to eq new_content
+ expect(subject.pages.count).to eq(1)
+ expect(subject.pages.first.title).to eq(new_title)
+ expect(subject.pages.first.text_data).to eq(new_content)
end
it 'raises PageNotFound when trying to access an unknown page' do
expect { subject.update_page('bad path', new_title, :markdown, new_content, deets) }
.to raise_error(Gitlab::Git::Wiki::PageNotFound)
end
+
+ it_behaves_like 'title with special characters' do
+ before do
+ subject.update_page(old_title, title, :markdown, new_content, deets)
+ end
+ end
end
def create_page(name, content)
@@ -111,12 +136,4 @@ describe Gitlab::Git::Wiki do
def commit_details(name)
Gitlab::Git::Wiki::CommitDetails.new(1, 'test-user', 'Test User', 'test@example.com', "created page #{name}")
end
-
- def destroy_page(title, dir = '')
- page = subject.page(title: title, dir: dir)
-
- raise Gitlab::Git::Wiki::PageNotFound, title unless page
-
- subject.delete_page(page.path, commit_details(title))
- end
end