diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2015-03-22 23:32:00 +0000 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2015-03-22 23:32:00 +0000 |
commit | 1d85e5fffff66e5b074480d91b414968955b1ee5 (patch) | |
tree | ec834d42292d0d53a6ff5a2cd298454053d0d6d5 | |
parent | 751053664333f1f4d098daa5b676a1685339a779 (diff) | |
parent | 59d5c779758a696233d2f2adcf145c0a93a8fb2f (diff) | |
download | gitlab-ce-1d85e5fffff66e5b074480d91b414968955b1ee5.tar.gz |
Merge branch 'fix-dots-in-wiki-title' into 'master'
Fix dots in Wiki slug causing errors
### What does this MR do?
When a user enters in dots into the Wiki slug, an error occurs:
```
NoMethodError (undefined method `escaped_url_path' for nil:NilClass):
app/models/wiki_page.rb:172:in `set_attributes'
app/models/wiki_page.rb:191:in `save'
app/models/wiki_page.rb:155:in `update'
app/controllers/projects/wikis_controller.rb:49:in `update'
```
This MR fixes this problem.
### Are there points in the code the reviewer needs to double check?
See the problem below.
### Why was this MR needed?
The issue is that the `save` method gets called differently:
```ruby
def create(attr = {})
....
save :create_page, title, content, format, message
```
or
```ruby
def update(new_content = "", format = :markdown, message = nil)
...
save :update_page, @page, content, format, message
```
In the create case, title is the slug entered in by the user (e.g. `path/how-to-write-wiki-pages`).
In the update case, originally `@page.page` included the format extension (e.g.`path/how-to-write-wiki-pages.Markdown`). The method `page_title_and_dir` was trying to handle both cases and not doing the right thing. For example, calling `page_title_and_dir('test-1.2.3')` would result in:
```
path_title = test-1.2
path_dir = 3
```
### What are the relevant issue numbers / [Feature requests](http://feedback.gitlab.com/)?
Issues #1263, #431
This replaces !156
See merge request !419
-rw-r--r-- | CHANGELOG | 1 | ||||
-rw-r--r-- | app/models/project_wiki.rb | 2 | ||||
-rw-r--r-- | app/models/wiki_page.rb | 3 | ||||
-rw-r--r-- | spec/models/wiki_page_spec.rb | 41 |
4 files changed, 45 insertions, 2 deletions
diff --git a/CHANGELOG b/CHANGELOG index 854f5c88bc3..08ba834b9c2 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -2,6 +2,7 @@ Please view this file on the master branch, on stable branches it's out of date. v 7.10.0 (unreleased) - Fix "Import projects from" button to show the correct instructions (Stan Hu) + - Fix dots in Wiki slugs causing errors (Stan Hu) - Update poltergeist to version 1.6.0 to support PhantomJS 2.0 (Zeger-Jan van de Weg) - Fix cross references when usernames, milestones, or project names contain underscores (Stan Hu) - enable line wrapping per default and remove the checkbox to toggle it (Hannes Rosenögger) diff --git a/app/models/project_wiki.rb b/app/models/project_wiki.rb index 55438bee245..772c868d9cd 100644 --- a/app/models/project_wiki.rb +++ b/app/models/project_wiki.rb @@ -104,7 +104,7 @@ class ProjectWiki def page_title_and_dir(title) title_array = title.split("/") title = title_array.pop - [title.gsub(/\.[^.]*$/, ""), title_array.join("/")] + [title, title_array.join("/")] end def search_files(query) diff --git a/app/models/wiki_page.rb b/app/models/wiki_page.rb index 32981a0e664..e9413c34bae 100644 --- a/app/models/wiki_page.rb +++ b/app/models/wiki_page.rb @@ -179,7 +179,8 @@ class WikiPage if valid? && project_wiki.send(method, *args) page_details = if method == :update_page - @page.path + # Use url_path instead of path to omit format extension + @page.url_path else title end diff --git a/spec/models/wiki_page_spec.rb b/spec/models/wiki_page_spec.rb index f3fd805783f..fceb7668cac 100644 --- a/spec/models/wiki_page_spec.rb +++ b/spec/models/wiki_page_spec.rb @@ -78,6 +78,47 @@ describe WikiPage do end end + describe "dot in the title" do + let(:title) { 'Index v1.2.3' } + + before do + @wiki_attr = {title: title, content: "Home Page", format: "markdown"} + end + + describe "#create" do + after do + destroy_page(title) + end + + context "with valid attributes" do + it "saves the wiki page" do + subject.create(@wiki_attr) + expect(wiki.find_page(title)).not_to be_nil + end + + it "returns true" do + expect(subject.create(@wiki_attr)).to eq(true) + end + end + end + + describe "#update" do + before do + create_page(title, "content") + @page = wiki.find_page(title) + end + + it "updates the content of the page" do + @page.update("new content") + @page = wiki.find_page(title) + end + + it "returns true" do + expect(@page.update("more content")).to be_truthy + end + end + end + describe "#update" do before do create_page("Update", "content") |