intercom 3.9.5 → 4.0.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.
- checksums.yaml +5 -5
- data/README.md +235 -222
- data/Rakefile +1 -1
- data/changes.txt +3 -0
- data/lib/intercom.rb +27 -22
- data/lib/intercom/api_operations/archive.rb +2 -1
- data/lib/intercom/api_operations/delete.rb +16 -0
- data/lib/intercom/api_operations/find.rb +5 -2
- data/lib/intercom/api_operations/find_all.rb +4 -3
- data/lib/intercom/api_operations/list.rb +4 -1
- data/lib/intercom/api_operations/load.rb +4 -2
- data/lib/intercom/api_operations/nested_resource.rb +70 -0
- data/lib/intercom/api_operations/save.rb +5 -4
- data/lib/intercom/api_operations/scroll.rb +4 -5
- data/lib/intercom/api_operations/search.rb +3 -2
- data/lib/intercom/base_collection_proxy.rb +72 -0
- data/lib/intercom/client.rb +20 -25
- data/lib/intercom/client_collection_proxy.rb +17 -39
- data/lib/intercom/company.rb +8 -0
- data/lib/intercom/contact.rb +21 -3
- data/lib/intercom/conversation.rb +4 -0
- data/lib/intercom/data_attribute.rb +7 -0
- data/lib/intercom/deprecated_leads_collection_proxy.rb +22 -0
- data/lib/intercom/deprecated_resources.rb +13 -0
- data/lib/intercom/errors.rb +3 -0
- data/lib/intercom/extended_api_operations/segments.rb +3 -1
- data/lib/intercom/extended_api_operations/tags.rb +3 -1
- data/lib/intercom/lead.rb +21 -0
- data/lib/intercom/lib/typed_json_deserializer.rb +42 -37
- data/lib/intercom/note.rb +4 -0
- data/lib/intercom/request.rb +37 -33
- data/lib/intercom/scroll_collection_proxy.rb +33 -38
- data/lib/intercom/search_collection_proxy.rb +30 -65
- data/lib/intercom/service/base_service.rb +7 -0
- data/lib/intercom/service/company.rb +0 -12
- data/lib/intercom/service/contact.rb +21 -10
- data/lib/intercom/service/conversation.rb +12 -3
- data/lib/intercom/service/data_attribute.rb +20 -0
- data/lib/intercom/service/lead.rb +41 -0
- data/lib/intercom/service/note.rb +4 -8
- data/lib/intercom/service/subscription.rb +2 -2
- data/lib/intercom/service/tag.rb +9 -9
- data/lib/intercom/service/visitor.rb +17 -8
- data/lib/intercom/tag.rb +4 -0
- data/lib/intercom/traits/api_resource.rb +28 -17
- data/lib/intercom/user.rb +12 -3
- data/lib/intercom/utils.rb +13 -2
- data/lib/intercom/version.rb +1 -1
- data/lib/intercom/visitor.rb +0 -2
- data/spec/spec_helper.rb +738 -513
- data/spec/unit/intercom/admin_spec.rb +2 -2
- data/spec/unit/intercom/base_collection_proxy_spec.rb +30 -0
- data/spec/unit/intercom/client_collection_proxy_spec.rb +41 -41
- data/spec/unit/intercom/client_spec.rb +25 -26
- data/spec/unit/intercom/company_spec.rb +13 -15
- data/spec/unit/intercom/contact_spec.rb +289 -33
- data/spec/unit/intercom/conversation_spec.rb +29 -7
- data/spec/unit/intercom/count_spec.rb +4 -4
- data/spec/unit/intercom/data_attribute_spec.rb +40 -0
- data/spec/unit/intercom/deprecated_leads_collection_proxy_spec.rb +17 -0
- data/spec/unit/intercom/event_spec.rb +9 -11
- data/spec/unit/intercom/job_spec.rb +24 -24
- data/spec/unit/intercom/lead_spec.rb +57 -0
- data/spec/unit/intercom/lib/flat_store_spec.rb +22 -20
- data/spec/unit/intercom/message_spec.rb +1 -1
- data/spec/unit/intercom/note_spec.rb +4 -10
- data/spec/unit/intercom/request_spec.rb +1 -1
- data/spec/unit/intercom/scroll_collection_proxy_spec.rb +40 -39
- data/spec/unit/intercom/search_collection_proxy_spec.rb +32 -28
- data/spec/unit/intercom/segment_spec.rb +2 -2
- data/spec/unit/intercom/subscription_spec.rb +5 -6
- data/spec/unit/intercom/tag_spec.rb +22 -14
- data/spec/unit/intercom/team_spec.rb +2 -2
- data/spec/unit/intercom/traits/api_resource_spec.rb +53 -51
- data/spec/unit/intercom/user_spec.rb +224 -226
- data/spec/unit/intercom/visitor_spec.rb +49 -0
- data/spec/unit/intercom_spec.rb +5 -3
- metadata +22 -7
- data/lib/intercom/customer.rb +0 -10
- data/lib/intercom/service/customer.rb +0 -14
- data/spec/unit/intercom/visitors_spec.rb +0 -61
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe "Intercom::Conversation" do
|
4
|
-
let
|
4
|
+
let(:client) { Intercom::Client.new(token: 'token') }
|
5
5
|
|
6
6
|
it "gets a conversation" do
|
7
7
|
client.expects(:get).with("/conversations/147", {}).returns(test_conversation)
|
@@ -53,11 +53,33 @@ describe "Intercom::Conversation" do
|
|
53
53
|
client.conversations.snooze(id: '147', admin_id: '123', snoozed_until: tomorrow)
|
54
54
|
end
|
55
55
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
56
|
+
it 'runs assignment rules on a conversation' do
|
57
|
+
client.expects(:post).with('/conversations/147/run_assignment_rules').returns(test_conversation)
|
58
|
+
client.conversations.run_assignment_rules('147')
|
59
|
+
end
|
60
|
+
|
61
|
+
describe 'nested resources' do
|
62
|
+
let(:conversation) { Intercom::Conversation.new('id' => '1', 'client' => client) }
|
63
|
+
let(:tag) { Intercom::Tag.new('id' => '1') }
|
64
|
+
|
65
|
+
it 'adds a tag to a conversation' do
|
66
|
+
client.expects(:post).with("/conversations/1/tags", { 'id': tag.id, 'admin_id': test_admin['id'] }).returns(tag.to_hash)
|
67
|
+
conversation.add_tag({ "id": tag.id, "admin_id": test_admin['id'] })
|
68
|
+
end
|
62
69
|
|
70
|
+
it 'does not add a tag to a conversation if no admin_id is passed' do
|
71
|
+
client.expects(:post).with("/conversations/1/tags", { 'id': tag.id }).returns(nil)
|
72
|
+
_(proc { conversation.add_tag({ "id": tag.id }) }).must_raise Intercom::HttpError
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'removes a tag from a conversation' do
|
76
|
+
client.expects(:delete).with("/conversations/1/tags/1", { "id": tag.id, "admin_id": test_admin['id'] }).returns(tag.to_hash)
|
77
|
+
conversation.remove_tag({ "id": tag.id, "admin_id": test_admin['id'] })
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'does not remove a tag from a conversation if no admin_id is passed' do
|
81
|
+
client.expects(:delete).with("/conversations/1/tags/1", { "id": tag.id }).returns(nil)
|
82
|
+
_(proc { conversation.remove_tag({ "id": tag.id }) }).must_raise Intercom::HttpError
|
83
|
+
end
|
84
|
+
end
|
63
85
|
end
|
@@ -1,24 +1,24 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe "Intercom::Count" do
|
4
|
-
let
|
4
|
+
let(:client) { Intercom::Client.new(token: 'token') }
|
5
5
|
|
6
6
|
it 'should get app wide counts' do
|
7
7
|
client.expects(:get).with("/counts", {}).returns(test_app_count)
|
8
8
|
counts = client.counts.for_app
|
9
|
-
counts.tag['count'].must_equal(341)
|
9
|
+
_(counts.tag['count']).must_equal(341)
|
10
10
|
end
|
11
11
|
|
12
12
|
it 'should get type counts' do
|
13
13
|
client.expects(:get).with("/counts", {type: 'user', count: 'segment'}).returns(test_segment_count)
|
14
14
|
counts = client.counts.for_type(type: 'user', count: 'segment')
|
15
|
-
counts.user['segment'][4]["segment 1"].must_equal(1)
|
15
|
+
_(counts.user['segment'][4]["segment 1"]).must_equal(1)
|
16
16
|
end
|
17
17
|
|
18
18
|
it 'should not include count param when nil' do
|
19
19
|
client.expects(:get).with("/counts", {type: 'conversation'}).returns(test_conversation_count)
|
20
20
|
counts = client.counts.for_type(type: 'conversation')
|
21
|
-
counts.conversation.must_equal({
|
21
|
+
_(counts.conversation).must_equal({
|
22
22
|
"assigned" => 1,
|
23
23
|
"closed" => 15,
|
24
24
|
"open" => 1,
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe "Intercom::DataAttribute" do
|
4
|
+
let(:client) { Intercom::Client.new(token: 'token') }
|
5
|
+
|
6
|
+
it "returns a CollectionProxy for all without making any requests" do
|
7
|
+
client.expects(:execute_request).never
|
8
|
+
all = client.data_attributes.all
|
9
|
+
_(all).must_be_instance_of(Intercom::ClientCollectionProxy)
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
it "creates a new data attribute" do
|
14
|
+
client.expects(:post).with("/data_attributes", { "name" => "blah", "model" => "contact", "data_type" => "string" }).returns(status: 200)
|
15
|
+
client.data_attributes.create("name": "blah",
|
16
|
+
"model": "contact",
|
17
|
+
"data_type": "string" )
|
18
|
+
end
|
19
|
+
|
20
|
+
it "updates an existing attribute" do
|
21
|
+
attribute = Intercom::DataAttribute.new("id": 123,
|
22
|
+
"name": "blah",
|
23
|
+
"model": "contact",
|
24
|
+
"data_type": "string")
|
25
|
+
client.expects(:put).with("/data_attributes/#{attribute.id}", { "name" => "New name", "model" => "contact", "data_type" => "string" })
|
26
|
+
attribute.name = "New name"
|
27
|
+
client.data_attributes.save(attribute)
|
28
|
+
_(attribute.name).must_equal "New name"
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'gets a list of attributes' do
|
32
|
+
client.expects(:get).with("/data_attributes", {}).returns(test_data_attribute_list)
|
33
|
+
client.data_attributes.all.each { |d| }
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'finds all customer or company attributes' do
|
37
|
+
client.expects(:get).with("/data_attributes", { "model": "contact" }).returns(test_data_attribute_list)
|
38
|
+
client.data_attributes.find_all({"model": "contact"}).each { |d| }
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Intercom::ClientCollectionProxy do
|
6
|
+
let(:client) { Intercom::Client.new(token: 'token') }
|
7
|
+
let(:lead_json) do
|
8
|
+
{ 'type' => 'contact.list', 'contacts' => [{ 'type' => 'contact', 'id' => 'id' }] }
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'stops iterating if no next link' do
|
12
|
+
client.expects(:get).with('/contacts', {}).returns(lead_json)
|
13
|
+
client.deprecated__leads.all.each do |company|
|
14
|
+
_(company.class).must_equal Intercom::Lead
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -4,7 +4,7 @@ describe "Intercom::Event" do
|
|
4
4
|
|
5
5
|
let(:user) {Intercom::User.new("email" => "jim@example.com", :user_id => "12345", :created_at => Time.now, :name => "Jim Bob")}
|
6
6
|
let(:created_time) {Time.now - 300}
|
7
|
-
let
|
7
|
+
let(:client) { Intercom::Client.new(token: 'token') }
|
8
8
|
|
9
9
|
it 'gets events for a user' do
|
10
10
|
client.expects(:get).with('/events', type: 'user', email: 'joe@example.com').returns(test_event_list)
|
@@ -12,14 +12,14 @@ describe "Intercom::Event" do
|
|
12
12
|
end
|
13
13
|
|
14
14
|
it "has the correct collection proxy class" do
|
15
|
-
client.events.collection_proxy_class.must_equal Intercom::EventCollectionProxy
|
15
|
+
_(client.events.collection_proxy_class).must_equal Intercom::EventCollectionProxy
|
16
16
|
end
|
17
17
|
|
18
18
|
it "stops iterating if no next link" do
|
19
19
|
client.expects(:get).with("/events", type: 'user', email: 'joe@example.com').returns(page_of_events(false))
|
20
20
|
event_names = []
|
21
21
|
client.events.find_all(type: 'user', email: 'joe@example.com').each { |event| event_names << event.event_name }
|
22
|
-
event_names.must_equal %W(invited-friend)
|
22
|
+
_(event_names).must_equal %W(invited-friend)
|
23
23
|
end
|
24
24
|
|
25
25
|
it "keeps iterating if next link" do
|
@@ -27,7 +27,7 @@ describe "Intercom::Event" do
|
|
27
27
|
client.expects(:get).with("https://api.intercom.io/events?type=user&intercom_user_id=55a3b&before=144474756550", {}).returns(page_of_events(false))
|
28
28
|
event_names = []
|
29
29
|
client.events.find_all(type: 'user', email: 'joe@example.com').each { |event| event_names << event.event_name }
|
30
|
-
event_names.must_equal %W(invited-friend invited-friend)
|
30
|
+
_(event_names).must_equal %W(invited-friend invited-friend)
|
31
31
|
end
|
32
32
|
|
33
33
|
it "creates an event with metadata" do
|
@@ -74,15 +74,15 @@ describe "Intercom::Event" do
|
|
74
74
|
"state"=>"completed"
|
75
75
|
}
|
76
76
|
]
|
77
|
-
|
77
|
+
}
|
78
78
|
}
|
79
79
|
let(:bulk_request) {
|
80
|
-
|
80
|
+
{
|
81
81
|
items: [
|
82
82
|
{
|
83
83
|
method: "post",
|
84
84
|
data_type: "event",
|
85
|
-
data:{
|
85
|
+
data: {
|
86
86
|
event_name: "ordered-item",
|
87
87
|
created_at: 1438944980,
|
88
88
|
user_id: "314159",
|
@@ -95,7 +95,7 @@ describe "Intercom::Event" do
|
|
95
95
|
{
|
96
96
|
method: "post",
|
97
97
|
data_type: "event",
|
98
|
-
data:{
|
98
|
+
data: {
|
99
99
|
event_name: "invited-friend",
|
100
100
|
created_at: 1438944979,
|
101
101
|
user_id: "314159",
|
@@ -143,9 +143,7 @@ describe "Intercom::Event" do
|
|
143
143
|
end
|
144
144
|
|
145
145
|
it "does not submit delete jobs" do
|
146
|
-
lambda { client.events.submit_bulk_job(delete_items: events) }.must_raise ArgumentError
|
146
|
+
_(lambda { client.events.submit_bulk_job(delete_items: events) }).must_raise ArgumentError
|
147
147
|
end
|
148
|
-
|
149
148
|
end
|
150
|
-
|
151
149
|
end
|
@@ -1,41 +1,41 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe "jobs" do
|
4
|
-
let
|
4
|
+
let(:client) { Intercom::Client.new(token: 'token') }
|
5
5
|
let (:job) {
|
6
6
|
{
|
7
|
-
"app_id"=>"app_id",
|
8
|
-
"id"=>"super_awesome_job",
|
9
|
-
"created_at"=>1446033421,
|
10
|
-
"completed_at"=>1446048736,
|
11
|
-
"closing_at"=>1446034321,
|
12
|
-
"updated_at"=>1446048736,
|
13
|
-
"name"=>"api_bulk_job",
|
14
|
-
"state"=>"completed",
|
15
|
-
"links"=>
|
7
|
+
"app_id" => "app_id",
|
8
|
+
"id" => "super_awesome_job",
|
9
|
+
"created_at" => 1446033421,
|
10
|
+
"completed_at" => 1446048736,
|
11
|
+
"closing_at" => 1446034321,
|
12
|
+
"updated_at" => 1446048736,
|
13
|
+
"name" => "api_bulk_job",
|
14
|
+
"state" => "completed",
|
15
|
+
"links" =>
|
16
16
|
{
|
17
|
-
"error"=>"https://api.intercom.io/jobs/super_awesome_job/error",
|
18
|
-
"self"=>"https://api.intercom.io/jobs/super_awesome_job"
|
17
|
+
"error" => "https://api.intercom.io/jobs/super_awesome_job/error",
|
18
|
+
"self" => "https://api.intercom.io/jobs/super_awesome_job"
|
19
19
|
},
|
20
|
-
"tasks"=>
|
20
|
+
"tasks" =>
|
21
21
|
[
|
22
22
|
{
|
23
|
-
"id"=>"super_awesome_task",
|
24
|
-
"item_count"=>2,
|
25
|
-
"created_at"=>1446033421,
|
26
|
-
"started_at"=>1446033709,
|
27
|
-
"completed_at"=>1446033709,
|
28
|
-
"state"=>"completed"
|
23
|
+
"id" => "super_awesome_task",
|
24
|
+
"item_count" => 2,
|
25
|
+
"created_at" => 1446033421,
|
26
|
+
"started_at" => 1446033709,
|
27
|
+
"completed_at" => 1446033709,
|
28
|
+
"state" => "completed"
|
29
29
|
}
|
30
30
|
]
|
31
|
-
|
31
|
+
}
|
32
32
|
}
|
33
33
|
let (:error_feed) {
|
34
34
|
{
|
35
|
-
"app_id"=>"app_id",
|
36
|
-
"job_id"=>"super_awesome_job",
|
37
|
-
"pages"=>{},
|
38
|
-
"items"=>[]
|
35
|
+
"app_id" => "app_id",
|
36
|
+
"job_id" => "super_awesome_job",
|
37
|
+
"pages" => {},
|
38
|
+
"items" => []
|
39
39
|
}
|
40
40
|
}
|
41
41
|
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe 'Intercom::Lead' do
|
6
|
+
let (:client) { Intercom::Client.new(token: 'token') }
|
7
|
+
|
8
|
+
it 'should be listable' do
|
9
|
+
proxy = client.deprecated__leads.all
|
10
|
+
_(proxy.resource_name).must_equal 'contacts'
|
11
|
+
_(proxy.resource_class).must_equal Intercom::Lead
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'should not throw ArgumentErrors when there are no parameters' do
|
15
|
+
client.expects(:post)
|
16
|
+
client.deprecated__leads.create
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'can update a lead with an id' do
|
20
|
+
lead = Intercom::Lead.new(id: 'de45ae78gae1289cb')
|
21
|
+
client.expects(:put).with('/contacts/de45ae78gae1289cb', 'custom_attributes' => {})
|
22
|
+
client.deprecated__leads.save(lead)
|
23
|
+
end
|
24
|
+
|
25
|
+
describe 'converting' do
|
26
|
+
let(:lead) { Intercom::Lead.from_api(user_id: 'contact_id') }
|
27
|
+
let(:user) { Intercom::User.from_api(id: 'user_id') }
|
28
|
+
|
29
|
+
it do
|
30
|
+
client.expects(:post).with(
|
31
|
+
'/contacts/convert',
|
32
|
+
contact: { user_id: lead.user_id },
|
33
|
+
user: { 'id' => user.id }
|
34
|
+
).returns(test_user)
|
35
|
+
|
36
|
+
client.deprecated__leads.convert(lead, user)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'returns a DeprecatedLeadsCollectionProxy for all without making any requests' do
|
41
|
+
client.expects(:execute_request).never
|
42
|
+
all = client.deprecated__leads.all
|
43
|
+
_(all).must_be_instance_of(Intercom::DeprecatedLeadsCollectionProxy)
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'deletes a lead' do
|
47
|
+
lead = Intercom::Lead.new('id' => '1')
|
48
|
+
client.expects(:delete).with('/contacts/1', {}).returns(lead)
|
49
|
+
client.deprecated__leads.delete(lead)
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'sends a request for a hard deletion' do
|
53
|
+
lead = Intercom::Lead.new('id' => '1')
|
54
|
+
client.expects(:post).with('/user_delete_requests', intercom_user_id: '1').returns(id: lead.id)
|
55
|
+
client.deprecated__leads.request_hard_delete(lead)
|
56
|
+
end
|
57
|
+
end
|
@@ -1,29 +1,31 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
2
4
|
|
3
5
|
describe Intercom::Lib::FlatStore do
|
4
|
-
it
|
5
|
-
data = Intercom::Lib::FlatStore.new
|
6
|
-
proc { data[
|
7
|
-
proc { data[
|
8
|
-
proc { Intercom::Lib::FlatStore.new(
|
6
|
+
it 'raises if you try to set or merge in nested hash structures' do
|
7
|
+
data = Intercom::Lib::FlatStore.new
|
8
|
+
_(proc { data['thing'] = [1] }).must_raise ArgumentError
|
9
|
+
_(proc { data['thing'] = { 1 => 2 } }).must_raise ArgumentError
|
10
|
+
_(proc { Intercom::Lib::FlatStore.new(1 => { 2 => 3 }) }).must_raise ArgumentError
|
9
11
|
end
|
10
12
|
|
11
|
-
it
|
12
|
-
data =Intercom::Lib::FlatStore.new
|
13
|
-
proc { data[1] =
|
13
|
+
it 'raises if you try to use a non string key' do
|
14
|
+
data = Intercom::Lib::FlatStore.new
|
15
|
+
_(proc { data[1] = 'something' }).must_raise ArgumentError
|
14
16
|
end
|
15
17
|
|
16
|
-
it
|
17
|
-
data = Intercom::Lib::FlatStore.new
|
18
|
-
data[
|
18
|
+
it 'sets and merges valid entries' do
|
19
|
+
data = Intercom::Lib::FlatStore.new
|
20
|
+
data['a'] = 1
|
19
21
|
data[:b] = 2
|
20
|
-
data[:a].must_equal 1
|
21
|
-
data[
|
22
|
-
data[:b].must_equal 2
|
23
|
-
data = Intercom::Lib::FlatStore.new(
|
24
|
-
data[
|
25
|
-
data[:a].must_equal 1
|
26
|
-
data[
|
27
|
-
data[:b].must_equal 2
|
22
|
+
_(data[:a]).must_equal 1
|
23
|
+
_(data['b']).must_equal 2
|
24
|
+
_(data[:b]).must_equal 2
|
25
|
+
data = Intercom::Lib::FlatStore.new('a' => 1, :b => 2)
|
26
|
+
_(data['a']).must_equal 1
|
27
|
+
_(data[:a]).must_equal 1
|
28
|
+
_(data['b']).must_equal 2
|
29
|
+
_(data[:b]).must_equal 2
|
28
30
|
end
|
29
31
|
end
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe "Intercom::Message" do
|
4
4
|
|
5
5
|
let (:user) {Intercom::User.new("email" => "jim@example.com", :user_id => "12345", :created_at => Time.now, :name => "Jim Bob")}
|
6
|
-
let
|
6
|
+
let(:client) { Intercom::Client.new(token: 'token') }
|
7
7
|
|
8
8
|
it 'creates an user message with symbol keys' do
|
9
9
|
client.expects(:post).with('/messages', {'from' => { :type => 'user', :email => 'jim@example.com'}, 'body' => 'halp'}).returns(:status => 200)
|
@@ -1,13 +1,7 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe "notes" do
|
4
|
-
let
|
5
|
-
|
6
|
-
it "creates a note" do
|
7
|
-
client.expects(:post).with("/notes", {"body" => "Note to leave on user"}).returns({"body" => "<p>Note to leave on user</p>", "created_at" => 1234567890})
|
8
|
-
note = client.notes.create("body" => "Note to leave on user")
|
9
|
-
note.body.must_equal "<p>Note to leave on user</p>"
|
10
|
-
end
|
4
|
+
let(:client) { Intercom::Client.new(token: 'token') }
|
11
5
|
|
12
6
|
it 'gets a note' do
|
13
7
|
client.expects(:get).with("/notes/123", {}).returns({"id" => "123", "body" => "<p>Note to leave on user</p>", "created_at" => 1234567890})
|
@@ -18,9 +12,9 @@ describe "notes" do
|
|
18
12
|
params = {"body" => "Note body", "email" => "me@example.com", :user_id => "abc123"}
|
19
13
|
note = Intercom::Note.new(params)
|
20
14
|
|
21
|
-
note.to_hash.keys.sort.must_equal params.keys.map(&:to_s).sort
|
22
|
-
params.keys.each do |
|
23
|
-
note.send(key).must_equal params[key]
|
15
|
+
_(note.to_hash.keys.sort).must_equal params.keys.map(&:to_s).sort
|
16
|
+
params.keys.each do |key|
|
17
|
+
_(note.send(key)).must_equal params[key]
|
24
18
|
end
|
25
19
|
end
|
26
20
|
end
|
@@ -9,7 +9,7 @@ describe 'Intercom::Request', '#execute' do
|
|
9
9
|
let(:default_body) { { data: "test" }.to_json }
|
10
10
|
|
11
11
|
def execute!
|
12
|
-
req.execute(uri,
|
12
|
+
req.execute(uri, token: 'test-token')
|
13
13
|
end
|
14
14
|
|
15
15
|
it 'should call sleep for rate limit error three times and raise a rate limit error otherwise' do
|
@@ -1,56 +1,57 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
2
4
|
|
3
5
|
describe Intercom::ScrollCollectionProxy do
|
4
|
-
let
|
6
|
+
let(:client) { Intercom::Client.new(token: 'token') }
|
5
7
|
|
6
|
-
it
|
7
|
-
client.expects(:get).with(
|
8
|
-
|
9
|
-
client.
|
10
|
-
|
8
|
+
it 'stops iterating if no companies returned' do
|
9
|
+
client.expects(:get).with('/companies/scroll', '').returns(companies_scroll(false))
|
10
|
+
names = []
|
11
|
+
client.companies.scroll.each { |company| names << company.name }
|
12
|
+
_(names).must_equal %w[]
|
11
13
|
end
|
12
14
|
|
13
|
-
it
|
14
|
-
client.expects(:get).with(
|
15
|
-
client.expects(:get).with('/
|
16
|
-
|
17
|
-
client.
|
15
|
+
it 'keeps iterating if companies returned' do
|
16
|
+
client.expects(:get).with('/companies/scroll', '').returns(companies_scroll(true))
|
17
|
+
client.expects(:get).with('/companies/scroll', scroll_param: 'da6bbbac-25f6-4f07-866b-b911082d7').returns(companies_scroll(false))
|
18
|
+
names = []
|
19
|
+
client.companies.scroll.each { |company| names << company.name }
|
18
20
|
end
|
19
21
|
|
20
|
-
it
|
21
|
-
client.expects(:get).with(
|
22
|
-
client.
|
22
|
+
it 'supports indexed array access' do
|
23
|
+
client.expects(:get).with('/companies/scroll', '').returns(companies_scroll(true))
|
24
|
+
_(client.companies.scroll[0].name).must_equal 'company1'
|
23
25
|
end
|
24
26
|
|
25
|
-
it
|
26
|
-
client.expects(:get).with(
|
27
|
-
client.expects(:get).with('/
|
28
|
-
|
29
|
-
|
27
|
+
it 'supports map' do
|
28
|
+
client.expects(:get).with('/companies/scroll', '').returns(companies_scroll(true))
|
29
|
+
client.expects(:get).with('/companies/scroll', scroll_param: 'da6bbbac-25f6-4f07-866b-b911082d7').returns(companies_scroll(false))
|
30
|
+
names = client.companies.scroll.map(&:name)
|
31
|
+
_(names).must_equal %w[company1 company2 company3]
|
30
32
|
end
|
31
33
|
|
32
|
-
it
|
33
|
-
client.expects(:get).with(
|
34
|
-
scroll = client.
|
35
|
-
|
36
|
-
scroll.records.each {|usr|
|
37
|
-
|
34
|
+
it 'returns one page scroll' do
|
35
|
+
client.expects(:get).with('/companies/scroll', '').returns(companies_scroll(true))
|
36
|
+
scroll = client.companies.scroll.next
|
37
|
+
names = []
|
38
|
+
scroll.records.each { |usr| names << usr.name }
|
39
|
+
_(names).must_equal %w[company1 company2 company3]
|
38
40
|
end
|
39
41
|
|
40
|
-
it
|
41
|
-
client.expects(:get).with(
|
42
|
-
client.expects(:get).with('/
|
43
|
-
scroll = client.
|
44
|
-
scroll = client.
|
45
|
-
|
46
|
-
scroll.records.each {|usr| puts usr.email}
|
42
|
+
it 'keeps iterating if called with scroll_param' do
|
43
|
+
client.expects(:get).with('/companies/scroll', '').returns(companies_scroll(true))
|
44
|
+
client.expects(:get).with('/companies/scroll', scroll_param: 'da6bbbac-25f6-4f07-866b-b911082d7').returns(companies_scroll(true))
|
45
|
+
scroll = client.companies.scroll.next
|
46
|
+
scroll = client.companies.scroll.next('da6bbbac-25f6-4f07-866b-b911082d7')
|
47
|
+
scroll.records.each(&:name)
|
47
48
|
end
|
48
49
|
|
49
|
-
it
|
50
|
-
client.expects(:get).with(
|
51
|
-
scroll = client.
|
52
|
-
|
53
|
-
scroll.records.each {|usr|
|
54
|
-
|
50
|
+
it 'works with an empty list' do
|
51
|
+
client.expects(:get).with('/companies/scroll', '').returns(companies_scroll(false))
|
52
|
+
scroll = client.companies.scroll.next
|
53
|
+
names = []
|
54
|
+
scroll.records.each { |usr| names << usr.name }
|
55
|
+
_(names).must_equal %w[]
|
55
56
|
end
|
56
57
|
end
|