Sha256: ec2008c3e1a5af97de7b0001b1482722ec962bfd70b35f6bc80ae40832d42d9b

Contents?: true

Size: 1.61 KB

Versions: 35

Compression:

Stored size: 1.61 KB

Contents

require 'spec_helper'

describe GH::LazyLoader do
  before { subject.backend = GH::Normalizer.new(GH::MockBackend.new) }

  let! :raw do
    hash = subject.backend['users/rkh'].to_hash
    hash.delete 'name'
    hash
  end

  let :rkh do
    subject.load(raw)
  end

  it 'wraps normalizer by default' do
    GH::LazyLoader.new.backend.should be_a(GH::Normalizer)
  end

  it 'send http requests for missing fields' do
    should_request(1) { rkh['name'].should be == 'Konstantin Haase' }
  end

  it 'does not send http requests for existing fields' do
    should_not_request { rkh['login'].should be == 'rkh' }
  end

  it 'allows traversing into nested structures' do
    sven = subject.backend['users/svenfuchs'].to_hash
    sven['friends'] = [raw]
    sven.delete 'name'

    sven = subject.load(sven)
    should_request(1) { sven['friends'][0]['name'].should be == 'Konstantin Haase' }
  end

  it 'does not request twice if the field does not exist upstream' do
    should_request(1) { 2.times { rkh['foo'] } }
  end

  it 'does not skip an already existing default proc' do
    count = 0
    raw.default_proc = proc { |hash, key| count += 1 if key == 'foo' }
    rkh = subject.load(raw)

    should_not_request do
      rkh['foo'].should be == 1
      rkh['foo'].should be == 2
    end
  end

  it 'is still loading missing fields, even if a default proc is set' do
    count = 0
    raw.default_proc = proc { |hash, key| count += 1 if key == 'foo' }
    rkh = subject.load(raw)

    should_request 1 do
      rkh['foo'].should be == 1
      rkh['name'].should be == 'Konstantin Haase' 
      rkh['foo'].should be == 2
    end
  end
end

Version data entries

35 entries across 35 versions & 1 rubygems

Version Path
gh-0.13.0 spec/lazy_loader_spec.rb
gh-0.12.4 spec/lazy_loader_spec.rb
gh-0.12.3 spec/lazy_loader_spec.rb
gh-0.12.2 spec/lazy_loader_spec.rb
gh-0.12.1 spec/lazy_loader_spec.rb
gh-0.12.0 spec/lazy_loader_spec.rb
gh-0.11.3 spec/lazy_loader_spec.rb
gh-0.11.2 spec/lazy_loader_spec.rb
gh-0.11.1 spec/lazy_loader_spec.rb
gh-0.11.0 spec/lazy_loader_spec.rb
gh-0.10.3 spec/lazy_loader_spec.rb
gh-0.10.2 spec/lazy_loader_spec.rb
gh-0.10.1 spec/lazy_loader_spec.rb
gh-0.10.0 spec/lazy_loader_spec.rb
gh-0.9.2 spec/lazy_loader_spec.rb
gh-0.9.1 spec/lazy_loader_spec.rb
gh-0.9.0 spec/lazy_loader_spec.rb
gh-0.8.0 spec/lazy_loader_spec.rb
gh-0.7.3 spec/lazy_loader_spec.rb
gh-0.7.1 spec/lazy_loader_spec.rb