activeforce 1.5.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.
- data/Gemfile +15 -0
- data/Gemfile.lock +128 -0
- data/LICENSE.txt +20 -0
- data/README.md +112 -0
- data/Rakefile +47 -0
- data/VERSION +1 -0
- data/activeforce.gemspec +151 -0
- data/app/models/salesforce/account.rb +4 -0
- data/app/models/salesforce/activity_history.rb +4 -0
- data/app/models/salesforce/approval.rb +4 -0
- data/app/models/salesforce/campaign.rb +4 -0
- data/app/models/salesforce/campaign_feed.rb +4 -0
- data/app/models/salesforce/campaign_member.rb +4 -0
- data/app/models/salesforce/case.rb +4 -0
- data/app/models/salesforce/case_comment.rb +4 -0
- data/app/models/salesforce/case_contact_role.rb +4 -0
- data/app/models/salesforce/case_feed.rb +4 -0
- data/app/models/salesforce/case_history.rb +4 -0
- data/app/models/salesforce/case_share.rb +4 -0
- data/app/models/salesforce/case_solution.rb +4 -0
- data/app/models/salesforce/case_status.rb +4 -0
- data/app/models/salesforce/case_team_member.rb +4 -0
- data/app/models/salesforce/community.rb +4 -0
- data/app/models/salesforce/contact.rb +4 -0
- data/app/models/salesforce/contact_feed.rb +4 -0
- data/app/models/salesforce/contact_history.rb +4 -0
- data/app/models/salesforce/contract.rb +4 -0
- data/app/models/salesforce/document.rb +4 -0
- data/app/models/salesforce/event.rb +4 -0
- data/app/models/salesforce/feed_item.rb +4 -0
- data/app/models/salesforce/group.rb +4 -0
- data/app/models/salesforce/group_member.rb +4 -0
- data/app/models/salesforce/idea.rb +4 -0
- data/app/models/salesforce/lead.rb +4 -0
- data/app/models/salesforce/lead_status.rb +4 -0
- data/app/models/salesforce/name.rb +4 -0
- data/app/models/salesforce/note.rb +4 -0
- data/app/models/salesforce/open_activity.rb +4 -0
- data/app/models/salesforce/opportunity.rb +4 -0
- data/app/models/salesforce/organization.rb +4 -0
- data/app/models/salesforce/partner.rb +4 -0
- data/app/models/salesforce/period.rb +4 -0
- data/app/models/salesforce/product2.rb +4 -0
- data/app/models/salesforce/product2_feed.rb +4 -0
- data/app/models/salesforce/profile.rb +4 -0
- data/app/models/salesforce/quote.rb +4 -0
- data/app/models/salesforce/solution.rb +4 -0
- data/app/models/salesforce/task.rb +4 -0
- data/app/models/salesforce/task_feed.rb +4 -0
- data/app/models/salesforce/task_priority.rb +4 -0
- data/app/models/salesforce/task_status.rb +4 -0
- data/app/models/salesforce/user.rb +4 -0
- data/app/models/salesforce/user_role.rb +4 -0
- data/app/models/salesforce/vote.rb +4 -0
- data/lib/activeforce.rb +29 -0
- data/lib/salesforce/attributes.rb +13 -0
- data/lib/salesforce/authentication.rb +25 -0
- data/lib/salesforce/base.rb +240 -0
- data/lib/salesforce/bulk/batch.rb +77 -0
- data/lib/salesforce/bulk/job.rb +103 -0
- data/lib/salesforce/bulk/operations.rb +25 -0
- data/lib/salesforce/bulk/update_job.rb +24 -0
- data/lib/salesforce/column.rb +98 -0
- data/lib/salesforce/columns.rb +60 -0
- data/lib/salesforce/config.rb +110 -0
- data/lib/salesforce/connection.rb +33 -0
- data/lib/salesforce/connection/async.rb +36 -0
- data/lib/salesforce/connection/conversion.rb +37 -0
- data/lib/salesforce/connection/http_methods.rb +72 -0
- data/lib/salesforce/connection/rest_api.rb +52 -0
- data/lib/salesforce/connection/soap_api.rb +74 -0
- data/lib/salesforce/engine.rb +6 -0
- data/lib/salesforce/errors.rb +33 -0
- data/test/salesforce/authentication_test.rb +52 -0
- data/test/salesforce/base_test.rb +440 -0
- data/test/salesforce/bulk/batch_test.rb +79 -0
- data/test/salesforce/bulk/update_job_test.rb +125 -0
- data/test/salesforce/column_test.rb +115 -0
- data/test/salesforce/config_test.rb +163 -0
- data/test/salesforce/connection/async_test.rb +138 -0
- data/test/salesforce/connection/http_methods_test.rb +242 -0
- data/test/salesforce/connection/rest_api_test.rb +61 -0
- data/test/salesforce/connection/soap_api_test.rb +148 -0
- data/test/salesforce/connection_test.rb +148 -0
- data/test/test_helper.rb +79 -0
- metadata +295 -0
@@ -0,0 +1,138 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class Salesforce.connection::AsyncTest < ActiveSupport::TestCase
|
4
|
+
def async_post(path, body, options = {})
|
5
|
+
as_logged_in_user do
|
6
|
+
convert_body RestClient.post(async_api_url(path), body, async_headers(options)), options
|
7
|
+
end
|
8
|
+
rescue => e
|
9
|
+
raise e
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_async_post__json
|
13
|
+
Salesforce::Authentication.stubs(:session_id).returns('session_id')
|
14
|
+
http_body = stub(:body => { :result => 'foo' }.to_json)
|
15
|
+
RestClient.expects(:post).with('https://.salesforce.com/services/async/22.0/path', :body, {'X-SFDC-Session' => 'session_id', :content_type => 'application/json'}).returns(http_body)
|
16
|
+
assert_equal({'result' => 'foo'}, Salesforce.connection.async_post('path', :body, :format => :json))
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_async_post__400_error_json
|
20
|
+
Salesforce::Authentication.stubs(:session_id).returns('session_id')
|
21
|
+
error = RestClient::BadRequest.new
|
22
|
+
error.stubs(:http_body).returns("[{\"message\":\"someproblem\",\"errorCode\":\"MALFORMED_QUERY\"}]")
|
23
|
+
RestClient.stubs(:post).raises(error)
|
24
|
+
begin
|
25
|
+
Salesforce.connection.async_post('path', :body, :format => :json)
|
26
|
+
assert false, "Shouldn't have gotten here"
|
27
|
+
rescue => e
|
28
|
+
assert_equal "Salesforce::InvalidRequest", e.class.name
|
29
|
+
assert_equal "MALFORMED_QUERY: someproblem while accessing https://.salesforce.com/services/async/22.0/path", e.message
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_async_post__404_error_xml
|
34
|
+
Salesforce::Authentication.stubs(:session_id).returns('session_id')
|
35
|
+
error = RestClient::BadRequest.new
|
36
|
+
error.stubs(:http_body).returns("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Errors><Error><errorCode>MALFORMED_QUERY</errorCode><message>someproblem</message></Error></Errors>" )
|
37
|
+
RestClient.expects(:post).with('https://.salesforce.com/services/async/22.0/path', :body, {'X-SFDC-Session' => 'session_id', :content_type => 'application/xml'}).raises(error)
|
38
|
+
|
39
|
+
begin
|
40
|
+
Salesforce.connection.async_post('path', :body, :format => :xml)
|
41
|
+
assert false, "Shouldn't have gotten here"
|
42
|
+
rescue => e
|
43
|
+
assert_equal "Salesforce::InvalidRequest", e.class.name
|
44
|
+
assert_equal "MALFORMED_QUERY: someproblem while accessing https://.salesforce.com/services/async/22.0/path", e.message
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_async_post__400_error_json
|
49
|
+
Salesforce::Authentication.stubs(:session_id).returns('session_id')
|
50
|
+
error = RestClient::ResourceNotFound.new
|
51
|
+
error.stubs(:http_body).returns("[{\"message\":\"someproblem\",\"errorCode\":\"MALFORMED_QUERY\"}]")
|
52
|
+
RestClient.expects(:post).with('https://.salesforce.com/services/async/22.0/path', :body, {'X-SFDC-Session' => 'session_id', :content_type => 'application/json'}).raises(error)
|
53
|
+
begin
|
54
|
+
Salesforce.connection.async_post('path', :body, :format => :json)
|
55
|
+
assert false, "Shouldn't have gotten here"
|
56
|
+
rescue => e
|
57
|
+
assert_equal "Salesforce::InvalidRequest", e.class.name
|
58
|
+
assert_equal "MALFORMED_QUERY: someproblem while accessing https://.salesforce.com/services/async/22.0/path", e.message
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_async_post__400_error_xml
|
63
|
+
Salesforce::Authentication.stubs(:session_id).returns('session_id')
|
64
|
+
error = RestClient::ResourceNotFound.new
|
65
|
+
error.stubs(:http_body).returns("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Errors><Error><errorCode>MALFORMED_QUERY</errorCode><message>someproblem</message></Error></Errors>" )
|
66
|
+
RestClient.expects(:post).with('https://.salesforce.com/services/async/22.0/path', :body, {'X-SFDC-Session' => 'session_id', :content_type => 'application/xml'}).raises(error)
|
67
|
+
|
68
|
+
begin
|
69
|
+
Salesforce.connection.async_post('path', :body, :format => :xml)
|
70
|
+
assert false, "Shouldn't have gotten here"
|
71
|
+
rescue => e
|
72
|
+
assert_equal "Salesforce::InvalidRequest", e.class.name
|
73
|
+
assert_equal "MALFORMED_QUERY: someproblem while accessing https://.salesforce.com/services/async/22.0/path", e.message
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_async_post__xml
|
78
|
+
Salesforce::Authentication.stubs(:session_id).returns('session_id')
|
79
|
+
http_body = stub(:body => { :result => 'foo' }.to_xml)
|
80
|
+
RestClient.expects(:post).with('https://.salesforce.com/services/async/22.0/path', :body, {'X-SFDC-Session' => 'session_id', :content_type => 'application/xml'}).returns(http_body)
|
81
|
+
assert_equal({'result' => 'foo'}, Salesforce.connection.async_post('path', :body, :format => :xml))
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_async_get__json
|
85
|
+
Salesforce::Authentication.stubs(:session_id).returns('session_id')
|
86
|
+
http_body = stub(:body => { :result => 'foo' }.to_json)
|
87
|
+
RestClient.expects(:get).with('https://.salesforce.com/services/async/22.0/path', {'X-SFDC-Session' => 'session_id', :content_type => 'application/json'}).returns(http_body)
|
88
|
+
assert_equal({'result' => 'foo'}, Salesforce.connection.async_get('path', :format => :json))
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_async_get__error_json
|
92
|
+
Salesforce::Authentication.stubs(:session_id).returns('session_id')
|
93
|
+
error = RestClient::BadRequest.new
|
94
|
+
error.stubs(:http_body).returns("[{\"message\":\"someproblem\",\"errorCode\":\"MALFORMED_QUERY\"}]")
|
95
|
+
RestClient.expects(:get).with('https://.salesforce.com/services/async/22.0/path', {'X-SFDC-Session' => 'session_id', :content_type => 'application/json'}).raises(error)
|
96
|
+
|
97
|
+
begin
|
98
|
+
Salesforce.connection.async_get('path', :format => :json)
|
99
|
+
assert false, "Shouldn't have gotten here"
|
100
|
+
rescue => e
|
101
|
+
assert_equal "Salesforce::InvalidRequest", e.class.name
|
102
|
+
assert_equal "MALFORMED_QUERY: someproblem while accessing https://.salesforce.com/services/async/22.0/path", e.message
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_async_get__error_xml
|
107
|
+
Salesforce::Authentication.stubs(:session_id).returns('session_id')
|
108
|
+
error = RestClient::BadRequest.new
|
109
|
+
error.stubs(:http_body).returns("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Errors><Error><errorCode>MALFORMED_QUERY</errorCode><message>someproblem</message></Error></Errors>" )
|
110
|
+
RestClient.expects(:get).with('https://.salesforce.com/services/async/22.0/path', {'X-SFDC-Session' => 'session_id', :content_type => 'application/xml'}).raises(error)
|
111
|
+
|
112
|
+
begin
|
113
|
+
Salesforce.connection.async_get('path', :format => :xml)
|
114
|
+
assert false, "Shouldn't have gotten here"
|
115
|
+
rescue => e
|
116
|
+
assert_equal "Salesforce::InvalidRequest", e.class.name
|
117
|
+
assert_equal "MALFORMED_QUERY: someproblem while accessing https://.salesforce.com/services/async/22.0/path", e.message
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def test_async_get__xml
|
122
|
+
Salesforce::Authentication.stubs(:session_id).returns('session_id')
|
123
|
+
http_body = stub(:body => { :result => 'foo' }.to_xml)
|
124
|
+
RestClient.expects(:get).with('https://.salesforce.com/services/async/22.0/path', {'X-SFDC-Session' => 'session_id', :content_type => 'application/xml'}).returns(http_body)
|
125
|
+
assert_equal({'result' => 'foo'}, Salesforce.connection.async_get('path', :format => :xml))
|
126
|
+
end
|
127
|
+
|
128
|
+
def test_async_api_url
|
129
|
+
assert_equal 'https://.salesforce.com/services/async/22.0/path', Salesforce.connection.async_api_url('path')
|
130
|
+
end
|
131
|
+
|
132
|
+
|
133
|
+
|
134
|
+
|
135
|
+
|
136
|
+
|
137
|
+
|
138
|
+
end
|
@@ -0,0 +1,242 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class Salesforce.connection::HttpMethodsTest < ActiveSupport::TestCase
|
4
|
+
def test_content_type_headers
|
5
|
+
assert_equal({ :content_type => 'application/json'}, Salesforce.connection.content_type_headers(:format => :json))
|
6
|
+
assert_equal({ :content_type => 'application/json'}, Salesforce.connection.content_type_headers(:format => "json"))
|
7
|
+
assert_equal({ :content_type => 'application/xml'}, Salesforce.connection.content_type_headers(:format => :xml))
|
8
|
+
assert_equal({ :content_type => 'application/xml'}, Salesforce.connection.content_type_headers(:format => 'xml'))
|
9
|
+
assert_equal({ :content_type => 'foobar'}, Salesforce.connection.content_type_headers(:content_type => 'foobar'))
|
10
|
+
assert_equal({ :content_type => nil }, Salesforce.connection.content_type_headers(:format => 'foobar'))
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_get__json
|
14
|
+
Salesforce::Authentication.stubs(:session_id).returns('session_id')
|
15
|
+
http_body = stub(:body => { :result => 'foo' }.to_json)
|
16
|
+
RestClient.expects(:get).with('https://.salesforce.com/services/data/v22.0/path', {'Authorization' => 'OAuth session_id', :content_type => 'application/json'}).returns(http_body)
|
17
|
+
assert_equal({'result' => 'foo'}, Salesforce.connection.get('path', :format => :json))
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_get__error_json
|
21
|
+
Salesforce::Authentication.stubs(:session_id).returns('session_id')
|
22
|
+
error = RestClient::BadRequest.new
|
23
|
+
error.stubs(:http_body).returns("[{\"message\":\"someproblem\",\"errorCode\":\"MALFORMED_QUERY\"}]")
|
24
|
+
RestClient.expects(:get).with('https://.salesforce.com/services/data/v22.0/path', {'Authorization' => 'OAuth session_id', :content_type => 'application/json'}).raises(error)
|
25
|
+
|
26
|
+
begin
|
27
|
+
Salesforce.connection.get('path', :format => :json)
|
28
|
+
assert false, "Shouldn't have gotten here"
|
29
|
+
rescue => e
|
30
|
+
assert_equal "Salesforce::InvalidRequest", e.class.name
|
31
|
+
assert_equal "MALFORMED_QUERY: someproblem while accessing https://.salesforce.com/services/data/v22.0/path", e.message
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_get__error_xml
|
36
|
+
Salesforce::Authentication.stubs(:session_id).returns('session_id')
|
37
|
+
error = RestClient::BadRequest.new
|
38
|
+
error.stubs(:http_body).returns("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Errors><Error><errorCode>MALFORMED_QUERY</errorCode><message>someproblem</message></Error></Errors>" )
|
39
|
+
RestClient.expects(:get).with('https://.salesforce.com/services/data/v22.0/path', {'Authorization' => 'OAuth session_id', :content_type => 'application/xml'}).raises(error)
|
40
|
+
|
41
|
+
begin
|
42
|
+
Salesforce.connection.get('path', :format => :xml)
|
43
|
+
assert false, "Shouldn't have gotten here"
|
44
|
+
rescue => e
|
45
|
+
assert_equal "Salesforce::InvalidRequest", e.class.name
|
46
|
+
assert_equal "MALFORMED_QUERY: someproblem while accessing https://.salesforce.com/services/data/v22.0/path", e.message
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_get__xml
|
51
|
+
Salesforce::Authentication.stubs(:session_id).returns('session_id')
|
52
|
+
http_body = stub(:body => { :result => 'foo' }.to_xml)
|
53
|
+
RestClient.expects(:get).with('https://.salesforce.com/services/data/v22.0/path', {'Authorization' => 'OAuth session_id', :content_type => 'application/xml'}).returns(http_body)
|
54
|
+
assert_equal({'result' => 'foo'}, Salesforce.connection.get('path', :format => :xml))
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_patch__json
|
58
|
+
Salesforce::Authentication.stubs(:session_id).returns('session_id')
|
59
|
+
http_body = stub(:code => 204, :body => '')
|
60
|
+
RestClient.expects(:patch).with('https://.salesforce.com/services/data/v22.0/path', :body, {'Authorization' => 'OAuth session_id', :content_type => 'application/json'}).returns(http_body)
|
61
|
+
assert Salesforce.connection.patch('path', :body, :format => :json)
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_patch__400_error_json
|
65
|
+
Salesforce::Authentication.stubs(:session_id).returns('session_id')
|
66
|
+
error = RestClient::BadRequest.new
|
67
|
+
error.stubs(:http_body).returns("[{\"message\":\"someproblem\",\"errorCode\":\"MALFORMED_QUERY\"}]")
|
68
|
+
RestClient.expects(:patch).with('https://.salesforce.com/services/data/v22.0/path', :body, {'Authorization' => 'OAuth session_id', :content_type => 'application/json'}).raises(error)
|
69
|
+
begin
|
70
|
+
Salesforce.connection.patch('path', :body, :format => :json)
|
71
|
+
assert false, "Shouldn't have gotten here"
|
72
|
+
rescue => e
|
73
|
+
assert_equal "Salesforce::InvalidRequest", e.class.name
|
74
|
+
assert_equal "MALFORMED_QUERY: someproblem while accessing https://.salesforce.com/services/data/v22.0/path", e.message
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_patch__400_error_xml
|
79
|
+
Salesforce::Authentication.stubs(:session_id).returns('session_id')
|
80
|
+
error = RestClient::BadRequest.new
|
81
|
+
error.stubs(:http_body).returns("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Errors><Error><errorCode>MALFORMED_QUERY</errorCode><message>someproblem</message></Error></Errors>" )
|
82
|
+
RestClient.expects(:patch).with('https://.salesforce.com/services/data/v22.0/path', :body, {'Authorization' => 'OAuth session_id', :content_type => 'application/xml'}).raises(error)
|
83
|
+
|
84
|
+
begin
|
85
|
+
Salesforce.connection.patch('path', :body, :format => :xml)
|
86
|
+
assert false, "Shouldn't have gotten here"
|
87
|
+
rescue => e
|
88
|
+
assert_equal "Salesforce::InvalidRequest", e.class.name
|
89
|
+
assert_equal "MALFORMED_QUERY: someproblem while accessing https://.salesforce.com/services/data/v22.0/path", e.message
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_patch__404_error_json
|
94
|
+
Salesforce::Authentication.stubs(:session_id).returns('session_id')
|
95
|
+
error = RestClient::ResourceNotFound.new
|
96
|
+
error.stubs(:http_body).returns("[{\"message\":\"someproblem\",\"errorCode\":\"MALFORMED_QUERY\"}]")
|
97
|
+
RestClient.expects(:patch).with('https://.salesforce.com/services/data/v22.0/path', :body, {'Authorization' => 'OAuth session_id', :content_type => 'application/json'}).raises(error)
|
98
|
+
begin
|
99
|
+
Salesforce.connection.patch('path', :body, :format => :json)
|
100
|
+
assert false, "Shouldn't have gotten here"
|
101
|
+
rescue => e
|
102
|
+
assert_equal "Salesforce::InvalidRequest", e.class.name
|
103
|
+
assert_equal "MALFORMED_QUERY: someproblem while accessing https://.salesforce.com/services/data/v22.0/path", e.message
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_patch__404_error_xml
|
108
|
+
Salesforce::Authentication.stubs(:session_id).returns('session_id')
|
109
|
+
error = RestClient::ResourceNotFound.new
|
110
|
+
error.stubs(:http_body).returns("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Errors><Error><errorCode>MALFORMED_QUERY</errorCode><message>someproblem</message></Error></Errors>" )
|
111
|
+
RestClient.expects(:patch).with('https://.salesforce.com/services/data/v22.0/path', :body, {'Authorization' => 'OAuth session_id', :content_type => 'application/xml'}).raises(error)
|
112
|
+
|
113
|
+
begin
|
114
|
+
Salesforce.connection.patch('path', :body, :format => :xml)
|
115
|
+
assert false, "Shouldn't have gotten here"
|
116
|
+
rescue => e
|
117
|
+
assert_equal "Salesforce::InvalidRequest", e.class.name
|
118
|
+
assert_equal "MALFORMED_QUERY: someproblem while accessing https://.salesforce.com/services/data/v22.0/path", e.message
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
def test_patch__xml
|
123
|
+
Salesforce::Authentication.stubs(:session_id).returns('session_id')
|
124
|
+
http_body = stub(:code => 204, :body => '')
|
125
|
+
RestClient.expects(:patch).with('https://.salesforce.com/services/data/v22.0/path', :body, {'Authorization' => 'OAuth session_id', :content_type => 'application/xml'}).returns(http_body)
|
126
|
+
assert Salesforce.connection.patch('path', :body, :format => :xml)
|
127
|
+
end
|
128
|
+
|
129
|
+
|
130
|
+
def test_post__json
|
131
|
+
Salesforce::Authentication.stubs(:session_id).returns('session_id')
|
132
|
+
http_body = stub(:body => { :result => 'foo' }.to_json)
|
133
|
+
RestClient.expects(:post).with('https://.salesforce.com/services/data/v22.0/path', :body, {'Authorization' => 'OAuth session_id', :content_type => 'application/json'}).returns(http_body)
|
134
|
+
assert_equal({'result' => 'foo'}, Salesforce.connection.post('path', :body, :format => :json))
|
135
|
+
end
|
136
|
+
|
137
|
+
def test_post__400_error_json
|
138
|
+
Salesforce::Authentication.stubs(:session_id).returns('session_id')
|
139
|
+
error = RestClient::BadRequest.new
|
140
|
+
error.stubs(:http_body).returns("[{\"message\":\"someproblem\",\"errorCode\":\"MALFORMED_QUERY\"}]")
|
141
|
+
RestClient.expects(:post).with('https://.salesforce.com/services/data/v22.0/path', :body, {'Authorization' => 'OAuth session_id', :content_type => 'application/json'}).raises(error)
|
142
|
+
begin
|
143
|
+
Salesforce.connection.post('path', :body, :format => :json)
|
144
|
+
assert false, "Shouldn't have gotten here"
|
145
|
+
rescue => e
|
146
|
+
assert_equal "Salesforce::InvalidRequest", e.class.name
|
147
|
+
assert_equal "MALFORMED_QUERY: someproblem while accessing https://.salesforce.com/services/data/v22.0/path", e.message
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
def test_post__404_error_xml
|
152
|
+
Salesforce::Authentication.stubs(:session_id).returns('session_id')
|
153
|
+
error = RestClient::BadRequest.new
|
154
|
+
error.stubs(:http_body).returns("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Errors><Error><errorCode>MALFORMED_QUERY</errorCode><message>someproblem</message></Error></Errors>" )
|
155
|
+
RestClient.expects(:post).with('https://.salesforce.com/services/data/v22.0/path', :body, {'Authorization' => 'OAuth session_id', :content_type => 'application/xml'}).raises(error)
|
156
|
+
|
157
|
+
begin
|
158
|
+
Salesforce.connection.post('path', :body, :format => :xml)
|
159
|
+
assert false, "Shouldn't have gotten here"
|
160
|
+
rescue => e
|
161
|
+
assert_equal "Salesforce::InvalidRequest", e.class.name
|
162
|
+
assert_equal "MALFORMED_QUERY: someproblem while accessing https://.salesforce.com/services/data/v22.0/path", e.message
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
def test_post__400_error_json
|
167
|
+
Salesforce::Authentication.stubs(:session_id).returns('session_id')
|
168
|
+
error = RestClient::ResourceNotFound.new
|
169
|
+
error.stubs(:http_body).returns("[{\"message\":\"someproblem\",\"errorCode\":\"MALFORMED_QUERY\"}]")
|
170
|
+
RestClient.expects(:post).with('https://.salesforce.com/services/data/v22.0/path', :body, {'Authorization' => 'OAuth session_id', :content_type => 'application/json'}).raises(error)
|
171
|
+
begin
|
172
|
+
Salesforce.connection.post('path', :body, :format => :json)
|
173
|
+
assert false, "Shouldn't have gotten here"
|
174
|
+
rescue => e
|
175
|
+
assert_equal "Salesforce::InvalidRequest", e.class.name
|
176
|
+
assert_equal "MALFORMED_QUERY: someproblem while accessing https://.salesforce.com/services/data/v22.0/path", e.message
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
def test_post__400_error_xml
|
181
|
+
Salesforce::Authentication.stubs(:session_id).returns('session_id')
|
182
|
+
error = RestClient::ResourceNotFound.new
|
183
|
+
error.stubs(:http_body).returns("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Errors><Error><errorCode>MALFORMED_QUERY</errorCode><message>someproblem</message></Error></Errors>" )
|
184
|
+
RestClient.expects(:post).with('https://.salesforce.com/services/data/v22.0/path', :body, {'Authorization' => 'OAuth session_id', :content_type => 'application/xml'}).raises(error)
|
185
|
+
|
186
|
+
begin
|
187
|
+
Salesforce.connection.post('path', :body, :format => :xml)
|
188
|
+
assert false, "Shouldn't have gotten here"
|
189
|
+
rescue => e
|
190
|
+
assert_equal "Salesforce::InvalidRequest", e.class.name
|
191
|
+
assert_equal "MALFORMED_QUERY: someproblem while accessing https://.salesforce.com/services/data/v22.0/path", e.message
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
def test_post__xml
|
196
|
+
Salesforce::Authentication.stubs(:session_id).returns('session_id')
|
197
|
+
http_body = stub(:body => { :result => 'foo' }.to_xml)
|
198
|
+
RestClient.expects(:post).with('https://.salesforce.com/services/data/v22.0/path', :body, {'Authorization' => 'OAuth session_id', :content_type => 'application/xml'}).returns(http_body)
|
199
|
+
assert_equal({'result' => 'foo'}, Salesforce.connection.post('path', :body, :format => :xml))
|
200
|
+
end
|
201
|
+
|
202
|
+
def test_delete__400_error_xml
|
203
|
+
Salesforce::Authentication.stubs(:session_id).returns('session_id')
|
204
|
+
error = RestClient::BadRequest.new
|
205
|
+
error.stubs(:http_body).returns("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Errors><Error><errorCode>MALFORMED_QUERY</errorCode><message>someproblem</message></Error></Errors>" )
|
206
|
+
RestClient.expects(:delete).with('https://.salesforce.com/services/data/v22.0/path', {'Authorization' => 'OAuth session_id', :content_type => 'application/xml'}).raises(error)
|
207
|
+
|
208
|
+
begin
|
209
|
+
Salesforce.connection.delete('path')
|
210
|
+
assert false, "Shouldn't have gotten here"
|
211
|
+
rescue => e
|
212
|
+
assert_equal "Salesforce::InvalidRequest", e.class.name
|
213
|
+
assert_equal "MALFORMED_QUERY: someproblem while accessing https://.salesforce.com/services/data/v22.0/path", e.message
|
214
|
+
end
|
215
|
+
end
|
216
|
+
|
217
|
+
def test_delete__404_error_xml
|
218
|
+
Salesforce::Authentication.stubs(:session_id).returns('session_id')
|
219
|
+
error = RestClient::ResourceNotFound.new
|
220
|
+
error.stubs(:http_body).returns("<?xml version=\"1.0\" encoding=\"UTF-8\"?><Errors><Error><errorCode>MALFORMED_QUERY</errorCode><message>someproblem</message></Error></Errors>" )
|
221
|
+
RestClient.expects(:delete).with('https://.salesforce.com/services/data/v22.0/path', {'Authorization' => 'OAuth session_id', :content_type => 'application/xml'}).raises(error)
|
222
|
+
|
223
|
+
begin
|
224
|
+
Salesforce.connection.delete('path')
|
225
|
+
assert false, "Shouldn't have gotten here"
|
226
|
+
rescue => e
|
227
|
+
assert_equal "Salesforce::InvalidRequest", e.class.name
|
228
|
+
assert_equal "MALFORMED_QUERY: someproblem while accessing https://.salesforce.com/services/data/v22.0/path", e.message
|
229
|
+
end
|
230
|
+
end
|
231
|
+
|
232
|
+
def test_delete__xml
|
233
|
+
Salesforce::Authentication.stubs(:session_id).returns('session_id')
|
234
|
+
RestClient.expects(:delete).with('https://.salesforce.com/services/data/v22.0/path', {'Authorization' => 'OAuth session_id', :content_type => 'application/xml'}).returns(stub(:body => ''))
|
235
|
+
assert Salesforce.connection.delete('path')
|
236
|
+
end
|
237
|
+
|
238
|
+
def test_salesforce_url
|
239
|
+
assert_equal 'https://.salesforce.com/services/data/v22.0/path', Salesforce.connection.salesforce_url("path")
|
240
|
+
assert_equal 'https://.salesforce.com/services/data/23.0/foo', Salesforce.connection.salesforce_url("/services/data/23.0/foo")
|
241
|
+
end
|
242
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class Salesforce.connection::RestApiTest < ActiveSupport::TestCase
|
4
|
+
def test_supported_objects
|
5
|
+
connection.expects(:get).with("sobjects.json", :format => :json).returns({ "sobjects" => [ { "name" => "Account"}, { "name" => "Contact"}]})
|
6
|
+
assert_equal [ "Account", "Contact" ], connection.supported_objects
|
7
|
+
end
|
8
|
+
|
9
|
+
def fields(object_name)
|
10
|
+
raise ObjectNotSupported.new(object_name) unless supported_objects.include?(object_name)
|
11
|
+
get("sobjects/#{object_name}/describe.json", :format => :json)["fields"]
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_fields
|
15
|
+
connection.expects(:supported_objects).returns(["Account"])
|
16
|
+
connection.expects(:get).with("sobjects/Account/describe.json", :format => :json).returns("fields" => :fields)
|
17
|
+
assert_equal :fields, connection.fields("Account")
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_fields__fails
|
21
|
+
connection.expects(:supported_objects).returns(["Account__c"])
|
22
|
+
connection.expects(:get).never
|
23
|
+
assert_raises Salesforce::ObjectNotSupported do
|
24
|
+
connection.fields("Account")
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_find_object_by_id
|
29
|
+
connection.expects(:get).with("sobjects/Bill__c/a123456789.json?fields=Account__c,Name,Due_Date__c", :format => :json).returns(:result)
|
30
|
+
assert_equal :result, connection.find_object_by_id('Bill__c', 'a123456789', 'Account__c,Name,Due_Date__c' )
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_update
|
34
|
+
fields = { "Account__c" => 'a4000', 'Due_Date__c' => "08/10/2029"}
|
35
|
+
connection.expects(:patch).with("sobjects/Bill__c/a123456789.json", fields.to_json, :format => :json).returns(stub(:code => 204))
|
36
|
+
assert connection.update('Bill__c', 'a123456789', fields)
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_create__succeeds
|
40
|
+
fields = { "Account__c" => 'a4000', 'Due_Date__c' => "08/10/2029"}
|
41
|
+
connection.expects(:post).with('sobjects/Bill__c.json', fields.to_json, :format => :json).returns({ "success" => true, "id" => "newid"})
|
42
|
+
assert_equal "newid", connection.create('Bill__c', fields)
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_create__fails
|
46
|
+
fields = { "Account__c" => 'a4000', 'Due_Date__c' => "08/10/2029"}
|
47
|
+
connection.expects(:post).with('sobjects/Bill__c.json', fields.to_json, :format => :json).returns({ "success" => false, "errors" => "something"})
|
48
|
+
assert_raises Salesforce::RecordInvalid do
|
49
|
+
connection.create('Bill__c', fields)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_delete
|
54
|
+
connection.expects(:delete).with("sobjects/Bill__c/a123456789")
|
55
|
+
connection.destroy("Bill__c", "a123456789")
|
56
|
+
end
|
57
|
+
|
58
|
+
def connection
|
59
|
+
Salesforce.connection
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,148 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class Salesforce::Connection::SoapApiTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
def test_login
|
6
|
+
expected_options = {
|
7
|
+
:endpoint_url => :soap_login_url,
|
8
|
+
:body => {
|
9
|
+
:username => :soap_username,
|
10
|
+
:password => :soap_password,
|
11
|
+
:order! => [ :username, :password ]
|
12
|
+
}
|
13
|
+
}
|
14
|
+
|
15
|
+
Salesforce::Config.expects(:login_url).returns(:soap_login_url)
|
16
|
+
Salesforce::Config.expects(:username).returns(:soap_username)
|
17
|
+
Salesforce::Config.expects(:password).returns(:soap_password)
|
18
|
+
|
19
|
+
Salesforce.connection.expects(:invoke_soap).with(:login, expected_options).returns(:login_result)
|
20
|
+
|
21
|
+
assert_equal :login_result, Salesforce.connection.login
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_convert_lead
|
25
|
+
expected_options = {
|
26
|
+
:body => {
|
27
|
+
:leadConverts => :some_lead_converts
|
28
|
+
}
|
29
|
+
}
|
30
|
+
|
31
|
+
Salesforce.connection.expects(:as_logged_in_user).yields.returns(:convert_lead_result)
|
32
|
+
Salesforce.connection.expects(:invoke_soap).with(:convertLead, expected_options)
|
33
|
+
|
34
|
+
assert_equal :convert_lead_result, Salesforce.connection.convert_lead(:some_lead_converts)
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_invoke_soap__not_login__success
|
38
|
+
options = {
|
39
|
+
:body => :soap_body,
|
40
|
+
:other_option => 'foo'
|
41
|
+
}
|
42
|
+
|
43
|
+
result = {
|
44
|
+
:not_login_response => {
|
45
|
+
:result => {
|
46
|
+
:stuff => "i like",
|
47
|
+
:success => true
|
48
|
+
}
|
49
|
+
}
|
50
|
+
}
|
51
|
+
|
52
|
+
expected_result = result[:not_login_response][:result]
|
53
|
+
|
54
|
+
soap_client_mock = mock
|
55
|
+
Salesforce.connection.expects(:soap_client).with(options).returns(soap_client_mock)
|
56
|
+
|
57
|
+
Salesforce::Config.stubs(:session_id).returns('boyahh_session_id')
|
58
|
+
Salesforce::Config.stubs(:soap_enterprise_namespace).returns('soap:enterprise:namespace')
|
59
|
+
|
60
|
+
soap_mock = mock
|
61
|
+
soap_mock.expects(:body=).with(:soap_body)
|
62
|
+
soap_mock.expects(:header=).with({ "ns1:SessionHeader" => { "ns1:sessionId" => 'boyahh_session_id' }})
|
63
|
+
|
64
|
+
|
65
|
+
namespaces_mock = mock
|
66
|
+
namespaces_mock.expects(:[]=).with("xmlns:ns1", 'soap:enterprise:namespace')
|
67
|
+
soap_mock.expects(:namespaces).returns(namespaces_mock)
|
68
|
+
|
69
|
+
soap_client_mock.expects(:request).with(:wsdl, :notLogin).yields(soap_mock).returns(mock(:to_hash => result))
|
70
|
+
|
71
|
+
assert_equal expected_result, Salesforce.connection.send(:invoke_soap, :notLogin, options)
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_invoke_soap__not_login__not_success
|
75
|
+
options = {
|
76
|
+
:body => :soap_body,
|
77
|
+
:other_option => 'foo'
|
78
|
+
}
|
79
|
+
|
80
|
+
result = {
|
81
|
+
:not_login_response => {
|
82
|
+
:result => {
|
83
|
+
:errors => { :inspect => :me },
|
84
|
+
:success => false
|
85
|
+
}
|
86
|
+
}
|
87
|
+
}
|
88
|
+
|
89
|
+
soap_client_mock = mock
|
90
|
+
Salesforce.connection.expects(:soap_client).with(options).returns(soap_client_mock)
|
91
|
+
|
92
|
+
Salesforce::Config.stubs(:session_id).returns('boyahh_session_id')
|
93
|
+
Salesforce::Config.stubs(:soap_enterprise_namespace).returns('soap:enterprise:namespace')
|
94
|
+
|
95
|
+
soap_mock = mock
|
96
|
+
soap_mock.expects(:body=).with(:soap_body)
|
97
|
+
soap_mock.expects(:header=).with({ "ns1:SessionHeader" => { "ns1:sessionId" => 'boyahh_session_id' }})
|
98
|
+
|
99
|
+
|
100
|
+
namespaces_mock = mock
|
101
|
+
namespaces_mock.expects(:[]=).with("xmlns:ns1", 'soap:enterprise:namespace')
|
102
|
+
soap_mock.expects(:namespaces).returns(namespaces_mock)
|
103
|
+
|
104
|
+
soap_client_mock.expects(:request).with(:wsdl, :notLogin).yields(soap_mock).returns(mock(:to_hash => result))
|
105
|
+
|
106
|
+
assert_raises Salesforce::Connection::SoapApi::Error do
|
107
|
+
Salesforce.connection.send(:invoke_soap, :notLogin, options)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def test_invoke_soap__login
|
112
|
+
options = {
|
113
|
+
:body => :soap_body,
|
114
|
+
:other_option => 'foo'
|
115
|
+
}
|
116
|
+
|
117
|
+
result = {
|
118
|
+
:login_response => {
|
119
|
+
:result => {
|
120
|
+
:stuff => "i like"
|
121
|
+
}
|
122
|
+
}
|
123
|
+
}
|
124
|
+
|
125
|
+
expected_result = result[:login_response][:result]
|
126
|
+
|
127
|
+
soap_client_mock = mock
|
128
|
+
Salesforce.connection.expects(:soap_client).with(options).returns(soap_client_mock)
|
129
|
+
|
130
|
+
soap_mock = mock
|
131
|
+
soap_mock.expects(:body=).with(:soap_body)
|
132
|
+
soap_client_mock.expects(:request).with(:wsdl, :login).yields(soap_mock).returns(mock(:to_hash => result))
|
133
|
+
|
134
|
+
assert_equal expected_result, Salesforce.connection.send(:invoke_soap, :login, options)
|
135
|
+
end
|
136
|
+
|
137
|
+
def test_soap_client
|
138
|
+
options = {
|
139
|
+
:namespace => 'my:name:space',
|
140
|
+
:endpoint_url => 'https://my.endpoint.url.com'
|
141
|
+
}
|
142
|
+
|
143
|
+
client = Salesforce.connection.send(:soap_client, options)
|
144
|
+
assert_equal 'https://my.endpoint.url.com', client.wsdl.endpoint
|
145
|
+
assert_equal 'my:name:space', client.wsdl.namespace
|
146
|
+
end
|
147
|
+
|
148
|
+
end
|