capsule_crm 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +15 -0
  3. data/lib/capsule_crm/address.rb +4 -3
  4. data/lib/capsule_crm/associations/belongs_to.rb +2 -1
  5. data/lib/capsule_crm/associations/belongs_to_association.rb +19 -2
  6. data/lib/capsule_crm/associations/belongs_to_finder.rb +46 -0
  7. data/lib/capsule_crm/associations/has_many_association.rb +23 -9
  8. data/lib/capsule_crm/associations/has_many_proxy.rb +38 -4
  9. data/lib/capsule_crm/case.rb +33 -236
  10. data/lib/capsule_crm/configuration.rb +1 -1
  11. data/lib/capsule_crm/connection.rb +3 -0
  12. data/lib/capsule_crm/contactable.rb +1 -1
  13. data/lib/capsule_crm/country.rb +7 -13
  14. data/lib/capsule_crm/currency.rb +7 -13
  15. data/lib/capsule_crm/custom_field.rb +14 -54
  16. data/lib/capsule_crm/custom_field_definition.rb +36 -0
  17. data/lib/capsule_crm/email.rb +4 -3
  18. data/lib/capsule_crm/gettable.rb +11 -0
  19. data/lib/capsule_crm/hash_helper.rb +5 -0
  20. data/lib/capsule_crm/history.rb +37 -252
  21. data/lib/capsule_crm/milestone.rb +9 -9
  22. data/lib/capsule_crm/normalizer.rb +85 -0
  23. data/lib/capsule_crm/opportunity.rb +30 -271
  24. data/lib/capsule_crm/organization.rb +19 -197
  25. data/lib/capsule_crm/party.rb +13 -26
  26. data/lib/capsule_crm/persistence/configuration.rb +25 -0
  27. data/lib/capsule_crm/persistence/deletable.rb +14 -0
  28. data/lib/capsule_crm/persistence/persistable.rb +76 -0
  29. data/lib/capsule_crm/persistence.rb +3 -0
  30. data/lib/capsule_crm/person.rb +19 -194
  31. data/lib/capsule_crm/phone.rb +4 -3
  32. data/lib/capsule_crm/querying/configuration.rb +21 -0
  33. data/lib/capsule_crm/querying/find_all.rb +16 -0
  34. data/lib/capsule_crm/querying/find_one.rb +14 -0
  35. data/lib/capsule_crm/querying/findable.rb +14 -0
  36. data/lib/capsule_crm/querying.rb +4 -0
  37. data/lib/capsule_crm/serializable.rb +38 -0
  38. data/lib/capsule_crm/serializer.rb +54 -7
  39. data/lib/capsule_crm/task.rb +16 -96
  40. data/lib/capsule_crm/track.rb +5 -10
  41. data/lib/capsule_crm/user.rb +3 -15
  42. data/lib/capsule_crm/version.rb +1 -1
  43. data/lib/capsule_crm/website.rb +4 -2
  44. data/lib/capsule_crm.rb +15 -5
  45. data/spec/fabricators/case_fabricator.rb +1 -0
  46. data/spec/fabricators/history_fabricator.rb +1 -0
  47. data/spec/fabricators/opportunity_fabricator.rb +1 -0
  48. data/spec/lib/capsule_crm/associations/belongs_to_finder_spec.rb +48 -0
  49. data/spec/lib/capsule_crm/associations/belongs_to_spec.rb +34 -0
  50. data/spec/lib/capsule_crm/associations/has_many_proxy_spec.rb +54 -14
  51. data/spec/lib/capsule_crm/associations/has_many_spec.rb +15 -2
  52. data/spec/lib/capsule_crm/case_spec.rb +20 -330
  53. data/spec/lib/capsule_crm/country_spec.rb +1 -16
  54. data/spec/lib/capsule_crm/currency_spec.rb +1 -18
  55. data/spec/lib/capsule_crm/custom_field_definition_spec.rb +59 -0
  56. data/spec/lib/capsule_crm/custom_field_spec.rb +2 -27
  57. data/spec/lib/capsule_crm/history_spec.rb +14 -389
  58. data/spec/lib/capsule_crm/milestone_spec.rb +1 -23
  59. data/spec/lib/capsule_crm/normalizer_spec.rb +11 -0
  60. data/spec/lib/capsule_crm/opportunity_spec.rb +22 -341
  61. data/spec/lib/capsule_crm/organization_spec.rb +39 -60
  62. data/spec/lib/capsule_crm/party_spec.rb +37 -59
  63. data/spec/lib/capsule_crm/person_spec.rb +49 -247
  64. data/spec/lib/capsule_crm/serializer_spec.rb +25 -4
  65. data/spec/lib/capsule_crm/task_spec.rb +21 -250
  66. data/spec/lib/capsule_crm/track_spec.rb +1 -15
  67. data/spec/lib/capsule_crm/user_spec.rb +1 -14
  68. data/spec/support/{countries.json → all_countries.json} +0 -0
  69. data/spec/support/{currencies.json → all_currencies.json} +0 -0
  70. data/spec/support/{milestones.json → all_milestones.json} +0 -0
  71. data/spec/support/{tracks.json → all_tracks.json} +0 -0
  72. data/spec/support/custom_field_definitions.json +19 -0
  73. data/spec/support/helpers.rb +3 -2
  74. data/spec/support/no_cases.json +5 -0
  75. data/spec/support/no_countries.json +5 -0
  76. data/spec/support/no_currencies.json +5 -0
  77. data/spec/support/no_milestones.json +5 -0
  78. data/spec/support/no_opportunities.json +5 -0
  79. data/spec/support/no_tasks.json +5 -0
  80. data/spec/support/no_tracks.json +5 -0
  81. data/spec/support/no_users.json +5 -0
  82. data/spec/support/shared_examples/deletable.rb +15 -0
  83. data/spec/support/shared_examples/find_all.rb +34 -0
  84. data/spec/support/shared_examples/find_one.rb +23 -0
  85. data/spec/support/shared_examples/persistable.rb +318 -0
  86. data/spec/support/single_person.json +16 -0
  87. metadata +60 -15
  88. data/lib/capsule_crm/attributes.rb +0 -11
  89. data/lib/capsule_crm/capsule_jsonable.rb +0 -13
  90. data/lib/capsule_crm/collection.rb +0 -9
  91. data/spec/support/single_user.json +0 -25
@@ -5,7 +5,7 @@ describe CapsuleCRM::Opportunity do
5
5
 
6
6
  before do
7
7
  stub_request(:get, /\/api\/opportunity\/milestones$/).
8
- to_return(body: File.read('spec/support/milestones.json'))
8
+ to_return(body: File.read('spec/support/all_milestones.json'))
9
9
  end
10
10
 
11
11
  before do
@@ -13,6 +13,27 @@ describe CapsuleCRM::Opportunity do
13
13
  to_return(body: File.read('spec/support/all_users.json'))
14
14
  end
15
15
 
16
+ it_behaves_like 'persistable', 'https://sample.capsulecrm.com/api/opportunity/59', 59 do
17
+ let(:attributes) do
18
+ Fabricate.attributes_for(:opportunity).merge(party: party)
19
+ end
20
+ let(:party) { Fabricate.build(:person, id: Random.rand(1..10)) }
21
+ end
22
+
23
+ it_behaves_like 'deletable'
24
+
25
+ it_behaves_like 'listable', '/opportunity', 'opportunities', 1
26
+
27
+ it_behaves_like 'findable', '/api/opportunity/1', 1, 'opportunity' do
28
+ let(:attributes) do
29
+ {
30
+ value: 500.0, id: 43, duration_basis: 'DAY', milestone_id: 2,
31
+ duration: 10, currency: 'GBP',
32
+ description: 'Scope and design web site shopping cart'
33
+ }
34
+ end
35
+ end
36
+
16
37
  describe 'validations' do
17
38
  subject { described_class.new }
18
39
 
@@ -136,346 +157,6 @@ describe CapsuleCRM::Opportunity do
136
157
  end
137
158
  end
138
159
 
139
- describe '.all' do
140
- before do
141
- stub_request(:get, /\/api\/opportunity$/).
142
- to_return(body: File.read('spec/support/all_opportunities.json'))
143
- end
144
-
145
- subject { CapsuleCRM::Opportunity.all }
146
-
147
- it { should be_a(Array) }
148
-
149
- it { subject.length.should eql(1) }
150
-
151
- it 'should only contain people' do
152
- subject.all? { |item| item.is_a?(CapsuleCRM::Opportunity) }.should be_true
153
- end
154
- end
155
-
156
- describe '.find' do
157
- before do
158
- stub_request(:get, /\/api\/opportunity\/1$/).
159
- to_return(body: File.read('spec/support/opportunity.json'))
160
- end
161
-
162
- subject { CapsuleCRM::Opportunity.find(1) }
163
-
164
- it { should be_a(CapsuleCRM::Opportunity) }
165
-
166
- it { subject.value.should eql(500.0) }
167
-
168
- it { subject.id.should eql(43) }
169
-
170
- it { subject.duration_basis.should eql('DAY') }
171
-
172
- it { subject.milestone_id.should eql(2) }
173
-
174
- it { subject.duration.should eql(10) }
175
-
176
- it { subject.currency.should eql('GBP') }
177
-
178
- it do
179
- subject.description.should eql('Scope and design web site shopping cart')
180
- end
181
-
182
- it { subject.name.should eql('Consulting') }
183
-
184
- it { subject.owner.should eql('a.user') }
185
-
186
- it { subject.milestone.name.should eql('Bid') }
187
-
188
- it { subject.probability.should eql(50.0) }
189
-
190
- it do
191
- subject.expected_close_date.should eql(Date.parse('2012-09-30T00:00:00Z'))
192
- end
193
-
194
- it { subject.party_id.should eql(2) }
195
- end
196
-
197
- describe '#attributes=' do
198
- let(:opportunity) { CapsuleCRM::Opportunity.new }
199
-
200
- before do
201
- opportunity.attributes = { partyId: '1', milestoneId: '3' }
202
- end
203
-
204
- it { opportunity.party_id.should eql(1) }
205
- it { opportunity.milestone_id.should eql(3) }
206
- end
207
-
208
- describe '.create' do
209
- context 'when the opportunity is valid' do
210
- before do
211
- stub_request(:post, request_path).to_return(headers: {
212
- 'Location' => 'https://sample.capsulecrm.com/api/opportunity/59'
213
- })
214
- end
215
- let(:request_path) do
216
- [
217
- 'https://1234:@company.capsulecrm.com/api/party/',
218
- opportunity_attributes[:party].id, '/opportunity'
219
- ].join
220
- end
221
- let(:party) { Fabricate.build(:person, id: Random.rand(1..10)) }
222
- let(:opportunity_attributes) do
223
- Fabricate.attributes_for(:opportunity).merge(party: party)
224
- end
225
-
226
- subject do
227
- CapsuleCRM::Opportunity.create opportunity_attributes
228
- end
229
-
230
- it { should be_a(CapsuleCRM::Opportunity) }
231
- it { should be_persisted }
232
- it { subject.id.should eql(59) }
233
-
234
- context 'when the opportunity has a track' do
235
- before do
236
- stub_request(:post, "#{request_path}?trackId=#{track.id}").to_return(
237
- headers: {
238
- 'Location' => 'https://sample.capsulecrm.com/api/opportunity/59'
239
- }
240
- )
241
- end
242
-
243
- let(:track) { CapsuleCRM::Track.new(id: rand(10)) }
244
-
245
- subject do
246
- CapsuleCRM::Opportunity.
247
- create(opportunity_attributes.merge(track: track))
248
- end
249
-
250
- it { expect(subject).to be_a(CapsuleCRM::Opportunity) }
251
-
252
- it do
253
- subject
254
- WebMock.should have_requested(
255
- :post, "#{request_path}?trackId=#{track.id}"
256
- )
257
- end
258
- end
259
- end
260
-
261
- context 'when the opportunity is not valid' do
262
- subject { CapsuleCRM::Opportunity.create }
263
-
264
- it { subject.errors.should_not be_blank }
265
- end
266
- end
267
-
268
- describe '.create!' do
269
- context 'when the opportunity is valid' do
270
- before do
271
- stub_request(:post, /.*/).to_return(headers: {
272
- 'Location' => 'https://sample.capsulecrm.com/api/opportunity/71'
273
- })
274
- end
275
- let(:party) { Fabricate.build(:person, id: Random.rand(1..10)) }
276
- let(:opportunity_attributes) do
277
- Fabricate.attributes_for(:opportunity).merge(party: party)
278
- end
279
-
280
- subject do
281
- CapsuleCRM::Opportunity.create opportunity_attributes
282
- end
283
-
284
- it { should be_a(CapsuleCRM::Opportunity) }
285
- it { should be_persisted }
286
- it { subject.id.should eql(71) }
287
- end
288
-
289
- context 'when the opportunity is not valid' do
290
- it do
291
- expect { CapsuleCRM::Opportunity.create! }.
292
- to raise_error(CapsuleCRM::Errors::RecordInvalid)
293
- end
294
- end
295
- end
296
-
297
- describe '#update_attributes' do
298
- context 'when the opportunity is valid' do
299
- before do
300
- stub_request(:put, /.*/).to_return(status: 200)
301
- end
302
-
303
- let(:opportunity) { CapsuleCRM::Opportunity.new(id: 1) }
304
-
305
- before { opportunity.update_attributes name: 'renamed' }
306
-
307
- it { opportunity.name.should eql('renamed') }
308
-
309
- it { opportunity.id.should eql(1) }
310
- end
311
-
312
- context 'when the opportunity is not valid' do
313
- let(:opportunity) { CapsuleCRM::Opportunity.new(id: 1) }
314
-
315
- before { opportunity.update_attributes }
316
-
317
- it { opportunity.should_not be_valid }
318
-
319
- it { opportunity.errors.should_not be_blank }
320
- end
321
- end
322
-
323
- describe '#update_attributes!' do
324
-
325
- let(:opportunity) { CapsuleCRM::Opportunity.new(id: 1) }
326
-
327
- context 'when the opportunity is valid' do
328
- before do
329
- stub_request(:put, /.*/).to_return(status: 200)
330
- end
331
-
332
- before { opportunity.update_attributes name: 'A New Name' }
333
-
334
- it { opportunity.name.should eql('A New Name') }
335
-
336
- it { opportunity.id.should eql(1) }
337
- end
338
-
339
- context 'when the opportunity is not valid' do
340
- it do
341
- expect { opportunity.update_attributes! }.
342
- to raise_error(CapsuleCRM::Errors::RecordInvalid)
343
- end
344
- end
345
- end
346
-
347
- describe '#save' do
348
- context 'when the opportunity is a new record' do
349
- before do
350
- stub_request(:post, /.*/).to_return(headers: {
351
- 'Location' => 'https://sample.capsulecrm.com/api/party/100'
352
- }, status: 200)
353
- end
354
- let(:party) { Fabricate.build(:person) }
355
- let(:opportunity) do
356
- Fabricate.build(:opportunity, party: party)
357
- end
358
-
359
- before { opportunity.save }
360
-
361
- it { opportunity.name.should eql('Test') }
362
-
363
- it { opportunity.milestone_id.should eql(1) }
364
-
365
- it { opportunity.should be_persisted }
366
- end
367
- end
368
-
369
- describe '#save!' do
370
- context 'when the opportunity is a new record' do
371
- context 'when the opportunity is valid' do
372
- before do
373
- stub_request(:post, /.*/).to_return(headers: {
374
- 'Location' => 'https://sample.capsulecrm.com/api/party/100',
375
- }, status: 200)
376
- end
377
- let(:party) { Fabricate.build(:person) }
378
- let(:opportunity) do
379
- Fabricate.build(:opportunity, party: party)
380
- end
381
-
382
- before { opportunity.save! }
383
-
384
- it { opportunity.should be_persisted }
385
- end
386
-
387
- context 'when the opportunity is not valid' do
388
- let(:opportunity) { CapsuleCRM::Opportunity.new }
389
-
390
- it do
391
- expect { opportunity.save! }.
392
- to raise_error(CapsuleCRM::Errors::RecordInvalid)
393
- end
394
- end
395
- end
396
-
397
- context 'when the opportunity is not a new record' do
398
- context 'when the opportunity is not valid' do
399
-
400
- let(:opportunity) { CapsuleCRM::Opportunity.new(id: 1) }
401
-
402
- it do
403
- expect { opportunity.save! }.
404
- to raise_exception(CapsuleCRM::Errors::RecordInvalid)
405
- end
406
- end
407
- end
408
- end
409
-
410
- describe '#new_record?' do
411
- context 'when the opportunity is a new record' do
412
- let(:opportunity) { CapsuleCRM::Opportunity.new }
413
-
414
- subject { opportunity.new_record? }
415
-
416
- it { should be_true }
417
- end
418
-
419
- context 'when the opportunity is not a new record' do
420
- let(:opportunity) { CapsuleCRM::Opportunity.new(id: 1) }
421
-
422
- subject { opportunity.new_record? }
423
-
424
- it { should be_false }
425
- end
426
- end
427
-
428
- describe '#persisted?' do
429
- context 'when the opportunity is persisted' do
430
- let(:opportunity) { CapsuleCRM::Opportunity.new(id: 1) }
431
-
432
- subject { opportunity.persisted? }
433
-
434
- it { should be_true }
435
- end
436
-
437
- context 'when the opportunity is not persisted' do
438
- let(:opportunity) { CapsuleCRM::Opportunity.new }
439
-
440
- subject { opportunity.persisted? }
441
-
442
- it { should be_false }
443
- end
444
- end
445
-
446
- describe '.init_collection' do
447
- subject do
448
- CapsuleCRM::Opportunity.init_collection(
449
- JSON.parse(
450
- File.read('spec/support/all_opportunities.json')
451
- )['opportunities']['opportunity']
452
- )
453
- end
454
-
455
- it { should be_a(Array) }
456
-
457
- it { subject.length.should eql(1) }
458
-
459
- it do
460
- subject.all? { |item| item.is_a?(CapsuleCRM::Opportunity) }.should be_true
461
- end
462
- end
463
-
464
- describe '#destroy' do
465
- let(:opportunity) do
466
- CapsuleCRM::Opportunity.new(id: 1)
467
- end
468
-
469
- before do
470
- stub_request(:delete, /.*/).to_return(status: 200)
471
- opportunity.destroy
472
- end
473
-
474
- it { opportunity.id.should be_blank }
475
-
476
- it { opportunity.should_not be_persisted }
477
- end
478
-
479
160
  describe '.deleted' do
480
161
  before do
481
162
  stub_request(:get, /.*/).
@@ -4,13 +4,50 @@ require 'spec_helper'
4
4
  describe CapsuleCRM::Organization do
5
5
  before { configure }
6
6
 
7
- it_should_behave_like 'contactable'
8
-
9
7
  before do
10
8
  stub_request(:get, /\/api\/users$/).
11
9
  to_return(body: File.read('spec/support/all_users.json'))
12
10
  end
13
11
 
12
+ it_should_behave_like 'contactable'
13
+
14
+ it_behaves_like 'persistable', 'https://sample.capsulecrm.com/api/organisation/13', 13 do
15
+ let(:attributes) { Fabricate.attributes_for(:organization) }
16
+ end
17
+
18
+ it_behaves_like 'deletable'
19
+
20
+ it_behaves_like 'listable', '/party', 'parties', 1
21
+
22
+ it_behaves_like 'findable', '/api/party/10', 10, 'organisation' do
23
+ let(:attributes) do
24
+ { name: 'Google Inc', about: 'A comment here' }
25
+ end
26
+
27
+ it 'should get the contact address street' do
28
+ expect(subject.addresses.first.street).
29
+ to eql('1600 Amphitheatre Parkway')
30
+ end
31
+
32
+ it 'should get the contact address city' do
33
+ expect(subject.addresses.first.city).
34
+ to eql('Mountain View')
35
+ end
36
+
37
+ it 'should get the contact address state' do
38
+ expect(subject.addresses.first.state).to eql('CA')
39
+ end
40
+
41
+ it 'should get the contact address zip' do
42
+ expect(subject.addresses.first.zip).to eql('94043')
43
+ end
44
+
45
+ it 'should get the contact address country' do
46
+ expect(subject.addresses.first.country).
47
+ to eql('United States')
48
+ end
49
+ end
50
+
14
51
  describe '#custom_fields' do
15
52
  before do
16
53
  stub_request(:get, /\/api\/party\/#{organization.id}\/customfields/).
@@ -27,36 +64,6 @@ describe CapsuleCRM::Organization do
27
64
  end
28
65
  end
29
66
 
30
- describe '.all' do
31
- context 'when some parties exist' do
32
- before do
33
- stub_request(:get, /\/api\/party$/).
34
- to_return(body: File.read('spec/support/all_parties.json'))
35
- end
36
-
37
- subject { CapsuleCRM::Organization.all }
38
-
39
- it { expect(subject).to be_a(Array) }
40
-
41
- it { expect(subject.length).to eql(1) }
42
-
43
- it { expect(subject.first).to be_a(CapsuleCRM::Organization) }
44
- end
45
-
46
- context 'when no parties exist' do
47
- before do
48
- stub_request(:get, /\/api\/party$/).
49
- to_return(body: File.read('spec/support/no_parties.json'))
50
- end
51
-
52
- subject { CapsuleCRM::Organization.all }
53
-
54
- it { expect(subject).to be_a(Array) }
55
-
56
- it { expect(subject.length).to eql(0) }
57
- end
58
- end
59
-
60
67
  describe '#people' do
61
68
  let(:organization) { Fabricate.build(:organization, id: 1) }
62
69
 
@@ -97,58 +104,30 @@ describe CapsuleCRM::Organization do
97
104
  zip: '10117', country: 'de'
98
105
  )
99
106
  end
100
-
101
107
  let(:email) do
102
108
  CapsuleCRM::Email.new(type: 'Work', email_address: 'mattscompany@gmail.com')
103
109
  end
104
-
105
110
  let(:contacts) do
106
111
  CapsuleCRM::Contacts.new(addresses: [address], emails: [email])
107
112
  end
108
-
109
113
  let(:organization) do
110
114
  CapsuleCRM::Organization.new(
111
115
  name: "Matt's Company",
112
116
  contacts: contacts
113
117
  )
114
118
  end
115
-
116
119
  let(:email_json) { subject['contacts']['email'].first }
117
-
118
120
  let(:address_json) { subject['contacts']['address'].first }
119
-
120
121
  subject { organization.to_capsule_json['organisation'] }
121
122
 
122
123
  it { should have_key('name') }
123
-
124
124
  it { should have_key('contacts') }
125
-
126
125
  it { address_json.should have_key('street') }
127
-
128
126
  it { address_json.should have_key('city') }
129
-
130
127
  it { address_json.should have_key('state') }
131
-
132
128
  it { address_json.should have_key('zip') }
133
-
134
129
  it { address_json.should have_key('country') }
135
-
136
130
  it { email_json.should have_key('type') }
137
-
138
131
  it { email_json.should have_key('emailAddress') }
139
132
  end
140
-
141
- describe '#destroy' do
142
- let(:organization) { CapsuleCRM::Organization.new(id: 1) }
143
-
144
- before do
145
- stub_request(:delete, /\/api\/party\/#{organization.id}/).
146
- to_return(status: 200)
147
- organization.destroy
148
- end
149
-
150
- it { expect(organization.id).to be_blank }
151
-
152
- it { expect(organization).to_not be_persisted }
153
- end
154
133
  end
@@ -3,78 +3,56 @@ require 'spec_helper'
3
3
  describe CapsuleCRM::Party do
4
4
  before { configure }
5
5
 
6
- describe '.find' do
7
- context 'when finding an organization' do
8
- before do
9
- stub_request(:get, /\/api\/party\/#{id}$/).
10
- to_return(body: File.read('spec/support/organisation.json'))
11
- end
6
+ it_behaves_like 'listable', '/party', 'parties', 3
12
7
 
13
- subject { CapsuleCRM::Party.find(id) }
14
-
15
- let(:id) { rand(10) }
16
-
17
- it { expect(subject).to be_a(CapsuleCRM::Organization) }
18
-
19
- it { expect(subject.contacts).to be_a(CapsuleCRM::Contacts) }
20
-
21
- it 'should get the contact address street' do
22
- expect(subject.addresses.first.street).
23
- to eql('1600 Amphitheatre Parkway')
24
- end
25
-
26
- it 'should get the contact address city' do
27
- expect(subject.addresses.first.city).
28
- to eql('Mountain View')
29
- end
30
-
31
- it { expect(subject.addresses.first.state).to eql('CA') }
32
-
33
- it { expect(subject.addresses.first.zip).to eql('94043') }
34
-
35
- it 'should get the contact address country' do
36
- expect(subject.addresses.first.country).
37
- to eql('United States')
38
- end
8
+ it_behaves_like 'findable', '/api/party/10', 10, 'organisation' do
9
+ let(:attributes) do
10
+ { name: 'Google Inc', about: 'A comment here' }
39
11
  end
40
12
 
41
- context 'when finding a person' do
42
- before do
43
- stub_request(:get, /\/api\/party\/#{id}$/).
44
- to_return(body: File.read('spec/support/person.json'))
45
- end
46
-
47
- subject { CapsuleCRM::Party.find(id) }
13
+ it 'should get the contact address street' do
14
+ expect(subject.addresses.first.street).
15
+ to eql('1600 Amphitheatre Parkway')
16
+ end
48
17
 
49
- let(:id) { rand(10) }
18
+ it 'should get the contact address city' do
19
+ expect(subject.addresses.first.city).
20
+ to eql('Mountain View')
21
+ end
50
22
 
51
- it 'should get the email address' do
52
- expect(subject.emails.first.email_address).
53
- to eql('e.schmidt@google.com')
54
- end
23
+ it 'should get the contact address state' do
24
+ expect(subject.addresses.first.state).to eql('CA')
25
+ end
55
26
 
56
- it 'should get the phone number' do
57
- expect(subject.phones.first.phone_number).to eql('+1 888 555555')
58
- end
27
+ it 'should get the contact address zip' do
28
+ expect(subject.addresses.first.zip).to eql('94043')
29
+ end
59
30
 
60
- it 'should get the website' do
61
- expect(subject.websites.first.web_address).to eql('www.google.com')
62
- end
31
+ it 'should get the contact address country' do
32
+ expect(subject.addresses.first.country).
33
+ to eql('United States')
63
34
  end
64
35
  end
65
36
 
66
- describe '.all' do
67
- before do
68
- stub_request(:get, /\/api\/party$/).
69
- to_return(body: File.read('spec/support/all_parties.json'))
37
+ it_behaves_like 'findable', '/api/party/12', 12, 'person' do
38
+ let(:attributes) do
39
+ {
40
+ first_name: 'Eric', last_name: 'Schmidt', job_title: 'Chairman',
41
+ about: 'A comment here'
42
+ }
70
43
  end
71
44
 
72
- subject { CapsuleCRM::Party.all }
73
-
74
- it { subject.length.should eql(3) }
45
+ it 'should get the email address' do
46
+ expect(subject.emails.first.email_address).
47
+ to eql('e.schmidt@google.com')
48
+ end
75
49
 
76
- it { subject.first.should be_a(CapsuleCRM::Organization) }
50
+ it 'should get the phone number' do
51
+ expect(subject.phones.first.phone_number).to eql('+1 888 555555')
52
+ end
77
53
 
78
- it { subject.last.should be_a(CapsuleCRM::Person) }
54
+ it 'should get the website' do
55
+ expect(subject.websites.first.web_address).to eql('www.google.com')
56
+ end
79
57
  end
80
58
  end