hubspot-api-ruby 0.8.0 → 0.10.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 (52) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +40 -154
  3. data/Rakefile +0 -2
  4. data/hubspot-api-ruby.gemspec +5 -7
  5. data/lib/hubspot/association.rb +106 -0
  6. data/lib/hubspot/company.rb +2 -13
  7. data/lib/hubspot/config.rb +14 -9
  8. data/lib/hubspot/connection.rb +20 -14
  9. data/lib/hubspot/contact.rb +5 -1
  10. data/lib/hubspot/contact_list.rb +0 -7
  11. data/lib/hubspot/custom_event.rb +25 -0
  12. data/lib/hubspot/deal.rb +53 -32
  13. data/lib/hubspot/engagement.rb +0 -1
  14. data/lib/hubspot/exceptions.rb +2 -0
  15. data/lib/hubspot/file.rb +2 -2
  16. data/lib/hubspot/meeting.rb +44 -0
  17. data/lib/hubspot/properties.rb +1 -1
  18. data/lib/hubspot/railtie.rb +0 -4
  19. data/lib/hubspot/resource.rb +4 -4
  20. data/lib/hubspot/utils.rb +0 -30
  21. data/lib/hubspot-api-ruby.rb +3 -0
  22. data/spec/lib/hubspot/association_spec.rb +165 -0
  23. data/spec/lib/hubspot/blog_spec.rb +10 -21
  24. data/spec/lib/hubspot/company_properties_spec.rb +8 -11
  25. data/spec/lib/hubspot/company_spec.rb +18 -36
  26. data/spec/lib/hubspot/config_spec.rb +24 -14
  27. data/spec/lib/hubspot/connection_spec.rb +44 -55
  28. data/spec/lib/hubspot/contact_list_spec.rb +82 -71
  29. data/spec/lib/hubspot/contact_properties_spec.rb +5 -34
  30. data/spec/lib/hubspot/contact_spec.rb +2 -4
  31. data/spec/lib/hubspot/custom_event_spec.rb +28 -0
  32. data/spec/lib/hubspot/deal_pipeline_spec.rb +4 -15
  33. data/spec/lib/hubspot/deal_properties_spec.rb +11 -58
  34. data/spec/lib/hubspot/deal_spec.rb +46 -47
  35. data/spec/lib/hubspot/engagement_spec.rb +21 -40
  36. data/spec/lib/hubspot/event_spec.rb +3 -2
  37. data/spec/lib/hubspot/file_spec.rb +16 -30
  38. data/spec/lib/hubspot/form_spec.rb +34 -34
  39. data/spec/lib/hubspot/meeting_spec.rb +81 -0
  40. data/spec/lib/hubspot/owner_spec.rb +2 -3
  41. data/spec/lib/hubspot/resource_spec.rb +41 -1
  42. data/spec/lib/hubspot/utils_spec.rb +6 -39
  43. data/spec/lib/hubspot-ruby_spec.rb +1 -1
  44. data/spec/spec_helper.rb +13 -4
  45. data/spec/support/vcr.rb +4 -6
  46. metadata +11 -27
  47. data/lib/tasks/hubspot.rake +0 -53
  48. data/spec/lib/hubspot/topic_spec.rb +0 -23
  49. data/spec/lib/tasks/hubspot_spec.rb +0 -119
  50. data/spec/support/capture_output.rb +0 -21
  51. data/spec/support/rake.rb +0 -46
  52. data/spec/support/tests_helper.rb +0 -17
@@ -1,16 +1,38 @@
1
1
  describe Hubspot::ContactList do
2
+ # uncomment if you need to create test data in your panel.
3
+ # note that sandboxes have a limit of 5 dynamic lists
4
+ # before(:all) do
5
+ # VCR.use_cassette("create_all_lists") do
6
+ # 25.times { Hubspot::ContactList.create!(name: SecureRandom.hex) }
7
+ # 3.times { Hubspot::ContactList.create!(name: SecureRandom.hex, dynamic: true, filters: [[{ operator: "EQ", value: "@hubspot", property: "twitterhandle", type: "string"}]]) }
8
+ # end
9
+ # end
10
+
2
11
  let(:example_contact_list_hash) do
3
12
  VCR.use_cassette("contact_list_example") do
4
- HTTParty.get("https://api.hubapi.com/contacts/v1/lists/1?hapikey=demo").parsed_response
13
+ headers = { Authorization: "Bearer #{ENV.fetch('HUBSPOT_ACCESS_TOKEN')}" }
14
+ response = HTTParty.get("https://api.hubapi.com/contacts/v1/lists/static?count=1", headers: headers).parsed_response
15
+ response['lists'].first
5
16
  end
6
17
  end
7
18
 
8
- let(:static_list) { Hubspot::ContactList.all(static: true, count: 3).last }
9
- let(:dynamic_list) { Hubspot::ContactList.all(dynamic: true, count: 1).first }
19
+ let(:static_list) do
20
+ Hubspot::ContactList.create!(name: "static list #{SecureRandom.hex}")
21
+ end
22
+
23
+ shared_examples "count and offset" do |params|
24
+ it 'returns only the number of objects specified by count' do
25
+ result = instance_exec(count: 2, &params[:block])
26
+ expect(result.size).to eql 2
10
27
 
11
- let(:example_contact_hash) do
12
- VCR.use_cassette("contact_example") do
13
- HTTParty.get("https://api.hubapi.com/contacts/v1/contact/email/testingapis@hubspot.com/profile?hapikey=demo").parsed_response
28
+ result = instance_exec(count: 4, &params[:block])
29
+ expect(result.size).to eql 4
30
+ end
31
+
32
+ it 'returns objects by a specified offset' do
33
+ non_offset_objects = instance_exec(count: 2, &params[:block])
34
+ objects_with_offset = instance_exec(count: 2, offset: 2, &params[:block])
35
+ expect(non_offset_objects).to_not eql objects_with_offset
14
36
  end
15
37
  end
16
38
 
@@ -21,25 +43,27 @@ describe Hubspot::ContactList do
21
43
  its(:id) { should be_an(Integer) }
22
44
  its(:portal_id) { should be_a(Integer) }
23
45
  its(:name) { should_not be_empty }
24
- its(:dynamic) { should be true }
46
+ its(:dynamic) { should be false }
25
47
  its(:properties) { should be_a(Hash) }
26
48
  end
27
49
 
28
- before { Hubspot.configure(hapikey: "demo") }
29
-
30
50
  describe '#contacts' do
31
51
  cassette 'contacts_among_list'
32
52
 
33
- let(:list) { Hubspot::ContactList.new(example_contact_list_hash) }
53
+ let(:list) { @list }
34
54
 
35
- it 'returns by default 20 contact lists' do
36
- expect(list.contacts.count).to eql 20
37
- contact = list.contacts.first
38
- expect(contact).to be_a(Hubspot::Contact)
55
+ before(:all) do
56
+ VCR.use_cassette 'create_and_add_all_contacts' do
57
+ @list = Hubspot::ContactList.create!(name: "contacts list #{SecureRandom.hex}")
58
+ 25.times do
59
+ contact = Hubspot::Contact.create("#{SecureRandom.hex}@hubspot.com")
60
+ @list.add(contact)
61
+ end
62
+ end
39
63
  end
40
64
 
41
65
  it 'returns by default 20 contact lists with paging data' do
42
- contact_data = list.contacts({paged: true})
66
+ contact_data = list.contacts({bypass_cache: true, paged: true})
43
67
  contacts = contact_data['contacts']
44
68
 
45
69
  expect(contact_data).to have_key 'vid-offset'
@@ -48,16 +72,10 @@ describe Hubspot::ContactList do
48
72
  expect(contacts.count).to eql 20
49
73
  contact = contacts.first
50
74
  expect(contact).to be_a(Hubspot::Contact)
51
- end
52
-
53
- it 'add default properties to the contacts returned' do
54
- contact = list.contacts.first
55
75
  expect(contact.email).to_not be_empty
56
76
  end
57
77
 
58
- expect_count_and_offset do |params|
59
- Hubspot::ContactList.find(1).contacts(params)
60
- end
78
+ it_behaves_like 'count and offset', {block: ->(r) { Hubspot::ContactList.find(list.id).contacts(r) }}
61
79
  end
62
80
 
63
81
  describe '.create' do
@@ -66,7 +84,7 @@ describe Hubspot::ContactList do
66
84
  context 'with all required parameters' do
67
85
  cassette 'create_list'
68
86
 
69
- let(:name) { 'testing list' }
87
+ let(:name) { "testing list #{SecureRandom.hex}" }
70
88
  it { should be_an_instance_of Hubspot::ContactList }
71
89
  its(:id) { should be_an(Integer) }
72
90
  its(:portal_id) { should be_an(Integer) }
@@ -76,7 +94,7 @@ describe Hubspot::ContactList do
76
94
  cassette 'create_list_with_filters'
77
95
 
78
96
  it 'returns a ContactList object with filters set' do
79
- name = 'list with filters'
97
+ name = "list with filters #{SecureRandom.hex}"
80
98
  filters_param = [[{ operator: "EQ", value: "@hubspot", property: "twitterhandle", type: "string"}]]
81
99
  list_with_filters = Hubspot::ContactList.create!({ name: name, filters: filters_param })
82
100
  expect(list_with_filters).to be_a(Hubspot::ContactList)
@@ -107,7 +125,7 @@ describe Hubspot::ContactList do
107
125
  expect(list.id).to be_an(Integer)
108
126
  end
109
127
 
110
- expect_count_and_offset { |params| Hubspot::ContactList.all(params) }
128
+ it_behaves_like 'count and offset', {block: ->(r) { Hubspot::ContactList.all(r) }}
111
129
  end
112
130
 
113
131
  context 'static lists' do
@@ -115,7 +133,7 @@ describe Hubspot::ContactList do
115
133
 
116
134
  it 'returns by defaut all the static contact lists' do
117
135
  lists = Hubspot::ContactList.all(static: true)
118
- expect(lists.count).to be > 20
136
+ expect(lists.count).to be > 2
119
137
 
120
138
  list = lists.first
121
139
  expect(list).to be_a(Hubspot::ContactList)
@@ -126,9 +144,9 @@ describe Hubspot::ContactList do
126
144
  context 'dynamic lists' do
127
145
  cassette 'find_all_dynamic_lists'
128
146
 
129
- it 'returns by defaut all the static contact lists' do
147
+ it 'returns by defaut all the dynamic contact lists' do
130
148
  lists = Hubspot::ContactList.all(dynamic: true)
131
- expect(lists.count).to be > 20
149
+ expect(lists.count).to be > 2
132
150
 
133
151
  list = lists.first
134
152
  expect(list).to be_a(Hubspot::ContactList)
@@ -142,24 +160,28 @@ describe Hubspot::ContactList do
142
160
  cassette "contact_list_find"
143
161
  subject { Hubspot::ContactList.find(id) }
144
162
 
163
+ let(:list) { Hubspot::ContactList.new(example_contact_list_hash) }
164
+
145
165
  context 'when the contact list is found' do
146
- let(:id) { 1 }
166
+ let(:id) { list.id.to_i }
147
167
  it { should be_an_instance_of Hubspot::ContactList }
148
- its(:name) { should == 'twitterers' }
168
+ its(:name) { should == list.name }
149
169
 
150
- let(:id) { '1' }
151
- it { should be_an_instance_of Hubspot::ContactList }
170
+ context "string id" do
171
+ let(:id) { list.id.to_s }
172
+ it { should be_an_instance_of Hubspot::ContactList }
173
+ end
152
174
  end
153
175
 
154
176
  context 'Wrong parameter type given' do
155
177
  it 'raises an error' do
156
- expect { Hubspot::ContactList.find(static_list) }.to raise_error(Hubspot::InvalidParams)
178
+ expect { Hubspot::ContactList.find({ foo: :bar }) }.to raise_error(Hubspot::InvalidParams)
157
179
  end
158
180
  end
159
181
 
160
182
  context 'when the contact list is not found' do
161
183
  it 'raises an error' do
162
- expect { Hubspot::ContactList.find(-1) }.to raise_error(Hubspot::RequestError)
184
+ expect { Hubspot::ContactList.find(-1) }.to raise_error(Hubspot::NotFoundError)
163
185
  end
164
186
  end
165
187
  end
@@ -167,13 +189,17 @@ describe Hubspot::ContactList do
167
189
  context 'given a list of ids' do
168
190
  cassette "contact_list_batch_find"
169
191
 
192
+ let(:list1) { Hubspot::ContactList.create!(name: SecureRandom.hex) }
193
+ let(:list2) { Hubspot::ContactList.create!(name: SecureRandom.hex) }
194
+ let(:list3) { Hubspot::ContactList.create!(name: SecureRandom.hex) }
195
+
170
196
  it 'find lists of contacts' do
171
- lists = Hubspot::ContactList.find([2,3,4])
197
+ lists = Hubspot::ContactList.find([list1.id,list2.id,list3.id])
172
198
  list = lists.first
173
199
  expect(list).to be_a(Hubspot::ContactList)
174
- expect(list.id).to be == 2
175
- expect(lists.second.id).to be == 3
176
- expect(lists.last.id).to be == 4
200
+ expect(list.id).to be == list1.id
201
+ expect(lists.second.id).to be == list2.id
202
+ expect(lists.last.id).to be == list3.id
177
203
  end
178
204
  end
179
205
  end
@@ -182,8 +208,8 @@ describe Hubspot::ContactList do
182
208
  context "for a static list" do
183
209
  it "adds the contact to the contact list" do
184
210
  VCR.use_cassette("contact_lists/add_contact") do
185
- contact = Hubspot::Contact.create("email@example.com")
186
- contact_list_params = { name: "my-contacts-list" }
211
+ contact = Hubspot::Contact.create("#{SecureRandom.hex}@example.com")
212
+ contact_list_params = { name: "my-contacts-list-#{SecureRandom.hex}" }
187
213
  contact_list = Hubspot::ContactList.create!(contact_list_params)
188
214
 
189
215
  result = contact_list.add([contact])
@@ -198,15 +224,15 @@ describe Hubspot::ContactList do
198
224
  context "when the contact already exists in the contact list" do
199
225
  it "returns false" do
200
226
  VCR.use_cassette("contact_lists/add_existing_contact") do
201
- contact = Hubspot::Contact.create("email@example.com")
227
+ contact = Hubspot::Contact.create("#{SecureRandom.hex}@example.com")
202
228
 
203
- contact_list_params = { name: "my-contacts-list" }
229
+ contact_list_params = { name: "my-contacts-list-#{SecureRandom.hex}" }
204
230
  contact_list = Hubspot::ContactList.create!(contact_list_params)
205
231
  contact_list.add([contact])
206
232
 
207
233
  result = contact_list.add([contact])
208
234
 
209
- expect(result).to be false
235
+ expect(result).to be true
210
236
 
211
237
  contact.delete
212
238
  contact_list.destroy!
@@ -218,9 +244,9 @@ describe Hubspot::ContactList do
218
244
  context "for a dynamic list" do
219
245
  it "raises an error as dynamic lists add contacts via on filters" do
220
246
  VCR.use_cassette("contact_list/add_contact_to_dynamic_list") do
221
- contact = Hubspot::Contact.create("email@example.com")
247
+ contact = Hubspot::Contact.create("#{SecureRandom.hex}@example.com")
222
248
  contact_list_params = {
223
- name: "my-contacts-list",
249
+ name: "my-contacts-list-#{SecureRandom.hex}",
224
250
  dynamic: true,
225
251
  "filters": [
226
252
  [
@@ -248,54 +274,39 @@ describe Hubspot::ContactList do
248
274
 
249
275
  context 'static list' do
250
276
  it 'returns true if removes all contacts in batch mode' do
251
- contacts = static_list.contacts(count: 2)
252
- expect(static_list.remove([contacts.first, contacts.last])).to be true
277
+ list = Hubspot::ContactList.new(example_contact_list_hash)
278
+ contacts = list.contacts(count: 2)
279
+ expect(list.remove([contacts.first, contacts.last])).to be true
253
280
  end
254
281
 
255
282
  it 'returns false if the contact cannot be removed' do
256
- contact_not_present_in_list = Hubspot::Contact.new(example_contact_hash)
283
+ contact_not_present_in_list = Hubspot::Contact.new(1234)
257
284
  expect(static_list.remove(contact_not_present_in_list)).to be false
258
285
  end
259
286
  end
260
-
261
- context 'dynamic list' do
262
- it 'raises error if try to remove a contact from a dynamic list' do
263
- contact = dynamic_list.contacts(recent: true, count: 1).first
264
- expect { dynamic_list.remove(contact) }.to raise_error(Hubspot::RequestError)
265
- end
266
- end
267
287
  end
268
288
 
269
289
  describe '#update!' do
270
290
  cassette "contact_list_update"
271
291
 
272
- let(:contact_list) { Hubspot::ContactList.new(example_contact_list_hash) }
273
- let(:params) { { name: "update list name" } }
274
- subject { contact_list.update!(params) }
292
+ let(:params) { { name: "updated list name" } }
293
+ subject { static_list.update!(params) }
275
294
 
276
295
  it { should be_an_instance_of Hubspot::ContactList }
277
- its(:name){ should == "update list name" }
296
+ its(:name){ should == params[:name] }
297
+
298
+ after { static_list.destroy! }
278
299
  end
279
300
 
280
301
  describe '#destroy!' do
281
302
  cassette "contact_list_destroy"
282
303
 
283
- let(:contact_list) { Hubspot::ContactList.create!({ name: "newcontactlist_#{Time.now.to_i}"}) }
284
- subject{ contact_list.destroy! }
304
+ subject{ static_list.destroy! }
285
305
  it { should be true }
286
306
 
287
307
  it "should be destroyed" do
288
308
  subject
289
- expect(contact_list).to be_destroyed
309
+ expect(static_list).to be_destroyed
290
310
  end
291
311
  end
292
-
293
- describe '#refresh' do
294
- cassette "contact_list_refresh"
295
-
296
- let(:contact_list) { Hubspot::ContactList.new(example_contact_list_hash) }
297
- subject { contact_list.refresh }
298
-
299
- it { should be true }
300
- end
301
312
  end
@@ -14,29 +14,8 @@ describe Hubspot::ContactProperties do
14
14
  end
15
15
  end
16
16
 
17
- let(:example_groups) do
18
- VCR.use_cassette('contact_properties/groups_example') do
19
- HTTParty.get('https://api.hubapi.com/contacts/v2/groups?hapikey=demo').parsed_response
20
- end
21
- end
22
-
23
- let(:example_properties) do
24
- VCR.use_cassette('contact_properties/properties_example') do
25
- HTTParty.get('https://api.hubapi.com/contacts/v2/properties?hapikey=demo').parsed_response
26
- end
27
- end
28
-
29
- before { Hubspot.configure(hapikey: 'demo') }
30
-
31
17
  describe 'Properties' do
32
18
  describe '.all' do
33
- context 'with no filter' do
34
- cassette 'contact_properties/all_properties'
35
-
36
- it 'should return all properties' do
37
- expect(Hubspot::ContactProperties.all).to eql(example_properties)
38
- end
39
- end
40
19
 
41
20
  let(:groups) { %w(calltrackinginfo emailinformation) }
42
21
 
@@ -133,7 +112,7 @@ describe Hubspot::ContactProperties do
133
112
  cassette 'contact_properties/delete_non_property'
134
113
 
135
114
  it 'should raise an error' do
136
- expect { Hubspot::ContactProperties.delete!(name) }.to raise_error(Hubspot::RequestError)
115
+ expect { Hubspot::ContactProperties.delete!(name) }.to raise_error(Hubspot::NotFoundError)
137
116
  end
138
117
  end
139
118
  end
@@ -141,14 +120,6 @@ describe Hubspot::ContactProperties do
141
120
 
142
121
  describe 'Groups' do
143
122
  describe '.groups' do
144
- context 'with no filter' do
145
- cassette 'contact_properties/all_groups'
146
-
147
- it 'should return all groups' do
148
- expect(Hubspot::ContactProperties.groups).to eql(example_groups)
149
- end
150
- end
151
-
152
123
  let(:groups) { %w(calltrackinginfo emailinformation) }
153
124
 
154
125
  context 'with included groups' do
@@ -193,10 +164,10 @@ describe Hubspot::ContactProperties do
193
164
 
194
165
  let(:sub_params) { params.select { |k, _| k != 'displayName' } }
195
166
 
196
- it 'should return the valid parameters' do
197
- params['name'] = 'ff_group234'
167
+ it 'should return the valid parameters' do |example|
168
+ params['name'] = "ff_group_#{SecureRandom.hex}"
198
169
  response = Hubspot::ContactProperties.create_group!(sub_params)
199
- expect(Hubspot::ContactProperties.same?(response, sub_params)).to be true
170
+ expect(Hubspot::ContactProperties.same?(response.except("name"), sub_params.except("name"))).to be true
200
171
  end
201
172
  end
202
173
  end
@@ -237,7 +208,7 @@ describe Hubspot::ContactProperties do
237
208
  cassette 'contact_properties/delete_non_group'
238
209
 
239
210
  it 'should raise an error' do
240
- expect { Hubspot::ContactProperties.delete_group!(name) }.to raise_error(Hubspot::RequestError)
211
+ expect { Hubspot::ContactProperties.delete_group!(name) }.to raise_error(Hubspot::NotFoundError)
241
212
  end
242
213
  end
243
214
  end
@@ -1,7 +1,5 @@
1
1
  RSpec.describe Hubspot::Contact do
2
2
 
3
- before{ Hubspot.configure(hapikey: 'demo') }
4
-
5
3
  it_behaves_like "a saveable resource", :contact do
6
4
  def set_property(contact)
7
5
  contact.firstname = "foobar"
@@ -35,7 +33,7 @@ RSpec.describe Hubspot::Contact do
35
33
  it 'raises an error' do
36
34
  expect {
37
35
  subject
38
- }.to raise_error(Hubspot::RequestError, /contact does not exist/)
36
+ }.to raise_error(Hubspot::NotFoundError, /contact does not exist/)
39
37
  end
40
38
  end
41
39
  end
@@ -211,7 +209,7 @@ RSpec.describe Hubspot::Contact do
211
209
 
212
210
  let!(:contact1) { create :contact }
213
211
 
214
- subject { contact1.merge(1) }
212
+ subject { contact1.merge(contact1.id) }
215
213
 
216
214
  it 'raises an error' do
217
215
  expect {
@@ -0,0 +1,28 @@
1
+ RSpec.describe Hubspot::CustomEvent do
2
+ before do
3
+ Hubspot.configure(access_token: ENV.fetch("HUBSPOT_ACCESS_TOKEN"), portal_id: ENV.fetch("HUBSPOT_PORTAL_ID"),
4
+ custom_event_prefix: 'foobar')
5
+ end
6
+
7
+ describe '.trigger' do
8
+ let(:event_name) { 'my_awesome_event' }
9
+ let(:email) { 'testingapis@hubspot.com' }
10
+ let(:properties) { { prop_foo: 'bar' } }
11
+ let(:options) { {} }
12
+ let(:base_url) { 'https://api.hubapi.com' }
13
+ let(:url) { "#{base_url}/events/v3/send" }
14
+
15
+ subject { described_class.trigger(event_name, email, properties, options) }
16
+
17
+ before { stub_request(:post, url).to_return(status: 204, body: JSON.generate({})) }
18
+
19
+ it('sends a request to trigger the event') { is_expected.to be true }
20
+
21
+ context 'with headers' do
22
+ let(:headers) { { 'User-Agent' => 'something' } }
23
+ let(:options) { { headers: headers } }
24
+
25
+ it('sends headers') { is_expected.to be true }
26
+ end
27
+ end
28
+ end
@@ -1,17 +1,13 @@
1
1
  RSpec.describe Hubspot::DealPipeline do
2
- before do
3
- Hubspot.configure hapikey: 'demo'
4
- end
5
2
 
6
3
  describe ".find" do
7
4
  it "retrieves a record by id" do
8
5
  VCR.use_cassette("find_deal_pipeline") do
9
- deal_pipeline = Hubspot::DealPipeline.create!(label: "New Pipeline")
6
+ deal_pipeline = Hubspot::DealPipeline.create!(label: "New Pipeline #{SecureRandom.hex}")
10
7
  id = deal_pipeline.pipeline_id
11
8
 
12
9
  result = Hubspot::DealPipeline.find(deal_pipeline.pipeline_id)
13
10
 
14
- assert_requested :get, hubspot_api_url("/deals/v1/pipelines/#{id}")
15
11
  expect(result).to be_a(Hubspot::DealPipeline)
16
12
 
17
13
  deal_pipeline.destroy!
@@ -22,11 +18,10 @@ RSpec.describe Hubspot::DealPipeline do
22
18
  describe ".all" do
23
19
  it "returns a list" do
24
20
  VCR.use_cassette("all_deal_pipelines") do
25
- deal_pipeline = Hubspot::DealPipeline.create!(label: "New Pipeline")
21
+ deal_pipeline = Hubspot::DealPipeline.create!(label: "New Pipeline #{SecureRandom.hex}")
26
22
 
27
23
  results = Hubspot::DealPipeline.all
28
24
 
29
- assert_requested :get, hubspot_api_url("/deals/v1/pipelines")
30
25
  expect(results).to be_kind_of(Array)
31
26
  expect(results.first).to be_a(Hubspot::DealPipeline)
32
27
 
@@ -38,9 +33,8 @@ RSpec.describe Hubspot::DealPipeline do
38
33
  describe ".create!" do
39
34
  it "creates a new record" do
40
35
  VCR.use_cassette("create_deal_pipeline") do
41
- result = Hubspot::DealPipeline.create!(label: "New Pipeline")
36
+ result = Hubspot::DealPipeline.create!(label: "New Pipeline #{SecureRandom.hex}")
42
37
 
43
- assert_requested :post, hubspot_api_url("/deals/v1/pipelines")
44
38
  expect(result).to be_a(Hubspot::DealPipeline)
45
39
 
46
40
  result.destroy!
@@ -51,12 +45,11 @@ RSpec.describe Hubspot::DealPipeline do
51
45
  describe "#destroy!" do
52
46
  it "deletes the record" do
53
47
  VCR.use_cassette("delete_deal_pipeline") do
54
- deal_pipeline = Hubspot::DealPipeline.create!(label: "New Pipeline")
48
+ deal_pipeline = Hubspot::DealPipeline.create!(label: "New Pipeline #{SecureRandom.hex}")
55
49
  id = deal_pipeline.pipeline_id
56
50
 
57
51
  result = deal_pipeline.destroy!
58
52
 
59
- assert_requested :delete, hubspot_api_url("/deals/v1/pipelines/#{id}")
60
53
  expect(result).to be_a(HTTParty::Response)
61
54
  end
62
55
  end
@@ -78,8 +71,4 @@ RSpec.describe Hubspot::DealPipeline do
78
71
  expect(result).to eq(data["stages"][0])
79
72
  end
80
73
  end
81
-
82
- def hubspot_api_url(path)
83
- URI.join(Hubspot::Config.base_url, path, "?hapikey=demo")
84
- end
85
74
  end
@@ -14,30 +14,9 @@ describe Hubspot::DealProperties do
14
14
  end
15
15
  end
16
16
 
17
- let(:example_groups) do
18
- VCR.use_cassette('deal_groups_example') do
19
- HTTParty.get('https://api.hubapi.com/deals/v1/groups?hapikey=demo').parsed_response
20
- end
21
- end
22
-
23
- let(:example_properties) do
24
- VCR.use_cassette('deal_properties_example') do
25
- HTTParty.get('https://api.hubapi.com/deals/v1/properties?hapikey=demo').parsed_response
26
- end
27
- end
28
-
29
- before { Hubspot.configure(hapikey: 'demo') }
30
17
 
31
18
  describe 'Properties' do
32
19
  describe '.all' do
33
- context 'with no filter' do
34
- cassette 'deal_all_properties'
35
-
36
- it 'should return all properties' do
37
- expect(Hubspot::DealProperties.all).to eql(example_properties)
38
- end
39
- end
40
-
41
20
  let(:groups) { %w(calltrackinginfo emailinformation) }
42
21
 
43
22
  context 'with included groups' do
@@ -60,31 +39,13 @@ describe Hubspot::DealProperties do
60
39
  end
61
40
 
62
41
  let(:params) { {
63
- 'name' => 'my_new_property',
42
+ 'name' => "my_new_property_#{SecureRandom.hex}",
64
43
  'label' => 'This is my new property',
65
44
  'description' => 'How much money do you have?',
66
45
  'groupName' => 'dealinformation',
67
46
  'type' => 'string',
68
47
  'fieldType' => 'text',
69
48
  'hidden' => false,
70
- 'options' => [{
71
- 'description' => '',
72
- 'value' => 'Over $50K',
73
- 'readOnly' => false,
74
- 'label' => 'Over $50K',
75
- 'displayOrder' => 0,
76
- 'hidden' => false,
77
- 'doubleData' => 0.0
78
- },
79
- {
80
- 'description' => '',
81
- 'value' => 'Under $50K',
82
- 'readOnly' => false,
83
- 'label' => 'Under $50K',
84
- 'displayOrder' => 1,
85
- 'hidden' => false,
86
- 'doubleData' => 0.0
87
- }],
88
49
  'deleted' => false,
89
50
  'displayOrder' => 0,
90
51
  'formField' => true,
@@ -110,7 +71,7 @@ describe Hubspot::DealProperties do
110
71
 
111
72
  it 'should return the valid parameters' do
112
73
  response = Hubspot::DealProperties.create!(params)
113
- expect(Hubspot::DealProperties.same?(params, response)).to be true
74
+ expect(Hubspot::DealProperties.same?(params.except("name"), response.compact.except("name", "options"))).to be true
114
75
  end
115
76
  end
116
77
  end
@@ -127,22 +88,22 @@ describe Hubspot::DealProperties do
127
88
  cassette 'deal_update_property'
128
89
 
129
90
  it 'should return the valid parameters' do
91
+ properties = Hubspot::DealProperties.create!(params)
130
92
  params['description'] = 'What is their favorite flavor?'
131
93
 
132
- response = Hubspot::DealProperties.update!(params['name'], params)
133
- expect(Hubspot::DealProperties.same?(response, params)).to be true
94
+ response = Hubspot::DealProperties.update!(properties['name'], params)
95
+ expect(Hubspot::DealProperties.same?(response.compact.except("name"), params.except("name"))).to be true
134
96
  end
135
97
  end
136
98
  end
137
99
 
138
100
  describe '.delete!' do
139
- let(:name) { params['name'] }
140
-
141
101
  context 'with existing property' do
142
102
  cassette 'deal_delete_property'
143
103
 
144
104
  it 'should return nil' do
145
- expect(Hubspot::DealProperties.delete!(name)).to eq(nil)
105
+ properties = Hubspot::DealProperties.create!(params)
106
+ expect(Hubspot::DealProperties.delete!(properties["name"])).to eq(nil)
146
107
  end
147
108
  end
148
109
 
@@ -150,7 +111,7 @@ describe Hubspot::DealProperties do
150
111
  cassette 'deal_delete_non_property'
151
112
 
152
113
  it 'should raise an error' do
153
- expect { Hubspot::DealProperties.delete!(name) }.to raise_error(Hubspot::RequestError)
114
+ expect { Hubspot::DealProperties.delete!("i_do_not_exist") }.to raise_error(Hubspot::NotFoundError)
154
115
  end
155
116
  end
156
117
  end
@@ -158,14 +119,6 @@ describe Hubspot::DealProperties do
158
119
 
159
120
  describe 'Groups' do
160
121
  describe '.groups' do
161
- context 'with no filter' do
162
- cassette 'deal_all_groups'
163
-
164
- it 'should return all groups' do
165
- expect(Hubspot::DealProperties.groups).to eql(example_groups)
166
- end
167
- end
168
-
169
122
  let(:groups) { %w(calltrackinginfo emailinformation) }
170
123
 
171
124
  context 'with included groups' do
@@ -211,9 +164,9 @@ describe Hubspot::DealProperties do
211
164
  let(:sub_params) { params.select { |k, _| k != 'displayName' } }
212
165
 
213
166
  it 'should return the valid parameters' do
214
- params['name'] = 'ff_group234'
167
+ params['name'] = "ff_group_#{SecureRandom.hex}"
215
168
  response = Hubspot::DealProperties.create_group!(sub_params)
216
- expect(Hubspot::DealProperties.same?(response, sub_params)).to be true
169
+ expect(Hubspot::DealProperties.same?(response.except("name"), sub_params.except("name"))).to be true
217
170
  end
218
171
  end
219
172
  end
@@ -254,7 +207,7 @@ describe Hubspot::DealProperties do
254
207
  cassette 'deal_delete_non_group'
255
208
 
256
209
  it 'should raise an error' do
257
- expect { Hubspot::DealProperties.delete_group!(name) }.to raise_error(Hubspot::RequestError)
210
+ expect { Hubspot::DealProperties.delete_group!(name) }.to raise_error(Hubspot::NotFoundError)
258
211
  end
259
212
  end
260
213
  end