Sha256: b4f731761a2a9c31e583ce6962c9a5c846c8949e2353d526d3c85d3c186ec83d

Contents?: true

Size: 1.88 KB

Versions: 5

Compression:

Stored size: 1.88 KB

Contents

require "rails_helper"

# This model tests ActiveRecord::Enum, which was added in AR 4.1
# http://edgeguides.rubyonrails.org/4_1_release_notes.html#active-record-enums
describe PostWithStatus, type: :model do
  if defined?(ActiveRecord::Enum)
    with_versioning do
      let(:post) { described_class.create!(status: "draft") }

      it "should stash the enum value properly in versions" do
        post.published!
        post.archived!
        expect(post.paper_trail.previous_version.published?).to be true
      end

      it "can read enums in version records written by PT 4" do
        post = described_class.create(status: "draft")
        post.published!
        version = post.versions.last
        # Simulate behavior PT 4, which used to save the string version of
        # enums to `object_changes`
        version.update(object_changes: "---\nid:\n- \n- 1\nstatus:\n- draft\n- published\n")
        assert_equal %w(draft published), version.changeset["status"]
      end

      context "storing enum object_changes" do
        subject { post.versions.last }

        it "should stash the enum value properly in versions object_changes" do
          post.published!
          post.archived!
          expect(subject.changeset["status"]).to eql %w(published archived)
        end
      end

      describe "#touch_with_version" do
        it "preserves the enum value (and all other attributes)" do
          post = described_class.create(status: :draft)
          expect(post.versions.count).to eq(1)
          expect(post.status).to eq("draft")
          Timecop.travel 1.second.since # because MySQL lacks fractional seconds precision
          post.paper_trail.touch_with_version
          expect(post.versions.count).to eq(2)
          expect(post.versions.last[:object]).to include("status: 0")
          expect(post.paper_trail.previous_version.status).to eq("draft")
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 2 rubygems

Version Path
enju_leaf-1.2.1 vendor/bundle/ruby/2.3/gems/paper_trail-5.2.3/spec/models/post_with_status_spec.rb
paper_trail-6.0.0 spec/models/post_with_status_spec.rb
paper_trail-5.2.3 spec/models/post_with_status_spec.rb
paper_trail-5.2.2 spec/models/post_with_status_spec.rb
paper_trail-5.2.1 spec/models/post_with_status_spec.rb