ぼざクリタグ広場 https://hub.nizika.monster
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

151 lines
4.0 KiB

  1. require 'rails_helper'
  2. RSpec.describe Wiki::Commit do
  3. let(:user) { create_member_user! }
  4. def create_page(title: 'commit_spec_page', body: 'initial body')
  5. tag_name = TagName.create!(name: title)
  6. Wiki::Commit.create_content!(
  7. tag_name:,
  8. body:,
  9. created_by_user: user,
  10. message: 'init')
  11. end
  12. describe '.content!' do
  13. it 'stores normalised body in wiki_pages and wiki_versions' do
  14. page = create_page(title: 'commit_normalised_page')
  15. described_class.content!(
  16. page:,
  17. body: "a\r\nb\r\n\r\n",
  18. created_user: user,
  19. message: 'init'
  20. )
  21. page.reload
  22. version = page.wiki_versions.order(:version_no).last
  23. expect(page.body).to eq("a\nb")
  24. expect(version.body).to eq("a\nb")
  25. expect(page.current_revision.lines_count).to eq(2)
  26. end
  27. it 'deduplicates duplicated missing wiki lines before upsert' do
  28. page = create_page(title: 'commit_duplicate_line_page')
  29. duplicated = 'commit_duplicate_line'
  30. described_class.content!(
  31. page:,
  32. body: "#{ duplicated }\n#{ duplicated }",
  33. created_user: user,
  34. message: 'init'
  35. )
  36. page.reload
  37. expect(WikiLine.where(body: duplicated).count).to eq(1)
  38. expect(page.current_revision.lines_count).to eq(2)
  39. expect(page.current_revision.wiki_revision_lines.count).to eq(2)
  40. end
  41. it 'raises conflict when base_revision_id is stale' do
  42. page = create_page(title: 'commit_conflict_page')
  43. first = described_class.content!(
  44. page:,
  45. body: 'first',
  46. created_user: user,
  47. message: 'first'
  48. )
  49. described_class.content!(
  50. page:,
  51. body: 'second',
  52. created_user: user,
  53. message: 'second',
  54. base_revision_id: first.id
  55. )
  56. expect {
  57. described_class.content!(
  58. page:,
  59. body: 'third',
  60. created_user: user,
  61. message: 'third',
  62. base_revision_id: first.id
  63. )
  64. }.to raise_error(Wiki::Commit::Conflict)
  65. end
  66. it 'does not record tag version when corresponding tag has no versions' do
  67. tag_name = TagName.create!(name: 'commit_linked_tag_without_versions')
  68. tag = Tag.create!(tag_name:, category: :general)
  69. page =
  70. described_class.create_content!(
  71. tag_name:,
  72. body: 'before',
  73. created_by_user: user,
  74. message: 'init')
  75. expect(tag.reload.tag_versions.count).to eq(0)
  76. current_revision_id = page.current_revision.id
  77. expect {
  78. described_class.content!(
  79. page:,
  80. body: 'after',
  81. created_user: user,
  82. message: 'edit',
  83. base_revision_id: current_revision_id)
  84. }.to change(WikiVersion, :count).by(1)
  85. expect(tag.reload.tag_versions.count).to eq(0)
  86. end
  87. it 'does not record tag version when corresponding tag has no versions' do
  88. tag_name = TagName.create!(name: 'commit_linked_tag_without_versions')
  89. tag = Tag.create!(tag_name:, category: :general)
  90. page =
  91. described_class.create_content!(
  92. tag_name:,
  93. body: 'before',
  94. created_by_user: user,
  95. message: 'init')
  96. current_revision_id = page.current_revision.id
  97. expect {
  98. described_class.content!(
  99. page:,
  100. body: 'after',
  101. created_user: user,
  102. message: 'edit',
  103. base_revision_id: current_revision_id)
  104. }.to change(WikiVersion, :count).by(1)
  105. expect(tag.reload.tag_versions.count).to eq(0)
  106. end
  107. end
  108. describe '.redirect!' do
  109. it 'raises because redirect revisions are deprecated' do
  110. page = create_page(title: 'commit_redirect_source')
  111. target = create_page(title: 'commit_redirect_target')
  112. expect {
  113. described_class.redirect!(
  114. page:,
  115. redirect_page: target,
  116. created_user: user,
  117. message: 'redirect'
  118. )
  119. }.to raise_error(RuntimeError, '廃止しました.')
  120. end
  121. end
  122. end