# frozen_string_literal: true require 'acceptance/spec_helper' describe 'Index options' do let(:index) { ThinkingSphinx::ActiveRecord::Index.new(:article) } %w( infix prefix ).each do |type| context "all fields are #{type}ed" do before :each do index.definition_block = Proc.new { indexes title set_property "min_#{type}_len".to_sym => 3 } index.render end it "keeps #{type}_fields blank" do expect(index.send("#{type}_fields")).to be_nil end it "sets min_#{type}_len" do expect(index.send("min_#{type}_len")).to eq(3) end end context "some fields are #{type}ed" do before :each do index.definition_block = Proc.new { indexes title, "#{type}es".to_sym => true indexes content set_property "min_#{type}_len".to_sym => 3 } index.render end it "#{type}_fields should contain the field" do expect(index.send("#{type}_fields")).to eq('title') end it "sets min_#{type}_len" do expect(index.send("min_#{type}_len")).to eq(3) end end end context "multiple source definitions" do before :each do index.definition_block = Proc.new { define_source do indexes title end define_source do indexes title, content end } index.render end it "stores each source definition" do expect(index.sources.length).to eq(2) end it "treats each source as separate" do expect(index.sources.first.fields.length).to eq(2) expect(index.sources.last.fields.length).to eq(3) end end context 'wordcount fields and attributes' do before :each do index.definition_block = Proc.new { indexes title, :wordcount => true has content, :type => :wordcount } index.render end it "declares wordcount fields" do expect(index.sources.first.sql_field_str2wordcount).to eq(['title']) end it "declares wordcount attributes" do expect(index.sources.first.sql_attr_str2wordcount).to eq(['content']) end end context 'respecting source options' do before :each do index.definition_block = Proc.new { indexes title set_property :sql_range_step => 5 set_property :disable_range? => true set_property :sql_query_pre => ["DO STUFF"] } index.render end it "allows for core source settings" do expect(index.sources.first.sql_range_step).to eq(5) end it "allows for source options" do expect(index.sources.first.disable_range?).to be_truthy end it "respects sql_query_pre values" do expect(index.sources.first.sql_query_pre).to include("DO STUFF") end end context 'respecting index options over core configuration' do before :each do ThinkingSphinx::Configuration.instance.settings['min_infix_len'] = 2 ThinkingSphinx::Configuration.instance.settings['sql_range_step'] = 2 index.definition_block = Proc.new { indexes title set_property :min_infix_len => 1 set_property :sql_range_step => 20 } index.render end after :each do ThinkingSphinx::Configuration.instance.settings.delete 'min_infix_len' ThinkingSphinx::Configuration.instance.settings.delete 'sql_range_step' end it "prioritises index-level options over YAML options" do expect(index.min_infix_len).to eq(1) end it "prioritises index-level source options" do expect(index.sources.first.sql_range_step).to eq(20) end it "keeps index-level options prioritised when rendered again" do index.render expect(index.min_infix_len).to eq(1) end it "keeps index-level options prioritised when rendered again" do index.render expect(index.sources.first.sql_range_step).to eq(20) end end end