Commit efed11e8b48b39b62947f54634628283b59dc12b

Authored by Michael Durrant
1 parent bf93f2fa
Exists in master and in 1 other branch production

Update rspec to use expect consistently and to use eq over == and {} over lambda

Showing 62 changed files with 547 additions and 544 deletions   Show diff stats
spec/acceptance/sign_in_with_github_spec.rb
... ... @@ -12,7 +12,7 @@ feature 'Sign in with GitHub' do
12 12  
13 13 visit '/'
14 14 click_link 'Sign in with GitHub'
15   - page.should have_content I18n.t("devise.omniauth_callbacks.success", :kind => 'GitHub')
  15 + expect(page).to have_content I18n.t("devise.omniauth_callbacks.success", :kind => 'GitHub')
16 16 end
17 17  
18 18 scenario 'reject unrecognized user if authenticating via GitHub' do
... ... @@ -20,6 +20,6 @@ feature 'Sign in with GitHub' do
20 20  
21 21 visit '/'
22 22 click_link 'Sign in with GitHub'
23   - page.should have_content 'There are no authorized users with GitHub login'
  23 + expect(page).to have_content 'There are no authorized users with GitHub login'
24 24 end
25 25 end
... ...
spec/controllers/api/v1/notices_controller_spec.rb
... ... @@ -22,7 +22,7 @@ describe Api::V1::NoticesController do
22 22  
23 23 it "should return XML if XML is requested" do
24 24 get :index, :auth_token => @user.authentication_token, :format => "xml"
25   - Nokogiri::XML(response.body).errors.should be_empty
  25 + expect(Nokogiri::XML(response.body).errors).to be_empty
26 26 end
27 27  
28 28 it "should return JSON by default" do
... ... @@ -34,18 +34,18 @@ describe Api::V1::NoticesController do
34 34  
35 35 it "should return only the notices created during the date range" do
36 36 get :index, {:auth_token => @user.authentication_token, :start_date => "2012-08-01", :end_date => "2012-08-27"}
37   - response.should be_success
  37 + expect(response).to be_success
38 38 notices = JSON.load response.body
39   - notices.length.should == 3
  39 + expect(notices.length).to eq 3
40 40 end
41 41  
42 42 end
43 43  
44 44 it "should return all notices" do
45 45 get :index, {:auth_token => @user.authentication_token}
46   - response.should be_success
  46 + expect(response).to be_success
47 47 notices = JSON.load response.body
48   - notices.length.should == 4
  48 + expect(notices.length).to eq 4
49 49 end
50 50  
51 51 end
... ...
spec/controllers/api/v1/problems_controller_spec.rb
... ... @@ -24,7 +24,7 @@ describe Api::V1::ProblemsController do
24 24  
25 25 it "should return XML if XML is requested" do
26 26 get :index, :auth_token => @user.authentication_token, :format => "xml"
27   - Nokogiri::XML(response.body).errors.should be_empty
  27 + expect(Nokogiri::XML(response.body).errors).to be_empty
28 28 end
29 29  
30 30 it "should return JSON by default" do
... ... @@ -38,18 +38,18 @@ describe Api::V1::ProblemsController do
38 38  
39 39 it "should return only the problems open during the date range" do
40 40 get :index, {:auth_token => @user.authentication_token, :start_date => "2012-08-20", :end_date => "2012-08-27"}
41   - response.should be_success
  41 + expect(response).to be_success
42 42 problems = JSON.load response.body
43   - problems.length.should == 2
  43 + expect(problems.length).to eq 2
44 44 end
45 45  
46 46 end
47 47  
48 48 it "should return all problems" do
49 49 get :index, {:auth_token => @user.authentication_token}
50   - response.should be_success
  50 + expect(response).to be_success
51 51 problems = JSON.load response.body
52   - problems.length.should == 4
  52 + expect(problems.length).to eq 4
53 53 end
54 54  
55 55 end
... ...
spec/controllers/apps_controller_spec.rb
... ... @@ -37,7 +37,7 @@ describe AppsController do
37 37 sign_in admin
38 38 unwatched_app && watched_app1 && watched_app2
39 39 get :index
40   - controller.apps.entries.should == App.all.sort.entries
  40 + expect(controller.apps.entries).to eq App.all.sort.entries
41 41 end
42 42 end
43 43  
... ... @@ -46,8 +46,8 @@ describe AppsController do
46 46 sign_in(user)
47 47 watched_app1 && watched_app2 && unwatched_app
48 48 get :index
49   - controller.apps.should include(watched_app1, watched_app2)
50   - controller.apps.should_not include(unwatched_app)
  49 + expect(controller.apps).to include(watched_app1, watched_app2)
  50 + expect(controller.apps).to_not include(unwatched_app)
51 51 end
52 52 end
53 53 end
... ... @@ -60,17 +60,17 @@ describe AppsController do
60 60  
61 61 it 'finds the app' do
62 62 get :show, :id => app.id
63   - controller.app.should == app
  63 + expect(controller.app).to eq app
64 64 end
65 65  
66 66 it "should not raise errors for app with err without notices" do
67 67 err
68   - lambda { get :show, :id => app.id }.should_not raise_error
  68 + expect{ get :show, :id => app.id }.to_not raise_error
69 69 end
70 70  
71 71 it "should list atom feed successfully" do
72 72 get :show, :id => app.id, :format => "atom"
73   - response.should be_success
  73 + expect(response).to be_success
74 74 end
75 75  
76 76 context "pagination" do
... ... @@ -80,13 +80,13 @@ describe AppsController do
80 80  
81 81 it "should have default per_page value for user" do
82 82 get :show, :id => app.id
83   - controller.problems.to_a.size.should == User::PER_PAGE
  83 + expect(controller.problems.to_a.size).to eq User::PER_PAGE
84 84 end
85 85  
86 86 it "should be able to override default per_page value" do
87 87 admin.update_attribute :per_page, 10
88 88 get :show, :id => app.id
89   - controller.problems.to_a.size.should == 10
  89 + expect(controller.problems.to_a.size).to eq 10
90 90 end
91 91 end
92 92  
... ... @@ -98,14 +98,14 @@ describe AppsController do
98 98 context 'and no params' do
99 99 it 'shows only unresolved problems' do
100 100 get :show, :id => app.id
101   - controller.problems.size.should == 1
  101 + expect(controller.problems.size).to eq 1
102 102 end
103 103 end
104 104  
105 105 context 'and all_problems=true params' do
106 106 it 'shows all errors' do
107 107 get :show, :id => app.id, :all_errs => true
108   - controller.problems.size.should == 2
  108 + expect(controller.problems.size).to eq 2
109 109 end
110 110 end
111 111 end
... ... @@ -121,35 +121,35 @@ describe AppsController do
121 121 context 'no params' do
122 122 it 'shows errs for all environments' do
123 123 get :show, :id => app.id
124   - controller.problems.size.should == 20
  124 + expect(controller.problems.size).to eq 20
125 125 end
126 126 end
127 127  
128 128 context 'environment production' do
129 129 it 'shows errs for just production' do
130 130 get :show, :id => app.id, :environment => 'production'
131   - controller.problems.size.should == 5
  131 + expect(controller.problems.size).to eq 5
132 132 end
133 133 end
134 134  
135 135 context 'environment staging' do
136 136 it 'shows errs for just staging' do
137 137 get :show, :id => app.id, :environment => 'staging'
138   - controller.problems.size.should == 5
  138 + expect(controller.problems.size).to eq 5
139 139 end
140 140 end
141 141  
142 142 context 'environment development' do
143 143 it 'shows errs for just development' do
144 144 get :show, :id => app.id, :environment => 'development'
145   - controller.problems.size.should == 5
  145 + expect(controller.problems.size).to eq 5
146 146 end
147 147 end
148 148  
149 149 context 'environment test' do
150 150 it 'shows errs for just test' do
151 151 get :show, :id => app.id, :environment => 'test'
152   - controller.problems.size.should == 5
  152 + expect(controller.problems.size).to eq 5
153 153 end
154 154 end
155 155 end
... ... @@ -160,15 +160,15 @@ describe AppsController do
160 160 watcher
161 161 sign_in user
162 162 get :show, :id => app.id
163   - controller.app.should == app
  163 + expect(controller.app).to eq app
164 164 end
165 165  
166 166 it 'does not find the app if the user is not watching it' do
167 167 sign_in Fabricate(:user)
168 168 app = Fabricate(:app)
169   - lambda {
  169 + expect{
170 170 get :show, :id => app.id
171   - }.should raise_error(Mongoid::Errors::DocumentNotFound)
  171 + }.to raise_error(Mongoid::Errors::DocumentNotFound)
172 172 end
173 173 end
174 174 end
... ... @@ -181,19 +181,19 @@ describe AppsController do
181 181 describe "GET /apps/new" do
182 182 it 'instantiates a new app with a prebuilt watcher' do
183 183 get :new
184   - controller.app.should be_a(App)
185   - controller.app.should be_new_record
186   - controller.app.watchers.should_not be_empty
  184 + expect(controller.app).to be_a(App)
  185 + expect(controller.app).to be_new_record
  186 + expect(controller.app.watchers).to_not be_empty
187 187 end
188 188  
189 189 it "should copy attributes from an existing app" do
190 190 @app = Fabricate(:app, :name => "do not copy",
191 191 :github_repo => "test/example")
192 192 get :new, :copy_attributes_from => @app.id
193   - controller.app.should be_a(App)
194   - controller.app.should be_new_record
195   - controller.app.name.should be_blank
196   - controller.app.github_repo.should == "test/example"
  193 + expect(controller.app).to be_a(App)
  194 + expect(controller.app).to be_new_record
  195 + expect(controller.app.name).to be_blank
  196 + expect(controller.app.github_repo).to eq "test/example"
197 197 end
198 198 end
199 199  
... ... @@ -201,7 +201,7 @@ describe AppsController do
201 201 it 'finds the correct app' do
202 202 app = Fabricate(:app)
203 203 get :edit, :id => app.id
204   - controller.app.should == app
  204 + expect(controller.app).to eq app
205 205 end
206 206 end
207 207  
... ... @@ -213,17 +213,17 @@ describe AppsController do
213 213  
214 214 context "when the create is successful" do
215 215 before do
216   - @app.should_receive(:save).and_return(true)
  216 + expect(@app).to receive(:save).and_return(true)
217 217 end
218 218  
219 219 it "should redirect to the app page" do
220 220 post :create, :app => {}
221   - response.should redirect_to(app_path(@app))
  221 + expect(response).to redirect_to(app_path(@app))
222 222 end
223 223  
224 224 it "should display a message" do
225 225 post :create, :app => {}
226   - request.flash[:success].should match(/success/)
  226 + expect(request.flash[:success]).to match(/success/)
227 227 end
228 228 end
229 229 end
... ... @@ -236,12 +236,12 @@ describe AppsController do
236 236 context "when the update is successful" do
237 237 it "should redirect to the app page" do
238 238 put :update, :id => @app.id, :app => {}
239   - response.should redirect_to(app_path(@app))
  239 + expect(response).to redirect_to(app_path(@app))
240 240 end
241 241  
242 242 it "should display a message" do
243 243 put :update, :id => @app.id, :app => {}
244   - request.flash[:success].should match(/success/)
  244 + expect(request.flash[:success]).to match(/success/)
245 245 end
246 246 end
247 247  
... ... @@ -249,14 +249,14 @@ describe AppsController do
249 249 it "should redirect to app page" do
250 250 id = @app.id
251 251 put :update, :id => id, :app => {:name => "new name"}
252   - response.should redirect_to(app_path(id))
  252 + expect(response).to redirect_to(app_path(id))
253 253 end
254 254 end
255 255  
256 256 context "when the update is unsuccessful" do
257 257 it "should render the edit page" do
258 258 put :update, :id => @app.id, :app => { :name => '' }
259   - response.should render_template(:edit)
  259 + expect(response).to render_template(:edit)
260 260 end
261 261 end
262 262  
... ... @@ -268,19 +268,19 @@ describe AppsController do
268 268 it "should parse legal csv values" do
269 269 put :update, :id => @app.id, :app => { :email_at_notices => '1, 4, 7,8, 10' }
270 270 @app.reload
271   - @app.email_at_notices.should == [1, 4, 7, 8, 10]
  271 + expect(@app.email_at_notices).to eq [1, 4, 7, 8, 10]
272 272 end
273 273 context "failed parsing of CSV" do
274 274 it "should set the default value" do
275 275 @app = Fabricate(:app, :email_at_notices => [1, 2, 3, 4])
276 276 put :update, :id => @app.id, :app => { :email_at_notices => 'asdf, -1,0,foobar,gd00,0,abc' }
277 277 @app.reload
278   - @app.email_at_notices.should == Errbit::Config.email_at_notices
  278 + expect(@app.email_at_notices).to eq Errbit::Config.email_at_notices
279 279 end
280 280  
281 281 it "should display a message" do
282 282 put :update, :id => @app.id, :app => { :email_at_notices => 'qwertyuiop' }
283   - request.flash[:error].should match(/Couldn't parse/)
  283 + expect(request.flash[:error]).to match(/Couldn't parse/)
284 284 end
285 285 end
286 286 end
... ... @@ -295,7 +295,7 @@ describe AppsController do
295 295 end
296 296  
297 297 it "should not create issue tracker" do
298   - @app.issue_tracker_configured?.should == false
  298 + expect(@app.issue_tracker_configured?).to eq false
299 299 end
300 300 end
301 301  
... ... @@ -310,11 +310,13 @@ describe AppsController do
310 310 @app.reload
311 311  
312 312 tracker = @app.issue_tracker
313   - tracker.should be_a(tracker_klass)
  313 + expect(tracker).to be_a(tracker_klass)
314 314 tracker_klass::Fields.each do |field, field_info|
315 315 case field
316   - when :ticket_properties; tracker.send(field.to_sym).should == 'card_type = defect'
317   - else tracker.send(field.to_sym).should == 'test_value'
  316 + when :ticket_properties
  317 + expect(tracker.send(field.to_sym)).to eq 'card_type = defect'
  318 + else
  319 + expect(tracker.send(field.to_sym)).to eq 'test_value'
318 320 end
319 321 end
320 322 end
... ... @@ -326,7 +328,7 @@ describe AppsController do
326 328 put :update, :id => @app.id, :app => {:issue_tracker_attributes => params}
327 329  
328 330 @app.reload
329   - @app.issue_tracker_configured?.should == false
  331 + expect(@app.issue_tracker_configured?).to eq false
330 332 end
331 333 end
332 334 end
... ... @@ -340,22 +342,22 @@ describe AppsController do
340 342  
341 343 it "should find the app" do
342 344 delete :destroy, :id => @app.id
343   - controller.app.should == @app
  345 + expect(controller.app).to eq @app
344 346 end
345 347  
346 348 it "should destroy the app" do
347   - @app.should_receive(:destroy)
  349 + expect(@app).to receive(:destroy)
348 350 delete :destroy, :id => @app.id
349 351 end
350 352  
351 353 it "should display a message" do
352 354 delete :destroy, :id => @app.id
353   - request.flash[:success].should match(/success/)
  355 + expect(request.flash[:success]).to match(/success/)
354 356 end
355 357  
356 358 it "should redirect to the apps page" do
357 359 delete :destroy, :id => @app.id
358   - response.should redirect_to(apps_path)
  360 + expect(response).to redirect_to(apps_path)
359 361 end
360 362 end
361 363 end
... ...
spec/controllers/comments_controller_spec.rb
... ... @@ -22,11 +22,11 @@ describe CommentsController do
22 22 end
23 23  
24 24 it "should create the comment" do
25   - problem.comments.size.should == 1
  25 + expect(problem.comments.size).to eq 1
26 26 end
27 27  
28 28 it "should redirect to problem page" do
29   - response.should redirect_to( app_problem_path(problem.app, problem) )
  29 + expect(response).to redirect_to( app_problem_path(problem.app, problem) )
30 30 end
31 31 end
32 32 end
... ... @@ -48,11 +48,11 @@ describe CommentsController do
48 48 end
49 49  
50 50 it "should delete the comment" do
51   - problem.comments.detect{|c| c.id.to_s == comment.id }.should == nil
  51 + expect(problem.comments.detect{|c| c.id.to_s == comment.id }).to be nil
52 52 end
53 53  
54 54 it "should redirect to problem page" do
55   - response.should redirect_to( app_problem_path(problem.app, problem) )
  55 + expect(response).to redirect_to( app_problem_path(problem.app, problem) )
56 56 end
57 57 end
58 58 end
... ...
spec/controllers/deploys_controller_spec.rb
... ... @@ -16,13 +16,13 @@ describe DeploysController do
16 16 end
17 17  
18 18 it 'finds the app via the api key' do
19   - App.should_receive(:find_by_api_key!).with('APIKEY').and_return(@app)
  19 + expect(App).to receive(:find_by_api_key!).with('APIKEY').and_return(@app)
20 20 post :create, :deploy => @params, :api_key => 'APIKEY'
21 21 end
22 22  
23 23 it 'creates a deploy' do
24 24 App.stub(:find_by_api_key!).and_return(@app)
25   - @app.deploys.should_receive(:create!).
  25 + expect(@app.deploys).to receive(:create!).
26 26 with({
27 27 :username => 'john.doe',
28 28 :environment => 'production',
... ... @@ -37,8 +37,8 @@ describe DeploysController do
37 37 it 'sends an email notification when configured to do so' do
38 38 post :create, :deploy => @params, :api_key => 'APIKEY'
39 39 email = ActionMailer::Base.deliveries.last
40   - email.to.should include(@app.watchers.first.email)
41   - email.subject.should == "[#{@app.name}] Deployed to production by john.doe"
  40 + expect(email.to).to include(@app.watchers.first.email)
  41 + expect(email.subject).to eq "[#{@app.name}] Deployed to production by john.doe"
42 42 end
43 43  
44 44 end
... ... @@ -51,12 +51,12 @@ describe DeploysController do
51 51 end
52 52  
53 53 it "should render successfully" do
54   - response.should be_success
  54 + expect(response).to be_success
55 55 end
56 56  
57 57 it "should contain info about existing deploy" do
58   - response.body.should match(@deploy.short_revision)
59   - response.body.should match(@deploy.app.name)
  58 + expect(response.body).to match(@deploy.short_revision)
  59 + expect(response.body).to match(@deploy.app.name)
60 60 end
61 61 end
62 62  
... ...
spec/controllers/devise_sessions_controller_spec.rb
... ... @@ -13,13 +13,13 @@ describe Devise::SessionsController do
13 13  
14 14 it 'redirects to app index page if there are no apps for the user' do
15 15 post :create, { :user => { 'email' => user.email, 'password' => user.password } }
16   - response.should redirect_to(root_path)
  16 + expect(response).to redirect_to(root_path)
17 17 end
18 18  
19 19 it 'redirects to app page if there is app for the user' do
20 20 Fabricate(:user_watcher, :app => app, :user => user)
21 21 post :create, { :user => { 'email' => user.email, 'password' => user.password } }
22   - response.should redirect_to(app_path(app))
  22 + expect(response).to redirect_to(app_path(app))
23 23 end
24 24 end
25 25 end
... ...
spec/controllers/notices_controller_spec.rb
... ... @@ -11,39 +11,39 @@ describe NoticesController do
11 11 context 'notices API' do
12 12 context "with all params" do
13 13 before do
14   - ErrorReport.should_receive(:new).with(xml).and_return(error_report)
  14 + expect(ErrorReport).to receive(:new).with(xml).and_return(error_report)
15 15 end
16 16  
17 17 context "with xml pass in raw_port" do
18 18 before do
19   - request.should_receive(:raw_post).and_return(xml)
  19 + expect(request).to receive(:raw_post).and_return(xml)
20 20 post :create, :format => :xml
21 21 end
22 22  
23 23 it "generates a notice from raw xml [POST]" do
24   - response.should be_success
  24 + expect(response).to be_success
25 25 # Same RegExp from Airbrake::Sender#send_to_airbrake (https://github.com/airbrake/airbrake/blob/master/lib/airbrake/sender.rb#L53)
26 26 # Inspired by https://github.com/airbrake/airbrake/blob/master/test/sender_test.rb
27   - response.body.should match(%r{<id[^>]*>#{notice.id}</id>})
28   - response.body.should match(%r{<url[^>]*>(.+)#{locate_path(notice.id)}</url>})
  27 + expect(response.body).to match(%r{<id[^>]*>#{notice.id}</id>})
  28 + expect(response.body).to match(%r{<url[^>]*>(.+)#{locate_path(notice.id)}</url>})
29 29 end
30 30  
31 31 end
32 32  
33 33 it "generates a notice from xml in a data param [POST]" do
34 34 post :create, :data => xml, :format => :xml
35   - response.should be_success
  35 + expect(response).to be_success
36 36 # Same RegExp from Airbrake::Sender#send_to_airbrake (https://github.com/airbrake/airbrake/blob/master/lib/airbrake/sender.rb#L53)
37 37 # Inspired by https://github.com/airbrake/airbrake/blob/master/test/sender_test.rb
38   - response.body.should match(%r{<id[^>]*>#{notice.id}</id>})
39   - response.body.should match(%r{<url[^>]*>(.+)#{locate_path(notice.id)}</url>})
  38 + expect(response.body).to match(%r{<id[^>]*>#{notice.id}</id>})
  39 + expect(response.body).to match(%r{<url[^>]*>(.+)#{locate_path(notice.id)}</url>})
40 40 end
41 41  
42 42 it "generates a notice from xml [GET]" do
43 43 get :create, :data => xml, :format => :xml
44   - response.should be_success
45   - response.body.should match(%r{<id[^>]*>#{notice.id}</id>})
46   - response.body.should match(%r{<url[^>]*>(.+)#{locate_path(notice.id)}</url>})
  44 + expect(response).to be_success
  45 + expect(response.body).to match(%r{<id[^>]*>#{notice.id}</id>})
  46 + expect(response.body).to match(%r{<url[^>]*>(.+)#{locate_path(notice.id)}</url>})
47 47 end
48 48 context "with an invalid API_KEY" do
49 49 let(:error_report) { double(:valid? => false) }
... ... @@ -74,7 +74,7 @@ describe NoticesController do
74 74 problem = Fabricate(:problem, :app => app, :environment => "production")
75 75 notice = Fabricate(:notice, :err => Fabricate(:err, :problem => problem))
76 76 get :locate, :id => notice.id
77   - response.should redirect_to(app_problem_path(problem.app, problem))
  77 + expect(response).to redirect_to(app_problem_path(problem.app, problem))
78 78 end
79 79 end
80 80 end
... ...
spec/controllers/problems_controller_spec.rb
... ... @@ -27,13 +27,13 @@ describe ProblemsController do
27 27  
28 28 it "should have default per_page value for user" do
29 29 get :index
30   - controller.problems.to_a.size.should == User::PER_PAGE
  30 + expect(controller.problems.to_a.size).to eq User::PER_PAGE
31 31 end
32 32  
33 33 it "should be able to override default per_page value" do
34 34 @user.update_attribute :per_page, 10
35 35 get :index
36   - controller.problems.to_a.size.should == 10
  36 + expect(controller.problems.to_a.size).to eq 10
37 37 end
38 38 end
39 39  
... ... @@ -48,35 +48,35 @@ describe ProblemsController do
48 48 context 'no params' do
49 49 it 'shows problems for all environments' do
50 50 get :index
51   - controller.problems.size.should == 21
  51 + expect(controller.problems.size).to eq 21
52 52 end
53 53 end
54 54  
55 55 context 'environment production' do
56 56 it 'shows problems for just production' do
57 57 get :index, :environment => 'production'
58   - controller.problems.size.should == 6
  58 + expect(controller.problems.size).to eq 6
59 59 end
60 60 end
61 61  
62 62 context 'environment staging' do
63 63 it 'shows problems for just staging' do
64 64 get :index, :environment => 'staging'
65   - controller.problems.size.should == 5
  65 + expect(controller.problems.size).to eq 5
66 66 end
67 67 end
68 68  
69 69 context 'environment development' do
70 70 it 'shows problems for just development' do
71 71 get :index, :environment => 'development'
72   - controller.problems.size.should == 5
  72 + expect(controller.problems.size).to eq 5
73 73 end
74 74 end
75 75  
76 76 context 'environment test' do
77 77 it 'shows problems for just test' do
78 78 get :index, :environment => 'test'
79   - controller.problems.size.should == 5
  79 + expect(controller.problems.size).to eq 5
80 80 end
81 81 end
82 82 end
... ... @@ -89,8 +89,8 @@ describe ProblemsController do
89 89 watched_unresolved_err = Fabricate(:err, :problem => Fabricate(:problem, :app => Fabricate(:user_watcher, :user => user).app, :resolved => false))
90 90 watched_resolved_err = Fabricate(:err, :problem => Fabricate(:problem, :app => Fabricate(:user_watcher, :user => user).app, :resolved => true))
91 91 get :index
92   - controller.problems.should include(watched_unresolved_err.problem)
93   - controller.problems.should_not include(unwatched_err.problem, watched_resolved_err.problem)
  92 + expect(controller.problems).to include(watched_unresolved_err.problem)
  93 + expect(controller.problems).to_not include(unwatched_err.problem, watched_resolved_err.problem)
94 94 end
95 95 end
96 96 end
... ... @@ -102,11 +102,11 @@ describe ProblemsController do
102 102 problems = Kaminari.paginate_array((1..30).to_a)
103 103 3.times { problems << Fabricate(:err).problem }
104 104 3.times { problems << Fabricate(:err, :problem => Fabricate(:problem, :resolved => true)).problem }
105   - Problem.should_receive(:ordered_by).and_return(
  105 + expect(Problem).to receive(:ordered_by).and_return(
106 106 double('proxy', :page => double('other_proxy', :per => problems))
107 107 )
108 108 get :index, :all_errs => true
109   - controller.problems.should == problems
  109 + expect(controller.problems).to eq problems
110 110 end
111 111 end
112 112  
... ... @@ -117,8 +117,8 @@ describe ProblemsController do
117 117 watched_unresolved_problem = Fabricate(:problem, :app => Fabricate(:user_watcher, :user => user).app, :resolved => false)
118 118 watched_resolved_problem = Fabricate(:problem, :app => Fabricate(:user_watcher, :user => user).app, :resolved => true)
119 119 get :index, :all_errs => true
120   - controller.problems.should include(watched_resolved_problem, watched_unresolved_problem)
121   - controller.problems.should_not include(unwatched_problem)
  120 + expect(controller.problems).to include(watched_resolved_problem, watched_unresolved_problem)
  121 + expect(controller.problems).to_not include(unwatched_problem)
122 122 end
123 123 end
124 124 end
... ... @@ -133,17 +133,17 @@ describe ProblemsController do
133 133  
134 134 it "finds the app" do
135 135 get :show, :app_id => app.id, :id => err.problem.id
136   - controller.app.should == app
  136 + expect(controller.app).to eq app
137 137 end
138 138  
139 139 it "finds the problem" do
140 140 get :show, :app_id => app.id, :id => err.problem.id
141   - controller.problem.should == err.problem
  141 + expect(controller.problem).to eq err.problem
142 142 end
143 143  
144 144 it "successfully render page" do
145 145 get :show, :app_id => app.id, :id => err.problem.id
146   - response.should be_success
  146 + expect(response).to be_success
147 147 end
148 148  
149 149 context 'pagination' do
... ... @@ -155,14 +155,14 @@ describe ProblemsController do
155 155  
156 156 it "paginates the notices 1 at a time, starting with the most recent" do
157 157 get :show, :app_id => app.id, :id => err.problem.id
158   - assigns(:notices).entries.count.should == 1
159   - assigns(:notices).should include(notices.last)
  158 + expect(assigns(:notices).entries.count).to eq 1
  159 + expect(assigns(:notices)).to include(notices.last)
160 160 end
161 161  
162 162 it "paginates the notices 1 at a time, based on then notice param" do
163 163 get :show, :app_id => app.id, :id => err.problem.id, :notice => 3
164   - assigns(:notices).entries.count.should == 1
165   - assigns(:notices).should include(notices.first)
  164 + expect(assigns(:notices).entries.count).to eq 1
  165 + expect(assigns(:notices)).to include(notices.first)
166 166 end
167 167 end
168 168  
... ... @@ -179,13 +179,13 @@ describe ProblemsController do
179 179  
180 180 it 'finds the problem if the user is watching the app' do
181 181 get :show, :app_id => @watched_app.to_param, :id => @watched_err.problem.id
182   - controller.problem.should == @watched_err.problem
  182 + expect(controller.problem).to eq @watched_err.problem
183 183 end
184 184  
185 185 it 'raises a DocumentNotFound error if the user is not watching the app' do
186   - lambda {
  186 + expect {
187 187 get :show, :app_id => @unwatched_err.problem.app_id, :id => @unwatched_err.problem.id
188   - }.should raise_error(Mongoid::Errors::DocumentNotFound)
  188 + }.to raise_error(Mongoid::Errors::DocumentNotFound)
189 189 end
190 190 end
191 191 end
... ... @@ -201,32 +201,32 @@ describe ProblemsController do
201 201 end
202 202  
203 203 it 'finds the app and the problem' do
204   - App.should_receive(:find).with(@problem.app.id.to_s).and_return(@problem.app)
205   - @problem.app.problems.should_receive(:find).and_return(@problem.problem)
  204 + expect(App).to receive(:find).with(@problem.app.id.to_s).and_return(@problem.app)
  205 + expect(@problem.app.problems).to receive(:find).and_return(@problem.problem)
206 206 put :resolve, :app_id => @problem.app.id, :id => @problem.problem.id
207   - controller.app.should == @problem.app
208   - controller.problem.should == @problem.problem
  207 + expect(controller.app).to eq @problem.app
  208 + expect(controller.problem).to eq @problem.problem
209 209 end
210 210  
211 211 it "should resolve the issue" do
212   - @problem.problem.should_receive(:resolve!).and_return(true)
  212 + expect(@problem.problem).to receive(:resolve!).and_return(true)
213 213 put :resolve, :app_id => @problem.app.id, :id => @problem.problem.id
214 214 end
215 215  
216 216 it "should display a message" do
217 217 put :resolve, :app_id => @problem.app.id, :id => @problem.problem.id
218   - request.flash[:success].should match(/Great news/)
  218 + expect(request.flash[:success]).to match(/Great news/)
219 219 end
220 220  
221 221 it "should redirect to the app page" do
222 222 put :resolve, :app_id => @problem.app.id, :id => @problem.problem.id
223   - response.should redirect_to(app_path(@problem.app))
  223 + expect(response).to redirect_to(app_path(@problem.app))
224 224 end
225 225  
226 226 it "should redirect back to problems page" do
227 227 request.env["Referer"] = problems_path
228 228 put :resolve, :app_id => @problem.app.id, :id => @problem.problem.id
229   - response.should redirect_to(problems_path)
  229 + expect(response).to redirect_to(problems_path)
230 230 end
231 231 end
232 232  
... ... @@ -255,7 +255,7 @@ describe ProblemsController do
255 255 end
256 256  
257 257 it "should redirect to problem page" do
258   - response.should redirect_to( app_problem_path(problem.app, problem) )
  258 + expect(response).to redirect_to( app_problem_path(problem.app, problem) )
259 259 end
260 260 end
261 261 end
... ... @@ -268,11 +268,11 @@ describe ProblemsController do
268 268 end
269 269  
270 270 it "should redirect to problem page" do
271   - response.should redirect_to( app_problem_path(problem.app, problem) )
  271 + expect(response).to redirect_to( app_problem_path(problem.app, problem) )
272 272 end
273 273  
274 274 it "should set flash error message telling issue tracker of the app doesn't exist" do
275   - flash[:error].should == "This app has no issue tracker setup."
  275 + expect(flash[:error]).to eq "This app has no issue tracker setup."
276 276 end
277 277 end
278 278  
... ... @@ -288,11 +288,11 @@ describe ProblemsController do
288 288 end
289 289  
290 290 it "should redirect to problem page" do
291   - response.should redirect_to( app_problem_path(err.app, err.problem) )
  291 + expect(response).to redirect_to( app_problem_path(err.app, err.problem) )
292 292 end
293 293  
294 294 it "should notify of connection error" do
295   - flash[:error].should include("There was an error during issue creation:")
  295 + expect(flash[:error]).to include("There was an error during issue creation:")
296 296 end
297 297 end
298 298 end
... ... @@ -312,11 +312,11 @@ describe ProblemsController do
312 312 end
313 313  
314 314 it "should redirect to problem page" do
315   - response.should redirect_to( app_problem_path(err.app, err.problem) )
  315 + expect(response).to redirect_to( app_problem_path(err.app, err.problem) )
316 316 end
317 317  
318 318 it "should clear issue link" do
319   - err.problem.issue_link.should be_nil
  319 + expect(err.problem.issue_link).to be_nil
320 320 end
321 321 end
322 322  
... ... @@ -329,7 +329,7 @@ describe ProblemsController do
329 329 end
330 330  
331 331 it "should redirect to problem page" do
332   - response.should redirect_to( app_problem_path(err.app, err.problem) )
  332 + expect(response).to redirect_to( app_problem_path(err.app, err.problem) )
333 333 end
334 334 end
335 335 end
... ... @@ -344,11 +344,11 @@ describe ProblemsController do
344 344 context "POST /problems/merge_several" do
345 345 it "should require at least two problems" do
346 346 post :merge_several, :problems => [@problem1.id.to_s]
347   - request.flash[:notice].should eql I18n.t('controllers.problems.flash.need_two_errors_merge')
  347 + expect(request.flash[:notice]).to eql I18n.t('controllers.problems.flash.need_two_errors_merge')
348 348 end
349 349  
350 350 it "should merge the problems" do
351   - ProblemMerge.should_receive(:new).and_return(double(:merge => true))
  351 + expect(ProblemMerge).to receive(:new).and_return(double(:merge => true))
352 352 post :merge_several, :problems => [@problem1.id.to_s, @problem2.id.to_s]
353 353 end
354 354 end
... ... @@ -357,16 +357,16 @@ describe ProblemsController do
357 357  
358 358 it "should require at least one problem" do
359 359 post :unmerge_several, :problems => []
360   - request.flash[:notice].should eql I18n.t('controllers.problems.flash.no_select_problem')
  360 + expect(request.flash[:notice]).to eql I18n.t('controllers.problems.flash.no_select_problem')
361 361 end
362 362  
363 363 it "should unmerge a merged problem" do
364 364 merged_problem = Problem.merge!(@problem1, @problem2)
365   - merged_problem.errs.length.should == 2
366   - lambda {
  365 + expect(merged_problem.errs.length).to eq 2
  366 + expect{
367 367 post :unmerge_several, :problems => [merged_problem.id.to_s]
368   - merged_problem.reload.errs.length.should == 1
369   - }.should change(Problem, :count).by(1)
  368 + expect(merged_problem.reload.errs.length).to eq 1
  369 + }.to change(Problem, :count).by(1)
370 370 end
371 371  
372 372 end
... ... @@ -375,23 +375,23 @@ describe ProblemsController do
375 375  
376 376 it "should require at least one problem" do
377 377 post :resolve_several, :problems => []
378   - request.flash[:notice].should eql I18n.t('controllers.problems.flash.no_select_problem')
  378 + expect(request.flash[:notice]).to eql I18n.t('controllers.problems.flash.no_select_problem')
379 379 end
380 380  
381 381 it "should resolve the issue" do
382 382 post :resolve_several, :problems => [@problem2.id.to_s]
383   - @problem2.reload.resolved?.should == true
  383 + expect(@problem2.reload.resolved?).to eq true
384 384 end
385 385  
386 386 it "should display a message about 1 err" do
387 387 post :resolve_several, :problems => [@problem2.id.to_s]
388   - flash[:success].should match(/1 err has been resolved/)
  388 + expect(flash[:success]).to match(/1 err has been resolved/)
389 389 end
390 390  
391 391 it "should display a message about 2 errs" do
392 392 post :resolve_several, :problems => [@problem1.id.to_s, @problem2.id.to_s]
393   - flash[:success].should match(/2 errs have been resolved/)
394   - controller.selected_problems.should == [@problem1, @problem2]
  393 + expect(flash[:success]).to match(/2 errs have been resolved/)
  394 + expect(controller.selected_problems).to eq [@problem1, @problem2]
395 395 end
396 396 end
397 397  
... ... @@ -399,20 +399,20 @@ describe ProblemsController do
399 399  
400 400 it "should require at least one problem" do
401 401 post :unresolve_several, :problems => []
402   - request.flash[:notice].should eql I18n.t('controllers.problems.flash.no_select_problem')
  402 + expect(request.flash[:notice]).to eql I18n.t('controllers.problems.flash.no_select_problem')
403 403 end
404 404  
405 405 it "should unresolve the issue" do
406 406 post :unresolve_several, :problems => [@problem1.id.to_s]
407   - @problem1.reload.resolved?.should == false
  407 + expect(@problem1.reload.resolved?).to eq false
408 408 end
409 409 end
410 410  
411 411 context "POST /problems/destroy_several" do
412 412 it "should delete the problems" do
413   - lambda {
  413 + expect{
414 414 post :destroy_several, :problems => [@problem1.id.to_s]
415   - }.should change(Problem, :count).by(-1)
  415 + }.to change(Problem, :count).by(-1)
416 416 end
417 417 end
418 418 end
... ...
spec/controllers/users/omniauth_callbacks_controller_spec.rb
... ... @@ -25,16 +25,16 @@ describe Users::OmniauthCallbacksController do
25 25 stub_env_for_github_omniauth("existing_user")
26 26 get :github
27 27  
28   - request.flash[:error].should include('already registered')
29   - response.should redirect_to(user_path(@user))
  28 + expect(request.flash[:error]).to include('already registered')
  29 + expect(response).to redirect_to(user_path(@user))
30 30 end
31 31  
32 32 it "should link an authorized GitHub account" do
33 33 stub_env_for_github_omniauth("new_user")
34 34 get :github
35 35  
36   - request.flash[:success].should include('Successfully linked')
37   - response.should redirect_to(user_path(@user))
  36 + expect(request.flash[:success]).to include('Successfully linked')
  37 + expect(response).to redirect_to(user_path(@user))
38 38 end
39 39 end
40 40  
... ...
spec/controllers/users_controller_spec.rb
... ... @@ -22,20 +22,20 @@ describe UsersController do
22 22 end
23 23  
24 24 it "should set a time zone" do
25   - Time.zone.should.to_s == user.time_zone
  25 + expect(Time.zone.to_s).to match(user.time_zone)
26 26 end
27 27  
28 28 context "GET /users/:other_id/edit" do
29 29 it "redirects to the home page" do
30 30 get :edit, :id => other_user.id
31   - response.should redirect_to(root_path)
  31 + expect(response).to redirect_to(root_path)
32 32 end
33 33 end
34 34  
35 35 context "GET /users/:my_id/edit" do
36 36 it 'finds the user' do
37 37 get :edit, :id => user.id
38   - controller.user.should == user
  38 + expect(controller.user).to eq user
39 39 expect(response).to render_template 'edit'
40 40 end
41 41  
... ... @@ -44,7 +44,7 @@ describe UsersController do
44 44 context "PUT /users/:other_id" do
45 45 it "redirects to the home page" do
46 46 put :update, :id => other_user.id
47   - response.should redirect_to(root_path)
  47 + expect(response).to redirect_to(root_path)
48 48 end
49 49 end
50 50  
... ... @@ -52,12 +52,12 @@ describe UsersController do
52 52 context "when the update is successful" do
53 53 it "sets a message to display" do
54 54 put :update, :id => user.to_param, :user => {:name => 'Kermit'}
55   - request.flash[:success].should include('updated')
  55 + expect(request.flash[:success]).to include('updated')
56 56 end
57 57  
58 58 it "redirects to the user's page" do
59 59 put :update, :id => user.to_param, :user => {:name => 'Kermit'}
60   - response.should redirect_to(user_path(user))
  60 + expect(response).to redirect_to(user_path(user))
61 61 end
62 62  
63 63 it "should not be able to become an admin" do
... ... @@ -70,29 +70,29 @@ describe UsersController do
70 70  
71 71 it "should be able to set per_page option" do
72 72 put :update, :id => user.to_param, :user => {:per_page => 555}
73   - user.reload.per_page.should == 555
  73 + expect(user.reload.per_page).to eq 555
74 74 end
75 75  
76 76 it "should be able to set time_zone option" do
77 77 put :update, :id => user.to_param, :user => {:time_zone => "Warsaw"}
78   - user.reload.time_zone.should == "Warsaw"
  78 + expect(user.reload.time_zone).to eq "Warsaw"
79 79 end
80 80  
81 81 it "should be able to not set github_login option" do
82 82 put :update, :id => user.to_param, :user => {:github_login => " "}
83   - user.reload.github_login.should == nil
  83 + expect(user.reload.github_login).to eq nil
84 84 end
85 85  
86 86 it "should be able to set github_login option" do
87 87 put :update, :id => user.to_param, :user => {:github_login => "awesome_name"}
88   - user.reload.github_login.should == "awesome_name"
  88 + expect(user.reload.github_login).to eq "awesome_name"
89 89 end
90 90 end
91 91  
92 92 context "when the update is unsuccessful" do
93 93 it "renders the edit page" do
94 94 put :update, :id => user.to_param, :user => {:name => nil}
95   - response.should render_template(:edit)
  95 + expect(response).to render_template(:edit)
96 96 end
97 97 end
98 98 end
... ... @@ -111,7 +111,7 @@ describe UsersController do
111 111 Fabricate(:user)
112 112 }
113 113 get :index
114   - controller.users.to_a.size.should == 2
  114 + expect(controller.users.to_a.size).to eq 2
115 115 end
116 116  
117 117 end
... ... @@ -119,22 +119,22 @@ describe UsersController do
119 119 context "GET /users/:id" do
120 120 it 'finds the user' do
121 121 get :show, :id => user.id
122   - controller.user.should == user
  122 + expect(controller.user).to eq user
123 123 end
124 124 end
125 125  
126 126 context "GET /users/new" do
127 127 it 'assigns a new user' do
128 128 get :new
129   - controller.user.should be_a(User)
130   - controller.user.should be_new_record
  129 + expect(controller.user).to be_a(User)
  130 + expect(controller.user).to be_new_record
131 131 end
132 132 end
133 133  
134 134 context "GET /users/:id/edit" do
135 135 it 'finds the user' do
136 136 get :edit, :id => user.id
137   - controller.user.should == user
  137 + expect(controller.user).to eq user
138 138 end
139 139 end
140 140  
... ... @@ -144,24 +144,24 @@ describe UsersController do
144 144  
145 145 it "sets a message to display" do
146 146 post :create, attrs
147   - request.flash[:success].should include('part of the team')
  147 + expect(request.flash[:success]).to include('part of the team')
148 148 end
149 149  
150 150 it "redirects to the user's page" do
151 151 post :create, attrs
152   - response.should redirect_to(user_path(controller.user))
  152 + expect(response).to redirect_to(user_path(controller.user))
153 153 end
154 154  
155 155 it "should be able to create admin" do
156 156 attrs[:user][:admin] = true
157 157 post :create, attrs
158   - response.should be_redirect
159   - User.find(controller.user.to_param).admin.should be_true
  158 + expect(response).to be_redirect
  159 + expect(User.find(controller.user.to_param).admin).to be_true
160 160 end
161 161  
162 162 it "should has auth token" do
163 163 post :create, attrs
164   - User.last.authentication_token.should_not be_blank
  164 + expect(User.last.authentication_token).to_not be_blank
165 165 end
166 166 end
167 167  
... ... @@ -170,13 +170,13 @@ describe UsersController do
170 170 Struct.new(:admin, :attributes).new(true, {})
171 171 }
172 172 before do
173   - User.should_receive(:new).and_return(user)
174   - user.should_receive(:save).and_return(false)
  173 + expect(User).to receive(:new).and_return(user)
  174 + expect(user).to receive(:save).and_return(false)
175 175 end
176 176  
177 177 it "renders the new page" do
178 178 post :create, :user => { :username => 'foo' }
179   - response.should render_template(:new)
  179 + expect(response).to render_template(:new)
180 180 end
181 181 end
182 182 end
... ... @@ -199,7 +199,7 @@ describe UsersController do
199 199  
200 200 it "renders the edit page" do
201 201 put :update, :id => user.to_param, :user => {:name => nil}
202   - response.should render_template(:edit)
  202 + expect(response).to render_template(:edit)
203 203 end
204 204 end
205 205 end
... ... @@ -210,24 +210,24 @@ describe UsersController do
210 210 let(:user_destroy) { double(:destroy => true) }
211 211  
212 212 before {
213   - UserDestroy.should_receive(:new).with(user).and_return(user_destroy)
  213 + expect(UserDestroy).to receive(:new).with(user).and_return(user_destroy)
214 214 delete :destroy, :id => user.id
215 215 }
216 216  
217 217 it 'should destroy user' do
218 218 expect(request.flash[:success]).to eq I18n.t('controllers.users.flash.destroy.success', :name => user.name)
219   - response.should redirect_to(users_path)
  219 + expect(response).to redirect_to(users_path)
220 220 end
221 221 end
222 222  
223 223 context "with trying destroy himself" do
224 224 before {
225   - UserDestroy.should_not_receive(:new)
  225 + expect(UserDestroy).to_not receive(:new)
226 226 delete :destroy, :id => admin.id
227 227 }
228 228  
229 229 it 'should not destroy user' do
230   - response.should redirect_to(users_path)
  230 + expect(response).to redirect_to(users_path)
231 231 expect(request.flash[:error]).to eq I18n.t('controllers.users.flash.destroy.error')
232 232 end
233 233 end
... ...
spec/controllers/watchers_controller_spec.rb
... ... @@ -24,11 +24,11 @@ describe WatchersController do
24 24 end
25 25  
26 26 it "should delete the watcher" do
27   - app.watchers.detect{|w| w.id.to_s == watcher.id }.should == nil
  27 + expect(app.watchers.detect{|w| w.id.to_s == watcher.id }).to be nil
28 28 end
29 29  
30 30 it "should redirect to index page" do
31   - response.should redirect_to(root_path)
  31 + expect(response).to redirect_to(root_path)
32 32 end
33 33 end
34 34 end
... ...
spec/helpers/navigation_helper_spec.rb
... ... @@ -3,13 +3,13 @@ require &#39;spec_helper&#39;
3 3 describe NavigationHelper do
4 4 describe '#page_count_from_end' do
5 5 it 'returns the page number when counting from the last occurrence of a notice' do
6   - page_count_from_end(1, 6).should == 6
7   - page_count_from_end(6, 6).should == 1
8   - page_count_from_end(2, 6).should == 5
  6 + expect(page_count_from_end(1, 6)).to eq 6
  7 + expect(page_count_from_end(6, 6)).to eq 1
  8 + expect(page_count_from_end(2, 6)).to eq 5
9 9 end
10 10  
11 11 it 'properly handles strings for input' do
12   - page_count_from_end('2', '6').should == 5
  12 + expect(page_count_from_end('2', '6')).to eq 5
13 13 end
14 14 end
15 15 end
... ...
spec/helpers/problems_helper_spec.rb
... ... @@ -5,8 +5,8 @@ describe ProblemsHelper do
5 5 it 'is html safe' do
6 6 problem = double('problem', :message => '#<NoMethodError: ...>')
7 7 truncated = helper.truncated_problem_message(problem)
8   - truncated.should be_html_safe
9   - truncated.should_not include('<', '>')
  8 + expect(truncated).to be_html_safe
  9 + expect(truncated).to_not include('<', '>')
10 10 end
11 11 end
12 12  
... ... @@ -23,18 +23,18 @@ describe ProblemsHelper do
23 23  
24 24 it "should render image_tag with correct alt and src" do
25 25 expected = "<img alt=\"#{email}\" class=\"gravatar\" src=\"#{base_url}?d=identicon&amp;s=48\" />"
26   - helper.gravatar_tag(email, :s => 48).should eq(expected)
  26 + expect(helper.gravatar_tag(email, :s => 48)).to eq(expected)
27 27 end
28 28  
29 29 it "should override :d" do
30 30 expected = "<img alt=\"#{email}\" class=\"gravatar\" src=\"#{base_url}?d=retro&amp;s=48\" />"
31   - helper.gravatar_tag(email, :d => 'retro', :s => 48).should eq(expected)
  31 + expect(helper.gravatar_tag(email, :d => 'retro', :s => 48)).to eq(expected)
32 32 end
33 33 end
34 34  
35 35 context "no email" do
36 36 it "should not render the tag" do
37   - helper.gravatar_tag(nil).should be_nil
  37 + expect(helper.gravatar_tag(nil)).to be_nil
38 38 end
39 39 end
40 40 end
... ... @@ -44,7 +44,7 @@ describe ProblemsHelper do
44 44 let(:email) { nil }
45 45  
46 46 it "should return nil" do
47   - helper.gravatar_url(email).should be_nil
  47 + expect(helper.gravatar_url(email)).to be_nil
48 48 end
49 49 end
50 50  
... ... @@ -53,7 +53,7 @@ describe ProblemsHelper do
53 53 let(:email_hash) { Digest::MD5.hexdigest email }
54 54  
55 55 it "should return the http url" do
56   - helper.gravatar_url(email).should eq("http://www.gravatar.com/avatar/#{email_hash}?d=identicon")
  56 + expect(helper.gravatar_url(email)).to eq("http://www.gravatar.com/avatar/#{email_hash}?d=identicon")
57 57 end
58 58 end
59 59  
... ... @@ -63,7 +63,7 @@ describe ProblemsHelper do
63 63  
64 64 it "should return the http url" do
65 65 ActionController::TestRequest.any_instance.stub :ssl? => true
66   - helper.gravatar_url(email).should eq("https://secure.gravatar.com/avatar/#{email_hash}?d=identicon")
  66 + expect(helper.gravatar_url(email)).to eq("https://secure.gravatar.com/avatar/#{email_hash}?d=identicon")
67 67 end
68 68 end
69 69 end
... ...
spec/interactors/issue_creation_spec.rb
... ... @@ -16,7 +16,7 @@ describe IssueCreation do
16 16  
17 17 it 'creates an issue if issue tracker is configured' do
18 18 tracker = Fabricate(:lighthouse_tracker, :app => notice.app)
19   - tracker.should_receive(:create_issue)
  19 + expect(tracker).to receive(:create_issue)
20 20 issue_creation.execute
21 21 expect(errors).to be_empty
22 22 end
... ...
spec/interactors/problem_destroy_spec.rb
... ... @@ -21,28 +21,28 @@ describe ProblemDestroy do
21 21  
22 22 describe "#initialize" do
23 23 it 'take a problem like args' do
24   - problem_destroy.problem.should == problem
  24 + expect(problem_destroy.problem).to eq problem
25 25 end
26 26 end
27 27  
28 28 describe "#execute" do
29 29 it 'destroy the problem himself' do
30   - problem.should_receive(:delete).and_return(true)
  30 + expect(problem).to receive(:delete).and_return(true)
31 31 problem_destroy.execute
32 32 end
33 33  
34 34 it 'delete all errs associate' do
35   - Err.should_receive(:delete_all).with(:_id => { '$in' => [err_1.id, err_2.id] })
  35 + expect(Err).to receive(:delete_all).with(:_id => { '$in' => [err_1.id, err_2.id] })
36 36 problem_destroy.execute
37 37 end
38 38  
39 39 it 'delete all comments associate' do
40   - Comment.should_receive(:delete_all).with(:_id => { '$in' => [comment_1.id, comment_2.id] })
  40 + expect(Comment).to receive(:delete_all).with(:_id => { '$in' => [comment_1.id, comment_2.id] })
41 41 problem_destroy.execute
42 42 end
43 43  
44 44 it 'delete all notice of associate to this errs' do
45   - Notice.should_receive(:delete_all).with({:err_id => { '$in' => [err_1.id, err_2.id] }})
  45 + expect(Notice).to receive(:delete_all).with({:err_id => { '$in' => [err_1.id, err_2.id] }})
46 46 problem_destroy.execute
47 47 end
48 48 end
... ... @@ -62,15 +62,15 @@ describe ProblemDestroy do
62 62  
63 63 it 'should all destroy' do
64 64 problem_destroy.execute
65   - Problem.where(:_id => problem.id).entries.should be_empty
66   - Err.where(:_id => err_1.id).entries.should be_empty
67   - Err.where(:_id => err_2.id).entries.should be_empty
68   - Comment.where(:_id => comment_1.id).entries.should be_empty
69   - Comment.where(:_id => comment_2.id).entries.should be_empty
70   - Notice.where(:_id => notice_1_1.id).entries.should be_empty
71   - Notice.where(:_id => notice_1_2.id).entries.should be_empty
72   - Notice.where(:_id => notice_2_1.id).entries.should be_empty
73   - Notice.where(:_id => notice_2_2.id).entries.should be_empty
  65 + expect(Problem.where(:_id => problem.id).entries).to be_empty
  66 + expect(Err.where(:_id => err_1.id).entries).to be_empty
  67 + expect(Err.where(:_id => err_2.id).entries).to be_empty
  68 + expect(Comment.where(:_id => comment_1.id).entries).to be_empty
  69 + expect(Comment.where(:_id => comment_2.id).entries).to be_empty
  70 + expect(Notice.where(:_id => notice_1_1.id).entries).to be_empty
  71 + expect(Notice.where(:_id => notice_1_2.id).entries).to be_empty
  72 + expect(Notice.where(:_id => notice_2_1.id).entries).to be_empty
  73 + expect(Notice.where(:_id => notice_2_2.id).entries).to be_empty
74 74 end
75 75 end
76 76  
... ...
spec/interactors/problem_merge_spec.rb
... ... @@ -42,7 +42,7 @@ describe ProblemMerge do
42 42 end
43 43  
44 44 it 'update problem cache' do
45   - ProblemUpdaterCache.should_receive(:new).with(problem).and_return(double(:update => true))
  45 + expect(ProblemUpdaterCache).to receive(:new).with(problem).and_return(double(:update => true))
46 46 problem_merge.merge
47 47 end
48 48  
... ...
spec/interactors/resolved_problem_clearer_spec.rb
... ... @@ -22,7 +22,7 @@ describe ResolvedProblemClearer do
22 22 end
23 23 it 'not repair database' do
24 24 Mongoid.default_session.stub(:command).and_call_original
25   - Mongoid.default_session.should_not_receive(:command).with({:repairDatabase => 1})
  25 + expect(Mongoid.default_session).to_not receive(:command).with({:repairDatabase => 1})
26 26 resolved_problem_clearer.execute
27 27 end
28 28 end
... ... @@ -47,7 +47,7 @@ describe ResolvedProblemClearer do
47 47  
48 48 it 'repair database' do
49 49 Mongoid.default_session.stub(:command).and_call_original
50   - Mongoid.default_session.should_receive(:command).with({:repairDatabase => 1})
  50 + expect(Mongoid.default_session).to receive(:command).with({:repairDatabase => 1})
51 51 resolved_problem_clearer.execute
52 52 end
53 53 end
... ...
spec/mailers/mailer_spec.rb
... ... @@ -20,29 +20,29 @@ describe Mailer do
20 20 end
21 21  
22 22 it "should send the email" do
23   - ActionMailer::Base.deliveries.size.should == 1
  23 + expect(ActionMailer::Base.deliveries.size).to eq 1
24 24 end
25 25  
26 26 it "should html-escape the notice's message for the html part" do
27   - @email.should have_body_text("class &lt; ActionController::Base")
  27 + expect(@email).to have_body_text("class &lt; ActionController::Base")
28 28 end
29 29  
30 30 it "should have inline css" do
31   - @email.should have_body_text('<p class="backtrace" style="')
  31 + expect(@email).to have_body_text('<p class="backtrace" style="')
32 32 end
33 33  
34 34 it "should have links to source files" do
35   - @email.should have_body_text('<a href="http://example.com/path/to/file.js" target="_blank">path/to/file.js')
  35 + expect(@email).to have_body_text('<a href="http://example.com/path/to/file.js" target="_blank">path/to/file.js')
36 36 end
37 37  
38 38 it "should have the error count in the subject" do
39   - @email.subject.should =~ /^\(3\) /
  39 + expect(@email.subject).to match( /^\(3\) / )
40 40 end
41 41  
42 42 context 'with a very long message' do
43 43 let(:notice) { Fabricate(:notice, :message => 6.times.collect{|a| "0123456789" }.join('')) }
44 44 it "should truncate the long message" do
45   - @email.subject.should =~ / \d{47}\.{3}$/
  45 + expect(@email.subject).to match( / \d{47}\.{3}$/ )
46 46 end
47 47 end
48 48 end
... ... @@ -63,19 +63,19 @@ describe Mailer do
63 63 end
64 64  
65 65 it "should send the email" do
66   - ActionMailer::Base.deliveries.size.should == 1
  66 + expect(ActionMailer::Base.deliveries.size).to eq 1
67 67 end
68 68  
69 69 it "should be sent to comment notification recipients" do
70   - @email.to.should == recipients
  70 + expect(@email.to).to eq recipients
71 71 end
72 72  
73 73 it "should have the notices count in the body" do
74   - @email.should have_body_text("This err has occurred 2 times")
  74 + expect(@email).to have_body_text("This err has occurred 2 times")
75 75 end
76 76  
77 77 it "should have the comment body" do
78   - @email.should have_body_text(comment.body)
  78 + expect(@email).to have_body_text(comment.body)
79 79 end
80 80 end
81 81 end
... ...
spec/models/app_spec.rb
... ... @@ -12,22 +12,22 @@ describe App do
12 12 context 'validations' do
13 13 it 'requires a name' do
14 14 app = Fabricate.build(:app, :name => nil)
15   - app.should_not be_valid
16   - app.errors[:name].should include("can't be blank")
  15 + expect(app).to_not be_valid
  16 + expect(app.errors[:name]).to include("can't be blank")
17 17 end
18 18  
19 19 it 'requires unique names' do
20 20 Fabricate(:app, :name => 'Errbit')
21 21 app = Fabricate.build(:app, :name => 'Errbit')
22   - app.should_not be_valid
23   - app.errors[:name].should include('is already taken')
  22 + expect(app).to_not be_valid
  23 + expect(app.errors[:name]).to include('is already taken')
24 24 end
25 25  
26 26 it 'requires unique api_keys' do
27 27 Fabricate(:app, :api_key => 'APIKEY')
28 28 app = Fabricate.build(:app, :api_key => 'APIKEY')
29   - app.should_not be_valid
30   - app.errors[:api_key].should include('is already taken')
  29 + expect(app).to_not be_valid
  30 + expect(app.errors[:api_key]).to include('is already taken')
31 31 end
32 32 end
33 33  
... ... @@ -36,87 +36,87 @@ describe App do
36 36 app_0 = stub_model(App, :name => 'app', :unresolved_count => 1, :problem_count => 1)
37 37 app_1 = stub_model(App, :name => 'app', :unresolved_count => 0, :problem_count => 1)
38 38  
39   - app_0.should < app_1
40   - app_1.should > app_0
  39 + expect(app_0).to be < app_1
  40 + expect(app_1).to be > app_0
41 41 end
42 42  
43 43 it 'is compared by problem count' do
44 44 app_0 = stub_model(App, :name => 'app', :unresolved_count => 0, :problem_count => 1)
45 45 app_1 = stub_model(App, :name => 'app', :unresolved_count => 0, :problem_count => 0)
46 46  
47   - app_0.should < app_1
48   - app_1.should > app_0
  47 + expect(app_0).to be < app_1
  48 + expect(app_1).to be > app_0
49 49 end
50 50  
51 51 it 'is compared by name' do
52 52 app_0 = stub_model(App, :name => 'app_0', :unresolved_count => 0, :problem_count => 0)
53 53 app_1 = stub_model(App, :name => 'app_1', :unresolved_count => 0, :problem_count => 0)
54 54  
55   - app_0.should < app_1
56   - app_1.should > app_0
  55 + expect(app_0).to be < app_1
  56 + expect(app_1).to be > app_0
57 57 end
58 58 end
59 59  
60 60 context 'being created' do
61 61 it 'generates a new api-key' do
62 62 app = Fabricate.build(:app)
63   - app.api_key.should be_nil
  63 + expect(app.api_key).to be_nil
64 64 app.save
65   - app.api_key.should_not be_nil
  65 + expect(app.api_key).to_not be_nil
66 66 end
67 67  
68 68 it 'generates a correct api-key' do
69 69 app = Fabricate(:app)
70   - app.api_key.should match(/^[a-f0-9]{32}$/)
  70 + expect(app.api_key).to match(/^[a-f0-9]{32}$/)
71 71 end
72 72  
73 73 it 'is fine with blank github repos' do
74 74 app = Fabricate.build(:app, :github_repo => "")
75 75 app.save
76   - app.github_repo.should == ""
  76 + expect(app.github_repo).to eq ""
77 77 end
78 78  
79 79 it 'doesnt touch github user/repo' do
80 80 app = Fabricate.build(:app, :github_repo => "errbit/errbit")
81 81 app.save
82   - app.github_repo.should == "errbit/errbit"
  82 + expect(app.github_repo).to eq "errbit/errbit"
83 83 end
84 84  
85 85 it 'removes domain from https github repos' do
86 86 app = Fabricate.build(:app, :github_repo => "https://github.com/errbit/errbit")
87 87 app.save
88   - app.github_repo.should == "errbit/errbit"
  88 + expect(app.github_repo).to eq "errbit/errbit"
89 89 end
90 90  
91 91 it 'normalizes public git repo as a github repo' do
92 92 app = Fabricate.build(:app, :github_repo => "https://github.com/errbit/errbit.git")
93 93 app.save
94   - app.github_repo.should == "errbit/errbit"
  94 + expect(app.github_repo).to eq "errbit/errbit"
95 95 end
96 96  
97 97 it 'normalizes private git repo as a github repo' do
98 98 app = Fabricate.build(:app, :github_repo => "git@github.com:errbit/errbit.git")
99 99 app.save
100   - app.github_repo.should == "errbit/errbit"
  100 + expect(app.github_repo).to eq "errbit/errbit"
101 101 end
102 102 end
103 103  
104 104 context '#github_url_to_file' do
105 105 it 'resolves to full path to file' do
106 106 app = Fabricate(:app, :github_repo => "errbit/errbit")
107   - app.github_url_to_file('path/to/file').should == "https://github.com/errbit/errbit/blob/master/path/to/file"
  107 + expect(app.github_url_to_file('path/to/file')).to eq "https://github.com/errbit/errbit/blob/master/path/to/file"
108 108 end
109 109 end
110 110  
111 111 context '#github_repo?' do
112 112 it 'is true when there is a github_repo' do
113 113 app = Fabricate(:app, :github_repo => "errbit/errbit")
114   - app.github_repo?.should be_true
  114 + expect(app.github_repo?).to be_true
115 115 end
116 116  
117 117 it 'is false when no github_repo' do
118 118 app = Fabricate(:app)
119   - app.github_repo?.should be_false
  119 + expect(app.github_repo?).to be_false
120 120 end
121 121 end
122 122  
... ... @@ -126,9 +126,9 @@ describe App do
126 126 3.times { Fabricate(:user) }
127 127 5.times { Fabricate(:watcher, :app => @app) }
128 128 @app.notify_all_users = true
129   - @app.notification_recipients.size.should == 8
  129 + expect(@app.notification_recipients.size).to eq 8
130 130 @app.notify_all_users = false
131   - @app.notification_recipients.size.should == 5
  131 + expect(@app.notification_recipients.size).to eq 5
132 132 end
133 133 end
134 134  
... ... @@ -136,19 +136,19 @@ describe App do
136 136 it "should be true if notify on errs and there are notification recipients" do
137 137 app = Fabricate(:app, :notify_on_errs => true, :notify_all_users => false)
138 138 2.times { Fabricate(:watcher, :app => app) }
139   - app.emailable?.should be_true
  139 + expect(app.emailable?).to be_true
140 140 end
141 141  
142 142 it "should be false if notify on errs is disabled" do
143 143 app = Fabricate(:app, :notify_on_errs => false, :notify_all_users => false)
144 144 2.times { Fabricate(:watcher, :app => app) }
145   - app.emailable?.should be_false
  145 + expect(app.emailable?).to be_false
146 146 end
147 147  
148 148 it "should be false if there are no notification recipients" do
149 149 app = Fabricate(:app, :notify_on_errs => true, :notify_all_users => false)
150   - app.watchers.should be_empty
151   - app.emailable?.should be_false
  150 + expect(app.watchers).to be_empty
  151 + expect(app.emailable?).to be_false
152 152 end
153 153 end
154 154  
... ... @@ -158,9 +158,9 @@ describe App do
158 158 Fabricate(:app, :name => "copy_app", :github_repo => "copy url")
159 159 @copy_watcher = Fabricate(:watcher, :email => "copywatcher@example.com", :app => @copy_app)
160 160 @app.copy_attributes_from(@copy_app.id)
161   - @app.name.should == "app"
162   - @app.github_repo.should == "copy url"
163   - @app.watchers.first.email.should == "copywatcher@example.com"
  161 + expect(@app.name).to eq "app"
  162 + expect(@app.github_repo).to eq "copy url"
  163 + expect(@app.watchers.first.email).to eq "copywatcher@example.com"
164 164 end
165 165 end
166 166  
... ... @@ -178,19 +178,19 @@ describe App do
178 178 :problem => Fabricate(:problem, :app => app),
179 179 :fingerprint => conditions[:fingerprint]
180 180 })
181   - Err.where(:fingerprint => conditions[:fingerprint]).first.should == existing
182   - app.find_or_create_err!(conditions).should == existing
  181 + expect(Err.where(:fingerprint => conditions[:fingerprint]).first).to eq existing
  182 + expect(app.find_or_create_err!(conditions)).to eq existing
183 183 end
184 184  
185 185 it 'assigns the returned err to the given app' do
186   - app.find_or_create_err!(conditions).app.should == app
  186 + expect(app.find_or_create_err!(conditions).app).to eq app
187 187 end
188 188  
189 189 it 'creates a new problem if a matching one does not already exist' do
190   - Err.where(conditions).first.should be_nil
191   - lambda {
  190 + expect(Err.where(conditions).first).to be_nil
  191 + expect {
192 192 app.find_or_create_err!(conditions)
193   - }.should change(Problem,:count).by(1)
  193 + }.to change(Problem,:count).by(1)
194 194 end
195 195  
196 196 context "without error_class" do
... ... @@ -200,10 +200,10 @@ describe App do
200 200 }
201 201 }
202 202 it 'save the err' do
203   - Err.where(conditions).first.should be_nil
204   - lambda {
  203 + expect(Err.where(conditions).first).to be_nil
  204 + expect {
205 205 app.find_or_create_err!(conditions)
206   - }.should change(Problem,:count).by(1)
  206 + }.to change(Problem,:count).by(1)
207 207 end
208 208 end
209 209 end
... ...
spec/models/backtrace_line_normalizer_spec.rb
... ... @@ -8,11 +8,11 @@ describe BacktraceLineNormalizer do
8 8 let(:raw_line) { { 'number' => rand(999), 'file' => nil, 'method' => nil } }
9 9  
10 10 it "should replace nil file with [unknown source]" do
11   - subject['file'].should == "[unknown source]"
  11 + expect(subject['file']).to eq "[unknown source]"
12 12 end
13 13  
14 14 it "should replace nil method with [unknown method]" do
15   - subject['method'].should == "[unknown method]"
  15 + expect(subject['method']).to eq "[unknown method]"
16 16 end
17 17 end
18 18  
... ... @@ -20,7 +20,7 @@ describe BacktraceLineNormalizer do
20 20 let(:raw_line) { { 'number' => rand(999), 'file' => "[PROJECT_ROOT]/assets/file.js?body=1", 'method' => nil } }
21 21  
22 22 it "should strip query strings from files" do
23   - subject['file'].should == "[PROJECT_ROOT]/assets/file.js"
  23 + expect(subject['file']).to eq "[PROJECT_ROOT]/assets/file.js"
24 24 end
25 25 end
26 26 end
... ...
spec/models/backtrace_line_spec.rb
... ... @@ -6,7 +6,7 @@ describe BacktraceLine do
6 6 describe "root at the start of decorated filename" do
7 7 let(:raw_line) { { 'number' => rand(999), 'file' => '[PROJECT_ROOT]/app/controllers/pages_controller.rb', 'method' => ActiveSupport.methods.shuffle.first.to_s } }
8 8 it "should leave leading root symbol in filepath" do
9   - subject.decorated_path.should == 'app/controllers/'
  9 + expect(subject.decorated_path).to eq 'app/controllers/'
10 10 end
11 11 end
12 12 end
... ...
spec/models/backtrace_spec.rb
... ... @@ -35,7 +35,7 @@ describe Backtrace do
35 35 context "no similar backtrace" do
36 36 before { backtrace.stub(:similar => nil) }
37 37 it "create new backtrace" do
38   - described_class.should_receive(:create).with(attributes)
  38 + expect(described_class).to receive(:create).with(attributes)
39 39  
40 40 described_class.find_or_create(attributes)
41 41 end
... ...
spec/models/comment_observer_spec.rb
... ... @@ -8,7 +8,7 @@ describe &quot;Callback on Comment&quot; do
8 8 before { comment.stub(:emailable?).and_return(true) }
9 9  
10 10 it 'should send an email notification' do
11   - Mailer.should_receive(:comment_notification).
  11 + expect(Mailer).to receive(:comment_notification).
12 12 with(comment).
13 13 and_return(double('email', :deliver => true))
14 14 comment.save
... ... @@ -19,7 +19,7 @@ describe &quot;Callback on Comment&quot; do
19 19 before { comment.stub(:emailable?).and_return(false) }
20 20  
21 21 it 'should not send an email notification' do
22   - Mailer.should_not_receive(:comment_notification)
  22 + expect(Mailer).to_not receive(:comment_notification)
23 23 comment.save
24 24 end
25 25 end
... ...
spec/models/comment_spec.rb
... ... @@ -4,8 +4,8 @@ describe Comment do
4 4 context 'validations' do
5 5 it 'should require a body' do
6 6 comment = Fabricate.build(:comment, :body => nil)
7   - comment.should_not be_valid
8   - comment.errors[:body].should include("can't be blank")
  7 + expect(comment).to_not be_valid
  8 + expect(comment.errors[:body]).to include("can't be blank")
9 9 end
10 10 end
11 11  
... ... @@ -21,7 +21,7 @@ describe Comment do
21 21 end
22 22  
23 23 it 'includes app notification_recipients except user email' do
24   - comment.notification_recipients.should == [watcher.address]
  24 + expect(comment.notification_recipients).to eq [watcher.address]
25 25 end
26 26 end
27 27  
... ... @@ -37,19 +37,19 @@ describe Comment do
37 37 end
38 38  
39 39 it 'should be true if app is emailable? and there are notification recipients' do
40   - comment.emailable?.should be_true
  40 + expect(comment.emailable?).to be_true
41 41 end
42 42  
43 43 it 'should be false if app is not emailable?' do
44 44 app.update_attribute(:notify_on_errs, false)
45   - comment.notification_recipients.should be_any
46   - comment.emailable?.should be_false
  45 + expect(comment.notification_recipients).to be_any
  46 + expect(comment.emailable?).to be_false
47 47 end
48 48  
49 49 it 'should be false if there are no notification recipients' do
50 50 watcher.destroy
51   - app.emailable?.should be_true
52   - comment.emailable?.should be_false
  51 + expect(app.emailable?).to be_true
  52 + expect(comment.emailable?).to be_false
53 53 end
54 54 end
55 55 end
... ...
spec/models/deploy_observer_spec.rb
... ... @@ -4,7 +4,7 @@ describe &quot;Callback on Deploy&quot; do
4 4 context 'when a Deploy is saved' do
5 5 context 'and the app should notify on deploys' do
6 6 it 'should send an email notification' do
7   - Mailer.should_receive(:deploy_notification).
  7 + expect(Mailer).to receive(:deploy_notification).
8 8 and_return(double('email', :deliver => true))
9 9 Fabricate(:deploy, :app => Fabricate(:app_with_watcher, :notify_on_deploys => true))
10 10 end
... ... @@ -12,7 +12,7 @@ describe &quot;Callback on Deploy&quot; do
12 12  
13 13 context 'and the app is not set to notify on deploys' do
14 14 it 'should not send an email notification' do
15   - Mailer.should_not_receive(:deploy_notification)
  15 + expect(Mailer).to_not receive(:deploy_notification)
16 16 Fabricate(:deploy, :app => Fabricate(:app_with_watcher, :notify_on_deploys => false))
17 17 end
18 18 end
... ...
spec/models/deploy_spec.rb
... ... @@ -5,14 +5,14 @@ describe Deploy do
5 5 context 'validations' do
6 6 it 'requires a username' do
7 7 deploy = Fabricate.build(:deploy, :username => nil)
8   - deploy.should_not be_valid
9   - deploy.errors[:username].should include("can't be blank")
  8 + expect(deploy).to_not be_valid
  9 + expect(deploy.errors[:username]).to include("can't be blank")
10 10 end
11 11  
12 12 it 'requires an environment' do
13 13 deploy = Fabricate.build(:deploy, :environment => nil)
14   - deploy.should_not be_valid
15   - deploy.errors[:environment].should include("can't be blank")
  14 + expect(deploy).to_not be_valid
  15 + expect(deploy.errors[:environment]).to include("can't be blank")
16 16 end
17 17 end
18 18  
... ... @@ -22,7 +22,7 @@ describe Deploy do
22 22 app = Fabricate(:app, :resolve_errs_on_deploy => false)
23 23 @problems = 3.times.map{Fabricate(:err, :problem => Fabricate(:problem, :resolved => false, :app => app))}
24 24 Fabricate(:deploy, :app => app)
25   - app.reload.problems.none?{|problem| problem.resolved?}.should == true
  25 + expect(app.reload.problems.none?{|problem| problem.resolved?}).to eq true
26 26 end
27 27 end
28 28  
... ... @@ -32,15 +32,15 @@ describe Deploy do
32 32 @prod_errs = 3.times.map{Fabricate(:problem, :resolved => false, :app => app, :environment => 'production')}
33 33 @staging_errs = 3.times.map{Fabricate(:problem, :resolved => false, :app => app, :environment => 'staging')}
34 34 Fabricate(:deploy, :app => app, :environment => 'production')
35   - @prod_errs.all?{|problem| problem.reload.resolved?}.should == true
36   - @staging_errs.all?{|problem| problem.reload.resolved?}.should == false
  35 + expect(@prod_errs.all?{|problem| problem.reload.resolved?}).to eq true
  36 + expect(@staging_errs.all?{|problem| problem.reload.resolved?}).to eq false
37 37 end
38 38 end
39 39  
40 40 end
41 41  
42 42 it "should produce a shortened revision with 7 characters" do
43   - Deploy.new(:revision => "1234567890abcdef").short_revision.should == "1234567"
  43 + expect(Deploy.new(:revision => "1234567890abcdef").short_revision).to eq "1234567"
44 44 end
45 45 end
46 46  
... ...
spec/models/err_spec.rb
... ... @@ -5,14 +5,14 @@ describe Err do
5 5 context 'validations' do
6 6 it 'requires a fingerprint' do
7 7 err = Fabricate.build(:err, :fingerprint => nil)
8   - err.should_not be_valid
9   - err.errors[:fingerprint].should include("can't be blank")
  8 + expect(err).to_not be_valid
  9 + expect(err.errors[:fingerprint]).to include("can't be blank")
10 10 end
11 11  
12 12 it 'requires a problem' do
13 13 err = Fabricate.build(:err, :problem_id => nil, :problem => nil)
14   - err.should_not be_valid
15   - err.errors[:problem_id].should include("can't be blank")
  14 + expect(err).to_not be_valid
  15 + expect(err.errors[:problem_id]).to include("can't be blank")
16 16 end
17 17 end
18 18  
... ...
spec/models/error_report_spec.rb
... ... @@ -43,7 +43,7 @@ describe ErrorReport do
43 43 describe "#backtrace" do
44 44  
45 45 it 'should have valid backtrace' do
46   - error_report.backtrace.should be_valid
  46 + expect(error_report.backtrace).to be_valid
47 47 end
48 48 end
49 49  
... ... @@ -77,32 +77,32 @@ describe ErrorReport do
77 77 its(:framework) { should == 'Rails: 3.2.11' }
78 78  
79 79 it 'has complete backtrace' do
80   - subject.backtrace_lines.size.should == 73
81   - subject.backtrace_lines.last['file'].should == '[GEM_ROOT]/bin/rake'
  80 + expect(subject.backtrace_lines.size).to eq 73
  81 + expect(subject.backtrace_lines.last['file']).to eq '[GEM_ROOT]/bin/rake'
82 82 end
83 83 it 'has server_environement' do
84   - subject.server_environment['environment-name'].should == 'development'
  84 + expect(subject.server_environment['environment-name']).to eq 'development'
85 85 end
86 86  
87 87 it 'has request' do
88   - subject.request['url'].should == 'http://example.org/verify/cupcake=fistfight&lovebird=doomsayer'
89   - subject.request['params']['controller'].should == 'application'
  88 + expect(subject.request['url']).to eq 'http://example.org/verify/cupcake=fistfight&lovebird=doomsayer'
  89 + expect(subject.request['params']['controller']).to eq 'application'
90 90 end
91 91  
92 92 it 'has notifier' do
93   - subject.notifier['name'].should == 'Hoptoad Notifier'
  93 + expect(subject.notifier['name']).to eq 'Hoptoad Notifier'
94 94 end
95 95  
96 96 it 'get user_attributes' do
97   - subject.user_attributes['id'].should == '123'
98   - subject.user_attributes['name'].should == 'Mr. Bean'
99   - subject.user_attributes['email'].should == 'mr.bean@example.com'
100   - subject.user_attributes['username'].should == 'mrbean'
  97 + expect(subject.user_attributes['id']).to eq '123'
  98 + expect(subject.user_attributes['name']).to eq 'Mr. Bean'
  99 + expect(subject.user_attributes['email']).to eq 'mr.bean@example.com'
  100 + expect(subject.user_attributes['username']).to eq 'mrbean'
101 101 end
102 102 it 'valid env_vars' do
103 103 # XML: <var key="SCRIPT_NAME"/>
104   - subject.env_vars.should have_key('SCRIPT_NAME')
105   - subject.env_vars['SCRIPT_NAME'].should be_nil # blank ends up nil
  104 + expect(subject.env_vars).to have_key('SCRIPT_NAME')
  105 + expect(subject.env_vars['SCRIPT_NAME']).to be_nil # blank ends up nil
106 106  
107 107 # XML representation:
108 108 # <var key="rack.session.options">
... ... @@ -121,14 +121,14 @@ describe ErrorReport do
121 121 'domain' => nil,
122 122 'id' => nil
123 123 }
124   - subject.env_vars.should have_key('rack_session_options')
125   - subject.env_vars['rack_session_options'].should eql(expected)
  124 + expect(subject.env_vars).to have_key('rack_session_options')
  125 + expect(subject.env_vars['rack_session_options']).to eql(expected)
126 126 end
127 127 end
128 128  
129 129 it 'save a notice assignes to err' do
130 130 error_report.generate_notice!
131   - error_report.notice.err.should be_a(Err)
  131 + expect(error_report.notice.err).to be_a(Err)
132 132 end
133 133  
134 134 it 'memoize the notice' do
... ... @@ -161,10 +161,10 @@ describe ErrorReport do
161 161 it 'send email' do
162 162 notice = error_report.generate_notice!
163 163 email = ActionMailer::Base.deliveries.last
164   - email.to.should include(app.watchers.first.email)
165   - email.subject.should include(notice.message.truncate(50))
166   - email.subject.should include("[#{app.name}]")
167   - email.subject.should include("[#{notice.environment_name}]")
  164 + expect(email.to).to include(app.watchers.first.email)
  165 + expect(email.subject).to include(notice.message.truncate(50))
  166 + expect(email.subject).to include("[#{app.name}]")
  167 + expect(email.subject).to include("[#{notice.environment_name}]")
168 168 end
169 169 end
170 170  
... ...
spec/models/fingerprint_spec.rb
... ... @@ -44,7 +44,7 @@ describe Fingerprint do
44 44 end
45 45  
46 46 its 'fingerprints should be equal' do
47   - Fingerprint.generate(notice1, 'api key').should eq Fingerprint.generate(notice2, 'api key')
  47 + expect(Fingerprint.generate(notice1, 'api key')).to eq Fingerprint.generate(notice2, 'api key')
48 48 end
49 49 end
50 50  
... ... @@ -57,7 +57,7 @@ describe Fingerprint do
57 57 end
58 58  
59 59 its 'fingerprints should not be equal' do
60   - Fingerprint.generate(notice1, 'api key').should_not eq Fingerprint.generate(notice2, 'api key')
  60 + expect(Fingerprint.generate(notice1, 'api key')).to_not eq Fingerprint.generate(notice2, 'api key')
61 61 end
62 62 end
63 63 end
... ...
spec/models/issue_trackers/bitbucket_issues_tracker_spec.rb
... ... @@ -32,9 +32,9 @@ EOF
32 32 problem.reload
33 33  
34 34 requested = have_requested(:post, "https://#{tracker.api_token}:#{tracker.project_id}@bitbucket.org/api/1.0/repositories/test_user/test_repo/issues/")
35   - WebMock.should requested.with(:title => /[production][foo#bar] FooError: Too Much Bar/)
36   - WebMock.should requested.with(:content => /See this exception on Errbit/)
  35 + expect(WebMock).to requested.with(:title => /[production][foo#bar] FooError: Too Much Bar/)
  36 + expect(WebMock).to requested.with(:content => /See this exception on Errbit/)
37 37  
38   - problem.issue_link.should == @issue_link
  38 + expect(problem.issue_link).to eq @issue_link
39 39 end
40 40 end
... ...
spec/models/issue_trackers/fogbugz_tracker_spec.rb
... ... @@ -10,14 +10,14 @@ describe IssueTrackers::FogbugzTracker do
10 10 @issue_link = "https://#{tracker.account}.fogbugz.com/default.asp?#{number}"
11 11 response = "<response><token>12345</token><case><ixBug>123</ixBug></case></response>"
12 12 http_mock = double
13   - http_mock.should_receive(:new).and_return(http_mock)
14   - http_mock.should_receive(:request).twice.and_return(response)
  13 + expect(http_mock).to receive(:new).and_return(http_mock)
  14 + expect(http_mock).to receive(:request).twice.and_return(response)
15 15 Fogbugz.adapter[:http] = http_mock
16 16  
17 17 problem.app.issue_tracker.create_issue(problem)
18 18 problem.reload
19 19  
20   - problem.issue_link.should == @issue_link
  20 + expect(problem.issue_link).to eq @issue_link
21 21 end
22 22 end
23 23  
... ...
spec/models/issue_trackers/github_issues_tracker_spec.rb
... ... @@ -38,10 +38,10 @@ EOF
38 38 problem.reload
39 39  
40 40 requested = have_requested(:post, "https://#{tracker.username}:#{tracker.password}@api.github.com/repos/#{repo}/issues")
41   - WebMock.should requested.with(:body => /[production][foo#bar] FooError: Too Much Bar/)
42   - WebMock.should requested.with(:body => /See this exception on Errbit/)
  41 + expect(WebMock).to requested.with(:body => /[production][foo#bar] FooError: Too Much Bar/)
  42 + expect(WebMock).to requested.with(:body => /See this exception on Errbit/)
43 43  
44   - problem.issue_link.should == @issue_link
  44 + expect(problem.issue_link).to eq @issue_link
45 45 end
46 46 end
47 47  
... ...
spec/models/issue_trackers/gitlab_issues_tracker_spec.rb
... ... @@ -24,8 +24,8 @@ describe IssueTrackers::GitlabTracker do
24 24  
25 25 requested_issue = have_requested(:post, "#{tracker.account}/api/v3/projects/#{tracker.project_id}/issues?private_token=#{tracker.api_token}").with(:body => /.+/, :headers => {'Accept'=>'application/json'})
26 26 requested_note = have_requested(:post, "#{tracker.account}/api/v3/projects/#{tracker.project_id}/issues/#{issue_id}/notes?private_token=#{tracker.api_token}")
27   - WebMock.should requested_issue.with(:body => /%5Bproduction%5D%5Bfoo%23bar%5D%20FooError%3A%20Too%20Much%20Bar/)
28   - WebMock.should requested_issue.with(:body => /See%20this%20exception%20on%20Errbit/)
  27 + expect(WebMock).to requested_issue.with(:body => /%5Bproduction%5D%5Bfoo%23bar%5D%20FooError%3A%20Too%20Much%20Bar/)
  28 + expect(WebMock).to requested_issue.with(:body => /See%20this%20exception%20on%20Errbit/)
29 29  
30 30 end
31 31 end
... ...
spec/models/issue_trackers/lighthouse_tracker_spec.rb
... ... @@ -16,12 +16,12 @@ describe IssueTrackers::LighthouseTracker do
16 16 problem.reload
17 17  
18 18 requested = have_requested(:post, "http://#{tracker.account}.lighthouseapp.com/projects/#{tracker.project_id}/tickets.xml")
19   - WebMock.should requested.with(:headers => {'X-Lighthousetoken' => tracker.api_token})
20   - WebMock.should requested.with(:body => /<tag>errbit<\/tag>/)
21   - WebMock.should requested.with(:body => /<title>\[#{ problem.environment }\]\[#{problem.where}\] #{problem.message.to_s.truncate(100)}<\/title>/)
22   - WebMock.should requested.with(:body => /<body>.+<\/body>/m)
  19 + expect(WebMock).to requested.with(:headers => {'X-Lighthousetoken' => tracker.api_token})
  20 + expect(WebMock).to requested.with(:body => /<tag>errbit<\/tag>/)
  21 + expect(WebMock).to requested.with(:body => /<title>\[#{ problem.environment }\]\[#{problem.where}\] #{problem.message.to_s.truncate(100)}<\/title>/)
  22 + expect(WebMock).to requested.with(:body => /<body>.+<\/body>/m)
23 23  
24   - problem.issue_link.should == @issue_link.sub(/\.xml$/, '')
  24 + expect(problem.issue_link).to eq @issue_link.sub(/\.xml$/, '')
25 25 end
26 26 end
27 27  
... ...
spec/models/issue_trackers/mingle_tracker_spec.rb
... ... @@ -17,12 +17,12 @@ describe IssueTrackers::MingleTracker do
17 17 problem.reload
18 18  
19 19 requested = have_requested(:post, "#{@basic_auth}/api/v1/projects/#{tracker.project_id}/cards.xml")
20   - WebMock.should requested.with(:headers => {'Content-Type' => 'application/xml'})
21   - WebMock.should requested.with(:body => /FooError: Too Much Bar/)
22   - WebMock.should requested.with(:body => /See this exception on Errbit/)
23   - WebMock.should requested.with(:body => /<card-type-name>Defect<\/card-type-name>/)
  20 + expect(WebMock).to requested.with(:headers => {'Content-Type' => 'application/xml'})
  21 + expect(WebMock).to requested.with(:body => /FooError: Too Much Bar/)
  22 + expect(WebMock).to requested.with(:body => /See this exception on Errbit/)
  23 + expect(WebMock).to requested.with(:body => /<card-type-name>Defect<\/card-type-name>/)
24 24  
25   - problem.issue_link.should == @issue_link.sub(/\.xml$/, '')
  25 + expect(problem.issue_link).to eq @issue_link.sub(/\.xml$/, '')
26 26 end
27 27 end
28 28  
... ...
spec/models/issue_trackers/pivotal_labs_tracker_spec.rb
... ... @@ -21,25 +21,26 @@ describe IssueTrackers::PivotalLabsTracker do
21 21 problem.reload
22 22  
23 23 requested = have_requested(:post, "https://www.pivotaltracker.com/services/v3/projects/#{tracker.project_id}/stories")
24   - WebMock.should requested.with(:headers => {'X-Trackertoken' => tracker.api_token})
25   - WebMock.should requested.with(:body => /See this exception on Errbit/)
26   - WebMock.should requested.with(:body => /<name>\[#{ problem.environment }\]\[#{problem.where}\] #{problem.message.to_s.truncate(100)}<\/name>/)
27   - WebMock.should requested.with(:body => /<description>.+<\/description>/m)
  24 + expect(WebMock).to requested.with(:headers => {'X-Trackertoken' => tracker.api_token})
  25 + expect(WebMock).to requested.with(:body => /See this exception on Errbit/)
  26 + expect(WebMock).to requested.with(:body => /<name>\[#{ problem.environment }\]\[#{problem.where}\] #{problem.message.to_s.truncate(100)}<\/name>/)
  27 + expect(WebMock).to requested.with(:body => /<description>.+<\/description>/m)
28 28  
29   - problem.issue_link.should == issue_link
  29 + expect(problem.issue_link).to eq issue_link
30 30 end
31 31  
32 32 it "raises IssueTrackers::IssueTrackerError exception when invalid params and does not set issue link for problem" do
33 33 project_body = "<project><id>#{tracker.project_id}</id><name>TestProject</name></project>"
34 34 stub_request(:get, "https://www.pivotaltracker.com/services/v3/projects/#{tracker.project_id}").
35   - to_return(:status => 200, :body => project_body )
  35 + to_return(:status => 200, :body => project_body )
36 36 story_body = "<errors><error>Requested by can't be blank</error><error>Requested by can't be blank</error></errors>"
37 37 stub_request(:post, "https://www.pivotaltracker.com/services/v3/projects/#{tracker.project_id}/stories").
38 38 to_return(:status => 422, :body => story_body )
39 39  
40   - lambda { problem.app.issue_tracker.create_issue(problem, user)
41   - }.should raise_exception(IssueTrackers::IssueTrackerError, "Requested by can't be blank")
42   - problem.issue_link.should be_nil
  40 + expect{
  41 + problem.app.issue_tracker.create_issue(problem, user)
  42 + }.to raise_exception(IssueTrackers::IssueTrackerError, "Requested by can't be blank")
  43 + expect(problem.issue_link).to be_nil
43 44 end
44 45 end
45 46  
... ...
spec/models/issue_trackers/redmine_tracker_spec.rb
... ... @@ -19,27 +19,27 @@ describe IssueTrackers::RedmineTracker do
19 19 problem.reload
20 20  
21 21 requested = have_requested(:post, "#{base_url}/issues.xml")
22   - WebMock.should requested.with(:headers => {'X-Redmine-API-Key' => tracker.api_token})
23   - WebMock.should requested.with(:body => /<project-id>#{tracker.project_id}<\/project-id>/)
24   - WebMock.should requested.with(:body => /<subject>\[#{ problem.environment }\]\[#{problem.where}\] #{problem.message.to_s.truncate(100)}<\/subject>/)
25   - WebMock.should requested.with(:body => /<description>.+<\/description>/m)
  22 + expect(WebMock).to requested.with(:headers => {'X-Redmine-API-Key' => tracker.api_token})
  23 + expect(WebMock).to requested.with(:body => /<project-id>#{tracker.project_id}<\/project-id>/)
  24 + expect(WebMock).to requested.with(:body => /<subject>\[#{ problem.environment }\]\[#{problem.where}\] #{problem.message.to_s.truncate(100)}<\/subject>/)
  25 + expect(WebMock).to requested.with(:body => /<description>.+<\/description>/m)
26 26  
27   - problem.issue_link.should == @issue_link.sub(/\.xml/, '')
  27 + expect(problem.issue_link).to eq @issue_link.sub(/\.xml/, '')
28 28 end
29 29  
30 30 it "should generate a url where a file with line number can be viewed" do
31 31 t = Fabricate(:redmine_tracker, :account => 'http://redmine.example.com', :project_id => "errbit")
32   - t.url_to_file("/example/file").should ==
33   - 'http://redmine.example.com/projects/errbit/repository/revisions/master/changes/example/file'
34   - t.url_to_file("/example/file", 25).should ==
35   - 'http://redmine.example.com/projects/errbit/repository/revisions/master/changes/example/file#L25'
  32 + expect(t.url_to_file("/example/file")).
  33 + to eq 'http://redmine.example.com/projects/errbit/repository/revisions/master/changes/example/file'
  34 + expect(t.url_to_file("/example/file", 25)).
  35 + to eq 'http://redmine.example.com/projects/errbit/repository/revisions/master/changes/example/file#L25'
36 36 end
37 37  
38 38 it "should use the alt_project_id to generate a file/linenumber url, if given" do
39 39 t = Fabricate(:redmine_tracker, :account => 'http://redmine.example.com',
40 40 :project_id => "errbit",
41 41 :alt_project_id => "actual_project")
42   - t.url_to_file("/example/file", 25).should ==
43   - 'http://redmine.example.com/projects/actual_project/repository/revisions/master/changes/example/file#L25'
  42 + expect(t.url_to_file("/example/file", 25)).
  43 + to eq 'http://redmine.example.com/projects/actual_project/repository/revisions/master/changes/example/file#L25'
44 44 end
45 45 end
... ...
spec/models/issue_trackers/unfuddle_issues_tracker_spec.rb
... ... @@ -83,10 +83,10 @@ EOF
83 83 problem.reload
84 84  
85 85 requested = have_requested(:post,"https://#{tracker.username}:#{tracker.password}@test.unfuddle.com/api/v1/projects/#{tracker.project_id}/tickets.xml" )
86   - WebMock.should requested.with(:title => /[production][foo#bar] FooError: Too Much Bar/)
87   - WebMock.should requested.with(:content => /See this exception on Errbit/)
  86 + expect(WebMock).to requested.with(:title => /[production][foo#bar] FooError: Too Much Bar/)
  87 + expect(WebMock).to requested.with(:content => /See this exception on Errbit/)
88 88  
89   - problem.issue_link.should == issue_link
90   - problem.issue_type.should == IssueTrackers::UnfuddleTracker::Label
  89 + expect(problem.issue_link).to eq issue_link
  90 + expect(problem.issue_type).to eq IssueTrackers::UnfuddleTracker::Label
91 91 end
92 92 end
... ...
spec/models/notice_observer_spec.rb
... ... @@ -17,7 +17,7 @@ describe &quot;Callback on Notice&quot; do
17 17 custom_thresholds.each do |threshold|
18 18 it "sends an email notification after #{threshold} notice(s)" do
19 19 @err.problem.stub(:notices_count).and_return(threshold)
20   - Mailer.should_receive(:err_notification).
  20 + expect(Mailer).to receive(:err_notification).
21 21 and_return(double('email', :deliver => true))
22 22 Fabricate(:notice, :err => @err)
23 23 end
... ... @@ -38,15 +38,15 @@ describe &quot;Callback on Notice&quot; do
38 38  
39 39 it "should send email notification after 1 notice since an error has been resolved" do
40 40 @err.problem.resolve!
41   - Mailer.should_receive(:err_notification).
  41 + expect(Mailer).to receive(:err_notification).
42 42 and_return(double('email', :deliver => true))
43 43 Fabricate(:notice, :err => @err)
44 44 end
45 45 it 'self notify if mailer failed' do
46 46 @err.problem.resolve!
47   - Mailer.should_receive(:err_notification).
  47 + expect(Mailer).to receive(:err_notification).
48 48 and_raise(ArgumentError)
49   - HoptoadNotifier.should_receive(:notify)
  49 + expect(HoptoadNotifier).to receive(:notify)
50 50 Fabricate(:notice, :err => @err)
51 51 end
52 52 end
... ... @@ -65,7 +65,7 @@ describe &quot;Callback on Notice&quot; do
65 65 end
66 66  
67 67 it "should create a campfire notification" do
68   - app.notification_service.should_receive(:create_notification)
  68 + expect(app.notification_service).to receive(:create_notification)
69 69  
70 70 Notice.create!(:err => err, :message => 'FooError: Too Much Bar', :server_environment => {'environment-name' => 'production'},
71 71 :backtrace => backtrace, :notifier => { 'name' => 'Notifier', 'version' => '1', 'url' => 'http://toad.com' })
... ... @@ -88,8 +88,8 @@ describe &quot;Callback on Notice&quot; do
88 88 end
89 89  
90 90 it "send email" do
91   - app.notification_service.should_receive(:create_notification).and_raise(ArgumentError)
92   - Mailer.should_receive(:err_notification).and_return(double(:deliver => true))
  91 + expect(app.notification_service).to receive(:create_notification).and_raise(ArgumentError)
  92 + expect(Mailer).to receive(:err_notification).and_return(double(:deliver => true))
93 93  
94 94 Notice.create!(:err => err, :message => 'FooError: Too Much Bar', :server_environment => {'environment-name' => 'production'},
95 95 :backtrace => backtrace, :notifier => { 'name' => 'Notifier', 'version' => '1', 'url' => 'http://toad.com' })
... ... @@ -110,7 +110,7 @@ describe &quot;Callback on Notice&quot; do
110 110 end
111 111  
112 112 it "should not create a campfire notification" do
113   - app.notification_service.should_not_receive(:create_notification)
  113 + expect(app.notification_service).to_not receive(:create_notification)
114 114  
115 115 Notice.create!(:err => err, :message => 'FooError: Too Much Bar', :server_environment => {'environment-name' => 'production'},
116 116 :backtrace => backtrace, :notifier => { 'name' => 'Notifier', 'version' => '1', 'url' => 'http://toad.com' })
... ... @@ -130,7 +130,7 @@ describe &quot;Callback on Notice&quot; do
130 130 end
131 131  
132 132 it 'creates a hipchat notification' do
133   - app.notification_service.should_receive(:create_notification)
  133 + expect(app.notification_service).to receive(:create_notification)
134 134  
135 135 Fabricate(:notice, :err => err)
136 136 end
... ... @@ -150,7 +150,7 @@ describe &quot;Callback on Notice&quot; do
150 150  
151 151 it "should create a campfire notification on first notice" do
152 152 err = Fabricate(:err, :problem => Fabricate(:problem, :app => app, :notices_count => 1))
153   - app.notification_service.should_receive(:create_notification)
  153 + expect(app.notification_service).to receive(:create_notification)
154 154  
155 155 Notice.create!(:err => err, :message => 'FooError: Too Much Bar', :server_environment => {'environment-name' => 'production'},
156 156 :backtrace => backtrace, :notifier => { 'name' => 'Notifier', 'version' => '1', 'url' => 'http://toad.com' })
... ... @@ -158,7 +158,7 @@ describe &quot;Callback on Notice&quot; do
158 158  
159 159 it "should create a campfire notification on second notice" do
160 160 err = Fabricate(:err, :problem => Fabricate(:problem, :app => app, :notices_count => 1))
161   - app.notification_service.should_receive(:create_notification)
  161 + expect(app.notification_service).to receive(:create_notification)
162 162  
163 163 Notice.create!(:err => err, :message => 'FooError: Too Much Bar', :server_environment => {'environment-name' => 'production'},
164 164 :backtrace => backtrace, :notifier => { 'name' => 'Notifier', 'version' => '1', 'url' => 'http://toad.com' })
... ... @@ -166,7 +166,7 @@ describe &quot;Callback on Notice&quot; do
166 166  
167 167 it "should not create a campfire notification on third notice" do
168 168 err = Fabricate(:err, :problem => Fabricate(:problem, :app => app, :notices_count => 1))
169   - app.notification_service.should_receive(:create_notification)
  169 + expect(app.notification_service).to receive(:create_notification)
170 170  
171 171 Notice.create!(:err => err, :message => 'FooError: Too Much Bar', :server_environment => {'environment-name' => 'production'},
172 172 :backtrace => backtrace, :notifier => { 'name' => 'Notifier', 'version' => '1', 'url' => 'http://toad.com' })
... ...
spec/models/notice_spec.rb
... ... @@ -4,20 +4,20 @@ describe Notice do
4 4 context 'validations' do
5 5 it 'requires a backtrace' do
6 6 notice = Fabricate.build(:notice, :backtrace => nil)
7   - notice.should_not be_valid
8   - notice.errors[:backtrace].should include("can't be blank")
  7 + expect(notice).to_not be_valid
  8 + expect(notice.errors[:backtrace]).to include("can't be blank")
9 9 end
10 10  
11 11 it 'requires the server_environment' do
12 12 notice = Fabricate.build(:notice, :server_environment => nil)
13   - notice.should_not be_valid
14   - notice.errors[:server_environment].should include("can't be blank")
  13 + expect(notice).to_not be_valid
  14 + expect(notice.errors[:server_environment]).to include("can't be blank")
15 15 end
16 16  
17 17 it 'requires the notifier' do
18 18 notice = Fabricate.build(:notice, :notifier => nil)
19   - notice.should_not be_valid
20   - notice.errors[:notifier].should include("can't be blank")
  19 + expect(notice).to_not be_valid
  20 + expect(notice.errors[:notifier]).to include("can't be blank")
21 21 end
22 22 end
23 23  
... ... @@ -30,7 +30,7 @@ describe Notice do
30 30 it "replaces . with &#46; and $ with &#36; in keys used in #{key}" do
31 31 err = Fabricate(:err)
32 32 notice = Fabricate(:notice, :err => err, key => @hash)
33   - notice.send(key).should == @hash_sanitized
  33 + expect(notice.send(key)).to eq @hash_sanitized
34 34 end
35 35 end
36 36 end
... ... @@ -40,49 +40,49 @@ describe Notice do
40 40 notice = Fabricate.build(:notice, :request => {'cgi-data' => {
41 41 'HTTP_USER_AGENT' => 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16'
42 42 }})
43   - notice.user_agent.browser.should == 'Chrome'
44   - notice.user_agent.version.to_s.should =~ /^10\.0/
  43 + expect(notice.user_agent.browser).to eq 'Chrome'
  44 + expect(notice.user_agent.version.to_s).to match( /^10\.0/ )
45 45 end
46 46  
47 47 it "should be nil if HTTP_USER_AGENT is blank" do
48 48 notice = Fabricate.build(:notice)
49   - notice.user_agent.should == nil
  49 + expect(notice.user_agent).to eq nil
50 50 end
51 51 end
52 52  
53 53 describe "user agent string" do
54 54 it "should be parsed and human-readable" do
55 55 notice = Fabricate.build(:notice, :request => {'cgi-data' => {'HTTP_USER_AGENT' => 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16'}})
56   - notice.user_agent_string.should == 'Chrome 10.0.648.204 (OS X 10.6.7)'
  56 + expect(notice.user_agent_string).to eq 'Chrome 10.0.648.204 (OS X 10.6.7)'
57 57 end
58 58  
59 59 it "should be nil if HTTP_USER_AGENT is blank" do
60 60 notice = Fabricate.build(:notice)
61   - notice.user_agent_string.should == "N/A"
  61 + expect(notice.user_agent_string).to eq "N/A"
62 62 end
63 63 end
64 64  
65 65 describe "host" do
66 66 it "returns host if url is valid" do
67 67 notice = Fabricate.build(:notice, :request => {'url' => "http://example.com/resource/12"})
68   - notice.host.should == 'example.com'
  68 + expect(notice.host).to eq 'example.com'
69 69 end
70 70  
71 71 it "returns 'N/A' when url is not valid" do
72 72 notice = Fabricate.build(:notice, :request => {'url' => "some string"})
73   - notice.host.should == 'N/A'
  73 + expect(notice.host).to eq 'N/A'
74 74 end
75 75  
76 76 it "returns 'N/A' when url is empty" do
77 77 notice = Fabricate.build(:notice, :request => {})
78   - notice.host.should == 'N/A'
  78 + expect(notice.host).to eq 'N/A'
79 79 end
80 80 end
81 81  
82 82 describe "request" do
83 83 it "returns empty hash if not set" do
84 84 notice = Notice.new
85   - notice.request.should == {}
  85 + expect(notice.request).to eq ({})
86 86 end
87 87 end
88 88 end
... ...
spec/models/notification_service/campfire_service_spec.rb
... ... @@ -13,7 +13,7 @@ describe NotificationService::CampfireService do
13 13 campy.stub(:speak) { true }
14 14  
15 15 #assert
16   - campy.should_receive(:speak)
  16 + expect(campy).to receive(:speak)
17 17  
18 18 notification_service.create_notification(problem)
19 19 end
... ...
spec/models/notification_service/flowdock_service_spec.rb
... ... @@ -7,10 +7,10 @@ describe NotificationServices::FlowdockService do
7 7  
8 8 it 'sends message in appropriate format' do
9 9 Flowdock::Flow.any_instance.should_receive(:push_to_team_inbox) do |*args|
10   - args.first[:content].should_not include('<3')
11   - args.first[:content].should include('&lt;3')
  10 + expect(args.first[:content]).to_not include('<3')
  11 + expect(args.first[:content]).to include('&lt;3')
12 12  
13   - args.first[:project].should eq('App3')
  13 + expect(args.first[:project]).to eq('App3')
14 14 end
15 15 service.create_notification(problem)
16 16 end
... ...
spec/models/notification_service/gtalk_service_spec.rb
... ... @@ -12,22 +12,22 @@ describe NotificationService::GtalkService do
12 12 gtalk = double('GtalkService')
13 13 jid = double("jid")
14 14 message = double("message")
15   - Jabber::JID.should_receive(:new).with(notification_service.subdomain).and_return(jid)
16   - Jabber::Client.should_receive(:new).with(jid).and_return(gtalk)
17   - gtalk.should_receive(:connect).with(notification_service.service)
18   - gtalk.should_receive(:auth).with(notification_service.api_token)
  15 + expect(Jabber::JID).to receive(:new).with(notification_service.subdomain).and_return(jid)
  16 + expect(Jabber::Client).to receive(:new).with(jid).and_return(gtalk)
  17 + expect(gtalk).to receive(:connect).with(notification_service.service)
  18 + expect(gtalk).to receive(:auth).with(notification_service.api_token)
19 19 message_value = """#{problem.app.name.to_s}
20 20 http://#{Errbit::Config.host}/apps/#{problem.app.id.to_s}
21 21 #{notification_service.notification_description problem}"""
22 22  
23   - Jabber::Message.should_receive(:new).with(notification_service.user_id, message_value).and_return(message)
24   - Jabber::Message.should_receive(:new).with(notification_service.room_id, message_value).and_return(message)
  23 + expect(Jabber::Message).to receive(:new).with(notification_service.user_id, message_value).and_return(message)
  24 + expect(Jabber::Message).to receive(:new).with(notification_service.room_id, message_value).and_return(message)
25 25  
26   - Jabber::MUC::SimpleMUCClient.should_receive(:new).and_return(gtalk)
27   - gtalk.should_receive(:join).with(notification_service.room_id + "/errbit")
  26 + expect(Jabber::MUC::SimpleMUCClient).to receive(:new).and_return(gtalk)
  27 + expect(gtalk).to receive(:join).with(notification_service.room_id + "/errbit")
28 28  
29 29 #assert
30   - gtalk.should_receive(:send).exactly(2).times.with(message)
  30 + expect(gtalk).to receive(:send).exactly(2).times.with(message)
31 31  
32 32 notification_service.create_notification(problem)
33 33 end
... ... @@ -44,43 +44,43 @@ http://#{Errbit::Config.host}/apps/#{@problem.app.id.to_s}
44 44  
45 45 # gtalk stubbing
46 46 @gtalk = double('GtalkService')
47   - @gtalk.should_receive(:connect)
48   - @gtalk.should_receive(:auth)
  47 + expect(@gtalk).to receive(:connect)
  48 + expect(@gtalk).to receive(:auth)
49 49 jid = double("jid")
50 50 Jabber::JID.stub(:new).with(@notification_service.subdomain).and_return(jid)
51 51 Jabber::Client.stub(:new).with(jid).and_return(@gtalk)
52 52 end
53 53 it "should send a notification to all ',' separated users" do
54   - Jabber::Message.should_receive(:new).with("first@domain.org", @error_msg)
55   - Jabber::Message.should_receive(:new).with("second@domain.org", @error_msg)
56   - Jabber::Message.should_receive(:new).with("third@domain.org", @error_msg)
57   - Jabber::Message.should_receive(:new).with("fourth@domain.org", @error_msg)
58   - Jabber::MUC::SimpleMUCClient.should_not_receive(:new)
59   - @gtalk.should_receive(:send).exactly(4).times
  54 + expect(Jabber::Message).to receive(:new).with("first@domain.org", @error_msg)
  55 + expect(Jabber::Message).to receive(:new).with("second@domain.org", @error_msg)
  56 + expect(Jabber::Message).to receive(:new).with("third@domain.org", @error_msg)
  57 + expect(Jabber::Message).to receive(:new).with("fourth@domain.org", @error_msg)
  58 + expect(Jabber::MUC::SimpleMUCClient).to_not receive(:new)
  59 + expect(@gtalk).to receive(:send).exactly(4).times
60 60  
61 61 @notification_service.user_id = "first@domain.org,second@domain.org, third@domain.org , fourth@domain.org "
62 62 @notification_service.room_id = ""
63 63 @notification_service.create_notification(@problem)
64 64 end
65 65 it "should send a notification to all ';' separated users" do
66   - Jabber::Message.should_receive(:new).with("first@domain.org", @error_msg)
67   - Jabber::Message.should_receive(:new).with("second@domain.org", @error_msg)
68   - Jabber::Message.should_receive(:new).with("third@domain.org", @error_msg)
69   - Jabber::Message.should_receive(:new).with("fourth@domain.org", @error_msg)
70   - Jabber::MUC::SimpleMUCClient.should_not_receive(:new)
71   - @gtalk.should_receive(:send).exactly(4).times
  66 + expect(Jabber::Message).to receive(:new).with("first@domain.org", @error_msg)
  67 + expect(Jabber::Message).to receive(:new).with("second@domain.org", @error_msg)
  68 + expect(Jabber::Message).to receive(:new).with("third@domain.org", @error_msg)
  69 + expect(Jabber::Message).to receive(:new).with("fourth@domain.org", @error_msg)
  70 + expect(Jabber::MUC::SimpleMUCClient).to_not receive(:new)
  71 + expect(@gtalk).to receive(:send).exactly(4).times
72 72  
73 73 @notification_service.user_id = "first@domain.org;second@domain.org; third@domain.org ; fourth@domain.org "
74 74 @notification_service.room_id = ""
75 75 @notification_service.create_notification(@problem)
76 76 end
77 77 it "should send a notification to all ' ' separated users" do
78   - Jabber::Message.should_receive(:new).with("first@domain.org", @error_msg)
79   - Jabber::Message.should_receive(:new).with("second@domain.org", @error_msg)
80   - Jabber::Message.should_receive(:new).with("third@domain.org", @error_msg)
81   - Jabber::Message.should_receive(:new).with("fourth@domain.org", @error_msg)
82   - Jabber::MUC::SimpleMUCClient.should_not_receive(:new)
83   - @gtalk.should_receive(:send).exactly(4).times
  78 + expect(Jabber::Message).to receive(:new).with("first@domain.org", @error_msg)
  79 + expect(Jabber::Message).to receive(:new).with("second@domain.org", @error_msg)
  80 + expect(Jabber::Message).to receive(:new).with("third@domain.org", @error_msg)
  81 + expect(Jabber::Message).to receive(:new).with("fourth@domain.org", @error_msg)
  82 + expect(Jabber::MUC::SimpleMUCClient).to_not receive(:new)
  83 + expect(@gtalk).to receive(:send).exactly(4).times
84 84  
85 85 @notification_service.user_id = "first@domain.org second@domain.org third@domain.org fourth@domain.org "
86 86 @notification_service.room_id = ""
... ... @@ -100,23 +100,23 @@ http://#{Errbit::Config.host}/apps/#{@problem.app.id.to_s}
100 100 gtalk = double('GtalkService')
101 101 jid = double("jid")
102 102 message = double("message")
103   - Jabber::JID.should_receive(:new).with(notification_service.subdomain).and_return(jid)
104   - Jabber::Client.should_receive(:new).with(jid).and_return(gtalk)
105   - gtalk.should_receive(:connect)
106   - gtalk.should_receive(:auth).with(notification_service.api_token)
  103 + expect(Jabber::JID).to receive(:new).with(notification_service.subdomain).and_return(jid)
  104 + expect(Jabber::Client).to receive(:new).with(jid).and_return(gtalk)
  105 + expect(gtalk).to receive(:connect)
  106 + expect(gtalk).to receive(:auth).with(notification_service.api_token)
107 107 message_value = """#{problem.app.name.to_s}
108 108 http://#{Errbit::Config.host}/apps/#{problem.app.id.to_s}
109 109 #{notification_service.notification_description problem}"""
110 110  
111   - Jabber::Message.should_receive(:new).with(notification_service.room_id, message_value).and_return(message)
  111 + expect(Jabber::Message).to receive(:new).with(notification_service.room_id, message_value).and_return(message)
112 112  
113   - Jabber::MUC::SimpleMUCClient.should_receive(:new).and_return(gtalk)
114   - gtalk.should_receive(:join).with(notification_service.room_id + "/errbit")
  113 + expect(Jabber::MUC::SimpleMUCClient).to receive(:new).and_return(gtalk)
  114 + expect(gtalk).to receive(:join).with(notification_service.room_id + "/errbit")
115 115  
116 116 notification_service.user_id = ""
117 117  
118 118 #assert
119   - gtalk.should_receive(:send).with(message)
  119 + expect(gtalk).to receive(:send).with(message)
120 120  
121 121 notification_service.create_notification(problem)
122 122 end
... ...
spec/models/notification_service/hipchat_service_spec.rb
... ... @@ -10,15 +10,15 @@ describe NotificationServices::HipchatService do
10 10 end
11 11  
12 12 it 'sends message' do
13   - room.should_receive(:send)
  13 + expect(room).to receive(:send)
14 14 service.create_notification(problem)
15 15 end
16 16  
17 17 it 'escapes html in message' do
18 18 problem.stub(:message => '<3')
19   - room.should_receive(:send) do |_, message|
20   - message.should_not include('<3')
21   - message.should include('&lt;3')
  19 + expect(room).to receive(:send) do |_, message|
  20 + expect(message).to_not include('<3')
  21 + expect(message).to include('&lt;3')
22 22 end
23 23 service.create_notification(problem)
24 24 end
... ...
spec/models/notification_service/hoiio_service_spec.rb
... ... @@ -13,7 +13,7 @@ describe NotificationService::HoiioService do
13 13 sms.stub(:send) { true }
14 14  
15 15 #assert
16   - sms.should_receive(:send)
  16 + expect(sms).to receive(:send)
17 17  
18 18 notification_service.create_notification(problem)
19 19 end
... ...
spec/models/notification_service/hubot_service_spec.rb
... ... @@ -8,7 +8,7 @@ describe NotificationService::HubotService do
8 8 problem = notice.problem
9 9  
10 10 # faraday stubbing
11   - HTTParty.should_receive(:post).with(notification_service.api_token, :body => {:message => an_instance_of(String), :room => notification_service.room_id}).and_return(true)
  11 + expect(HTTParty).to receive(:post).with(notification_service.api_token, :body => {:message => an_instance_of(String), :room => notification_service.room_id}).and_return(true)
12 12  
13 13 notification_service.create_notification(problem)
14 14 end
... ...
spec/models/notification_service/pushover_service_spec.rb
... ... @@ -13,7 +13,7 @@ describe NotificationService::PushoverService do
13 13 notification.stub(:notify) { true }
14 14  
15 15 #assert
16   - notification.should_receive(:notify)
  16 + expect(notification).to receive(:notify)
17 17  
18 18 notification_service.create_notification(problem)
19 19 end
... ...
spec/models/notification_service/webhook_service_spec.rb
... ... @@ -6,7 +6,7 @@ describe NotificationService::WebhookService do
6 6 notification_service = Fabricate :webhook_notification_service, :app => notice.app
7 7 problem = notice.problem
8 8  
9   - HTTParty.should_receive(:post).with(notification_service.api_token, :body => {:problem => problem.to_json}).and_return(true)
  9 + expect(HTTParty).to receive(:post).with(notification_service.api_token, :body => {:problem => problem.to_json}).and_return(true)
10 10  
11 11 notification_service.create_notification(problem)
12 12 end
... ...
spec/models/problem_spec.rb
... ... @@ -5,33 +5,33 @@ describe Problem do
5 5 context 'validations' do
6 6 it 'requires an environment' do
7 7 err = Fabricate.build(:problem, :environment => nil)
8   - err.should_not be_valid
9   - err.errors[:environment].should include("can't be blank")
  8 + expect(err).to_not be_valid
  9 + expect(err.errors[:environment]).to include("can't be blank")
10 10 end
11 11 end
12 12  
13 13 describe "Fabrication" do
14 14 context "Fabricate(:problem)" do
15 15 it 'should have no comment' do
16   - lambda do
  16 + expect{
17 17 Fabricate(:problem)
18   - end.should_not change(Comment, :count)
  18 + }.to_not change(Comment, :count)
19 19 end
20 20 end
21 21  
22 22 context "Fabricate(:problem_with_comments)" do
23 23 it 'should have 3 comments' do
24   - lambda do
  24 + expect{
25 25 Fabricate(:problem_with_comments)
26   - end.should change(Comment, :count).by(3)
  26 + }.to change(Comment, :count).by(3)
27 27 end
28 28 end
29 29  
30 30 context "Fabricate(:problem_with_errs)" do
31 31 it 'should have 3 errs' do
32   - lambda do
  32 + expect{
33 33 Fabricate(:problem_with_errs)
34   - end.should change(Err, :count).by(3)
  34 + }.to change(Err, :count).by(3)
35 35 end
36 36 end
37 37 end
... ... @@ -40,13 +40,13 @@ describe Problem do
40 40 it "returns the created_at timestamp of the latest notice" do
41 41 err = Fabricate(:err)
42 42 problem = err.problem
43   - problem.should_not be_nil
  43 + expect(problem).to_not be_nil
44 44  
45 45 notice1 = Fabricate(:notice, :err => err)
46   - problem.last_notice_at.should == notice1.created_at
  46 + expect(problem.last_notice_at).to eq notice1.created_at
47 47  
48 48 notice2 = Fabricate(:notice, :err => err)
49   - problem.last_notice_at.should == notice2.created_at
  49 + expect(problem.last_notice_at).to eq notice2.created_at
50 50 end
51 51 end
52 52  
... ... @@ -54,7 +54,7 @@ describe Problem do
54 54 it "returns the created_at timestamp of the first notice" do
55 55 err = Fabricate(:err)
56 56 problem = err.problem
57   - problem.should_not be_nil
  57 + expect(problem).to_not be_nil
58 58  
59 59 notice1 = Fabricate(:notice, :err => err)
60 60 expect(problem.first_notice_at.to_i).to be_within(1).of(notice1.created_at.to_i)
... ... @@ -68,9 +68,9 @@ describe Problem do
68 68 it "adding a notice caches its message" do
69 69 err = Fabricate(:err)
70 70 problem = err.problem
71   - lambda {
  71 + expect {
72 72 Fabricate(:notice, :err => err, :message => 'ERR 1')
73   - }.should change(problem, :message).from(nil).to('ERR 1')
  73 + }.to change(problem, :message).from(nil).to('ERR 1')
74 74 end
75 75 end
76 76  
... ... @@ -78,7 +78,7 @@ describe Problem do
78 78 context 'when the app has err notifications set to false' do
79 79 it 'should not send an email notification' do
80 80 app = Fabricate(:app_with_watcher, :notify_on_errs => false)
81   - Mailer.should_not_receive(:err_notification)
  81 + expect(Mailer).to_not receive(:err_notification)
82 82 Fabricate(:problem, :app => app)
83 83 end
84 84 end
... ... @@ -87,24 +87,24 @@ describe Problem do
87 87 context "#resolved?" do
88 88 it "should start out as unresolved" do
89 89 problem = Problem.new
90   - problem.should_not be_resolved
91   - problem.should be_unresolved
  90 + expect(problem).to_not be_resolved
  91 + expect(problem).to be_unresolved
92 92 end
93 93  
94 94 it "should be able to be resolved" do
95 95 problem = Fabricate(:problem)
96   - problem.should_not be_resolved
  96 + expect(problem).to_not be_resolved
97 97 problem.resolve!
98   - problem.reload.should be_resolved
  98 + expect(problem.reload).to be_resolved
99 99 end
100 100 end
101 101  
102 102 context "resolve!" do
103 103 it "marks the problem as resolved" do
104 104 problem = Fabricate(:problem)
105   - problem.should_not be_resolved
  105 + expect(problem).to_not be_resolved
106 106 problem.resolve!
107   - problem.should be_resolved
  107 + expect(problem).to be_resolved
108 108 end
109 109  
110 110 it "should record the time when it was resolved" do
... ... @@ -113,31 +113,31 @@ describe Problem do
113 113 Timecop.freeze(expected_resolved_at) do
114 114 problem.resolve!
115 115 end
116   - problem.resolved_at.to_s.should == expected_resolved_at.to_s
  116 + expect(problem.resolved_at.to_s).to eq expected_resolved_at.to_s
117 117 end
118 118  
119 119 it "should not reset notice count" do
120 120 problem = Fabricate(:problem, :notices_count => 1)
121 121 original_notices_count = problem.notices_count
122   - original_notices_count.should > 0
  122 + expect(original_notices_count).to be > 0
123 123  
124 124 problem.resolve!
125   - problem.notices_count.should == original_notices_count
  125 + expect(problem.notices_count).to eq original_notices_count
126 126 end
127 127  
128 128 it "should throw an err if it's not successful" do
129 129 problem = Fabricate(:problem)
130   - problem.should_not be_resolved
  130 + expect(problem).to_not be_resolved
131 131 problem.stub(:valid?).and_return(false)
132 132 ## update_attributes not test #valid? but #errors.any?
133 133 # https://github.com/mongoid/mongoid/blob/master/lib/mongoid/persistence.rb#L137
134 134 er = ActiveModel::Errors.new(problem)
135 135 er.add_on_blank(:resolved)
136 136 problem.stub(:errors).and_return(er)
137   - problem.should_not be_valid
138   - lambda {
  137 + expect(problem).to_not be_valid
  138 + expect {
139 139 problem.resolve!
140   - }.should raise_error(Mongoid::Errors::Validations)
  140 + }.to raise_error(Mongoid::Errors::Validations)
141 141 end
142 142 end
143 143  
... ... @@ -146,10 +146,10 @@ describe Problem do
146 146 problem1 = Fabricate(:notice).problem
147 147 problem2 = Fabricate(:notice).problem
148 148 merged_problem = Problem.merge!(problem1, problem2)
149   - merged_problem.errs.length.should == 2
  149 + expect(merged_problem.errs.length).to eq 2
150 150  
151 151 expect { merged_problem.unmerge! }.to change(Problem, :count).by(1)
152   - merged_problem.errs(true).length.should == 1
  152 + expect(merged_problem.errs(true).length).to eq 1
153 153 end
154 154  
155 155 it "runs smoothly for problem without errs" do
... ... @@ -162,8 +162,8 @@ describe Problem do
162 162 it 'only finds resolved Problems' do
163 163 resolved = Fabricate(:problem, :resolved => true)
164 164 unresolved = Fabricate(:problem, :resolved => false)
165   - Problem.resolved.all.should include(resolved)
166   - Problem.resolved.all.should_not include(unresolved)
  165 + expect(Problem.resolved.all).to include(resolved)
  166 + expect(Problem.resolved.all).to_not include(unresolved)
167 167 end
168 168 end
169 169  
... ... @@ -171,8 +171,8 @@ describe Problem do
171 171 it 'only finds unresolved Problems' do
172 172 resolved = Fabricate(:problem, :resolved => true)
173 173 unresolved = Fabricate(:problem, :resolved => false)
174   - Problem.unresolved.all.should_not include(resolved)
175   - Problem.unresolved.all.should include(unresolved)
  174 + expect(Problem.unresolved.all).to_not include(resolved)
  175 + expect(Problem.unresolved.all).to include(unresolved)
176 176 end
177 177 end
178 178  
... ... @@ -182,12 +182,12 @@ describe Problem do
182 182 :message => "other", :where => 'errorclass', :environment => 'development', :app_name => 'other')
183 183 dont_find = Fabricate(:problem, :resolved => false, :error_class => "Batman",
184 184 :message => 'todo', :where => 'classerror', :environment => 'development', :app_name => 'other')
185   - Problem.search("theErrorClass").unresolved.should include(find)
186   - Problem.search("theErrorClass").unresolved.should_not include(dont_find)
  185 + expect(Problem.search("theErrorClass").unresolved).to include(find)
  186 + expect(Problem.search("theErrorClass").unresolved).to_not include(dont_find)
187 187 end
188 188 it 'find on where message' do
189 189 problem = Fabricate(:problem, :where => 'cyril')
190   - Problem.search('cyril').entries.should eq [problem]
  190 + expect(Problem.search('cyril').entries).to eq [problem]
191 191 end
192 192 end
193 193 end
... ... @@ -200,13 +200,13 @@ describe Problem do
200 200 end
201 201  
202 202 it "#notices_count returns 0 by default" do
203   - @problem.notices_count.should == 0
  203 + expect(@problem.notices_count).to eq 0
204 204 end
205 205  
206 206 it "adding a notice increases #notices_count by 1" do
207   - lambda {
  207 + expect {
208 208 Fabricate(:notice, :err => @err, :message => 'ERR 1')
209   - }.should change(@problem.reload, :notices_count).from(0).to(1)
  209 + }.to change(@problem.reload, :notices_count).from(0).to(1)
210 210 end
211 211  
212 212 it "removing a notice decreases #notices_count by 1" do
... ... @@ -229,10 +229,10 @@ describe Problem do
229 229 end
230 230  
231 231 it "is updated when an app is updated" do
232   - lambda {
  232 + expect {
233 233 app.update_attributes!(:name => "Bar App")
234 234 problem.reload
235   - }.should change(problem, :app_name).to("Bar App")
  235 + }.to change(problem, :app_name).to("Bar App")
236 236 end
237 237 end
238 238  
... ... @@ -251,10 +251,10 @@ describe Problem do
251 251 it "is updated when a deploy is created" do
252 252 problem = Fabricate(:problem, :app => @app, :environment => "production")
253 253 next_deploy = Time.at(5.minutes.ago.localtime.to_i)
254   - lambda {
  254 + expect {
255 255 @deploy = Fabricate(:deploy, :app => @app, :created_at => next_deploy)
256 256 problem.reload
257   - }.should change(problem, :last_deploy_at).from(@last_deploy).to(next_deploy)
  257 + }.to change(problem, :last_deploy_at).from(@last_deploy).to(next_deploy)
258 258 end
259 259 end
260 260  
... ... @@ -266,21 +266,21 @@ describe Problem do
266 266 end
267 267  
268 268 it "#messages should be empty by default" do
269   - @problem.messages.should == {}
  269 + expect(@problem.messages).to eq ({})
270 270 end
271 271  
272 272 it "adding a notice adds a string to #messages" do
273   - lambda {
  273 + expect {
274 274 Fabricate(:notice, :err => @err, :message => 'ERR 1')
275   - }.should change(@problem, :messages).from({}).to({Digest::MD5.hexdigest('ERR 1') => {'value' => 'ERR 1', 'count' => 1}})
  275 + }.to change(@problem, :messages).from({}).to({Digest::MD5.hexdigest('ERR 1') => {'value' => 'ERR 1', 'count' => 1}})
276 276 end
277 277  
278 278 it "removing a notice removes string from #messages" do
279 279 notice1 = Fabricate(:notice, :err => @err, :message => 'ERR 1')
280   - lambda {
  280 + expect {
281 281 @err.notices.first.destroy
282 282 @problem.reload
283   - }.should change(@problem, :messages).from({Digest::MD5.hexdigest('ERR 1') => {'value' => 'ERR 1', 'count' => 1}}).to({})
  283 + }.to change(@problem, :messages).from({Digest::MD5.hexdigest('ERR 1') => {'value' => 'ERR 1', 'count' => 1}}).to({})
284 284 end
285 285  
286 286 it "removing a notice from the problem with broken counter should not raise an error" do
... ... @@ -299,21 +299,21 @@ describe Problem do
299 299 end
300 300  
301 301 it "#hosts should be empty by default" do
302   - @problem.hosts.should == {}
  302 + expect(@problem.hosts).to eq ({})
303 303 end
304 304  
305 305 it "adding a notice adds a string to #hosts" do
306   - lambda {
  306 + expect {
307 307 Fabricate(:notice, :err => @err, :request => {'url' => "http://example.com/resource/12"})
308   - }.should change(@problem, :hosts).from({}).to({Digest::MD5.hexdigest('example.com') => {'value' => 'example.com', 'count' => 1}})
  308 + }.to change(@problem, :hosts).from({}).to({Digest::MD5.hexdigest('example.com') => {'value' => 'example.com', 'count' => 1}})
309 309 end
310 310  
311 311 it "removing a notice removes string from #hosts" do
312 312 notice1 = Fabricate(:notice, :err => @err, :request => {'url' => "http://example.com/resource/12"})
313   - lambda {
  313 + expect {
314 314 @err.notices.first.destroy
315 315 @problem.reload
316   - }.should change(@problem, :hosts).from({Digest::MD5.hexdigest('example.com') => {'value' => 'example.com', 'count' => 1}}).to({})
  316 + }.to change(@problem, :hosts).from({Digest::MD5.hexdigest('example.com') => {'value' => 'example.com', 'count' => 1}}).to({})
317 317 end
318 318 end
319 319  
... ... @@ -325,21 +325,21 @@ describe Problem do
325 325 end
326 326  
327 327 it "#user_agents should be empty by default" do
328   - @problem.user_agents.should == {}
  328 + expect(@problem.user_agents).to eq ({})
329 329 end
330 330  
331 331 it "adding a notice adds a string to #user_agents" do
332   - lambda {
  332 + expect {
333 333 Fabricate(:notice, :err => @err, :request => {'cgi-data' => {'HTTP_USER_AGENT' => 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16'}})
334   - }.should change(@problem, :user_agents).from({}).to({Digest::MD5.hexdigest('Chrome 10.0.648.204 (OS X 10.6.7)') => {'value' => 'Chrome 10.0.648.204 (OS X 10.6.7)', 'count' => 1}})
  334 + }.to change(@problem, :user_agents).from({}).to({Digest::MD5.hexdigest('Chrome 10.0.648.204 (OS X 10.6.7)') => {'value' => 'Chrome 10.0.648.204 (OS X 10.6.7)', 'count' => 1}})
335 335 end
336 336  
337 337 it "removing a notice removes string from #user_agents" do
338 338 notice1 = Fabricate(:notice, :err => @err, :request => {'cgi-data' => {'HTTP_USER_AGENT' => 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16'}})
339   - lambda {
  339 + expect {
340 340 @err.notices.first.destroy
341 341 @problem.reload
342   - }.should change(@problem, :user_agents).from({
  342 + }.to change(@problem, :user_agents).from({
343 343 Digest::MD5.hexdigest('Chrome 10.0.648.204 (OS X 10.6.7)') => {'value' => 'Chrome 10.0.648.204 (OS X 10.6.7)', 'count' => 1}
344 344 }).to({})
345 345 end
... ... @@ -352,21 +352,21 @@ describe Problem do
352 352 end
353 353  
354 354 it "#comments_count returns 0 by default" do
355   - @problem.comments_count.should == 0
  355 + expect(@problem.comments_count).to eq 0
356 356 end
357 357  
358 358 it "adding a comment increases #comments_count by 1" do
359   - lambda {
  359 + expect {
360 360 Fabricate(:comment, :err => @problem)
361   - }.should change(@problem, :comments_count).from(0).to(1)
  361 + }.to change(@problem, :comments_count).from(0).to(1)
362 362 end
363 363  
364 364 it "removing a comment decreases #comments_count by 1" do
365 365 comment1 = Fabricate(:comment, :err => @problem)
366   - lambda {
  366 + expect {
367 367 @problem.reload.comments.first.destroy
368 368 @problem.reload
369   - }.should change(@problem, :comments_count).from(1).to(0)
  369 + }.to change(@problem, :comments_count).from(1).to(0)
370 370 end
371 371 end
372 372  
... ...
spec/models/user_spec.rb
... ... @@ -5,38 +5,38 @@ describe User do
5 5 context 'validations' do
6 6 it 'require that a name is present' do
7 7 user = Fabricate.build(:user, :name => nil)
8   - user.should_not be_valid
9   - user.errors[:name].should include("can't be blank")
  8 + expect(user).to_not be_valid
  9 + expect(user.errors[:name]).to include("can't be blank")
10 10 end
11 11  
12 12 it 'requires password without github login' do
13 13 user = Fabricate.build(:user, :password => nil)
14   - user.should_not be_valid
15   - user.errors[:password].should include("can't be blank")
  14 + expect(user).to_not be_valid
  15 + expect(user.errors[:password]).to include("can't be blank")
16 16 end
17 17  
18 18 it "doesn't require password with github login" do
19 19 user = Fabricate.build(:user, :password => nil, :github_login => 'nashby')
20   - user.should be_valid
  20 + expect(user).to be_valid
21 21 end
22 22  
23 23 it 'requires uniq github login' do
24 24 user1 = Fabricate(:user, :github_login => 'nashby')
25   - user1.should be_valid
  25 + expect(user1).to be_valid
26 26  
27 27 user2 = Fabricate.build(:user, :github_login => 'nashby')
28 28 user2.save
29   - user2.should_not be_valid
30   - user2.errors[:github_login].should include("is already taken")
  29 + expect(user2).to_not be_valid
  30 + expect(user2.errors[:github_login]).to include("is already taken")
31 31 end
32 32  
33 33 it 'allows blank / null github_login' do
34 34 user1 = Fabricate(:user, :github_login => ' ')
35   - user1.should be_valid
  35 + expect(user1).to be_valid
36 36  
37 37 user2 = Fabricate.build(:user, :github_login => ' ')
38 38 user2.save
39   - user2.should be_valid
  39 + expect(user2).to be_valid
40 40 end
41 41 end
42 42  
... ... @@ -45,8 +45,8 @@ describe User do
45 45 it 'has many watchers' do
46 46 user = Fabricate(:user)
47 47 watcher = Fabricate(:user_watcher, :user => user)
48   - user.watchers.should_not be_empty
49   - user.watchers.should include(watcher)
  48 + expect(user.watchers).to_not be_empty
  49 + expect(user.watchers).to include(watcher)
50 50 end
51 51  
52 52 it "has many apps through watchers" do
... ... @@ -54,8 +54,8 @@ describe User do
54 54 watched_app = Fabricate(:app)
55 55 unwatched_app = Fabricate(:app)
56 56 watcher = Fabricate(:user_watcher, :app => watched_app, :user => user)
57   - user.apps.all.should include(watched_app)
58   - user.apps.all.should_not include(unwatched_app)
  57 + expect(user.apps.all).to include(watched_app)
  58 + expect(user.apps.all).to_not include(unwatched_app)
59 59 end
60 60  
61 61 end
... ...
spec/models/watcher_spec.rb
... ... @@ -5,18 +5,18 @@ describe Watcher do
5 5 context 'validations' do
6 6 it 'requires an email address or an associated user' do
7 7 watcher = Fabricate.build(:watcher, :email => nil, :user => nil)
8   - watcher.should_not be_valid
9   - watcher.errors[:base].should include("You must specify either a user or an email address")
  8 + expect(watcher).to_not be_valid
  9 + expect(watcher.errors[:base]).to include("You must specify either a user or an email address")
10 10  
11 11 watcher.email = 'watcher@example.com'
12   - watcher.should be_valid
  12 + expect(watcher).to be_valid
13 13  
14 14 watcher.email = nil
15   - watcher.should_not be_valid
  15 + expect(watcher).to_not be_valid
16 16  
17 17 watcher.user = Fabricate(:user)
18 18 watcher.watcher_type = 'user'
19   - watcher.should be_valid
  19 + expect(watcher).to be_valid
20 20 end
21 21 end
22 22  
... ... @@ -24,12 +24,12 @@ describe Watcher do
24 24 it "returns the user's email address if there is a user" do
25 25 user = Fabricate(:user, :email => 'foo@bar.com')
26 26 watcher = Fabricate(:user_watcher, :user => user)
27   - watcher.address.should == 'foo@bar.com'
  27 + expect(watcher.address).to eq 'foo@bar.com'
28 28 end
29 29  
30 30 it "returns the email if there is no user" do
31 31 watcher = Fabricate(:watcher, :email => 'widgets@acme.com')
32   - watcher.address.should == 'widgets@acme.com'
  32 + expect(watcher.address).to eq 'widgets@acme.com'
33 33 end
34 34 end
35 35  
... ...
spec/views/apps/edit.html.haml_spec.rb
... ... @@ -14,7 +14,7 @@ describe &quot;apps/edit.html.haml&quot; do
14 14  
15 15 it "should confirm the 'destroy' link" do
16 16 render
17   - action_bar.should have_selector('a.button[data-confirm="%s"]' % I18n.t('apps.confirm_delete'))
  17 + expect(action_bar).to have_selector('a.button[data-confirm="%s"]' % I18n.t('apps.confirm_delete'))
18 18 end
19 19  
20 20 end
... ... @@ -28,7 +28,7 @@ describe &quot;apps/edit.html.haml&quot; do
28 28  
29 29 it 'see the error' do
30 30 render
31   - rendered.should match(/You must specify your/)
  31 + expect(rendered).to match(/You must specify your/)
32 32 end
33 33 end
34 34  
... ...
spec/views/apps/index.html.haml_spec.rb
... ... @@ -10,7 +10,7 @@ describe &quot;apps/index.html.haml&quot; do
10 10 describe "deploy column" do
11 11 it "should show the first 7 characters of the revision in parentheses" do
12 12 render
13   - rendered.should match(/\(1234567\)/)
  13 + expect(rendered).to match(/\(1234567\)/)
14 14 end
15 15 end
16 16 end
... ...
spec/views/apps/new.html.haml_spec.rb
... ... @@ -15,7 +15,7 @@ describe &quot;apps/new.html.haml&quot; do
15 15 it "should confirm the 'cancel' link" do
16 16 render
17 17  
18   - action_bar.should have_selector('a.button', :text => 'cancel')
  18 + expect(action_bar).to have_selector('a.button', :text => 'cancel')
19 19 end
20 20  
21 21 end
... ... @@ -29,7 +29,7 @@ describe &quot;apps/new.html.haml&quot; do
29 29  
30 30 it 'see the error' do
31 31 render
32   - rendered.should match(/You must specify your/)
  32 + expect(rendered).to match(/You must specify your/)
33 33 end
34 34 end
35 35  
... ...
spec/views/apps/show.html.haml_spec.rb
... ... @@ -20,7 +20,7 @@ describe &quot;apps/show.html.haml&quot; do
20 20 it "should confirm the 'cancel' link" do
21 21 render
22 22  
23   - action_bar.should have_selector('a.button', :text => 'all errs')
  23 + expect(action_bar).to have_selector('a.button', :text => 'all errs')
24 24 end
25 25  
26 26 end
... ... @@ -28,7 +28,7 @@ describe &quot;apps/show.html.haml&quot; do
28 28 context "without errs" do
29 29 it 'see no errs' do
30 30 render
31   - rendered.should match(/No errs have been/)
  31 + expect(rendered).to match(/No errs have been/)
32 32 end
33 33 end
34 34  
... ...
spec/views/notices/_summary.html.haml_spec.rb
... ... @@ -6,7 +6,7 @@ describe &quot;notices/_summary.html.haml&quot; do
6 6 it "renders application framework" do
7 7 render "notices/summary", :notice => notice, :problem => notice.problem
8 8  
9   - rendered.should have_content('Rails 3.2.11')
  9 + expect(rendered).to have_content('Rails 3.2.11')
10 10 end
11 11 end
12 12  
... ...
spec/views/notices/_user_attributes.html.haml_spec.rb
... ... @@ -11,7 +11,7 @@ describe &quot;notices/_user_attributes.html.haml&quot; do
11 11 assign :app, notice.err.app
12 12  
13 13 render "notices/user_attributes", :user => notice.user_attributes
14   - rendered.should have_link('http://example.com')
  14 + expect(rendered).to have_link('http://example.com')
15 15 end
16 16 end
17 17 end
... ...
spec/views/problems/index.atom.builder_spec.rb
... ... @@ -8,7 +8,7 @@ describe &quot;problems/index.atom.builder&quot; do
8 8 :message => 'foo',
9 9 :new_record => false, :app => app), Problem.new(:new_record => false, :app => app)])
10 10 render
11   - rendered.should match('foo')
  11 + expect(rendered).to match('foo')
12 12 end
13 13  
14 14 end
... ...
spec/views/problems/index.html.haml_spec.rb
... ... @@ -17,7 +17,7 @@ describe &quot;problems/index.html.haml&quot; do
17 17  
18 18 it 'should works' do
19 19 render
20   - rendered.should have_selector('div#problem_table.problem_table')
  20 + expect(rendered).to have_selector('div#problem_table.problem_table')
21 21 end
22 22 end
23 23  
... ...
spec/views/problems/show.html.haml_spec.rb
... ... @@ -28,26 +28,26 @@ describe &quot;problems/show.html.haml&quot; do
28 28  
29 29 it "should confirm the 'resolve' link by default" do
30 30 render
31   - action_bar.should have_selector('a.resolve[data-confirm="%s"]' % I18n.t('problems.confirm.resolve_one'))
  31 + expect(action_bar).to have_selector('a.resolve[data-confirm="%s"]' % I18n.t('problems.confirm.resolve_one'))
32 32 end
33 33  
34 34 it "should confirm the 'resolve' link if configuration is unset" do
35 35 Errbit::Config.stub(:confirm_err_actions).and_return(nil)
36 36 render
37   - action_bar.should have_selector('a.resolve[data-confirm="%s"]' % I18n.t('problems.confirm.resolve_one'))
  37 + expect(action_bar).to have_selector('a.resolve[data-confirm="%s"]' % I18n.t('problems.confirm.resolve_one'))
38 38 end
39 39  
40 40 it "should not confirm the 'resolve' link if configured not to" do
41 41 Errbit::Config.stub(:confirm_err_actions).and_return(false)
42 42 render
43   - action_bar.should have_selector('a.resolve[data-confirm="null"]')
  43 + expect(action_bar).to have_selector('a.resolve[data-confirm="null"]')
44 44 end
45 45  
46 46 it "should link 'up' to HTTP_REFERER if is set" do
47 47 url = 'http://localhost:3000/problems'
48 48 controller.request.env['HTTP_REFERER'] = url
49 49 render
50   - action_bar.should have_selector("span a.up[href='#{url}']", :text => 'up')
  50 + expect(action_bar).to have_selector("span a.up[href='#{url}']", :text => 'up')
51 51 end
52 52  
53 53 it "should link 'up' to app_problems_path if HTTP_REFERER isn't set'" do
... ... @@ -57,7 +57,7 @@ describe &quot;problems/show.html.haml&quot; do
57 57 view.stub(:app).and_return(problem.app)
58 58 render
59 59  
60   - action_bar.should have_selector("span a.up[href='#{app_problems_path(problem.app)}']", :text => 'up')
  60 + expect(action_bar).to have_selector("span a.up[href='#{app_problems_path(problem.app)}']", :text => 'up')
61 61 end
62 62  
63 63 context 'create issue links' do
... ... @@ -70,7 +70,7 @@ describe &quot;problems/show.html.haml&quot; do
70 70 view.stub(:app).and_return(problem.app)
71 71 render
72 72  
73   - action_bar.should have_selector("span a.github_create.create-issue", :text => 'create issue')
  73 + expect(action_bar).to have_selector("span a.github_create.create-issue", :text => 'create issue')
74 74 end
75 75  
76 76 it 'should allow creating issue for github if application has a github tracker' do
... ... @@ -80,7 +80,7 @@ describe &quot;problems/show.html.haml&quot; do
80 80 view.stub(:app).and_return(problem.app)
81 81 render
82 82  
83   - action_bar.should have_selector("span a.github_create.create-issue", :text => 'create issue')
  83 + expect(action_bar).to have_selector("span a.github_create.create-issue", :text => 'create issue')
84 84 end
85 85  
86 86 context "without issue tracker associate on app" do
... ... @@ -139,9 +139,9 @@ describe &quot;problems/show.html.haml&quot; do
139 139 view.stub(:app).and_return(problem.app)
140 140 render
141 141  
142   - view.content_for(:comments).should include('Test comment')
143   - view.content_for(:comments).should have_selector('img[src^="http://www.gravatar.com/avatar"]')
144   - view.content_for(:comments).should include('Add a comment')
  142 + expect(view.content_for(:comments)).to include('Test comment')
  143 + expect(view.content_for(:comments)).to have_selector('img[src^="http://www.gravatar.com/avatar"]')
  144 + expect(view.content_for(:comments)).to include('Add a comment')
145 145 end
146 146  
147 147 context "with issue tracker" do
... ... @@ -149,7 +149,7 @@ describe &quot;problems/show.html.haml&quot; do
149 149 problem = Fabricate(:problem)
150 150 with_issue_tracker(PivotalLabsTracker, problem)
151 151 render
152   - view.view_flow.get(:comments).should be_blank
  152 + expect(view.view_flow.get(:comments)).to be_blank
153 153 end
154 154  
155 155 it 'should display existing comments' do
... ... @@ -158,9 +158,9 @@ describe &quot;problems/show.html.haml&quot; do
158 158 with_issue_tracker(PivotalLabsTracker, problem)
159 159 render
160 160  
161   - view.content_for(:comments).should include('Test comment')
162   - view.content_for(:comments).should have_selector('img[src^="http://www.gravatar.com/avatar"]')
163   - view.content_for(:comments).should_not include('Add a comment')
  161 + expect(view.content_for(:comments)).to include('Test comment')
  162 + expect(view.content_for(:comments)).to have_selector('img[src^="http://www.gravatar.com/avatar"]')
  163 + expect(view.content_for(:comments)).to_not include('Add a comment')
164 164 end
165 165 end
166 166 end
... ...
spec/views/users/show.html.haml_spec.rb
... ... @@ -16,14 +16,14 @@ describe &#39;users/show.html.haml&#39; do
16 16 it 'shows github login' do
17 17 user.github_login = 'test_user'
18 18 render
19   - rendered.should match(/GitHub/)
20   - rendered.should match(/test_user/)
  19 + expect(rendered).to match(/GitHub/)
  20 + expect(rendered).to match(/test_user/)
21 21 end
22 22  
23 23 it 'does not show github if blank' do
24 24 user.github_login = ' '
25 25 render
26   - rendered.should_not match(/GitHub/)
  26 + expect(rendered).to_not match(/GitHub/)
27 27 end
28 28 end
29 29  
... ... @@ -31,8 +31,8 @@ describe &#39;users/show.html.haml&#39; do
31 31 context 'viewing another user page' do
32 32 it "doesn't show and github linking buttons if user is not current user" do
33 33 render
34   - view.content_for(:action_bar).should_not include('Link GitHub account')
35   - view.content_for(:action_bar).should_not include('Unlink GitHub account')
  34 + expect(view.content_for(:action_bar)).to_not include('Link GitHub account')
  35 + expect(view.content_for(:action_bar)).to_not include('Unlink GitHub account')
36 36 end
37 37 end
38 38  
... ... @@ -43,7 +43,7 @@ describe &#39;users/show.html.haml&#39; do
43 43  
44 44 it 'shows link github button when no login or token' do
45 45 render
46   - view.content_for(:action_bar).should include('Link GitHub account')
  46 + expect(view.content_for(:action_bar)).to include('Link GitHub account')
47 47 end
48 48  
49 49 it 'shows unlink github button when login and token' do
... ... @@ -51,12 +51,12 @@ describe &#39;users/show.html.haml&#39; do
51 51 user.github_oauth_token = 'abcdef'
52 52  
53 53 render
54   - view.content_for(:action_bar).should include('Unlink GitHub account')
  54 + expect(view.content_for(:action_bar)).to include('Unlink GitHub account')
55 55 end
56 56  
57 57 it "should confirm the 'resolve' link by default" do
58 58 render
59   - view.content_for(:action_bar).should have_selector('a.delete[data-confirm="%s"]' % I18n.t('.users.confirm_delete'))
  59 + expect(view.content_for(:action_bar)).to have_selector('a.delete[data-confirm="%s"]' % I18n.t('.users.confirm_delete'))
60 60 end
61 61  
62 62 end
... ...