flying-sphinx 0.6.6 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,55 @@
1
+ class FlyingSphinx::SettingFiles
2
+ INDEX_SETTINGS = [:stopwords, :wordforms, :exceptions]
3
+ SOURCE_SETTINGS = [:mysql_ssl_cert, :mysql_ssl_key, :mysql_ssl_ca]
4
+
5
+ def initialize(indices = nil)
6
+ @indices = indices ||
7
+ ThinkingSphinx::Configuration.instance.configuration.indices
8
+ end
9
+
10
+ def upload_to(api)
11
+ each_file_for_setting do |setting, file|
12
+ api.post '/add_file',
13
+ :setting => setting.to_s,
14
+ :file_name => File.basename(file),
15
+ :content => File.read(file)
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ attr_reader :indices
22
+
23
+ def each_file_for_setting(&block)
24
+ index_settings &block
25
+ source_settings &block
26
+ end
27
+
28
+ def index_settings(&block)
29
+ settings_in_list_from_collection INDEX_SETTINGS, indices, &block
30
+ end
31
+
32
+ def sources
33
+ @sources ||= indices.collect { |index|
34
+ index.respond_to?(:sources) ? index.sources : []
35
+ }.flatten
36
+ end
37
+
38
+ def source_settings(&block)
39
+ settings_in_list_from_collection SOURCE_SETTINGS, sources, &block
40
+ end
41
+
42
+ def setting_from(collection, setting)
43
+ collection.collect { |object|
44
+ object.respond_to?(setting) ? object.send(setting).to_s.split(' ') : []
45
+ }.flatten.uniq.compact
46
+ end
47
+
48
+ def settings_in_list_from_collection(settings, collection, &block)
49
+ settings.each do |setting|
50
+ setting_from(collection, setting).each { |file|
51
+ block.call setting, file
52
+ }
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,23 @@
1
+ class FlyingSphinx::SphinxConfiguration
2
+ def initialize(thinking_sphinx = ThinkingSphinx::Configuration.instance)
3
+ @thinking_sphinx = thinking_sphinx
4
+ end
5
+
6
+ def upload_to(api, tunnel = false)
7
+ api.put '/',
8
+ :configuration => content,
9
+ :sphinx_version => thinking_sphinx.version,
10
+ :tunnel => tunnel.to_s
11
+ end
12
+
13
+ private
14
+
15
+ attr_reader :thinking_sphinx
16
+
17
+ def content
18
+ @content ||= begin
19
+ thinking_sphinx.generate
20
+ thinking_sphinx.configuration.render
21
+ end
22
+ end
23
+ end
@@ -5,7 +5,6 @@ namespace :fs do
5
5
  request = FlyingSphinx::IndexRequest.new
6
6
  request.update_and_index
7
7
  puts request.status_message
8
-
9
8
  end
10
9
 
11
10
  task :start => :environment do
@@ -18,7 +18,7 @@ class FlyingSphinx::Tunnel
18
18
  end
19
19
 
20
20
  def open(&block)
21
- session = Net::SSH.start(@configuration.host, 'sphinx', ssh_options)
21
+ session = Net::SSH.start(@configuration.ssh_server, 'sphinx', ssh_options)
22
22
  session.forward.remote(
23
23
  db_port, db_host, @configuration.database_port, '0.0.0.0'
24
24
  )
@@ -1,3 +1,3 @@
1
1
  module FlyingSphinx
2
- Version = '0.6.6'
2
+ Version = '0.7.0'
3
3
  end
@@ -0,0 +1,7 @@
1
+ require 'bundler/setup'
2
+ require 'rspec/fire'
3
+
4
+ RSpec.configure do |config|
5
+ config.mock_with :rspec
6
+ config.include(RSpec::Fire)
7
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,12 +1,7 @@
1
1
  require 'rubygems'
2
- begin
3
- require 'bundler'
4
- rescue LoadError
5
- puts "although not required, it's recommended you use bundler during development"
6
- end
2
+ require 'bundler'
7
3
 
8
4
  require 'timeout'
9
-
10
5
  require 'thinking-sphinx'
11
6
  require 'flying_sphinx'
12
7
  require 'delayed_job'
@@ -15,9 +10,4 @@ require 'fakeweb'
15
10
  require 'fakeweb_matcher'
16
11
 
17
12
  FakeWeb.allow_net_connect = false
18
-
19
- Delayed::Worker.backend = :active_record
20
-
21
- # we don't want a checking of interval in testing
22
- FlyingSphinx::IndexRequest.send(:remove_const, :INDEX_COMPLETE_CHECKING_INTERVAL)
23
- FlyingSphinx::IndexRequest::INDEX_COMPLETE_CHECKING_INTERVAL = 0
13
+ Delayed::Worker.backend = :active_record
@@ -0,0 +1,92 @@
1
+ require 'light_spec_helper'
2
+ require 'flying_sphinx/api'
3
+ require 'flying_sphinx/version'
4
+
5
+ describe FlyingSphinx::API do
6
+ let(:api) { FlyingSphinx::API.new 'foo', 'bar', adapter }
7
+ let(:faraday) { fire_class_double('Faraday', :new => connection) }
8
+ let(:adapter) { double('adapter') }
9
+ let(:connection) { double('connection') }
10
+
11
+ before :each do
12
+ faraday.as_replaced_constant
13
+ end
14
+
15
+ shared_examples_for 'an API call' do
16
+ it "sets up a connection with the appropriate headers" do
17
+ faraday.should_receive(:new) do |options|
18
+ options[:headers].should == {
19
+ 'Accept' => 'application/vnd.flying-sphinx-v3+json',
20
+ 'X-Flying-Sphinx-Token' => 'foo:bar',
21
+ 'X-Flying-Sphinx-Version' => FlyingSphinx::Version
22
+ }
23
+
24
+ connection
25
+ end
26
+
27
+ send_request
28
+ end
29
+
30
+ it "connects to flying-sphinx.com with SSL" do
31
+ faraday.should_receive(:new) do |options|
32
+ options[:url].should == 'https://flying-sphinx.com'
33
+
34
+ connection
35
+ end
36
+
37
+ send_request
38
+ end
39
+ end
40
+
41
+ describe '#get' do
42
+ let(:request) { double('request', :url => true) }
43
+ let(:send_request) { api.get '/resource', 'param' => 'value'}
44
+
45
+ before :each do
46
+ connection.stub(:get).and_yield(request)
47
+ end
48
+
49
+ it_should_behave_like 'an API call'
50
+
51
+ it "sends the GET request with the given path and data" do
52
+ request.should_receive(:url).
53
+ with('/api/my/app/resource', 'param' => 'value')
54
+
55
+ send_request
56
+ end
57
+ end
58
+
59
+ describe '#post' do
60
+ let(:send_request) { api.post '/resource', 'param' => 'value' }
61
+
62
+ before :each do
63
+ connection.stub(:post => true)
64
+ end
65
+
66
+ it_should_behave_like 'an API call'
67
+
68
+ it "sends the POST request with the given path and data" do
69
+ connection.should_receive(:post).
70
+ with('/api/my/app/resource', 'param' => 'value')
71
+
72
+ send_request
73
+ end
74
+ end
75
+
76
+ describe '#put' do
77
+ let(:send_request) { api.put '/resource', 'param' => 'value' }
78
+
79
+ before :each do
80
+ connection.stub(:put => true)
81
+ end
82
+
83
+ it_should_behave_like 'an API call'
84
+
85
+ it "sends the PUT request with the given path and data" do
86
+ connection.should_receive(:put).
87
+ with('/api/my/app/resource', 'param' => 'value')
88
+
89
+ send_request
90
+ end
91
+ end
92
+ end
@@ -1,184 +1,35 @@
1
- require 'spec_helper'
2
- require 'multi_json'
1
+ require 'light_spec_helper'
2
+ require 'flying_sphinx/configuration'
3
3
 
4
4
  describe FlyingSphinx::Configuration do
5
- let(:api_server) { 'https://flying-sphinx.com/api/my' }
5
+ let(:api) { fire_double('FlyingSphinx::API',
6
+ :get => double(:body => body, :status => 200)) }
7
+ let(:body) { double(:server => 'foo.bar.com', :port => 9319,
8
+ :ssh_server => 'ssh.bar.com', :database_port => 10319) }
6
9
 
7
10
  before :each do
8
- FakeWeb.register_uri(:get, "#{api_server}/app",
9
- :body => MultiJson.encode(
10
- :server => 'foo.bar.com',
11
- :port => 9319,
12
- :database_port => 10001
13
- )
14
- )
11
+ fire_class_double('FlyingSphinx::API', :new => api).as_replaced_constant
15
12
  end
16
13
 
17
14
  describe '#initialize' do
18
15
  let(:api_key) { 'foo-bar-baz' }
19
- let(:identifier) { 'app@heroku.com' }
16
+ let(:identifier) { 'my-identifier' }
20
17
  let(:config) { FlyingSphinx::Configuration.new identifier, api_key }
21
18
 
22
- it "requests details from the server with the given API key" do
23
- config
24
- FakeWeb.should have_requested :get, "#{api_server}/app"
25
- end
26
-
27
- it "sets the host from the server information" do
19
+ it "sets the host from the API information" do
28
20
  config.host.should == 'foo.bar.com'
29
21
  end
30
22
 
31
- it "sets the port from the server information" do
23
+ it "sets the port from the API information" do
32
24
  config.port.should == 9319
33
25
  end
34
26
 
35
- it "sets the port from the server information" do
36
- config.database_port.should == 10001
27
+ it "sets the ssh server address" do
28
+ config.ssh_server.should == 'ssh.bar.com'
37
29
  end
38
- end
39
-
40
- describe '#file_setting_pairs' do
41
- let(:config) { FlyingSphinx::Configuration.new 'ident' }
42
- let(:riddle) { ThinkingSphinx::Configuration.instance.configuration }
43
- let(:base_path) { '/mnt/sphinx/flying-sphinx/ident' }
44
-
45
- context 'index setting' do
46
- it "pairs each local file path to a server file path" do
47
- riddle.stub! :indices => [
48
- double('index', :wordforms => '/path/to/wordforms-foo.txt',
49
- :sources => [double('source'), double('source')]),
50
- double('index', :wordforms => '/path/to/wordforms-bar.txt',
51
- :sources => [double('source'), double('source')])
52
- ]
53
-
54
- config.file_setting_pairs(:wordforms).should == {
55
- '/path/to/wordforms-foo.txt' => "#{base_path}/wordforms/0.txt",
56
- '/path/to/wordforms-bar.txt' => "#{base_path}/wordforms/1.txt"
57
- }
58
- end
59
-
60
- it "doesn't duplicate multiple references to the same local file" do
61
- riddle.stub! :indices => [
62
- double('index', :wordforms => '/path/to/wordforms-foo.txt',
63
- :sources => [double('source'), double('source')]),
64
- double('index', :wordforms => '/path/to/wordforms-foo.txt',
65
- :sources => [double('source'), double('source')])
66
- ]
67
-
68
- config.file_setting_pairs(:wordforms).should == {
69
- '/path/to/wordforms-foo.txt' => "#{base_path}/wordforms/0.txt"
70
- }
71
- end
72
- end
73
-
74
- context 'source setting' do
75
- it "pairs each local file path to a server file path" do
76
- riddle.stub! :indices => [
77
- double('index', :sources => [
78
- double('source', :mysql_ssl_cert => '/path/to/cert-foo.txt'),
79
- double('source', :mysql_ssl_cert => '/path/to/cert-bar.txt')
80
- ]),
81
- double('index', :sources => [
82
- double('source', :mysql_ssl_cert => '/path/to/cert-baz.txt'),
83
- double('source', :mysql_ssl_cert => nil)
84
- ])
85
- ]
86
-
87
- config.file_setting_pairs(:mysql_ssl_cert).should == {
88
- '/path/to/cert-foo.txt' => "#{base_path}/mysql_ssl_cert/0.txt",
89
- '/path/to/cert-bar.txt' => "#{base_path}/mysql_ssl_cert/1.txt",
90
- '/path/to/cert-baz.txt' => "#{base_path}/mysql_ssl_cert/2.txt"
91
- }
92
- end
93
-
94
- it "doesn't duplicate multiple references to the same local file" do
95
- riddle.stub! :indices => [
96
- double('index', :sources => [
97
- double('source', :mysql_ssl_cert => '/path/to/cert-foo.txt'),
98
- double('source', :mysql_ssl_cert => '/path/to/cert-bar.txt')
99
- ]),
100
- double('index', :sources => [
101
- double('source', :mysql_ssl_cert => '/path/to/cert-foo.txt'),
102
- double('source', :mysql_ssl_cert => nil)
103
- ])
104
- ]
105
-
106
- config.file_setting_pairs(:mysql_ssl_cert).should == {
107
- '/path/to/cert-foo.txt' => "#{base_path}/mysql_ssl_cert/0.txt",
108
- '/path/to/cert-bar.txt' => "#{base_path}/mysql_ssl_cert/1.txt"
109
- }
110
- end
111
- end
112
- end
113
-
114
- describe '#sphinx_configuration' do
115
- let(:config) { FlyingSphinx::Configuration.new 'ident' }
116
- let(:riddle) { double('riddle configuration').as_null_object }
117
- let(:base_path) { '/mnt/sphinx/flying-sphinx/ident' }
118
- let(:source) { double('source') }
119
-
120
- before :each do
121
- ThinkingSphinx::Configuration.instance.stub!(
122
- :generate => nil,
123
- :configuration => riddle
124
- )
125
- FlyingSphinx::Tunnel.stub! :required? => false
126
- end
127
-
128
- it "sets database settings to match Flying Sphinx port forward" do
129
- FlyingSphinx::Tunnel.stub! :required? => true
130
-
131
- riddle.stub! :indices => [
132
- double('distributed index'),
133
- double('index', :sources => [source])
134
- ]
135
-
136
- source.should_receive(:sql_host=).with('127.0.0.1')
137
- source.should_receive(:sql_port=).with(10001)
138
-
139
- config.sphinx_configuration
140
- end
141
-
142
- it "sets file path to match server directories for index settings" do
143
- riddle.stub! :indices => [
144
- double('index', :wordforms => '/path/to/wordforms-foo.txt',
145
- :sources => [double('source'), double('source')]),
146
- double('index', :wordforms => '/path/to/wordforms-bar.txt',
147
- :sources => [double('source'), double('source')]),
148
- double('distributed index')
149
- ]
150
-
151
- riddle.indices[0].should_receive(:wordforms=).
152
- with("#{base_path}/wordforms/0.txt")
153
- riddle.indices[1].should_receive(:wordforms=).
154
- with("#{base_path}/wordforms/1.txt")
155
-
156
- config.sphinx_configuration
157
- end
158
-
159
- it "sets file path to match server directories for source settings" do
160
- riddle.stub! :indices => [
161
- double('index', :sources => [
162
- double('source', :mysql_ssl_cert => '/path/to/cert-foo.txt'),
163
- double('source', :mysql_ssl_cert => '/path/to/cert-bar.txt')
164
- ]),
165
- double('index', :sources => [
166
- double('source', :mysql_ssl_cert => '/path/to/cert-baz.txt'),
167
- double('source', :mysql_ssl_cert => nil)
168
- ]),
169
- double('distributed index')
170
- ]
171
-
172
- riddle.indices[0].sources[0].should_receive(:mysql_ssl_cert=).
173
- with("#{base_path}/mysql_ssl_cert/0.txt")
174
- riddle.indices[0].sources[1].should_receive(:mysql_ssl_cert=).
175
- with("#{base_path}/mysql_ssl_cert/1.txt")
176
- riddle.indices[1].sources[0].should_receive(:mysql_ssl_cert=).
177
- with("#{base_path}/mysql_ssl_cert/2.txt")
178
- riddle.indices[1].sources[1].should_receive(:mysql_ssl_cert=).
179
- with(nil)
180
30
 
181
- config.sphinx_configuration
31
+ it "sets the database port" do
32
+ config.database_port.should == 10319
182
33
  end
183
34
  end
184
35
  end
@@ -1,11 +1,13 @@
1
- require 'spec_helper'
1
+ require 'light_spec_helper'
2
+ require 'net/ssh/errors'
3
+ require 'timeout'
4
+ require 'flying_sphinx/index_request'
2
5
 
3
6
  describe FlyingSphinx::IndexRequest do
4
- let(:api) { FlyingSphinx::API.new 'foo', 'bar' }
5
- let(:configuration) {
6
- stub(:configuration, :api => api, :sphinx_configuration => 'foo {}',
7
- :file_setting_pairs => {})
8
- }
7
+ let(:api) { fire_double('FlyingSphinx::API') }
8
+ let(:configuration) { stub(:configuration, :api => api) }
9
+ let(:tunnel_class) { fire_class_double('FlyingSphinx::Tunnel').
10
+ as_replaced_constant }
9
11
 
10
12
  let(:index_response) {
11
13
  stub(:response, :body => stub(:body, :id => 42, :status => 'OK'))
@@ -15,34 +17,39 @@ describe FlyingSphinx::IndexRequest do
15
17
  }
16
18
 
17
19
  before :each do
18
- ThinkingSphinx.database_adapter = FlyingSphinx::HerokuSharedAdapter
20
+ stub_const 'FlyingSphinx::Configuration', double(:new => configuration)
19
21
 
20
- FlyingSphinx::Configuration.stub!(:new => configuration)
21
- FlyingSphinx::Tunnel.stub(:connect) { |config, block| block.call }
22
+ stub_const 'FlyingSphinx::IndexRequest::INDEX_COMPLETE_CHECKING_INTERVAL',
23
+ 0
22
24
  end
23
25
 
24
26
  describe '.cancel_jobs' do
27
+ let(:job_class) { fire_class_double('Delayed::Job').as_replaced_constant }
28
+
25
29
  before :each do
26
- Delayed::Job.stub!(:delete_all => true)
30
+ job_class.stub :delete_all => true
27
31
  end
28
32
 
29
33
  it "should not delete any rows if the delayed_jobs table does not exist" do
30
- Delayed::Job.stub!(:table_exists? => false)
31
- Delayed::Job.should_not_receive(:delete_all)
34
+ job_class.stub :table_exists? => false
35
+
36
+ job_class.should_not_receive(:delete_all)
32
37
 
33
38
  FlyingSphinx::IndexRequest.cancel_jobs
34
39
  end
35
40
 
36
41
  it "should delete rows if the delayed_jobs table does exist" do
37
- Delayed::Job.stub!(:table_exists? => true)
38
- Delayed::Job.should_receive(:delete_all)
42
+ job_class.stub :table_exists? => true
43
+
44
+ job_class.should_receive(:delete_all)
39
45
 
40
46
  FlyingSphinx::IndexRequest.cancel_jobs
41
47
  end
42
48
 
43
49
  it "should delete only Thinking Sphinx jobs" do
44
- Delayed::Job.stub!(:table_exists? => true)
45
- Delayed::Job.should_receive(:delete_all) do |sql|
50
+ job_class.stub :table_exists? => true
51
+
52
+ job_class.should_receive(:delete_all) do |sql|
46
53
  sql.should match(/handler LIKE '--- !ruby\/object:FlyingSphinx::\%'/)
47
54
  end
48
55
 
@@ -55,16 +62,23 @@ describe FlyingSphinx::IndexRequest do
55
62
  let(:conf_params) { { :configuration => 'foo {}',
56
63
  :sphinx_version => '2.1.0-dev' } }
57
64
  let(:index_params) { { :indices => '' } }
58
- let(:ts_config) { double('config', :version => '2.1.0-dev') }
65
+ let(:sphinx) { fire_double('FlyingSphinx::SphinxConfiguration',
66
+ :upload_to => true)}
67
+ let(:setting_files) { fire_double('FlyingSphinx::SettingFiles',
68
+ :upload_to => true) }
59
69
 
60
70
  before :each do
61
- ThinkingSphinx::Configuration.stub :instance => ts_config
71
+ stub_const 'FlyingSphinx::SettingFiles', double(:new => setting_files)
72
+ stub_const 'FlyingSphinx::SphinxConfiguration', double(:new => sphinx)
73
+
74
+ api.stub :post => index_response
75
+
76
+ tunnel_class.stub :required? => true
77
+ tunnel_class.stub(:connect).and_yield
62
78
  end
63
79
 
64
- it "makes a new request" do
65
- api.should_receive(:put).with('/', conf_params).and_return('ok')
66
- api.should_receive(:post).
67
- with('indices', index_params).and_return(index_response)
80
+ it "uploads the configuration file" do
81
+ sphinx.should_receive(:upload_to).with(api, true)
68
82
 
69
83
  begin
70
84
  Timeout::timeout(0.2) {
@@ -74,44 +88,31 @@ describe FlyingSphinx::IndexRequest do
74
88
  end
75
89
  end
76
90
 
77
- [
78
- :stopwords, :wordforms, :exceptions, :mysql_ssl_cert, :mysql_ssl_key,
79
- :mysql_ssl_ca
80
- ].each do |setting|
81
- context "with #{setting}" do
82
- let(:file_params) {
83
- {:setting => setting.to_s, :file_name => 'bar.txt', :content => 'baz'}
91
+ it "uploads setting files" do
92
+ setting_files.should_receive(:upload_to).with(api)
93
+
94
+ begin
95
+ Timeout::timeout(0.2) {
96
+ index_request.update_and_index
84
97
  }
98
+ rescue Timeout::Error
99
+ end
100
+ end
101
+
102
+ it "makes a new request" do
103
+ api.should_receive(:post).
104
+ with('indices', index_params).and_return(index_response)
85
105
 
86
- before :each do
87
- configuration.stub!(:file_setting_pairs => {})
88
- index_request.stub!(:open => double('file', :read => 'baz'))
89
- end
90
-
91
- it "sends the #{setting} file" do
92
- api.should_receive(:put).with('/', conf_params).and_return('ok')
93
- api.should_receive(:post).with('/add_file', file_params).
94
- and_return('ok')
95
- api.should_receive(:post).
96
- with('indices', index_params).and_return(index_response)
97
-
98
- configuration.should_receive(:file_setting_pairs).
99
- with(setting).and_return({'foo.txt' => 'bar.txt'})
100
-
101
- begin
102
- Timeout::timeout(0.2) {
103
- index_request.update_and_index
104
- }
105
- rescue Timeout::Error
106
- end
107
- end
106
+ begin
107
+ Timeout::timeout(0.2) {
108
+ index_request.update_and_index
109
+ }
110
+ rescue Timeout::Error
108
111
  end
109
112
  end
110
113
 
111
114
  context 'delta request without delta support' do
112
115
  it "should explain why the request failed" do
113
- api.should_receive(:put).
114
- with('/', conf_params).and_return('ok')
115
116
  api.should_receive(:post).
116
117
  with('indices', index_params).and_return(blocked_response)
117
118
  index_request.should_receive(:puts).
@@ -123,17 +124,12 @@ describe FlyingSphinx::IndexRequest do
123
124
 
124
125
  context 'request for a MySQL database' do
125
126
  before :each do
126
- ThinkingSphinx.database_adapter = nil
127
- end
128
-
129
- after :each do
130
- ThinkingSphinx.database_adapter = FlyingSphinx::HerokuSharedAdapter
127
+ tunnel_class.stub :required? => false
131
128
  end
132
129
 
133
130
  it "should not establish an SSH connection" do
134
131
  FlyingSphinx::Tunnel.should_not_receive(:connect)
135
132
 
136
- api.should_receive(:put).with('/', conf_params).and_return('ok')
137
133
  api.should_receive(:post).
138
134
  with('indices', index_params).and_return(index_response)
139
135
  api.should_receive(:get).with('indices/42').
@@ -148,6 +144,11 @@ describe FlyingSphinx::IndexRequest do
148
144
  let(:index_request) { FlyingSphinx::IndexRequest.new ['foo_delta'] }
149
145
  let(:index_params) { { :indices => 'foo_delta' } }
150
146
 
147
+ before :each do
148
+ tunnel_class.stub :required? => true
149
+ tunnel_class.stub(:connect).and_yield
150
+ end
151
+
151
152
  it "makes a new request" do
152
153
  api.should_receive(:post).
153
154
  with('indices', index_params).and_return(index_response)
@@ -164,7 +165,8 @@ describe FlyingSphinx::IndexRequest do
164
165
  describe '#status_message' do
165
166
  let(:index_request) { FlyingSphinx::IndexRequest.new }
166
167
  let(:finished_response) {
167
- stub(:response, :body => stub(:body, :status => 'FINISHED'))
168
+ stub(:response, :body => stub(:body, :status => 'FINISHED',
169
+ :log => 'Sphinx log'))
168
170
  }
169
171
  let(:failure_response) {
170
172
  stub(:response, :body => stub(:body, :status => 'FAILED'))
@@ -185,7 +187,7 @@ describe FlyingSphinx::IndexRequest do
185
187
  it "returns with a positive message on success" do
186
188
  api.stub(:get => finished_response)
187
189
 
188
- index_request.status_message.should == 'Index Request has completed.'
190
+ index_request.status_message.should == "Index Request has completed:\nSphinx log"
189
191
  end
190
192
 
191
193
  it "returns with a failure message on failure" do