Encapsulate the commit.sha logic
This commit is contained in:
parent
5c51db0bce
commit
35259a4f48
|
@ -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
|
||||||
@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 @@
|
||||||
|
|
||||||
= 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
|
||||||
|
|
||||||
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
|
||||||
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)
|
||||||
|
|
Loading…
Reference in New Issue