diff options
author | Markus Koller <mkoller@gitlab.com> | 2020-02-19 20:29:03 +0300 |
---|---|---|
committer | Markus Koller <mkoller@gitlab.com> | 2020-02-26 18:27:37 +0300 |
commit | 0892b53d374705a88768a758755c7644c127044d (patch) | |
tree | 09592f7ea06d0c60e60f26ef30f6c61acf116009 | |
parent | f3a99ea285e4d0756783a7812003a8858e2d6220 (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.rb | 89 |
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 |