spec/unit/definition_spec.rb in scoped_search-4.0.0 vs spec/unit/definition_spec.rb in scoped_search-4.1.0

- old
+ new

@@ -4,10 +4,11 @@ before(:each) do @klass = mock_activerecord_class @definition = ScopedSearch::Definition.new(@klass) @definition.stub(:setup_adapter) + @klass.stub(:scoped_search_definition).and_return(@definition) end describe ScopedSearch::Definition::Field do describe '#initialize' do it "should raise an exception with missing field or 'on' keyword" do @@ -60,16 +61,67 @@ end end describe '#initialize' do it "should create the named scope when" do - @klass.should_receive(:scope).with(:search_for, instance_of(Proc)) ScopedSearch::Definition.new(@klass) + @klass.should respond_to(:search_for) end it "should not create the named scope if it already exists" do @klass.stub(:search_for) - @klass.should_not_receive(:scope) + @klass.should_not_receive(:define_singleton_method) ScopedSearch::Definition.new(@klass) + end + end + + describe '#define_field' do + it "should add to fields" do + field = instance_double('ScopedSearch::Definition::Field') + @definition.define_field('test', field) + @definition.fields.should eq(test: field) + @definition.unique_fields.should eq([field]) + end + + it "should add aliases" do + field = instance_double('ScopedSearch::Definition::Field') + @definition.define_field('test', field) + @definition.define_field('alias', field) + @definition.fields.should eq(test: field, alias: field) + @definition.unique_fields.should eq([field]) + end + + it "should ignore duplicate field names" do + field1 = instance_double('ScopedSearch::Definition::Field') + field2 = instance_double('ScopedSearch::Definition::Field') + @definition.define_field('test', field1) + @definition.define_field('test', field2) + @definition.fields.should eq(test: field1) + @definition.unique_fields.should eq([field1, field2]) + end + end + + describe '#fields' do + before(:each) do + @subklass = mock_activerecord_subclass(@klass) + @subdefinition = ScopedSearch::Definition.new(@subklass) + @subdefinition.stub(:setup_adapter) + end + + it "should return fields from class" do + field = @definition.define(on: 'foo') + @definition.fields.should eq(foo: field) + end + + it "should return fields from parent class" do + field = @definition.define(on: 'foo') + @subdefinition.fields.should eq(foo: field) + end + + it "should combine fields from class and parent class" do + field1 = @definition.define(on: 'foo') + field2 = @subdefinition.define(on: 'foo', only_explicit: true) + field3 = @subdefinition.define(on: 'bar') + @subdefinition.fields.should eq(foo: field2, bar: field3) end end end