Sha256: e7f00ee5d4f98ccd03fe840ebd1e9e87a5f93222bb6637ca0826ca415fa347d6

Contents?: true

Size: 1.29 KB

Versions: 1

Compression:

Stored size: 1.29 KB

Contents

require "support/object_store_setup"

RSpec.describe "Serialization error handling" do
  include_context "object store setup"
  context "when a domain object is incompatible with its serializer" do
    before do
      override_user_serializer_with(incompatible_custom_serializer)
    end

    let(:user) { Object.new }

    let(:incompatible_custom_serializer) {
      ->(x) { raise "I am incompatible" }
    }

    it "rescues and re-raises a more detailed error" do
      error = nil
      begin
        save_user
      rescue Terrestrial::SerializationError => error
      end

      expect(error.message).to eq(
        [
          "Error serializing object with mapping `users` `#{user.inspect}`.",
          "Using serializer: `#{incompatible_custom_serializer.inspect}`.",
          "Check the specified serializer can transform objects into a Hash.",
          "Got Error: RuntimeError I am incompatible",
        ].join("\n")
      )
    end

    # TODO: make configuration easier override
    def override_user_serializer_with(serializer)
      config = Terrestrial.config(datastore)
      .setup_mapping(:users) { |users|
        users.serializer(serializer)
      }

      @object_store = Terrestrial.object_store(config: config)
    end

    def save_user
      @object_store[:users].save(user)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
terrestrial-0.5.0 spec/error_handling/serialization_error_spec.rb