require 'spec_helper' describe 'a null object with predicates_return(false)' do subject(:null) { null_class.new } let(:null_class) do Naught.build do |config| config.predicates_return false end end it 'responds to predicate-style methods with false' do expect(null.too_much_coffee?).to eq(false) end it 'responds to other methods with nil' do expect(null.foobar).to eq(nil) end describe '(black hole)' do let(:null_class) do Naught.build do |config| config.black_hole config.predicates_return false end end it 'responds to predicate-style methods with false' do expect(null.too_much_coffee?).to eq(false) end it 'responds to other methods with self' do expect(null.foobar).to be(null) end end describe '(black hole, reverse order config)' do let(:null_class) do Naught.build do |config| config.predicates_return false config.black_hole end end it 'responds to predicate-style methods with false' do expect(null.too_much_coffee?).to eq(false) end it 'responds to other methods with self' do expect(null.foobar).to be(null) end end class Coffee def black? true end def origin 'Ethiopia' end end describe '(mimic)' do let(:null_class) do Naught.build do |config| config.mimic Coffee config.predicates_return false end end it 'responds to predicate-style methods with false' do expect(null.black?).to eq(false) end it 'responds to other methods with nil' do expect(null.origin).to be(nil) end it 'does not respond to undefined methods' do expect(null).not_to respond_to(:leaf_variety) expect { null.leaf_variety }.to raise_error(NoMethodError) end end end