main
 1# frozen_string_literal: true
 2
 3require 'spec_helper'
 4
 5RSpec.describe Del::Repository do
 6  subject { described_class.new(storage: storage, mapper: mapper) }
 7  let(:storage) { {} }
 8  let(:mapper) { double(:mapper, map_from: nil) }
 9
10  describe '#[]' do
11    let(:jid) { SecureRandom.uuid }
12    let(:attributes) { { 'jid' => jid, 'name' => 'Teren Delvon Jones' } }
13    let(:user) { instance_double(Del::User) }
14
15    before do
16      subject.upsert(jid, attributes)
17      allow(mapper).to receive(:map_from).with(attributes).and_return(user)
18    end
19
20    specify { expect(subject[jid]).to eql(user) }
21    specify { expect(subject.find(jid)).to eql(user) }
22    specify { expect(subject.find(SecureRandom.uuid)).to be_nil }
23  end
24
25  describe '#all' do
26    let(:del_attributes) { { 'name' => 'Teren Delvon Jones' } }
27    let(:ice_cube_attributes) { { 'name' => "O'Shea Jackson Sr." } }
28    let(:del) { instance_double(Del::User) }
29    let(:cube) { instance_double(Del::User) }
30
31    it 'returns each item' do
32      subject.upsert(SecureRandom.uuid, del_attributes)
33      subject.upsert(SecureRandom.uuid, ice_cube_attributes)
34      allow(mapper).to receive(:map_from).with(del_attributes).and_return(del)
35      allow(mapper).to receive(:map_from).with(ice_cube_attributes).and_return(cube)
36
37      expect(subject.all).to match_array([del, cube])
38    end
39  end
40end