0ff7fdf78a
#317 #317 #317 #317 #317 #317 Co-authored-by: miteruzo <miteruzo@naver.com> Reviewed-on: #333
151 lines
4.0 KiB
Ruby
151 lines
4.0 KiB
Ruby
require 'rails_helper'
|
|
|
|
RSpec.describe Wiki::Commit do
|
|
let(:user) { create_member_user! }
|
|
|
|
def create_page(title: 'commit_spec_page', body: 'initial body')
|
|
tag_name = TagName.create!(name: title)
|
|
|
|
Wiki::Commit.create_content!(
|
|
tag_name:,
|
|
body:,
|
|
created_by_user: user,
|
|
message: 'init')
|
|
end
|
|
|
|
describe '.content!' do
|
|
it 'stores normalised body in wiki_pages and wiki_versions' do
|
|
page = create_page(title: 'commit_normalised_page')
|
|
|
|
described_class.content!(
|
|
page:,
|
|
body: "a\r\nb\r\n\r\n",
|
|
created_user: user,
|
|
message: 'init'
|
|
)
|
|
|
|
page.reload
|
|
version = page.wiki_versions.order(:version_no).last
|
|
|
|
expect(page.body).to eq("a\nb")
|
|
expect(version.body).to eq("a\nb")
|
|
expect(page.current_revision.lines_count).to eq(2)
|
|
end
|
|
|
|
it 'deduplicates duplicated missing wiki lines before upsert' do
|
|
page = create_page(title: 'commit_duplicate_line_page')
|
|
duplicated = 'commit_duplicate_line'
|
|
|
|
described_class.content!(
|
|
page:,
|
|
body: "#{ duplicated }\n#{ duplicated }",
|
|
created_user: user,
|
|
message: 'init'
|
|
)
|
|
|
|
page.reload
|
|
|
|
expect(WikiLine.where(body: duplicated).count).to eq(1)
|
|
expect(page.current_revision.lines_count).to eq(2)
|
|
expect(page.current_revision.wiki_revision_lines.count).to eq(2)
|
|
end
|
|
|
|
it 'raises conflict when base_revision_id is stale' do
|
|
page = create_page(title: 'commit_conflict_page')
|
|
|
|
first = described_class.content!(
|
|
page:,
|
|
body: 'first',
|
|
created_user: user,
|
|
message: 'first'
|
|
)
|
|
|
|
described_class.content!(
|
|
page:,
|
|
body: 'second',
|
|
created_user: user,
|
|
message: 'second',
|
|
base_revision_id: first.id
|
|
)
|
|
|
|
expect {
|
|
described_class.content!(
|
|
page:,
|
|
body: 'third',
|
|
created_user: user,
|
|
message: 'third',
|
|
base_revision_id: first.id
|
|
)
|
|
}.to raise_error(Wiki::Commit::Conflict)
|
|
end
|
|
|
|
it 'does not record tag version when corresponding tag has no versions' do
|
|
tag_name = TagName.create!(name: 'commit_linked_tag_without_versions')
|
|
tag = Tag.create!(tag_name:, category: :general)
|
|
|
|
page =
|
|
described_class.create_content!(
|
|
tag_name:,
|
|
body: 'before',
|
|
created_by_user: user,
|
|
message: 'init')
|
|
|
|
expect(tag.reload.tag_versions.count).to eq(0)
|
|
|
|
current_revision_id = page.current_revision.id
|
|
|
|
expect {
|
|
described_class.content!(
|
|
page:,
|
|
body: 'after',
|
|
created_user: user,
|
|
message: 'edit',
|
|
base_revision_id: current_revision_id)
|
|
}.to change(WikiVersion, :count).by(1)
|
|
|
|
expect(tag.reload.tag_versions.count).to eq(0)
|
|
end
|
|
|
|
it 'does not record tag version when corresponding tag has no versions' do
|
|
tag_name = TagName.create!(name: 'commit_linked_tag_without_versions')
|
|
tag = Tag.create!(tag_name:, category: :general)
|
|
|
|
page =
|
|
described_class.create_content!(
|
|
tag_name:,
|
|
body: 'before',
|
|
created_by_user: user,
|
|
message: 'init')
|
|
|
|
current_revision_id = page.current_revision.id
|
|
|
|
expect {
|
|
described_class.content!(
|
|
page:,
|
|
body: 'after',
|
|
created_user: user,
|
|
message: 'edit',
|
|
base_revision_id: current_revision_id)
|
|
}.to change(WikiVersion, :count).by(1)
|
|
|
|
expect(tag.reload.tag_versions.count).to eq(0)
|
|
end
|
|
end
|
|
|
|
describe '.redirect!' do
|
|
it 'raises because redirect revisions are deprecated' do
|
|
page = create_page(title: 'commit_redirect_source')
|
|
target = create_page(title: 'commit_redirect_target')
|
|
|
|
expect {
|
|
described_class.redirect!(
|
|
page:,
|
|
redirect_page: target,
|
|
created_user: user,
|
|
message: 'redirect'
|
|
)
|
|
}.to raise_error(RuntimeError, '廃止しました.')
|
|
end
|
|
end
|
|
end
|