spec/unit/thinking_sphinx/configuration_spec.rb in freelancing-god-thinking-sphinx-0.9.12 vs spec/unit/thinking_sphinx/configuration_spec.rb in freelancing-god-thinking-sphinx-0.9.13
- old
+ new
@@ -3,11 +3,11 @@
describe ThinkingSphinx::Configuration do
describe "environment class method" do
before :each do
ThinkingSphinx::Configuration.send(:class_variable_set, :@@environment, nil)
- ENV["RAILS_ENV"] = nil
+ ENV["RAILS_ENV"] = nil
end
it "should use the Merb environment value if set" do
unless defined?(Merb)
module Merb; end
@@ -28,157 +28,10 @@
it "should default to development" do
ThinkingSphinx::Configuration.environment.should == "development"
end
end
- describe "environment instance method" do
- it "should return the class method" do
- ThinkingSphinx::Configuration.stub_method(:environment => "spec")
- ThinkingSphinx::Configuration.instance.environment.should == "spec"
- ThinkingSphinx::Configuration.should have_received(:environment)
- end
- end
-
- describe "build method" do
- before :each do
- @config = ThinkingSphinx::Configuration.instance
-
- @config.stub_methods(
- :load_models => "",
- :core_index_for_model => "",
- :delta_index_for_model => "",
- :distributed_index_for_model => ""
- )
-
- ThinkingSphinx.stub_method :indexed_models => ["Person", "Friendship"]
- YAML.stub_method(:load => {
- :development => {
- "option" => "value"
- }
- })
-
- @adapter = ThinkingSphinx::MysqlAdapter.stub_instance(
- :setup => true
- )
-
- @person_index_a = ThinkingSphinx::Index.stub_instance(
- :to_config => "", :adapter => :mysql, :delta? => false,
- :name => "person", :model => Person, :adapter_object => @adapter
- )
- @person_index_b = ThinkingSphinx::Index.stub_instance(
- :to_config => "", :adapter => :mysql, :delta? => false,
- :name => "person", :model => Person, :adapter_object => @adapter
- )
- @friendship_index_a = ThinkingSphinx::Index.stub_instance(
- :to_config => "", :adapter => :mysql, :delta? => false,
- :name => "friendship", :model => Friendship, :adapter_object => @adapter
- )
-
- Person.stub_method(:sphinx_indexes => [@person_index_a, @person_index_b])
- Friendship.stub_method(:sphinx_indexes => [@friendship_index_a])
-
- FileUtils.mkdir_p "#{@config.app_root}/config"
- FileUtils.touch "#{@config.app_root}/config/database.yml"
- end
-
- after :each do
- ThinkingSphinx.unstub_method :indexed_models
- YAML.unstub_method :load
-
- Person.unstub_method :sphinx_indexes
- Friendship.unstub_method :sphinx_indexes
- #
- # FileUtils.rm_rf "#{@config.app_root}/config"
- end
-
- it "should load the models" do
- @config.build
-
- @config.should have_received(:load_models)
- end
-
- it "should load in the database YAML configuration" do
- @config.build
-
- YAML.should have_received(:load)
- end
-
- it "should use the configuration port" do
- @config.build
-
- file = open(@config.config_file) { |f| f.read }
- file.should match(/port\s+= #{@config.port}/)
- end
-
- it "should use the configuration's log file locations" do
- @config.build
-
- file = open(@config.config_file) { |f| f.read }
- file.should match(/log\s+= #{@config.searchd_log_file}/)
- file.should match(/query_log\s+= #{@config.query_log_file}/)
- end
-
- it "should use the configuration's pid file location" do
- @config.build
-
- file = open(@config.config_file) { |f| f.read }
- file.should match(/pid_file\s+= #{@config.pid_file}/)
- end
-
- it "should request configuration for each index for each model" do
- @config.build
-
- @person_index_a.should have_received(:to_config).with(
- Person, 0, {:option => "value"}, 0
- )
- @person_index_b.should have_received(:to_config).with(
- Person, 1, {:option => "value"}, 0
- )
- @friendship_index_a.should have_received(:to_config).with(
- Friendship, 0, {:option => "value"}, 1
- )
- end
-
- it "should call core_index_for_model for each model" do
- @config.build
-
- @config.should have_received(:core_index_for_model).with(
- Person, "source = person_0_core\nsource = person_1_core"
- )
- @config.should have_received(:core_index_for_model).with(
- Friendship, "source = friendship_0_core"
- )
- end
-
- it "should call delta_index_for_model for each model if any index has a delta" do
- @person_index_b.stub_method(:delta? => true)
-
- @config.build
-
- @config.should have_received(:delta_index_for_model).with(
- Person, "source = person_1_delta"
- )
- end
-
- it "should not call delta_index_for_model for each model if no indexes have deltas" do
- @config.build
-
- @config.should_not have_received(:delta_index_for_model)
- end
-
- it "should call distributed_index_for_model for each model" do
- @config.build
-
- @config.should have_received(:distributed_index_for_model).with(Person)
- @config.should have_received(:distributed_index_for_model).with(Friendship)
- end
- end
-
- describe "load_models method" do
- it "should have some specs"
- end
-
describe "parse_config method" do
before :each do
@settings = {
"development" => {
"config_file" => "tmp/config/development.sphinx.conf",
@@ -216,229 +69,11 @@
after :each do
FileUtils.rm "#{RAILS_ROOT}/config/sphinx.yml"
end
end
-
- describe "core_index_for_model method" do
- before :each do
- @config = ThinkingSphinx::Configuration.instance
- @model = Person
- end
- it "should take its name from the model, with _core appended" do
- @config.send(:core_index_for_model, @model, "my sources").should match(
- /index person_core/
- )
- end
-
- it "should set the path to follow the name" do
- @config.searchd_file_path = "/my/file/path"
- @config.send(:core_index_for_model, @model, "my sources").should match(
- /path = \/my\/file\/path\/person_core/
- )
- end
-
- it "should include the charset type setting" do
- @config.index_options[:charset_type] = "specchars"
- @config.send(:core_index_for_model, @model, "my sources").should match(
- /charset_type = specchars/
- )
- end
-
- it "should include the morphology setting if it isn't blank" do
- @config.index_options[:morphology] = "morph"
- @config.send(:core_index_for_model, @model, "my sources").should match(
- /morphology\s+= morph/
- )
- end
-
- it "should not include the morphology setting if it is blank" do
- @config.index_options[:morphology] = nil
- @config.send(:core_index_for_model, @model, "my sources").should_not match(
- /morphology\s+=/
- )
-
- @config.index_options[:morphology] = ""
- @config.send(:core_index_for_model, @model, "my sources").should_not match(
- /morphology\s+=/
- )
- end
-
- it "should include the charset_table value if it isn't nil" do
- @config.index_options[:charset_table] = "table_chars"
- @config.send(:core_index_for_model, @model, "my sources").should match(
- /charset_table\s+= table_chars/
- )
- end
-
- it "should not set the charset_table value if it is nil" do
- @config.index_options[:charset_table] = nil
- @config.send(:core_index_for_model, @model, "my sources").should_not match(
- /charset_table\s+=/
- )
- end
-
- it "should set the ignore_chars value if it isn't nil" do
- @config.index_options[:ignore_chars] = "ignorable"
- @config.send(:core_index_for_model, @model, "my sources").should match(
- /ignore_chars\s+= ignorable/
- )
- end
-
- it "should not set the ignore_chars value if it is nil" do
- @config.index_options[:ignore_chars] = nil
- @config.send(:core_index_for_model, @model, "my sources").should_not match(
- /ignore_chars\s+=/
- )
- end
-
- it "should set prefix_fields if any fields are flagged explicitly" do
- @model.sphinx_indexes.first.stub_methods(
- :prefix_fields => [
- ThinkingSphinx::Field.stub_instance(:unique_name => "a"),
- ThinkingSphinx::Field.stub_instance(:unique_name => "b"),
- ThinkingSphinx::Field.stub_instance(:unique_name => "c")
- ],
- :infix_fields => [
- ThinkingSphinx::Field.stub_instance(:unique_name => "d"),
- ThinkingSphinx::Field.stub_instance(:unique_name => "e"),
- ThinkingSphinx::Field.stub_instance(:unique_name => "f")
- ]
- )
-
- @config.send(:core_index_for_model, @model, "my sources").should match(
- /prefix_fields\s+= a, b, c/
- )
- end
-
- it "shouldn't set prefix_fields if none are flagged explicitly" do
- @config.send(:core_index_for_model, @model, "my sources").should_not match(
- /prefix_fields\s+=/
- )
- end
-
- it "should set infix_fields if any fields are flagged explicitly" do
- @model.sphinx_indexes.first.stub_methods(
- :prefix_fields => [
- ThinkingSphinx::Field.stub_instance(:unique_name => "a"),
- ThinkingSphinx::Field.stub_instance(:unique_name => "b"),
- ThinkingSphinx::Field.stub_instance(:unique_name => "c")
- ],
- :infix_fields => [
- ThinkingSphinx::Field.stub_instance(:unique_name => "d"),
- ThinkingSphinx::Field.stub_instance(:unique_name => "e"),
- ThinkingSphinx::Field.stub_instance(:unique_name => "f")
- ]
- )
-
- @config.send(:core_index_for_model, @model, "my sources").should match(
- /infix_fields\s+= d, e, f/
- )
- end
-
- it "shouldn't set infix_fields if none are flagged explicitly" do
- @config.send(:core_index_for_model, @model, "my sources").should_not match(
- /infix_fields\s+=/
- )
- end
-
- it "should include html_strip if value is set" do
- @config.index_options[:html_strip] = 1
- text = @config.send(:core_index_for_model, @model, "my sources")
- text.should match(/html_strip\s+= 1/)
- end
-
- it "shouldn't include html_strip if value is not set" do
- @config.index_options.delete :html_strip
- text = @config.send(:core_index_for_model, @model, "my sources")
- text.should_not match(/html_strip/)
- end
-
- it "should include html_remove_elements if values are set" do
- @config.index_options[:html_remove_elements] = 'script'
- text = @config.send(:core_index_for_model, @model, "my sources")
- text.should match(/html_remove_elements\s+= script/)
- end
-
- it "shouldn't include html_remove_elements if no values are set" do
- @config.index_options.delete :html_remove_elements
- text = @config.send(:core_index_for_model, @model, "my sources")
- text.should_not match(/html_remove_elements/)
- end
- end
-
- describe "delta_index_for_model method" do
- before :each do
- @config = ThinkingSphinx::Configuration.instance
- @model = Person
- end
-
- it "should take its name from the model, with _delta appended" do
- @config.send(:delta_index_for_model, @model, "delta_sources").should match(
- /index person_delta/
- )
- end
-
- it "should inherit from the equivalent core index" do
- @config.send(:delta_index_for_model, @model, "delta_sources").should match(
- /index person_delta : person_core/
- )
- end
-
- it "should set the path to follow the name" do
- @config.searchd_file_path = "/my/file/path"
- @config.send(:delta_index_for_model, @model, "delta_sources").should match(
- /path = \/my\/file\/path\/person_delta/
- )
- end
- end
-
- describe "distributed_index_for_model method" do
- before :each do
- @config = ThinkingSphinx::Configuration.instance
- @model = Person
- end
-
- it "should take its name from the model" do
- @config.send(:distributed_index_for_model, @model).should match(
- /index person/
- )
- end
-
- it "should have a type of distributed" do
- @config.send(:distributed_index_for_model, @model).should match(
- /type = distributed/
- )
- end
-
- it "should include the core as a local source" do
- @config.send(:distributed_index_for_model, @model).should match(
- /local = person_core/
- )
- end
-
- it "should only include the delta as a local source if an index is flagged to be delta" do
- @config.send(:distributed_index_for_model, @model).should_not match(
- /local = person_delta/
- )
-
- @model.sphinx_indexes.first.stub_method(:delta? => true)
- @config.send(:distributed_index_for_model, @model).should match(
- /local = person_delta/
- )
- end
-
- it "should handle namespaced models correctly" do
- Person.stub_method(:name => "Namespaced::Model")
-
- @config.send(:distributed_index_for_model, @model).should match(
- /index namespaced_model/
- )
- end
- end
-
describe "initialisation" do
it "should have a default bin_path of nothing" do
ThinkingSphinx::Configuration.instance.bin_path.should == ""
end
@@ -456,36 +91,10 @@
ThinkingSphinx::Configuration.instance.send(:parse_config)
ThinkingSphinx::Configuration.instance.bin_path.should match(/\/$/)
end
end
- it "should insert set searchd options into the configuration file" do
- config = ThinkingSphinx::Configuration.instance
- ThinkingSphinx::Configuration::SearchdOptions.each do |option|
- config.searchd_options[option.to_sym] = "something"
- config.build
-
- file = open(config.config_file) { |f| f.read }
- file.should match(/#{option}\s+= something/)
-
- config.searchd_options[option.to_sym] = nil
- end
- end
-
- it "should insert set indexer options into the configuration file" do
- config = ThinkingSphinx::Configuration.instance
- ThinkingSphinx::Configuration::IndexerOptions.each do |option|
- config.indexer_options[option.to_sym] = "something"
- config.build
-
- file = open(config.config_file) { |f| f.read }
- file.should match(/#{option}\s+= something/)
-
- config.indexer_options[option.to_sym] = nil
- end
- end
-
it "should insert set index options into the configuration file" do
config = ThinkingSphinx::Configuration.instance
ThinkingSphinx::Configuration::IndexOptions.each do |option|
config.index_options[option.to_sym] = "something"
config.build
@@ -506,7 +115,22 @@
file = open(config.config_file) { |f| f.read }
file.should match(/#{option}\s+= something/)
config.source_options[option.to_sym] = nil
end
- end
+ end
+
+ it "should set any explicit prefixed or infixed fields" do
+ file = open(ThinkingSphinx::Configuration.instance.config_file) { |f|
+ f.read
+ }
+ file.should match(/prefix_fields\s+= city/)
+ file.should match(/infix_fields\s+= state/)
+ end
+
+ it "should not have prefix fields in indexes where nothing is set" do
+ file = open(ThinkingSphinx::Configuration.instance.config_file) { |f|
+ f.read
+ }
+ file.should_not match(/index alpha_core\s+\{\s+[^\}]*prefix_fields\s+=[^\}]*\}/m)
+ end
end
\ No newline at end of file