ぼざクリタグ広場 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.
 
 
 
 

86 lines
2.3 KiB

  1. require 'rails_helper'
  2. RSpec.describe VersionRecorder do
  3. let(:member) { create(:user, :member) }
  4. let(:post_record) do
  5. Post.create!(
  6. title: 'version recorder post',
  7. url: 'https://example.com/version-recorder-post')
  8. end
  9. it 'updates record version_no when creating the first version' do
  10. version =
  11. PostVersionRecorder.record!(
  12. post: post_record,
  13. event_type: :create,
  14. created_by_user: member)
  15. expect(version.version_no).to eq(1)
  16. expect(post_record.reload.version_no).to eq(1)
  17. end
  18. it 'updates record version_no when creating the next version' do
  19. PostVersionRecorder.record!(
  20. post: post_record,
  21. event_type: :create,
  22. created_by_user: member)
  23. post_record.update!(title: 'updated version recorder post')
  24. version =
  25. PostVersionRecorder.record!(
  26. post: post_record.reload,
  27. event_type: :update,
  28. created_by_user: member)
  29. expect(version.version_no).to eq(2)
  30. expect(post_record.reload.version_no).to eq(2)
  31. end
  32. it 'does not create a new version or advance version_no when snapshot is unchanged' do
  33. first =
  34. PostVersionRecorder.record!(
  35. post: post_record,
  36. event_type: :create,
  37. created_by_user: member)
  38. expect {
  39. version =
  40. PostVersionRecorder.record!(
  41. post: post_record.reload,
  42. event_type: :update,
  43. created_by_user: member)
  44. expect(version).to eq(first)
  45. }.not_to change(PostVersion, :count)
  46. expect(post_record.reload.version_no).to eq(1)
  47. end
  48. it 'raises when record version_no is older than the latest version' do
  49. PostVersionRecorder.record!(
  50. post: post_record,
  51. event_type: :create,
  52. created_by_user: member)
  53. post_record.update!(title: 'updated once')
  54. PostVersionRecorder.record!(
  55. post: post_record.reload,
  56. event_type: :update,
  57. created_by_user: member)
  58. post_record.update_columns(version_no: 1)
  59. post_record.update!(title: 'updated with stale version_no')
  60. expect {
  61. PostVersionRecorder.record!(
  62. post: post_record.reload,
  63. event_type: :update,
  64. created_by_user: member)
  65. }.to raise_error(RuntimeError, /version_no/)
  66. end
  67. end