Sha256: 0d409250d80ef5ee593e7dad77a8a5f65f3de75011d0c4d3818c37f1043fb228

Contents?: true

Size: 1.19 KB

Versions: 1

Compression:

Stored size: 1.19 KB

Contents

# encoding: utf-8

require 'spec_helper'

describe Session::Mapper, '#load' do
  subject { object.load(tuple) }

  let(:object) { described_class.new(mapper, tracker, im) }

  let(:mapper) { fake(:mapper) { ROM::Mapper } }

  let(:tuple)    { Hash[id: identity, name: 'Jane'] }
  let(:identity) { [1] }
  let(:user)     { model.new(tuple) }
  let(:model)    { mock_model(:id, :name) }
  let(:im)       { Session::IdentityMap.build }
  let(:tracker)  { Session::Tracker.new }

  before do
    stub(mapper).identity_from_tuple(tuple) { identity }
    stub(mapper).identity(user) { identity }
    stub(mapper).load(tuple) { user }
  end

  context 'when IM does not include the loaded object' do
    it 'loads the object' do
      expect(subject).to be(user)
      mapper.should have_received.load(tuple)
    end

    it 'stores persisted state in the tracker' do
      expect(subject).to be(user)
      expect(tracker.fetch(identity)).to be_persisted
    end
  end

  context 'when IM includes the loaded object' do
    before do
      im.store(identity, user, tuple)
    end

    it 'returns already loaded object' do
      expect(subject).to be(user)
      mapper.should_not have_received.load(tuple)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rom-0.2.0 spec/unit/rom/session/mapper/load_spec.rb