Commit 35259a4f authored by Hiroyuki Sato's avatar Hiroyuki Sato

Encapsulate the commit.sha logic

parent 5c51db0b
...@@ -138,6 +138,10 @@ class WikiPage ...@@ -138,6 +138,10 @@ class WikiPage
versions.first versions.first
end end
def last_commit_sha
commit&.sha
end
# Returns the Date that this latest version was # Returns the Date that this latest version was
# created on. # created on.
def created_at def created_at
...@@ -196,7 +200,7 @@ class WikiPage ...@@ -196,7 +200,7 @@ class WikiPage
@attributes[:content] = new_content @attributes[:content] = new_content
@attributes[:format] = format @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.") raise PageChangedError.new("You are attempting to update a page that has changed since you started editing it.")
end end
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
= f.hidden_field :title, value: @page.title = f.hidden_field :title, value: @page.title
- if @page.persisted? - 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 .form-group
.col-sm-12= f.label :format, class: 'control-label-full-width' .col-sm-12= f.label :format, class: 'control-label-full-width'
.col-sm-12 .col-sm-12
......
...@@ -211,15 +211,13 @@ describe WikiPage, models: true do ...@@ -211,15 +211,13 @@ describe WikiPage, models: true do
context 'with same last commit sha' do context 'with same last commit sha' do
it 'returns true' do it 'returns true' do
last_commit_sha = @page.commit.sha expect(@page.update('more content', last_commit_sha: @page.last_commit_sha)).to be_truthy
expect(@page.update('more content', last_commit_sha: last_commit_sha)).to be_truthy
end end
end end
context 'with different last commit sha' do context 'with different last commit sha' do
it 'raises exception' do it 'raises exception' do
last_commit_sha = 'xxx' expect { @page.update('more content', last_commit_sha: 'xxx') }.to raise_error(WikiPage::PageChangedError)
expect { @page.update('more content', last_commit_sha: last_commit_sha) }.to raise_error(WikiPage::PageChangedError)
end end
end end
end end
...@@ -345,6 +343,30 @@ describe WikiPage, models: true do ...@@ -345,6 +343,30 @@ describe WikiPage, models: true do
end end
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 private
def remove_temp_repo(path) def remove_temp_repo(path)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment