summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHiroyuki Sato <sathiroyuki@gmail.com>2017-07-27 22:00:06 +0900
committerHiroyuki Sato <sathiroyuki@gmail.com>2017-07-27 22:15:48 +0900
commit35259a4f48e19a19437be10c02eb8398c108d507 (patch)
tree99dab3d70660bc6e82ccca757843fa43e93b9032
parent5c51db0bce6d0f1b94aaf14d1ac9c8d70f7f9468 (diff)
downloadgitlab-ce-35259a4f48e19a19437be10c02eb8398c108d507.tar.gz
Encapsulate the commit.sha logic
-rw-r--r--app/models/wiki_page.rb6
-rw-r--r--app/views/projects/wikis/_form.html.haml2
-rw-r--r--spec/models/wiki_page_spec.rb30
3 files changed, 32 insertions, 6 deletions
diff --git a/app/models/wiki_page.rb b/app/models/wiki_page.rb
index 12f12674e56..148998bc9be 100644
--- a/app/models/wiki_page.rb
+++ b/app/models/wiki_page.rb
@@ -138,6 +138,10 @@ class WikiPage
versions.first
end
+ def last_commit_sha
+ commit&.sha
+ end
+
# Returns the Date that this latest version was
# created on.
def created_at
@@ -196,7 +200,7 @@ class WikiPage
@attributes[:content] = new_content
@attributes[:format] = format
- if last_commit_sha && last_commit_sha != commit.sha
+ if last_commit_sha && last_commit_sha != self.last_commit_sha
raise PageChangedError.new("You are attempting to update a page that has changed since you started editing it.")
end
diff --git a/app/views/projects/wikis/_form.html.haml b/app/views/projects/wikis/_form.html.haml
index 5c335ba306b..adb8d5aaecb 100644
--- a/app/views/projects/wikis/_form.html.haml
+++ b/app/views/projects/wikis/_form.html.haml
@@ -5,7 +5,7 @@
= f.hidden_field :title, value: @page.title
- if @page.persisted?
- = f.hidden_field :last_commit_sha, value: @page.commit.sha
+ = f.hidden_field :last_commit_sha, value: @page.last_commit_sha
.form-group
.col-sm-12= f.label :format, class: 'control-label-full-width'
.col-sm-12
diff --git a/spec/models/wiki_page_spec.rb b/spec/models/wiki_page_spec.rb
index 732a32684e8..e2cdff5fa22 100644
--- a/spec/models/wiki_page_spec.rb
+++ b/spec/models/wiki_page_spec.rb
@@ -211,15 +211,13 @@ describe WikiPage, models: true do
context 'with same last commit sha' do
it 'returns true' do
- last_commit_sha = @page.commit.sha
- expect(@page.update('more content', last_commit_sha: last_commit_sha)).to be_truthy
+ expect(@page.update('more content', last_commit_sha: @page.last_commit_sha)).to be_truthy
end
end
context 'with different last commit sha' do
it 'raises exception' do
- last_commit_sha = 'xxx'
- expect { @page.update('more content', last_commit_sha: last_commit_sha) }.to raise_error(WikiPage::PageChangedError)
+ expect { @page.update('more content', last_commit_sha: 'xxx') }.to raise_error(WikiPage::PageChangedError)
end
end
end
@@ -345,6 +343,30 @@ describe WikiPage, models: true do
end
end
+ describe '#last_commit_sha' do
+ before do
+ create_page("Update", "content")
+ @page = wiki.find_page("Update")
+ end
+
+ after do
+ destroy_page("Update")
+ end
+
+ it 'returns commit sha' do
+ expect(@page.last_commit_sha).to eq @page.commit.sha
+ end
+
+ it 'is changed after page updated' do
+ last_commit_sha_before_update = @page.last_commit_sha
+
+ @page.update("new content")
+ @page = wiki.find_page("Update")
+
+ expect(@page.last_commit_sha).not_to eq last_commit_sha_before_update
+ end
+ end
+
private
def remove_temp_repo(path)