hubspot-api-ruby 0.8.0 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
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