spec/unit/thinking_sphinx/configuration_spec.rb in dpickett-thinking-sphinx-1.1.12 vs spec/unit/thinking_sphinx/configuration_spec.rb in dpickett-thinking-sphinx-1.1.23

- old
+ new

@@ -8,15 +8,15 @@ ENV["RAILS_ENV"] = nil end it "should use the Merb environment value if set" do unless defined?(Merb) - module Merb; end + module ::Merb; end end - + ThinkingSphinx::Configuration.stub_method(:defined? => true) - Merb.stub_method(:environment => "merb_production") + Merb.stub!(:environment => "merb_production") ThinkingSphinx::Configuration.environment.should == "merb_production" Object.send(:remove_const, :Merb) end @@ -46,11 +46,13 @@ "mem_limit" => "128M", "max_matches" => 1001, "morphology" => "stem_ru", "charset_type" => "latin1", "charset_table" => "table", - "ignore_chars" => "e" + "ignore_chars" => "e", + "searchd_binary_name" => "sphinx-searchd", + "indexer_binary_name" => "sphinx-indexer" } } open("#{RAILS_ROOT}/config/sphinx.yml", "w") do |f| f.write YAML.dump(@settings) @@ -60,20 +62,29 @@ it "should use the accessors to set the configuration values" do config = ThinkingSphinx::Configuration.instance config.send(:parse_config) %w(config_file searchd_log_file query_log_file pid_file searchd_file_path - address port).each do |key| + address port searchd_binary_name indexer_binary_name).each do |key| config.send(key).should == @settings["development"][key] end end after :each do FileUtils.rm "#{RAILS_ROOT}/config/sphinx.yml" end end - + + describe "block configuration" do + it "should let the user set-up a custom app_root" do + ThinkingSphinx::Configuration.configure do |config| + config.app_root = "/here/somewhere" + end + ThinkingSphinx::Configuration.instance.app_root.should == "/here/somewhere" + end + end + describe "initialisation" do it "should have a default bin_path of nothing" do ThinkingSphinx::Configuration.instance.bin_path.should == "" end @@ -91,10 +102,85 @@ ThinkingSphinx::Configuration.instance.send(:parse_config) ThinkingSphinx::Configuration.instance.bin_path.should match(/\/$/) end end + describe "index options" do + before :each do + @settings = { + "development" => {"disable_range" => true} + } + + open("#{RAILS_ROOT}/config/sphinx.yml", "w") do |f| + f.write YAML.dump(@settings) + end + + @config = ThinkingSphinx::Configuration.instance + @config.send(:parse_config) + end + + it "should collect disable_range" do + @config.index_options[:disable_range].should be_true + end + end + + describe "#load_models" do + before :each do + @config = ThinkingSphinx::Configuration.instance + @config.model_directories = [''] + + @file_name = 'a.rb' + @model_name_lower = 'a' + @class_name = 'A' + + @file_name.stub!(:gsub).and_return(@model_name_lower) + @model_name_lower.stub!(:camelize).and_return(@class_name) + Dir.stub(:[]).and_return([@file_name]) + end + + it "should load the files by guessing the file name" do + @class_name.should_receive(:constantize).and_return(true) + + @config.load_models + end + + it "should not raise errors if the model name is nil" do + @file_name.stub!(:gsub).and_return(nil) + + lambda { + @config.load_models + }.should_not raise_error + end + + it "should not raise errors if the file name does not represent a class name" do + @class_name.should_receive(:constantize).and_raise(NameError) + + lambda { + @config.load_models + }.should_not raise_error + end + + it "should retry if the first pass fails and contains a directory" do + @model_name_lower.stub!(:gsub!).and_return(true, nil) + @class_name.stub(:constantize).and_raise(LoadError) + @model_name_lower.should_receive(:camelize).twice + + lambda { + @config.load_models + }.should_not raise_error + end + + it "should catch database errors with a warning" do + @class_name.should_receive(:constantize).and_raise(Mysql::Error) + @config.should_receive(:puts).with('Warning: Error loading a.rb') + + lambda { + @config.load_models + }.should_not raise_error + 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 @@ -131,6 +217,6 @@ 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 +end