From 35259a4f48e19a19437be10c02eb8398c108d507 Mon Sep 17 00:00:00 2001 From: Hiroyuki Sato Date: Thu, 27 Jul 2017 22:00:06 +0900 Subject: Encapsulate the commit.sha logic --- app/models/wiki_page.rb | 6 +++++- app/views/projects/wikis/_form.html.haml | 2 +- spec/models/wiki_page_spec.rb | 30 ++++++++++++++++++++++++++---- 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) -- cgit v1.2.1