debian-mirror-gitlab/elasticsearch-rails/elasticsearch-model/spec/elasticsearch/model/proxy_spec.rb
2021-03-05 16:19:46 +05:30

108 lines
2.7 KiB
Ruby

require 'spec_helper'
describe Elasticsearch::Model::Proxy do
before(:all) do
class ::DummyProxyModel
include Elasticsearch::Model::Proxy
def self.foo
'classy foo'
end
def bar
'insta barr'
end
def as_json(options)
{foo: 'bar'}
end
end
class ::DummyProxyModelWithCallbacks
def self.before_save(&block)
(@callbacks ||= {})[block.hash] = block
end
def changes_to_save
{:foo => ['One', 'Two']}
end
end
DummyProxyModelWithCallbacks.__send__ :include, Elasticsearch::Model::Proxy
end
after(:all) do
remove_classes(DummyProxyModel, DummyProxyModelWithCallbacks)
end
it 'sets up a proxy method on the class' do
expect(DummyProxyModel).to respond_to(:__elasticsearch__)
end
it 'sets up a proxy method on instances' do
expect(DummyProxyModel.new).to respond_to(:__elasticsearch__)
end
it 'sets up hooks for before_save callbacks' do
expect(DummyProxyModelWithCallbacks).to respond_to(:before_save)
end
it 'delegates methods to the target' do
expect(DummyProxyModel.__elasticsearch__).to respond_to(:foo)
expect(DummyProxyModel.__elasticsearch__.foo).to eq('classy foo')
expect(DummyProxyModel.new.__elasticsearch__).to respond_to(:bar)
expect(DummyProxyModel.new.__elasticsearch__.bar).to eq('insta barr')
expect {
DummyProxyModel.__elasticsearch__.xoxo
}.to raise_exception(NoMethodError)
expect {
DummyProxyModel.new.__elasticsearch__.xoxo
}.to raise_exception(NoMethodError)
end
it 'returns the proxy class from an instance proxy' do
expect(DummyProxyModel.new.__elasticsearch__.class.class).to eq(Elasticsearch::Model::Proxy::ClassMethodsProxy)
end
it 'returns the origin class from an instance proxy' do
expect(DummyProxyModel.new.__elasticsearch__.klass).to eq(DummyProxyModel)
end
it 'delegates #as_json from the proxy to the target' do
expect(DummyProxyModel.new.__elasticsearch__.as_json).to eq(foo: 'bar')
end
it 'includes the proxy in the inspect string' do
expect(DummyProxyModel.__elasticsearch__.inspect).to match(/PROXY/)
expect(DummyProxyModel.new.__elasticsearch__.inspect).to match(/PROXY/)
end
context 'when instances are cloned' do
let!(:model) do
DummyProxyModel.new
end
let!(:model_target) do
model.__elasticsearch__.target
end
let!(:duplicate) do
model.dup
end
let!(:duplicate_target) do
duplicate.__elasticsearch__.target
end
it 'resets the proxy target' do
expect(model).not_to eq(duplicate)
expect(model).to eq(model_target)
expect(duplicate).to eq(duplicate_target)
end
end
end