spec/lib/arstotzka_spec.rb in arstotzka-1.3.0 vs spec/lib/arstotzka_spec.rb in arstotzka-1.3.1
- old
+ new
@@ -6,10 +6,71 @@
let(:dummy_class) { Arstotzka::Dummy }
let(:dummy) { dummy_class.new(json) }
let(:json) { load_json_fixture_file('arstotzka.json') }
let(:value) { dummy.public_send(attribute) }
+ describe '.add_fether' do
+ let(:klass) { Class.new(Arstotzka::Dummy) }
+
+ it do
+ expect { klass.add_fetcher(:new_attribute) }
+ .to change { klass.send(:fetcher_builders).keys }
+ .to([:new_attribute])
+ end
+ end
+
+ describe '.fetcher_for' do
+ let(:klass) { Arstotzka::Dummy }
+ let(:instance) { klass.new({}) }
+ let(:expected) do
+ Arstotzka::Fetcher.new(
+ key: :name,
+ path: 'user',
+ instance: instance
+ )
+ end
+
+ it do
+ expect(klass.fetcher_for(:name, instance))
+ .to be_a(Arstotzka::Fetcher)
+ end
+
+ it 'returns correct fetcher' do
+ expect(klass.fetcher_for(:name, instance))
+ .to eq(expected)
+ end
+
+ context 'when fetcher was never added' do
+ it do
+ expect { klass.fetcher_for(:new_attribute, instance) }
+ .to raise_error(
+ Arstotzka::Exception::FetcherBuilderNotFound,
+ "FetcherBuild not found for new_attribute on #{klass}"
+ )
+ end
+ end
+
+ context 'when dealing with subclass' do
+ let(:klass) { Class.new(Arstotzka::Dummy) }
+
+ it do
+ expect { klass.fetcher_for(:name, instance) }
+ .not_to raise_error
+ end
+
+ context 'when fetcher was never added' do
+ it do
+ expect { klass.fetcher_for(:new_attribute, instance) }
+ .to raise_error(
+ Arstotzka::Exception::FetcherBuilderNotFound,
+ "FetcherBuild not found for new_attribute on #{klass}"
+ )
+ end
+ end
+ end
+ end
+
context 'when parser is configured with no options' do
let(:attribute) { :id }
it 'retrieves attribute from base json' do
expect(value).to eq(json['id'])
@@ -126,8 +187,17 @@
end
end
it do
expect(value).to be_a(Float)
+ end
+ end
+
+ context 'when class is a child' do
+ let(:klass) { Class.new(Arstotzka::Dummy) }
+ let(:attribute) { :name }
+
+ it 'retrieves attribute from base json' do
+ expect(value).to eq(json['user']['name'])
end
end
end