harpy 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,7 +5,7 @@ describe Harpy::EntryPoint do
5
5
  subject { Harpy::EntryPoint.new url}
6
6
 
7
7
  it "should store url" do
8
- subject.url.should == url
8
+ expect(subject.url).to eq(url)
9
9
  end
10
10
 
11
11
  describe "#resource_url(resource_type)" do
@@ -14,20 +14,20 @@ describe Harpy::EntryPoint do
14
14
  let(:success_response) { Typhoeus::Response.new :code => 200, :body => json_response }
15
15
  let(:error_response) { Typhoeus::Response.new :code => 500 }
16
16
  it "gets entry point from url using client" do
17
- Harpy.client.should_receive(:get).with(url).and_return success_response
17
+ expect(Harpy.client).to receive(:get).with(url).and_return success_response
18
18
  subject.resource_url "user"
19
19
  end
20
20
  it "return nil if no link for resource_type" do
21
- Harpy.client.should_receive(:get).with(url).and_return success_response
22
- subject.resource_url("user").should be_nil
21
+ expect(Harpy.client).to receive(:get).with(url).and_return success_response
22
+ expect(subject.resource_url("user")).to be_nil
23
23
  end
24
24
  it "return url for existing resource_type" do
25
- Harpy.client.should_receive(:get).with(url).and_return success_response
26
- subject.resource_url("company_url").should be_nil
25
+ expect(Harpy.client).to receive(:get).with(url).and_return success_response
26
+ expect(subject.resource_url("company_url")).to be_nil
27
27
  end
28
28
  it "delegates response code != 200 to client" do
29
- Harpy.client.should_receive(:get).with(url).and_return error_response
30
- Harpy.client.should_receive(:invalid_code).with error_response
29
+ expect(Harpy.client).to receive(:get).with(url).and_return error_response
30
+ expect(Harpy.client).to receive(:invalid_code).with error_response
31
31
  subject.resource_url("company_url")
32
32
  end
33
33
  end
@@ -39,16 +39,16 @@ describe Harpy::EntryPoint do
39
39
  let(:error_response) { Typhoeus::Response.new :code => 500 }
40
40
  let(:not_found_response) { Typhoeus::Response.new :code => 404 }
41
41
  it "query remote for this urn using client" do
42
- Harpy.client.should_receive(:get).with("#{url}/#{urn}").and_return success_response
43
- subject.urn(urn).should == company_url
42
+ expect(Harpy.client).to receive(:get).with("#{url}/#{urn}").and_return success_response
43
+ expect(subject.urn(urn)).to eq(company_url)
44
44
  end
45
45
  it "return nil if not found" do
46
- Harpy.client.should_receive(:get).with("#{url}/#{urn}").and_return not_found_response
47
- subject.urn(urn).should be_nil
46
+ expect(Harpy.client).to receive(:get).with("#{url}/#{urn}").and_return not_found_response
47
+ expect(subject.urn(urn)).to be_nil
48
48
  end
49
49
  it "delegates response code != 301 or 404 to client" do
50
- Harpy.client.should_receive(:get).with("#{url}/#{urn}").and_return error_response
51
- Harpy.client.should_receive(:invalid_code).with error_response
50
+ expect(Harpy.client).to receive(:get).with("#{url}/#{urn}").and_return error_response
51
+ expect(Harpy.client).to receive(:invalid_code).with error_response
52
52
  subject.urn(urn)
53
53
  end
54
54
  end
@@ -8,9 +8,9 @@ describe Harpy::Resource do
8
8
  it "queries multiple resources in parallel and return instances" do
9
9
  Typhoeus.stub(company_url, method: :get){ success_response }
10
10
  responses = Harpy::Resource.from_url({ Harpy::Spec::Company => [company_url] })
11
- responses.should have(1).keys
12
- responses[Harpy::Spec::Company].should have(1).item
13
- responses[Harpy::Spec::Company].first.name.should == "Harpy ltd"
11
+ expect(responses.size).to eq(1)
12
+ expect(responses[Harpy::Spec::Company].size).to eq(1)
13
+ expect(responses[Harpy::Spec::Company].first.name).to eq("Harpy ltd")
14
14
  end
15
15
  end
16
16
  end
@@ -35,7 +35,7 @@ module Harpy
35
35
  super
36
36
  end
37
37
  def check_lastname
38
- !!lastname
38
+ throw :abort unless lastname
39
39
  end
40
40
  def callback_before_save
41
41
  @callbacks << :save
@@ -67,21 +67,21 @@ describe "class including Harpy::Resource" do
67
67
  ]
68
68
  }
69
69
  eos
70
- Harpy.client.should_receive(:get).with(url).and_return response
70
+ expect(Harpy.client).to receive(:get).with(url).and_return response
71
71
  result = Harpy::Spec::Company.from_url url
72
- result.should be_kind_of Harpy::Spec::Company
73
- result.name.should == "Harpy Ltd"
74
- result.link("self").should == url
72
+ expect(result).to be_kind_of Harpy::Spec::Company
73
+ expect(result.name).to eq("Harpy Ltd")
74
+ expect(result.link("self")).to eq(url)
75
75
  end
76
76
  it "is nil when not found" do
77
77
  response = Typhoeus::Response.new :code => 404
78
- Harpy.client.should_receive(:get).with(url).and_return response
79
- Harpy::Spec::Company.from_url(url).should be_nil
78
+ expect(Harpy.client).to receive(:get).with(url).and_return response
79
+ expect(Harpy::Spec::Company.from_url(url)).to be_nil
80
80
  end
81
81
  it "delegates response code != 200 or 404 to client" do
82
82
  response = Typhoeus::Response.new :code => 500
83
- Harpy.client.should_receive(:get).with(url).and_return response
84
- Harpy.client.should_receive(:invalid_code).with response
83
+ expect(Harpy.client).to receive(:get).with(url).and_return response
84
+ expect(Harpy.client).to receive(:invalid_code).with response
85
85
  Harpy::Spec::Company.from_url(url)
86
86
  end
87
87
  end
@@ -108,22 +108,22 @@ describe "class including Harpy::Resource" do
108
108
  Typhoeus.stub(url1, method: :get){ response1 }
109
109
  Typhoeus.stub(url2, method: :get){ response2 }
110
110
  results = Harpy::Spec::Company.from_url [url1, url2]
111
- results.should have(2).items
112
- results[0].should be_kind_of Harpy::Spec::Company
113
- results[0].name.should == "Harpy Ltd"
114
- results[0].link("self").should == url1
115
- results[1].should be_kind_of Harpy::Spec::Company
116
- results[1].name.should == "Harpy Inc"
117
- results[1].link("self").should == url2
111
+ expect(results.size).to eq(2)
112
+ expect(results[0]).to be_kind_of Harpy::Spec::Company
113
+ expect(results[0].name).to eq("Harpy Ltd")
114
+ expect(results[0].link("self")).to eq(url1)
115
+ expect(results[1]).to be_kind_of Harpy::Spec::Company
116
+ expect(results[1].name).to eq("Harpy Inc")
117
+ expect(results[1].link("self")).to eq(url2)
118
118
  end
119
119
  end
120
120
  end
121
121
  describe ".from_urn(urn)" do
122
122
  context "when entry point is not set" do
123
123
  it "raises Harpy::EntryPointRequired" do
124
- lambda{
124
+ expect{
125
125
  Harpy::Spec::Company.from_urn("urn:harpy:company:1")
126
- }.should raise_error Harpy::EntryPointRequired
126
+ }.to raise_error Harpy::EntryPointRequired
127
127
  end
128
128
  end
129
129
  context "when entry point is set" do
@@ -132,38 +132,38 @@ describe "class including Harpy::Resource" do
132
132
  it "asks Harpy.entry_point to convert urn to url then call .from_url" do
133
133
  # urn:harpy:company:1 -> http://localhost/company/1
134
134
  Harpy.entry_point = double
135
- Harpy.entry_point.should_receive(:urn).with(urn).and_return url
135
+ expect(Harpy.entry_point).to receive(:urn).with(urn).and_return url
136
136
 
137
137
  # http://localhost/company/1 -> Harpy::Spec::Company instance
138
- Harpy::Spec::Company.should_receive(:from_url).with(url).and_return(expected = double)
139
- Harpy::Spec::Company.from_urn(urn).should be expected
138
+ expect(Harpy::Spec::Company).to receive(:from_url).with(url).and_return(expected = double)
139
+ expect(Harpy::Spec::Company.from_urn(urn)).to be expected
140
140
  end
141
141
  it "is nil if urn is not found" do
142
142
  # urn:harpy:company:1 -> nil
143
143
  Harpy.entry_point = double
144
- Harpy.entry_point.should_receive(:urn).with(urn)
144
+ expect(Harpy.entry_point).to receive(:urn).with(urn)
145
145
 
146
- Harpy::Spec::Company.from_urn(urn).should be_nil
146
+ expect(Harpy::Spec::Company.from_urn(urn)).to be_nil
147
147
  end
148
148
  end
149
149
  end
150
150
  describe ".from_id(id)" do
151
151
  context "when urn has not been overriden" do
152
152
  it "raises NotImplementedError" do
153
- lambda{
153
+ expect{
154
154
  Harpy::Spec::Company.from_id(1)
155
- }.should raise_error NotImplementedError
155
+ }.to raise_error NotImplementedError
156
156
  end
157
157
  end
158
158
  context "when urn has been overriden but entry point is not set" do
159
159
  let(:urn) { "urn:harpy:company:1" }
160
160
  it "raises Harpy::EntryPointRequired" do
161
161
  # 1 -> urn:harpy:company:1
162
- Harpy::Spec::Company.should_receive(:urn).with(1).and_return urn
162
+ expect(Harpy::Spec::Company).to receive(:urn).with(1).and_return urn
163
163
 
164
- lambda{
164
+ expect{
165
165
  Harpy::Spec::Company.from_id(1)
166
- }.should raise_error Harpy::EntryPointRequired
166
+ }.to raise_error Harpy::EntryPointRequired
167
167
  end
168
168
  end
169
169
  context "when entry point is set and urn has been overriden" do
@@ -171,25 +171,25 @@ describe "class including Harpy::Resource" do
171
171
  let(:url) { "http://localhost/company/1" }
172
172
  it "asks Harpy.entry_point to convert urn to url then call .from_url" do
173
173
  # 1 -> urn:harpy:company:1
174
- Harpy::Spec::Company.should_receive(:urn).with(1).and_return urn
174
+ expect(Harpy::Spec::Company).to receive(:urn).with(1).and_return urn
175
175
 
176
176
  # urn:harpy:company:1 -> http://localhost/company/1
177
177
  Harpy.entry_point = double
178
- Harpy.entry_point.should_receive(:urn).with(urn).and_return url
178
+ expect(Harpy.entry_point).to receive(:urn).with(urn).and_return url
179
179
 
180
180
  # http://localhost/company/1 -> Harpy::Spec::Company instance
181
- Harpy::Spec::Company.should_receive(:from_url).with(url).and_return(expected = double)
182
- Harpy::Spec::Company.from_id(1).should be expected
181
+ expect(Harpy::Spec::Company).to receive(:from_url).with(url).and_return(expected = double)
182
+ expect(Harpy::Spec::Company.from_id(1)).to be expected
183
183
  end
184
184
  it "is nil if urn is not found" do
185
185
  # 1 -> urn:harpy:company:1
186
- Harpy::Spec::Company.should_receive(:urn).with(1).and_return urn
186
+ expect(Harpy::Spec::Company).to receive(:urn).with(1).and_return urn
187
187
 
188
188
  # urn:harpy:company:1 -> nil
189
189
  Harpy.entry_point = double
190
- Harpy.entry_point.should_receive(:urn).with(urn)
190
+ expect(Harpy.entry_point).to receive(:urn).with(urn)
191
191
 
192
- Harpy::Spec::Company.from_id(1).should be_nil
192
+ expect(Harpy::Spec::Company.from_id(1)).to be_nil
193
193
  end
194
194
  end
195
195
  end
@@ -198,19 +198,19 @@ describe "class including Harpy::Resource" do
198
198
  let(:url){ "http://localhost/company/1" }
199
199
  it "is true on success" do
200
200
  response = Typhoeus::Response.new :code => 204
201
- Harpy.client.should_receive(:delete).with(url).and_return response
201
+ expect(Harpy.client).to receive(:delete).with(url).and_return response
202
202
  result = Harpy::Spec::Company.delete_from_url url
203
- result.should be_true
203
+ expect(result).to be_truthy
204
204
  end
205
205
  it "is false when not found" do
206
206
  response = Typhoeus::Response.new :code => 404
207
- Harpy.client.should_receive(:delete).with(url).and_return response
208
- Harpy::Spec::Company.delete_from_url(url).should be_false
207
+ expect(Harpy.client).to receive(:delete).with(url).and_return response
208
+ expect(Harpy::Spec::Company.delete_from_url(url)).to be_falsey
209
209
  end
210
210
  it "delegates response code != 204 or 404 to client" do
211
211
  response = Typhoeus::Response.new :code => 500
212
- Harpy.client.should_receive(:delete).with(url).and_return response
213
- Harpy.client.should_receive(:invalid_code).with response
212
+ expect(Harpy.client).to receive(:delete).with(url).and_return response
213
+ expect(Harpy.client).to receive(:invalid_code).with response
214
214
  Harpy::Spec::Company.delete_from_url url
215
215
  end
216
216
  end
@@ -218,9 +218,9 @@ describe "class including Harpy::Resource" do
218
218
  describe ".delete_from_urn(urn)" do
219
219
  context "when entry point is not set" do
220
220
  it "raises Harpy::EntryPointRequired" do
221
- lambda{
221
+ expect{
222
222
  Harpy::Spec::Company.delete_from_urn("urn:harpy:company:1")
223
- }.should raise_error Harpy::EntryPointRequired
223
+ }.to raise_error Harpy::EntryPointRequired
224
224
  end
225
225
  end
226
226
  context "when entry point is set" do
@@ -229,38 +229,38 @@ describe "class including Harpy::Resource" do
229
229
  it "asks Harpy.entry_point to convert urn to url then call .from_url" do
230
230
  # urn:harpy:company:1 -> http://localhost/company/1
231
231
  Harpy.entry_point = double
232
- Harpy.entry_point.should_receive(:urn).with(urn).and_return url
232
+ expect(Harpy.entry_point).to receive(:urn).with(urn).and_return url
233
233
 
234
234
  # http://localhost/company/1 -> Harpy::Spec::Company instance
235
- Harpy::Spec::Company.should_receive(:delete_from_url).with(url).and_return(expected = double)
236
- Harpy::Spec::Company.delete_from_urn(urn).should be expected
235
+ expect(Harpy::Spec::Company).to receive(:delete_from_url).with(url).and_return(expected = double)
236
+ expect(Harpy::Spec::Company.delete_from_urn(urn)).to be expected
237
237
  end
238
238
  it "is nil if urn is not found" do
239
239
  # urn:harpy:company:1 -> nil
240
240
  Harpy.entry_point = double
241
- Harpy.entry_point.should_receive(:urn).with(urn)
241
+ expect(Harpy.entry_point).to receive(:urn).with(urn)
242
242
 
243
- Harpy::Spec::Company.delete_from_urn(urn).should be_false
243
+ expect(Harpy::Spec::Company.delete_from_urn(urn)).to be_falsey
244
244
  end
245
245
  end
246
246
  end
247
247
  describe ".delete_from_id(id)" do
248
248
  context "when urn has not been overriden" do
249
249
  it "raises NotImplementedError" do
250
- lambda{
250
+ expect{
251
251
  Harpy::Spec::Company.delete_from_id(1)
252
- }.should raise_error NotImplementedError
252
+ }.to raise_error NotImplementedError
253
253
  end
254
254
  end
255
255
  context "when urn has been overriden but entry point is not set" do
256
256
  let(:urn) { "urn:harpy:company:1" }
257
257
  it "raises Harpy::EntryPointRequired" do
258
258
  # 1 -> urn:harpy:company:1
259
- Harpy::Spec::Company.should_receive(:urn).with(1).and_return urn
259
+ expect(Harpy::Spec::Company).to receive(:urn).with(1).and_return urn
260
260
 
261
- lambda{
261
+ expect{
262
262
  Harpy::Spec::Company.delete_from_id(1)
263
- }.should raise_error Harpy::EntryPointRequired
263
+ }.to raise_error Harpy::EntryPointRequired
264
264
  end
265
265
  end
266
266
  context "when entry point is set and urn has been overriden" do
@@ -268,45 +268,45 @@ describe "class including Harpy::Resource" do
268
268
  let(:url) { "http://localhost/company/1" }
269
269
  it "asks Harpy.entry_point to convert urn to url then call .from_url" do
270
270
  # 1 -> urn:harpy:company:1
271
- Harpy::Spec::Company.should_receive(:urn).with(1).and_return urn
271
+ expect(Harpy::Spec::Company).to receive(:urn).with(1).and_return urn
272
272
 
273
273
  # urn:harpy:company:1 -> http://localhost/company/1
274
274
  Harpy.entry_point = double
275
- Harpy.entry_point.should_receive(:urn).with(urn).and_return url
275
+ expect(Harpy.entry_point).to receive(:urn).with(urn).and_return url
276
276
 
277
277
  # http://localhost/company/1 -> Harpy::Spec::Company instance
278
- Harpy::Spec::Company.should_receive(:delete_from_url).with(url).and_return(expected = double)
279
- Harpy::Spec::Company.delete_from_id(1).should be expected
278
+ expect(Harpy::Spec::Company).to receive(:delete_from_url).with(url).and_return(expected = double)
279
+ expect(Harpy::Spec::Company.delete_from_id(1)).to be expected
280
280
  end
281
281
  it "is nil if urn is not found" do
282
282
  # 1 -> urn:harpy:company:1
283
- Harpy::Spec::Company.should_receive(:urn).with(1).and_return urn
283
+ expect(Harpy::Spec::Company).to receive(:urn).with(1).and_return urn
284
284
 
285
285
  # urn:harpy:company:1 -> nil
286
286
  Harpy.entry_point = double
287
- Harpy.entry_point.should_receive(:urn).with(urn)
287
+ expect(Harpy.entry_point).to receive(:urn).with(urn)
288
288
 
289
- Harpy::Spec::Company.delete_from_id(1).should be_false
289
+ expect(Harpy::Spec::Company.delete_from_id(1)).to be_falsey
290
290
  end
291
291
  end
292
292
  end
293
293
  describe ".urn(id)" do
294
294
  it "raises NotImplementedError" do
295
- lambda{
295
+ expect{
296
296
  Harpy::Spec::Company.urn(1)
297
- }.should raise_error NotImplementedError
297
+ }.to raise_error NotImplementedError
298
298
  end
299
299
  end
300
300
  describe ".resource_name" do
301
301
  it "defaults to underscored class name" do
302
- Harpy::Spec::Company.resource_name.should == "harpy/spec/company"
302
+ expect(Harpy::Spec::Company.resource_name).to eq("harpy/spec/company")
303
303
  end
304
304
  end
305
305
  describe ".search(conditions)" do
306
306
  let(:url){ "http://localhost/company" }
307
307
  before do
308
308
  Harpy.entry_point = double
309
- Harpy.entry_point.should_receive(:resource_url).with("harpy/spec/company").and_return url
309
+ expect(Harpy.entry_point).to receive(:resource_url).with("harpy/spec/company").and_return url
310
310
  end
311
311
  it "return properly filled instances on 200" do
312
312
  response = Typhoeus::Response.new :code => 200, :body => <<-eos
@@ -325,31 +325,31 @@ describe "class including Harpy::Resource" do
325
325
  ]
326
326
  }
327
327
  eos
328
- Harpy.client.should_receive(:get).with(url, :params => {"firstname" => "Anthony"}).and_return response
328
+ expect(Harpy.client).to receive(:get).with(url, :params => {"firstname" => "Anthony"}).and_return response
329
329
  companies = Harpy::Spec::Company.search "firstname" => "Anthony"
330
- companies.should be_kind_of Harpy::Collection
331
- companies.should have(1).item
332
- companies.should have(1).items
333
- companies.first.should be_kind_of Harpy::Spec::Company
334
- companies.first.firstname.should == "Anthony"
335
- companies.first.id.should == "1"
336
- companies.url.should == url
337
- companies.each do |company|
338
- company.firstname.should == "Anthony"
339
- end.should be_kind_of Array
340
- companies.each.should be_kind_of(defined?(Enumerator) ? Enumerator : Enumerable::Enumerator)
341
- companies.to_a.should == [companies.first]
342
- companies.detect{ true }.should be companies.first
343
- companies.should be_present
344
- companies.should_not be_blank
330
+ expect(companies).to be_kind_of Harpy::Collection
331
+ expect(companies.size).to eq(1)
332
+ expect(companies.size).to eq(1)
333
+ expect(companies.first).to be_kind_of Harpy::Spec::Company
334
+ expect(companies.first.firstname).to eq("Anthony")
335
+ expect(companies.first.id).to eq("1")
336
+ expect(companies.url).to eq(url)
337
+ expect(companies.each do |company|
338
+ expect(company.firstname).to eq("Anthony")
339
+ end).to be_kind_of Array
340
+ expect(companies.each).to be_kind_of(defined?(Enumerator) ? Enumerator : Enumerable::Enumerator)
341
+ expect(companies.to_a).to eq([companies.first])
342
+ expect(companies.detect{ true }).to be companies.first
343
+ expect(companies.present?).to be true
344
+ expect(companies.blank?).not_to be true
345
345
  companies.replace []
346
- companies.should_not be_present
347
- companies.should be_blank
346
+ expect(companies.present?).not_to be true
347
+ expect(companies.blank?).to be true
348
348
  end
349
349
  it "delegates other response codes to client" do
350
350
  response = Typhoeus::Response.new :code => 500
351
- Harpy.client.should_receive(:get).with(url, :params => {}).and_return response
352
- Harpy.client.should_receive(:invalid_code).with response
351
+ expect(Harpy.client).to receive(:get).with(url, :params => {}).and_return response
352
+ expect(Harpy.client).to receive(:invalid_code).with response
353
353
  Harpy::Spec::Company.search
354
354
  end
355
355
  end
@@ -357,8 +357,8 @@ describe "class including Harpy::Resource" do
357
357
  let(:url){ "http://localhost/user/1/company" }
358
358
  it "overrides url used for searches" do
359
359
  response = Typhoeus::Response.new :code => 500
360
- Harpy.client.should_receive(:get).with(url, :params => {}).and_return response
361
- Harpy.client.should_receive(:invalid_code).with response
360
+ expect(Harpy.client).to receive(:get).with(url, :params => {}).and_return response
361
+ expect(Harpy.client).to receive(:invalid_code).with response
362
362
  Harpy::Spec::Company.with_url(url) do
363
363
  Harpy::Spec::Company.search
364
364
  end
@@ -366,9 +366,9 @@ describe "class including Harpy::Resource" do
366
366
  it "can be nested" do
367
367
  url2 = "http://localhost/user/2/company"
368
368
  response = Typhoeus::Response.new :code => 500
369
- Harpy.client.should_receive(:get).ordered.with(url2, :params => {}).and_return response
370
- Harpy.client.should_receive(:get).ordered.with(url, :params => {}).and_return response
371
- Harpy.client.should_receive(:invalid_code).twice.with response
369
+ expect(Harpy.client).to receive(:get).ordered.with(url2, :params => {}).and_return response
370
+ expect(Harpy.client).to receive(:get).ordered.with(url, :params => {}).and_return response
371
+ expect(Harpy.client).to receive(:invalid_code).twice.with response
372
372
  Harpy::Spec::Company.with_url(url) do
373
373
  Harpy::Spec::Company.with_url(url2) do
374
374
  Harpy::Spec::Company.search
@@ -380,43 +380,43 @@ describe "class including Harpy::Resource" do
380
380
  describe "mass assignment" do
381
381
  it "sets any attribute on initialization" do
382
382
  company = Harpy::Spec::Company.new "name" => "Harpy Ltd"
383
- company.name.should == "Harpy Ltd"
383
+ expect(company.name).to eq("Harpy Ltd")
384
384
  end
385
385
  it "initialization works with string keys only" do
386
386
  company = Harpy::Spec::Company.new :name => "Harpy Ltd"
387
- company.name.should be_nil
387
+ expect(company.name).to be_nil
388
388
  end
389
389
  it "#attributes=(attrs) merges new attributes with previous ones" do
390
390
  company = Harpy::Spec::Company.new "name" => "Harpy Ltd", "deleted" => false
391
391
  company.attributes = {"name" => "Harpy Inc", "custom" => true}
392
- company.name.should eql "Harpy Inc"
393
- company.deleted.should be_false
394
- company.custom.should be_true
392
+ expect(company.name).to eql "Harpy Inc"
393
+ expect(company.deleted).to be_falsey
394
+ expect(company.custom).to be_truthy
395
395
  end
396
396
  it "#attributes=(attrs) works with string keys only" do
397
397
  company = Harpy::Spec::Company.new "name" => "Harpy Ltd"
398
398
  company.attributes = {:name => "Harpy Inc"}
399
- company.name.should eql "Harpy Ltd"
399
+ expect(company.name).to eql "Harpy Ltd"
400
400
  end
401
401
  it "doesn't define writers for each attribute" do
402
402
  company = Harpy::Spec::Company.new "name" => "Harpy Ltd"
403
- lambda{ company.name = "test" }.should raise_error NoMethodError
404
- lambda{ company[1] }.should raise_error NoMethodError
403
+ expect{ company.name = "test" }.to raise_error NoMethodError
404
+ expect{ company[1] }.to raise_error NoMethodError
405
405
  end
406
406
  it "allows accessing undefined attributes when not persisted" do
407
- subject.name.should be_nil
407
+ expect(subject.name).to be_nil
408
408
  end
409
409
  it "doesn't allows accessing undefined attributes when not persisted" do
410
- subject.should_receive(:persisted?).and_return true
411
- lambda{ subject.name }.should raise_error NoMethodError
410
+ expect(subject).to receive(:persisted?).and_return true
411
+ expect{ subject.name }.to raise_error NoMethodError
412
412
  end
413
413
  it "use existing setters if available" do
414
414
  company = Harpy::Spec::Company.new "tax_id" => "123"
415
- company.tax_id.should == "123"
416
- company.as_json.should == {}
415
+ expect(company.tax_id).to eq("123")
416
+ expect(company.as_json).to eq({})
417
417
  company.attributes = {:tax_id => 123}
418
- company.tax_id.should == 123
419
- company.as_json.should == {}
418
+ expect(company.tax_id).to eq(123)
419
+ expect(company.as_json).to eq({})
420
420
  end
421
421
  end
422
422
  describe "advanced attribute readers" do
@@ -424,111 +424,111 @@ describe "class including Harpy::Resource" do
424
424
  subject{ Harpy::Spec::Company.new "link" => [{"rel" => "self", "href" => url}] }
425
425
  describe "#link(rel)" do
426
426
  it "searches link with matching rel and return href" do
427
- subject.link("self").should == url
427
+ expect(subject.link("self")).to eq(url)
428
428
  end
429
429
  it "works with symbols too" do
430
- subject.link(:self).should == url
430
+ expect(subject.link(:self)).to eq(url)
431
431
  end
432
432
  it "is nil if no matching link can be found" do
433
- subject.link("user").should be_nil
433
+ expect(subject.link("user")).to be_nil
434
434
  end
435
435
  end
436
436
  describe "#url" do
437
437
  it "searches url to self inside links" do
438
- subject.should_receive(:link).with("self").and_return (expected = double)
439
- subject.url.should be expected
438
+ expect(subject).to receive(:link).with("self").and_return (expected = double)
439
+ expect(subject.url).to be expected
440
440
  end
441
441
  it "is nil when no link to self can be found" do
442
- subject.should_receive(:link).with "self"
443
- subject.url.should be_nil
442
+ expect(subject).to receive(:link).with "self"
443
+ expect(subject.url).to be_nil
444
444
  end
445
445
  end
446
446
  describe "#url_collection" do
447
447
  it "defaults to entry_point link which rel matches resource name" do
448
448
  Harpy.entry_point = double
449
- Harpy.entry_point.should_receive(:resource_url).with("harpy/spec/company").and_return (expected = double)
450
- subject.url_collection.should be expected
449
+ expect(Harpy.entry_point).to receive(:resource_url).with("harpy/spec/company").and_return (expected = double)
450
+ expect(subject.url_collection).to be expected
451
451
  end
452
452
  end
453
453
  describe "#id" do
454
454
  it "extracts last part from urn" do
455
455
  company = Harpy::Spec::Company.new "urn" => "urn:harpy:company:1"
456
- company.id.should == "1"
456
+ expect(company.id).to eq("1")
457
457
  end
458
458
  it "works with alphanumeric ids too" do
459
459
  company = Harpy::Spec::Company.new "urn" => "urn:harpy:company:e{39,^"
460
- company.id.should == "e{39,^"
460
+ expect(company.id).to eq("e{39,^")
461
461
  end
462
462
  it "works with urns having more than 4 parts" do
463
463
  company = Harpy::Spec::Company.new "urn" => "urn:harpy:api:company:1"
464
- company.id.should == "1"
464
+ expect(company.id).to eq("1")
465
465
  end
466
466
  it "is nil without urn" do
467
- subject.id.should be_nil
467
+ expect(subject.id).to be_nil
468
468
  end
469
469
  it "is nil if urn is an empty string" do
470
470
  company = Harpy::Spec::Company.new "urn" => ""
471
- company.id.should be_nil
471
+ expect(company.id).to be_nil
472
472
  end
473
473
  it "never uses manually assigned id attribute" do
474
474
  company = Harpy::Spec::Company.new "id" => "1"
475
- company.id.should be_nil
475
+ expect(company.id).to be_nil
476
476
  end
477
477
  end
478
478
  describe "#persisted?" do
479
479
  it "defaults to false when no urn is defined" do
480
480
  company = Harpy::Spec::Company.new
481
- company.persisted?.should be_false
481
+ expect(company.persisted?).to be_falsey
482
482
  end
483
483
  it "is true when an urn is present" do
484
484
  company = Harpy::Spec::Company.new "urn" => "urn:harpy:company:1"
485
- company.persisted?.should be_true
485
+ expect(company.persisted?).to be_truthy
486
486
  end
487
487
  it "is false when urn is an empty string" do
488
488
  company = Harpy::Spec::Company.new "urn" => ""
489
- company.persisted?.should be_false
489
+ expect(company.persisted?).to be_falsey
490
490
  end
491
491
  end
492
492
  describe "#inspect" do
493
493
  subject { Harpy::Spec::Company.new "firstname" => "Anthony" }
494
494
  it "shows class name, attributes, errors and persisted state" do
495
- subject.inspect.should == '<Harpy::Spec::Company @attrs:{"firstname"=>"Anthony"} @errors:[] persisted:false>'
495
+ expect(subject.inspect).to eq('<Harpy::Spec::Company @attrs:{"firstname"=>"Anthony"} @errors:[] persisted:false>')
496
496
  end
497
497
  end
498
498
  describe "#has_key?(key)" do
499
499
  it "is true when attribute is present" do
500
- subject.has_key?("link").should be_true
500
+ expect(subject.has_key?("link")).to be_truthy
501
501
  end
502
502
  it "does accept symbols too" do
503
- subject.has_key?(:link).should be_true
503
+ expect(subject.has_key?(:link)).to be_truthy
504
504
  end
505
505
  it "is true when attribute is an empty string" do
506
506
  company = Harpy::Spec::Company.new "urn" => ""
507
- company.has_key?("urn").should be_true
507
+ expect(company.has_key?("urn")).to be_truthy
508
508
  end
509
509
  it "is false when attribute is not defined" do
510
- subject.has_key?("custom").should be_false
510
+ expect(subject.has_key?("custom")).to be_falsey
511
511
  end
512
512
  it "is false when key matches an existing method but not an attribute" do
513
- subject.has_key?(:url).should be_false
513
+ expect(subject.has_key?(:url)).to be_falsey
514
514
  end
515
515
  it "does not raise error when checking for an undefined attribute even when persisted" do
516
- subject.stub(:persisted?).and_return true
517
- subject.has_key?("custom").should be_false
516
+ allow(subject).to receive(:persisted?).and_return true
517
+ expect(subject.has_key?("custom")).to be_falsey
518
518
  end
519
519
  end
520
520
  end
521
521
  describe "#valid?" do
522
522
  it "has ActiveModel validations" do
523
523
  user = Harpy::Spec::User.new "lastname" => "Stark"
524
- user.should_not be_valid
525
- user.should have(1).error
526
- user.errors[:firstname].should =~ ["can't be blank"]
524
+ expect(user).not_to be_valid
525
+ expect(user.errors.size).to eq(1)
526
+ expect(user.errors[:firstname]).to match_array(["can't be blank"])
527
527
  end
528
- it "calls before_validation which prevents validation on false" do
528
+ it "calls before_validation which prevents validation on throw" do
529
529
  user = Harpy::Spec::User.new
530
- user.should_not be_valid
531
- user.should have(:no).error
530
+ expect(user).not_to be_valid
531
+ expect(user.errors.size).to eq(0)
532
532
  end
533
533
  end
534
534
  describe "#as_json" do
@@ -542,27 +542,27 @@ describe "class including Harpy::Resource" do
542
542
  end
543
543
 
544
544
  it "exclude link and urn from attributes" do
545
- subject.as_json.should == {"company_name" => "Stark Enterprises"}
545
+ expect(subject.as_json).to eq({"company_name" => "Stark Enterprises"})
546
546
  end
547
547
  it "does not remove link and urn from object attributes" do
548
548
  subject.as_json
549
- subject.urn.should == "urn:harpy:user:1"
550
- subject.url.should == url
549
+ expect(subject.urn).to eq("urn:harpy:user:1")
550
+ expect(subject.url).to eq(url)
551
551
  end
552
552
  end
553
553
  describe "#save" do
554
554
  subject{ Harpy::Spec::User.new "company_name" => "Stark Enterprises" }
555
555
  it "is false and does not call before_save callback if not valid" do
556
- subject.should_receive :valid?
557
- subject.save.should be_false
558
- subject.callbacks.should =~ []
556
+ expect(subject).to receive :valid?
557
+ expect(subject.save).to be_falsey
558
+ expect(subject.callbacks).to match_array([])
559
559
  end
560
560
  context "on create (valid, not persisted)" do
561
561
  let(:url) { "http://localhost/user" }
562
562
  let(:body) { '{"company_name":"Stark Enterprises"}' }
563
563
  before do
564
- subject.should_receive(:valid?).and_return true
565
- subject.should_receive(:url_collection).and_return url
564
+ expect(subject).to receive(:valid?).and_return true
565
+ expect(subject).to receive(:url_collection).and_return url
566
566
  end
567
567
  [200, 201, 302].each do |response_code|
568
568
  it "is true and merges response attributes on #{response_code}" do
@@ -575,25 +575,25 @@ describe "class including Harpy::Resource" do
575
575
  ]
576
576
  }
577
577
  eos
578
- Harpy.client.should_receive(:post).with(url, :body => body).and_return response
579
- subject.save.should be_true
580
- subject.callbacks.should =~ [:save, :create]
581
- subject.firstname.should == "Anthony"
582
- subject.company_name.should == "Stark Enterprises"
583
- subject.urn.should == "urn:harpy:user:1"
578
+ expect(Harpy.client).to receive(:post).with(url, :body => body).and_return response
579
+ expect(subject.save).to be_truthy
580
+ expect(subject.callbacks).to match_array([:save, :create])
581
+ expect(subject.firstname).to eq("Anthony")
582
+ expect(subject.company_name).to eq("Stark Enterprises")
583
+ expect(subject.urn).to eq("urn:harpy:user:1")
584
584
  end
585
585
  end
586
586
  it "raises Harpy::InvalidResponseCode on 204" do
587
587
  response = Typhoeus::Response.new :code => 204
588
- Harpy.client.should_receive(:post).with(url, :body => body).and_return response
589
- lambda { subject.save }.should raise_error Harpy::InvalidResponseCode, "204"
590
- subject.callbacks.should =~ [:save, :create]
588
+ expect(Harpy.client).to receive(:post).with(url, :body => body).and_return response
589
+ expect { subject.save }.to raise_error Harpy::InvalidResponseCode, "204"
590
+ expect(subject.callbacks).to match_array([:save, :create])
591
591
  end
592
592
  it "raises Harpy::Unauthorized on 401" do
593
593
  response = Typhoeus::Response.new :code => 401
594
- Harpy.client.should_receive(:post).with(url, :body => body).and_return response
595
- lambda { subject.save }.should raise_error Harpy::Unauthorized, "Server returned a 401 response code"
596
- subject.callbacks.should =~ [:save, :create]
594
+ expect(Harpy.client).to receive(:post).with(url, :body => body).and_return response
595
+ expect { subject.save }.to raise_error Harpy::Unauthorized, "Server returned a 401 response code"
596
+ expect(subject.callbacks).to match_array([:save, :create])
597
597
  end
598
598
  it "is false and fills in errors on 422" do
599
599
  response = Typhoeus::Response.new :code => 422, :body => <<-eos
@@ -604,28 +604,28 @@ describe "class including Harpy::Resource" do
604
604
  }
605
605
  }
606
606
  eos
607
- Harpy.client.should_receive(:post).with(url, :body => body).and_return response
608
- subject.save.should be_false
609
- subject.callbacks.should =~ [:save, :create]
610
- subject.should have(2).errors
611
- subject.errors[:lastname].should =~ ["can't be blank", "must be unique"]
612
- subject.firstname.should be_nil
613
- subject.company_name.should == "Stark Enterprises"
607
+ expect(Harpy.client).to receive(:post).with(url, :body => body).and_return response
608
+ expect(subject.save).to be_falsey
609
+ expect(subject.callbacks).to match_array([:save, :create])
610
+ expect(subject.errors.size).to eq(2)
611
+ expect(subject.errors[:lastname]).to match_array(["can't be blank", "must be unique"])
612
+ expect(subject.firstname).to be_nil
613
+ expect(subject.company_name).to eq("Stark Enterprises")
614
614
  end
615
615
  it "delegates other response codes to client" do
616
616
  response = Typhoeus::Response.new :code => 500
617
- Harpy.client.should_receive(:post).with(url, :body => body).and_return response
618
- Harpy.client.should_receive(:invalid_code).with(response)
617
+ expect(Harpy.client).to receive(:post).with(url, :body => body).and_return response
618
+ expect(Harpy.client).to receive(:invalid_code).with(response)
619
619
  subject.save
620
- subject.callbacks.should =~ [:save, :create]
620
+ expect(subject.callbacks).to match_array([:save, :create])
621
621
  end
622
622
  end
623
623
  context "on update (valid, persisted but link to self is not present)" do
624
624
  it "raises Harpy::UrlRequired" do
625
- subject.should_receive(:valid?).and_return true
626
- subject.should_receive(:persisted?).and_return true
627
- lambda{ subject.save }.should raise_error Harpy::UrlRequired
628
- subject.callbacks.should =~ [:save, :update]
625
+ expect(subject).to receive(:valid?).and_return true
626
+ expect(subject).to receive(:persisted?).and_return true
627
+ expect{ subject.save }.to raise_error Harpy::UrlRequired
628
+ expect(subject.callbacks).to match_array([:save, :update])
629
629
  end
630
630
  end
631
631
  context "on update (valid, persisted and link to self is present)" do
@@ -639,7 +639,7 @@ describe "class including Harpy::Resource" do
639
639
  })
640
640
  end
641
641
  before do
642
- subject.should_receive(:valid?).and_return true
642
+ expect(subject).to receive(:valid?).and_return true
643
643
  end
644
644
  [200, 201, 302].each do |response_code|
645
645
  it "is true and merges response attributes on #{response_code}" do
@@ -652,25 +652,25 @@ describe "class including Harpy::Resource" do
652
652
  ]
653
653
  }
654
654
  eos
655
- Harpy.client.should_receive(:put).with(url, :body => body).and_return response
656
- subject.save.should be_true
657
- subject.callbacks.should =~ [:save, :update]
658
- subject.firstname.should == "Anthony"
659
- subject.company_name.should == "Stark Enterprises"
655
+ expect(Harpy.client).to receive(:put).with(url, :body => body).and_return response
656
+ expect(subject.save).to be_truthy
657
+ expect(subject.callbacks).to match_array([:save, :update])
658
+ expect(subject.firstname).to eq("Anthony")
659
+ expect(subject.company_name).to eq("Stark Enterprises")
660
660
  end
661
661
  end
662
662
  it "is true but doesn't touch attributes on 204" do
663
663
  response = Typhoeus::Response.new :code => 204
664
- Harpy.client.should_receive(:put).with(url, :body => body).and_return response
665
- subject.save.should be_true
666
- subject.callbacks.should =~ [:save, :update]
667
- subject.company_name.should == "Stark Enterprises"
664
+ expect(Harpy.client).to receive(:put).with(url, :body => body).and_return response
665
+ expect(subject.save).to be_truthy
666
+ expect(subject.callbacks).to match_array([:save, :update])
667
+ expect(subject.company_name).to eq("Stark Enterprises")
668
668
  end
669
669
  it "raises Harpy::Unauthorized on 401" do
670
670
  response = Typhoeus::Response.new :code => 401
671
- Harpy.client.should_receive(:put).with(url, :body => body).and_return response
672
- lambda { subject.save }.should raise_error Harpy::Unauthorized, "Server returned a 401 response code"
673
- subject.callbacks.should =~ [:save, :update]
671
+ expect(Harpy.client).to receive(:put).with(url, :body => body).and_return response
672
+ expect { subject.save }.to raise_error Harpy::Unauthorized, "Server returned a 401 response code"
673
+ expect(subject.callbacks).to match_array([:save, :update])
674
674
  end
675
675
  it "is false and fills in errors on 422" do
676
676
  response = Typhoeus::Response.new :code => 422, :body => <<-eos
@@ -681,20 +681,20 @@ describe "class including Harpy::Resource" do
681
681
  }
682
682
  }
683
683
  eos
684
- Harpy.client.should_receive(:put).with(url, :body => body).and_return response
685
- subject.save.should be_false
686
- subject.callbacks.should =~ [:save, :update]
687
- subject.should have(2).errors
688
- subject.errors[:lastname].should =~ ["can't be blank", "must be unique"]
689
- lambda { subject.firstname }.should raise_error NoMethodError
690
- subject.company_name.should == "Stark Enterprises"
684
+ expect(Harpy.client).to receive(:put).with(url, :body => body).and_return response
685
+ expect(subject.save).to be_falsey
686
+ expect(subject.callbacks).to match_array([:save, :update])
687
+ expect(subject.errors.size).to eq(2)
688
+ expect(subject.errors[:lastname]).to match_array(["can't be blank", "must be unique"])
689
+ expect { subject.firstname }.to raise_error NoMethodError
690
+ expect(subject.company_name).to eq("Stark Enterprises")
691
691
  end
692
692
  it "delegates other response codes to client" do
693
693
  response = Typhoeus::Response.new :code => 500
694
- Harpy.client.should_receive(:put).with(url, :body => body).and_return response
695
- Harpy.client.should_receive(:invalid_code).with(response)
694
+ expect(Harpy.client).to receive(:put).with(url, :body => body).and_return response
695
+ expect(Harpy.client).to receive(:invalid_code).with(response)
696
696
  subject.save
697
- subject.callbacks.should =~ [:save, :update]
697
+ expect(subject.callbacks).to match_array([:save, :update])
698
698
  end
699
699
  end
700
700
  end
@@ -702,8 +702,8 @@ describe "class including Harpy::Resource" do
702
702
  subject{ Harpy::Spec::User.new "company_name" => "Stark Enterprises" }
703
703
  context "when link to self is missing" do
704
704
  it "raises Harpy::UrlRequired" do
705
- lambda{ subject.destroy }.should raise_error Harpy::UrlRequired
706
- subject.callbacks.should =~ []
705
+ expect{ subject.destroy }.to raise_error Harpy::UrlRequired
706
+ expect(subject.callbacks).to match_array([])
707
707
  end
708
708
  end
709
709
  context "when link to self is present" do
@@ -726,25 +726,25 @@ describe "class including Harpy::Resource" do
726
726
  ]
727
727
  }
728
728
  eos
729
- Harpy.client.should_receive(:delete).with(url).and_return response
730
- subject.destroy.should be_true
731
- subject.callbacks.should =~ [:destroy]
732
- subject.firstname.should == "Anthony"
733
- subject.company_name.should == "Stark Enterprises"
729
+ expect(Harpy.client).to receive(:delete).with(url).and_return response
730
+ expect(subject.destroy).to be_truthy
731
+ expect(subject.callbacks).to match_array([:destroy])
732
+ expect(subject.firstname).to eq("Anthony")
733
+ expect(subject.company_name).to eq("Stark Enterprises")
734
734
  end
735
735
  end
736
736
  it "is true but doesn't touch attributes on 204" do
737
737
  response = Typhoeus::Response.new :code => 204
738
- Harpy.client.should_receive(:delete).with(url).and_return response
739
- subject.destroy.should be_true
740
- subject.callbacks.should =~ [:destroy]
741
- subject.company_name.should == "Stark Enterprises"
738
+ expect(Harpy.client).to receive(:delete).with(url).and_return response
739
+ expect(subject.destroy).to be_truthy
740
+ expect(subject.callbacks).to match_array([:destroy])
741
+ expect(subject.company_name).to eq("Stark Enterprises")
742
742
  end
743
743
  it "raises Harpy::Unauthorized on 401" do
744
744
  response = Typhoeus::Response.new :code => 401
745
- Harpy.client.should_receive(:delete).with(url).and_return response
746
- lambda { subject.destroy }.should raise_error Harpy::Unauthorized, "Server returned a 401 response code"
747
- subject.callbacks.should =~ [:destroy]
745
+ expect(Harpy.client).to receive(:delete).with(url).and_return response
746
+ expect { subject.destroy }.to raise_error Harpy::Unauthorized, "Server returned a 401 response code"
747
+ expect(subject.callbacks).to match_array([:destroy])
748
748
  end
749
749
  it "is false and fills in errors on 422" do
750
750
  response = Typhoeus::Response.new :code => 422, :body => <<-eos
@@ -755,20 +755,20 @@ describe "class including Harpy::Resource" do
755
755
  }
756
756
  }
757
757
  eos
758
- Harpy.client.should_receive(:delete).with(url).and_return response
759
- subject.destroy.should be_false
760
- subject.callbacks.should =~ [:destroy]
761
- subject.should have(2).errors
762
- subject.errors[:lastname].should =~ ["can't be blank", "must be unique"]
763
- lambda { subject.firstname }.should raise_error NoMethodError
764
- subject.company_name.should == "Stark Enterprises"
758
+ expect(Harpy.client).to receive(:delete).with(url).and_return response
759
+ expect(subject.destroy).to be_falsey
760
+ expect(subject.callbacks).to match_array([:destroy])
761
+ expect(subject.errors.size).to eq(2)
762
+ expect(subject.errors[:lastname]).to match_array(["can't be blank", "must be unique"])
763
+ expect { subject.firstname }.to raise_error NoMethodError
764
+ expect(subject.company_name).to eq("Stark Enterprises")
765
765
  end
766
766
  it "delegates other response codes to client" do
767
767
  response = Typhoeus::Response.new :code => 500
768
- Harpy.client.should_receive(:delete).with(url).and_return response
769
- Harpy.client.should_receive(:invalid_code).with(response)
768
+ expect(Harpy.client).to receive(:delete).with(url).and_return response
769
+ expect(Harpy.client).to receive(:invalid_code).with(response)
770
770
  subject.destroy
771
- subject.callbacks.should =~ [:destroy]
771
+ expect(subject.callbacks).to match_array([:destroy])
772
772
  end
773
773
  end
774
774
  end
@@ -776,22 +776,22 @@ describe "class including Harpy::Resource" do
776
776
  it "is equal to itself even without urn" do
777
777
  company1 = Harpy::Spec::Company.new
778
778
  company2 = company1
779
- company1.should == company2
779
+ expect(company1).to eq(company2)
780
780
  end
781
781
  it "two instances without urn are not equal" do
782
782
  company1 = Harpy::Spec::Company.new
783
783
  company2 = Harpy::Spec::Company.new
784
- company1.should_not == company2
784
+ expect(company1).not_to eq(company2)
785
785
  end
786
786
  it "two instances of the same class with the same urn are equal" do
787
787
  company1 = Harpy::Spec::Company.new "urn" => "urn:harpy:company:1"
788
788
  company2 = Harpy::Spec::Company.new "urn" => "urn:harpy:company:1"
789
- company1.should == company2
789
+ expect(company1).to eq(company2)
790
790
  end
791
791
  it "two instances of the same class with different urns are not equal" do
792
792
  company1 = Harpy::Spec::Company.new "urn" => "urn:harpy:company:1"
793
793
  company2 = Harpy::Spec::Company.new "urn" => "urn:harpy:company:2"
794
- company1.should_not == company2
794
+ expect(company1).not_to eq(company2)
795
795
  end
796
796
  end
797
797
  end