intercom 3.9.5 → 4.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +483 -234
- data/Rakefile +1 -1
- data/changes.txt +37 -0
- 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 +68 -0
- data/lib/intercom/api_operations/save.rb +6 -4
- data/lib/intercom/api_operations/scroll.rb +4 -5
- data/lib/intercom/api_operations/search.rb +3 -2
- data/lib/intercom/article.rb +7 -0
- data/lib/intercom/base_collection_proxy.rb +74 -0
- data/lib/intercom/client.rb +48 -25
- data/lib/intercom/client_collection_proxy.rb +17 -39
- data/lib/intercom/collection.rb +7 -0
- data/lib/intercom/company.rb +8 -0
- data/lib/intercom/contact.rb +23 -3
- data/lib/intercom/conversation.rb +5 -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 +6 -0
- data/lib/intercom/export_content.rb +7 -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/dynamic_accessors.rb +9 -10
- data/lib/intercom/lib/typed_json_deserializer.rb +45 -35
- data/lib/intercom/note.rb +4 -0
- data/lib/intercom/phone_call_redirect.rb +7 -0
- data/lib/intercom/request.rb +39 -33
- data/lib/intercom/scroll_collection_proxy.rb +38 -42
- data/lib/intercom/search_collection_proxy.rb +30 -65
- data/lib/intercom/section.rb +23 -0
- data/lib/intercom/segment.rb +4 -0
- data/lib/intercom/service/article.rb +20 -0
- data/lib/intercom/service/base_service.rb +7 -0
- data/lib/intercom/service/collection.rb +24 -0
- data/lib/intercom/service/company.rb +2 -12
- data/lib/intercom/service/contact.rb +35 -10
- data/lib/intercom/service/conversation.rb +16 -3
- data/lib/intercom/service/data_attribute.rb +20 -0
- data/lib/intercom/service/export_content.rb +30 -0
- data/lib/intercom/service/lead.rb +41 -0
- data/lib/intercom/service/note.rb +4 -8
- data/lib/intercom/service/phone_call_redirect.rb +15 -0
- data/lib/intercom/service/section.rb +7 -0
- data/lib/intercom/service/subscription.rb +2 -2
- data/lib/intercom/service/subscription_type.rb +18 -0
- data/lib/intercom/service/tag.rb +9 -9
- data/lib/intercom/service/visitor.rb +17 -8
- data/lib/intercom/subscription_type.rb +12 -0
- data/lib/intercom/tag.rb +4 -0
- data/lib/intercom/traits/api_resource.rb +44 -18
- data/lib/intercom/traits/dirty_tracking.rb +8 -1
- data/lib/intercom/user.rb +12 -3
- data/lib/intercom/utils.rb +19 -3
- data/lib/intercom/version.rb +1 -1
- data/lib/intercom/visitor.rb +0 -2
- data/lib/intercom.rb +39 -22
- data/spec/spec_helper.rb +843 -520
- data/spec/unit/intercom/admin_spec.rb +2 -2
- data/spec/unit/intercom/article_spec.rb +40 -0
- data/spec/unit/intercom/base_collection_proxy_spec.rb +52 -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/collection_spec.rb +32 -0
- data/spec/unit/intercom/company_spec.rb +19 -15
- data/spec/unit/intercom/contact_spec.rb +402 -33
- data/spec/unit/intercom/conversation_spec.rb +60 -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 +16 -11
- data/spec/unit/intercom/export_content_spec.rb +28 -0
- 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/phone_call_redirect.rb +12 -0
- data/spec/unit/intercom/request_spec.rb +14 -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/section_spec.rb +32 -0
- 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 +28 -14
- data/spec/unit/intercom/team_spec.rb +2 -2
- data/spec/unit/intercom/traits/api_resource_spec.rb +107 -52
- 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 +44 -8
- 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,12 +1,12 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe "Intercom::Admin" do
|
4
|
-
let
|
4
|
+
let(:client) { Intercom::Client.new(token: 'token') }
|
5
5
|
|
6
6
|
it "returns a CollectionProxy for all without making any requests" do
|
7
7
|
client.expects(:execute_request).never
|
8
8
|
all = client.admins.all
|
9
|
-
all.must_be_instance_of(Intercom::ClientCollectionProxy)
|
9
|
+
_(all).must_be_instance_of(Intercom::ClientCollectionProxy)
|
10
10
|
end
|
11
11
|
|
12
12
|
it "gets me (access token method only)" do
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Intercom::Article" do
|
4
|
+
let(:client) { Intercom::Client.new(token: 'token') }
|
5
|
+
|
6
|
+
describe "Getting an Article" do
|
7
|
+
it "successfully finds an article" do
|
8
|
+
client.expects(:get).with("/articles/1", {}).returns(test_article)
|
9
|
+
client.articles.find(id: "1")
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "Creating an Article" do
|
14
|
+
it "successfully creates and article with information passed individually" do
|
15
|
+
client.expects(:post).with("/articles", {"title" => "new title", "author_id" => 1, "body" => "<p>thingbop</p>", "state" => "draft"}).returns(test_article)
|
16
|
+
client.articles.create(:title => "new title", :author_id => 1, :body => "<p>thingbop</p>", :state => "draft")
|
17
|
+
end
|
18
|
+
|
19
|
+
it "successfully creates and article with information in json" do
|
20
|
+
client.expects(:post).with("/articles", {"title" => "new title", "author_id" => 1, "body" => "<p>thingbop</p>", "state" => "draft"}).returns(test_article)
|
21
|
+
client.articles.create({title: "new title", author_id: 1, body: "<p>thingbop</p>", state: "draft"})
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "Updating an article" do
|
26
|
+
it "successfully updates an article" do
|
27
|
+
article = Intercom::Article.new(id: 12345)
|
28
|
+
client.expects(:put).with('/articles/12345', {})
|
29
|
+
client.articles.save(article)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "Deleting an article" do
|
34
|
+
it "successfully deletes an article" do
|
35
|
+
article = Intercom::Article.new(id: 12345)
|
36
|
+
client.expects(:delete).with('/articles/12345', {})
|
37
|
+
client.articles.delete(article)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Intercom::BaseCollectionProxy do
|
4
|
+
let(:client) { Intercom::Client.new(token: 'token') }
|
5
|
+
|
6
|
+
it "stops iterating if no starting after value" do
|
7
|
+
client.expects(:get).with("/contacts", {}).returns(page_of_contacts(false))
|
8
|
+
emails = []
|
9
|
+
client.contacts.all.each { |contact| emails << contact.email }
|
10
|
+
_(emails).must_equal %w[test1@example.com test2@example.com test3@example.com]
|
11
|
+
end
|
12
|
+
|
13
|
+
it "keeps iterating if starting after value" do
|
14
|
+
client.expects(:get).with("/contacts", {}).returns(page_of_contacts(true))
|
15
|
+
client.expects(:get).with('/contacts', { starting_after: "EnCrYpTeDsTrInG" }).returns(page_of_contacts(false))
|
16
|
+
emails = []
|
17
|
+
client.contacts.all.each { |contact| emails << contact.email }
|
18
|
+
_(emails).must_equal %w[test1@example.com test2@example.com test3@example.com test1@example.com test2@example.com test3@example.com]
|
19
|
+
end
|
20
|
+
|
21
|
+
it "supports indexed array access" do
|
22
|
+
client.expects(:get).with("/contacts", {}).returns(page_of_contacts(false))
|
23
|
+
_(client.contacts.all[0].email).must_equal "test1@example.com"
|
24
|
+
end
|
25
|
+
|
26
|
+
it "supports map" do
|
27
|
+
client.expects(:get).with("/contacts", {}).returns(page_of_contacts(false))
|
28
|
+
emails = client.contacts.all.map { |contact| contact.email }
|
29
|
+
_(emails).must_equal %w[test1@example.com test2@example.com test3@example.com]
|
30
|
+
end
|
31
|
+
|
32
|
+
it "keeps entire collection iterable after first iteration" do
|
33
|
+
contacts = client.contacts.all
|
34
|
+
emails_iter1 = []
|
35
|
+
emails_iter2 = []
|
36
|
+
expects_pagination = proc do
|
37
|
+
client.expects(:get).with("/contacts", {}).returns(page_of_contacts(true))
|
38
|
+
client.expects(:get).with("/contacts", { starting_after: "EnCrYpTeDsTrInG" }).returns(page_of_contacts(false))
|
39
|
+
end
|
40
|
+
|
41
|
+
expects_pagination.call
|
42
|
+
contacts.each { |contact| emails_iter1 << contact.email }
|
43
|
+
expects_pagination.call
|
44
|
+
contacts.each { |contact| emails_iter2 << contact.email }
|
45
|
+
_(emails_iter1).must_equal emails_iter2
|
46
|
+
end
|
47
|
+
|
48
|
+
it "supports query params" do
|
49
|
+
client.expects(:get).with("/conversations", {:intercom_user_id => 'abcdef0000'}).returns(test_conversation_list)
|
50
|
+
_(client.conversations.find_all(:intercom_user_id => 'abcdef0000').map(&:id)).must_equal %w[147]
|
51
|
+
end
|
52
|
+
end
|
@@ -1,80 +1,80 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe Intercom::ClientCollectionProxy do
|
4
|
-
let
|
4
|
+
let(:client) { Intercom::Client.new(token: 'token') }
|
5
5
|
|
6
6
|
it "stops iterating if no next link" do
|
7
|
-
client.expects(:get).with("/
|
8
|
-
|
9
|
-
client.
|
10
|
-
|
7
|
+
client.expects(:get).with("/companies", {}).returns(page_of_companies(false))
|
8
|
+
names = []
|
9
|
+
client.companies.all.each { |company| names << company.name }
|
10
|
+
_(names).must_equal %W(company1 company2 company3)
|
11
11
|
end
|
12
12
|
|
13
13
|
it "keeps iterating if next link" do
|
14
|
-
client.expects(:get).with("/
|
15
|
-
client.expects(:get).with('https://api.intercom.io/
|
16
|
-
|
17
|
-
client.
|
14
|
+
client.expects(:get).with("/companies", {}).returns(page_of_companies(true))
|
15
|
+
client.expects(:get).with('https://api.intercom.io/companies?per_page=50&page=2', {}).returns(page_of_companies(false))
|
16
|
+
names = []
|
17
|
+
client.companies.all.each { |company| names << company.name }
|
18
18
|
end
|
19
19
|
|
20
20
|
it "supports indexed array access" do
|
21
|
-
client.expects(:get).with("/
|
22
|
-
client.
|
21
|
+
client.expects(:get).with("/companies", {}).returns(page_of_companies(false))
|
22
|
+
_(client.companies.all[0].name).must_equal 'company1'
|
23
23
|
end
|
24
24
|
|
25
25
|
it "supports map" do
|
26
|
-
client.expects(:get).with("/
|
27
|
-
|
28
|
-
|
26
|
+
client.expects(:get).with("/companies", {}).returns(page_of_companies(false))
|
27
|
+
names = client.companies.all.map { |company| company.name }
|
28
|
+
_(names).must_equal %W(company1 company2 company3)
|
29
29
|
end
|
30
30
|
|
31
31
|
it "supports querying" do
|
32
|
-
client.expects(:get).with("/
|
33
|
-
client.
|
32
|
+
client.expects(:get).with("/companies", {:tag_name => 'Taggart J'}).returns(page_of_companies(false))
|
33
|
+
_(client.companies.find_all(:tag_name => 'Taggart J').map(&:name)).must_equal %W(company1 company2 company3)
|
34
34
|
end
|
35
35
|
|
36
36
|
it "supports single page pagination" do
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
client.expects(:get).with("/
|
42
|
-
result = client.
|
43
|
-
result.must_equal %W(
|
37
|
+
companies = [test_company("company1"), test_company("company2"), test_company("company3"),
|
38
|
+
test_company("company4"), test_company("company5"), test_company("company6"),
|
39
|
+
test_company("company7"), test_company("company8"), test_company("company9"),
|
40
|
+
test_company("company10")]
|
41
|
+
client.expects(:get).with("/companies", {:type=>'companies', :per_page => 10, :page => 1}).returns(companies_pagination(include_next_link: false, per_page: 10, page: 1, total_pages: 1, total_count: 10, company_list: companies))
|
42
|
+
result = client.companies.find_all(:type=>'companies', :per_page => 10, :page => 1).map {|company| company.name }
|
43
|
+
_(result).must_equal %W(company1 company2 company3 company4 company5 company6 company7 company8 company9 company10)
|
44
44
|
end
|
45
45
|
|
46
46
|
it "supports multi page pagination" do
|
47
|
-
|
48
|
-
client.expects(:get).with("/
|
49
|
-
result = client.
|
50
|
-
result.must_equal %W(
|
47
|
+
companies = [test_company("company3"), test_company("company4")]
|
48
|
+
client.expects(:get).with("/companies", {:type=>'companies', :per_page => 2, :page => 3}).returns(companies_pagination(include_next_link: true, per_page: 2, page: 3, total_pages: 5, total_count: 10, company_list: companies))
|
49
|
+
result = client.companies.find_all(:type=>'companies', :per_page => 2, :page => 3).map {|company| company.name }
|
50
|
+
_(result).must_equal %W(company3 company4)
|
51
51
|
end
|
52
52
|
|
53
53
|
it "works with page out of range request" do
|
54
|
-
|
55
|
-
client.expects(:get).with("/
|
56
|
-
result = client.
|
57
|
-
result.must_equal %W()
|
54
|
+
companies = []
|
55
|
+
client.expects(:get).with("/companies", {:type=>'companies', :per_page => 2, :page => 30}).returns(companies_pagination(include_next_link: true, per_page: 2, page: 30, total_pages: 2, total_count: 3, company_list: companies))
|
56
|
+
result = client.companies.find_all(:type=>'companies', :per_page => 2, :page => 30).map {|company| company.name }
|
57
|
+
_(result).must_equal %W()
|
58
58
|
end
|
59
59
|
|
60
60
|
it "works with asc order" do
|
61
61
|
test_date=1457337600
|
62
62
|
time_increment=1000
|
63
|
-
|
64
|
-
|
65
|
-
client.expects(:get).with("/
|
66
|
-
result = client.
|
67
|
-
result.must_equal %W(
|
63
|
+
companies = [test_company_dates(name="company1", created_at=test_date), test_company_dates(name="company2", created_at=test_date-time_increment),
|
64
|
+
test_company_dates(name="company3", created_at=test_date-2*time_increment), test_company_dates(name="company4", created_at=test_date-3*time_increment)]
|
65
|
+
client.expects(:get).with("/companies", {:type=>'companies', :per_page => 4, :page => 5, :order => "asc", :sort => "created_at"}).returns(companies_pagination(include_next_link: true, per_page: 4, page: 5, total_pages: 6, total_count: 30, company_list: companies))
|
66
|
+
result = client.companies.find_all(:type=>'companies', :per_page => 4, :page => 5, :order => "asc", :sort => "created_at").map(&:name)
|
67
|
+
_(result).must_equal %W(company1 company2 company3 company4)
|
68
68
|
end
|
69
69
|
|
70
70
|
it "works with desc order" do
|
71
71
|
test_date=1457337600
|
72
72
|
time_increment=1000
|
73
|
-
|
74
|
-
|
75
|
-
client.expects(:get).with("/
|
76
|
-
result = client.
|
77
|
-
result.must_equal %W(
|
73
|
+
companies = [test_company_dates(name="company4", created_at=3*test_date), test_company_dates(name="company3", created_at=test_date-2*time_increment),
|
74
|
+
test_company_dates(name="company2", created_at=test_date-time_increment), test_company_dates(name="company1", created_at=test_date)]
|
75
|
+
client.expects(:get).with("/companies", {:type=>'companies', :per_page => 4, :page => 5, :order => "desc", :sort => "created_at"}).returns(companies_pagination(include_next_link: true, per_page: 4, page: 5, total_pages: 6, total_count: 30, company_list: companies))
|
76
|
+
result = client.companies.find_all(:type=>'companies', :per_page => 4, :page => 5, :order => "desc", :sort => "created_at").map {|company| company.name }
|
77
|
+
_(result).must_equal %W(company4 company3 company2 company1)
|
78
78
|
end
|
79
79
|
|
80
80
|
end
|
@@ -1,19 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
module Intercom
|
4
6
|
describe Client do
|
5
|
-
let(:
|
6
|
-
let(:api_key) { 'myapikey' }
|
7
|
+
let(:token) { 'my_access_token' }
|
7
8
|
let(:client) do
|
8
9
|
Client.new(
|
9
|
-
|
10
|
-
api_key: api_key,
|
10
|
+
token: token,
|
11
11
|
handle_rate_limit: true
|
12
12
|
)
|
13
13
|
end
|
14
14
|
|
15
15
|
it 'should set the base url' do
|
16
|
-
client.base_url.must_equal('https://api.intercom.io')
|
16
|
+
_(client.base_url).must_equal('https://api.intercom.io')
|
17
17
|
end
|
18
18
|
|
19
19
|
it 'should have handle_rate_limit set' do
|
@@ -22,34 +22,34 @@ module Intercom
|
|
22
22
|
|
23
23
|
it 'should be able to change the base url' do
|
24
24
|
prev = client.options(Intercom::Client.set_base_url('https://mymockintercom.io'))
|
25
|
-
client.base_url.must_equal('https://mymockintercom.io')
|
25
|
+
_(client.base_url).must_equal('https://mymockintercom.io')
|
26
26
|
client.options(prev)
|
27
|
-
client.base_url.must_equal('https://api.intercom.io')
|
27
|
+
_(client.base_url).must_equal('https://api.intercom.io')
|
28
28
|
end
|
29
29
|
|
30
30
|
it 'should be able to change the timeouts' do
|
31
31
|
prev = client.options(Intercom::Client.set_timeouts(open_timeout: 10, read_timeout: 15))
|
32
|
-
client.timeouts.must_equal(open_timeout: 10, read_timeout: 15)
|
32
|
+
_(client.timeouts).must_equal(open_timeout: 10, read_timeout: 15)
|
33
33
|
client.options(prev)
|
34
|
-
client.timeouts.must_equal(open_timeout: 30, read_timeout: 90)
|
34
|
+
_(client.timeouts).must_equal(open_timeout: 30, read_timeout: 90)
|
35
35
|
end
|
36
36
|
|
37
37
|
it 'should be able to change the open timeout individually' do
|
38
38
|
prev = client.options(Intercom::Client.set_timeouts(open_timeout: 50))
|
39
|
-
client.timeouts.must_equal(open_timeout: 50, read_timeout: 90)
|
39
|
+
_(client.timeouts).must_equal(open_timeout: 50, read_timeout: 90)
|
40
40
|
client.options(prev)
|
41
|
-
client.timeouts.must_equal(open_timeout: 30, read_timeout: 90)
|
41
|
+
_(client.timeouts).must_equal(open_timeout: 30, read_timeout: 90)
|
42
42
|
end
|
43
43
|
|
44
44
|
it 'should be able to change the read timeout individually' do
|
45
45
|
prev = client.options(Intercom::Client.set_timeouts(read_timeout: 50))
|
46
|
-
client.timeouts.must_equal(open_timeout: 30, read_timeout: 50)
|
46
|
+
_(client.timeouts).must_equal(open_timeout: 30, read_timeout: 50)
|
47
47
|
client.options(prev)
|
48
|
-
client.timeouts.must_equal(open_timeout: 30, read_timeout: 90)
|
48
|
+
_(client.timeouts).must_equal(open_timeout: 30, read_timeout: 90)
|
49
49
|
end
|
50
50
|
|
51
51
|
it 'should raise on nil credentials' do
|
52
|
-
proc { Client.new(
|
52
|
+
_(proc { Client.new(token: nil) }).must_raise MisconfiguredClientError
|
53
53
|
end
|
54
54
|
|
55
55
|
describe 'API version' do
|
@@ -58,42 +58,41 @@ module Intercom
|
|
58
58
|
end
|
59
59
|
|
60
60
|
it 'allows api version to be provided' do
|
61
|
-
Client.new(
|
61
|
+
_(Client.new(token: token, api_version: '2.0').api_version).must_equal('2.0')
|
62
62
|
end
|
63
63
|
|
64
64
|
it 'allows api version to be nil' do
|
65
65
|
# matches default behavior, and will honor version set in the Developer Hub
|
66
|
-
assert_nil(Client.new(
|
66
|
+
assert_nil(Client.new(token: token, api_version: nil).api_version)
|
67
67
|
end
|
68
68
|
|
69
69
|
it 'allows api version to be Unstable' do
|
70
|
-
Client.new(
|
70
|
+
_(Client.new(token: token, api_version: 'Unstable').api_version).must_equal('Unstable')
|
71
71
|
end
|
72
72
|
|
73
73
|
it 'raises on invalid api version' do
|
74
|
-
proc { Client.new(
|
74
|
+
_(proc { Client.new(token: token, api_version: '0.2') }).must_raise MisconfiguredClientError
|
75
75
|
end
|
76
76
|
|
77
77
|
it 'raises on empty api version' do
|
78
|
-
proc { Client.new(
|
78
|
+
_(proc { Client.new(token: token, api_version: '') }).must_raise MisconfiguredClientError
|
79
79
|
end
|
80
80
|
|
81
|
-
it
|
82
|
-
stub_request(:any,
|
83
|
-
status: [200,
|
81
|
+
it 'assigns works' do
|
82
|
+
stub_request(:any, 'https://api.intercom.io/contacts?id=123').to_return(
|
83
|
+
status: [200, 'OK'],
|
84
84
|
headers: { 'X-RateLimit-Reset' => Time.now.utc + 10 },
|
85
|
-
body: { "test":
|
85
|
+
body: { "test": 'testing' }.to_json
|
86
86
|
)
|
87
87
|
|
88
|
-
client.get(
|
88
|
+
client.get('/contacts', id: '123')
|
89
89
|
end
|
90
90
|
end
|
91
91
|
|
92
92
|
describe 'OAuth clients' do
|
93
93
|
it 'supports "token"' do
|
94
94
|
client = Client.new(token: 'foo')
|
95
|
-
client.
|
96
|
-
client.password_part.must_equal('')
|
95
|
+
_(client.token).must_equal('foo')
|
97
96
|
end
|
98
97
|
end
|
99
98
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Intercom::Collection do
|
4
|
+
let(:client) { Intercom::Client.new(token: 'token') }
|
5
|
+
|
6
|
+
it 'creates a collection' do
|
7
|
+
client.expects(:post).with('/help_center/collections', { 'name' => 'Collection 1', 'description' => 'Collection desc' }).returns(test_collection)
|
8
|
+
client.collections.create(:name => 'Collection 1', :description => 'Collection desc')
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'lists collections' do
|
12
|
+
client.expects(:get).with('/help_center/collections', {}).returns(test_collection_list)
|
13
|
+
client.collections.all.each { |t| }
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'finds a collection' do
|
17
|
+
client.expects(:get).with('/help_center/collections/1', {}).returns(test_collection)
|
18
|
+
client.collections.find(id: '1')
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'updates a collection' do
|
22
|
+
collection = Intercom::Collection.new(id: '12345')
|
23
|
+
client.expects(:put).with('/help_center/collections/12345', {})
|
24
|
+
client.collections.save(collection)
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'deletes a collection' do
|
28
|
+
collection = Intercom::Collection.new(id: '12345')
|
29
|
+
client.expects(:delete).with('/help_center/collections/12345', {})
|
30
|
+
client.collections.delete(collection)
|
31
|
+
end
|
32
|
+
end
|
@@ -1,40 +1,44 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
3
|
describe Intercom::Company do
|
4
|
-
let
|
4
|
+
let(:client) { Intercom::Client.new(token: 'token') }
|
5
5
|
|
6
6
|
describe "when no response raises error" do
|
7
7
|
it "on find" do
|
8
8
|
client.expects(:get).with("/companies", {:company_id => "4"}).returns(nil)
|
9
|
-
proc {client.companies.find(:company_id => "4")}.must_raise Intercom::HttpError
|
9
|
+
_(proc { client.companies.find(:company_id => "4")}).must_raise Intercom::HttpError
|
10
10
|
end
|
11
11
|
|
12
|
-
it "on
|
12
|
+
it "on all" do
|
13
13
|
client.expects(:get).with("/companies", {}).returns(nil)
|
14
|
-
proc {client.companies.all.each {|company| }}.must_raise Intercom::HttpError
|
14
|
+
_(proc { client.companies.all.each {|company| }}).must_raise Intercom::HttpError
|
15
15
|
end
|
16
16
|
|
17
17
|
it "on load" do
|
18
18
|
client.expects(:get).with("/companies", {:company_id => "4"}).returns({"type" =>"user", "id" =>"aaaaaaaaaaaaaaaaaaaaaaaa", "company_id" => "4", "name" => "MyCo"})
|
19
19
|
company = client.companies.find(:company_id => "4")
|
20
20
|
client.expects(:get).with("/companies/aaaaaaaaaaaaaaaaaaaaaaaa", {}).returns(nil)
|
21
|
-
proc {client.companies.load(company)}.must_raise Intercom::HttpError
|
21
|
+
_(proc { client.companies.load(company)}).must_raise Intercom::HttpError
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
-
it "
|
26
|
-
client.expects(:get).with("/companies/
|
27
|
-
client.companies.
|
25
|
+
it "finds a company" do
|
26
|
+
client.expects(:get).with("/companies/531ee472cce572a6ec000006", {}).returns(test_company)
|
27
|
+
company = client.companies.find(id: "531ee472cce572a6ec000006")
|
28
|
+
_(company.name).must_equal("Blue Sun")
|
28
29
|
end
|
29
30
|
|
30
|
-
it "
|
31
|
-
|
32
|
-
|
31
|
+
it "returns a collection proxy for listing contacts" do
|
32
|
+
company = Intercom::Company.new("id" => "1")
|
33
|
+
proxy = company.contacts
|
34
|
+
_(proxy.resource_name).must_equal 'contacts'
|
35
|
+
_(proxy.url).must_equal '/companies/1/contacts'
|
36
|
+
_(proxy.resource_class).must_equal Intercom::Contact
|
33
37
|
end
|
34
38
|
|
35
|
-
it "
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
+
it "deletes a company" do
|
40
|
+
company = Intercom::Company.new("id" => "1")
|
41
|
+
client.expects(:delete).with("/companies/1", {})
|
42
|
+
client.companies.delete(company)
|
39
43
|
end
|
40
44
|
end
|