activeforce 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. data/Gemfile +15 -0
  2. data/Gemfile.lock +128 -0
  3. data/LICENSE.txt +20 -0
  4. data/README.md +112 -0
  5. data/Rakefile +47 -0
  6. data/VERSION +1 -0
  7. data/activeforce.gemspec +151 -0
  8. data/app/models/salesforce/account.rb +4 -0
  9. data/app/models/salesforce/activity_history.rb +4 -0
  10. data/app/models/salesforce/approval.rb +4 -0
  11. data/app/models/salesforce/campaign.rb +4 -0
  12. data/app/models/salesforce/campaign_feed.rb +4 -0
  13. data/app/models/salesforce/campaign_member.rb +4 -0
  14. data/app/models/salesforce/case.rb +4 -0
  15. data/app/models/salesforce/case_comment.rb +4 -0
  16. data/app/models/salesforce/case_contact_role.rb +4 -0
  17. data/app/models/salesforce/case_feed.rb +4 -0
  18. data/app/models/salesforce/case_history.rb +4 -0
  19. data/app/models/salesforce/case_share.rb +4 -0
  20. data/app/models/salesforce/case_solution.rb +4 -0
  21. data/app/models/salesforce/case_status.rb +4 -0
  22. data/app/models/salesforce/case_team_member.rb +4 -0
  23. data/app/models/salesforce/community.rb +4 -0
  24. data/app/models/salesforce/contact.rb +4 -0
  25. data/app/models/salesforce/contact_feed.rb +4 -0
  26. data/app/models/salesforce/contact_history.rb +4 -0
  27. data/app/models/salesforce/contract.rb +4 -0
  28. data/app/models/salesforce/document.rb +4 -0
  29. data/app/models/salesforce/event.rb +4 -0
  30. data/app/models/salesforce/feed_item.rb +4 -0
  31. data/app/models/salesforce/group.rb +4 -0
  32. data/app/models/salesforce/group_member.rb +4 -0
  33. data/app/models/salesforce/idea.rb +4 -0
  34. data/app/models/salesforce/lead.rb +4 -0
  35. data/app/models/salesforce/lead_status.rb +4 -0
  36. data/app/models/salesforce/name.rb +4 -0
  37. data/app/models/salesforce/note.rb +4 -0
  38. data/app/models/salesforce/open_activity.rb +4 -0
  39. data/app/models/salesforce/opportunity.rb +4 -0
  40. data/app/models/salesforce/organization.rb +4 -0
  41. data/app/models/salesforce/partner.rb +4 -0
  42. data/app/models/salesforce/period.rb +4 -0
  43. data/app/models/salesforce/product2.rb +4 -0
  44. data/app/models/salesforce/product2_feed.rb +4 -0
  45. data/app/models/salesforce/profile.rb +4 -0
  46. data/app/models/salesforce/quote.rb +4 -0
  47. data/app/models/salesforce/solution.rb +4 -0
  48. data/app/models/salesforce/task.rb +4 -0
  49. data/app/models/salesforce/task_feed.rb +4 -0
  50. data/app/models/salesforce/task_priority.rb +4 -0
  51. data/app/models/salesforce/task_status.rb +4 -0
  52. data/app/models/salesforce/user.rb +4 -0
  53. data/app/models/salesforce/user_role.rb +4 -0
  54. data/app/models/salesforce/vote.rb +4 -0
  55. data/lib/activeforce.rb +29 -0
  56. data/lib/salesforce/attributes.rb +13 -0
  57. data/lib/salesforce/authentication.rb +25 -0
  58. data/lib/salesforce/base.rb +240 -0
  59. data/lib/salesforce/bulk/batch.rb +77 -0
  60. data/lib/salesforce/bulk/job.rb +103 -0
  61. data/lib/salesforce/bulk/operations.rb +25 -0
  62. data/lib/salesforce/bulk/update_job.rb +24 -0
  63. data/lib/salesforce/column.rb +98 -0
  64. data/lib/salesforce/columns.rb +60 -0
  65. data/lib/salesforce/config.rb +110 -0
  66. data/lib/salesforce/connection.rb +33 -0
  67. data/lib/salesforce/connection/async.rb +36 -0
  68. data/lib/salesforce/connection/conversion.rb +37 -0
  69. data/lib/salesforce/connection/http_methods.rb +72 -0
  70. data/lib/salesforce/connection/rest_api.rb +52 -0
  71. data/lib/salesforce/connection/soap_api.rb +74 -0
  72. data/lib/salesforce/engine.rb +6 -0
  73. data/lib/salesforce/errors.rb +33 -0
  74. data/test/salesforce/authentication_test.rb +52 -0
  75. data/test/salesforce/base_test.rb +440 -0
  76. data/test/salesforce/bulk/batch_test.rb +79 -0
  77. data/test/salesforce/bulk/update_job_test.rb +125 -0
  78. data/test/salesforce/column_test.rb +115 -0
  79. data/test/salesforce/config_test.rb +163 -0
  80. data/test/salesforce/connection/async_test.rb +138 -0
  81. data/test/salesforce/connection/http_methods_test.rb +242 -0
  82. data/test/salesforce/connection/rest_api_test.rb +61 -0
  83. data/test/salesforce/connection/soap_api_test.rb +148 -0
  84. data/test/salesforce/connection_test.rb +148 -0
  85. data/test/test_helper.rb +79 -0
  86. metadata +295 -0
@@ -0,0 +1,79 @@
1
+ require 'test_helper'
2
+
3
+ class Salesforce::Bulk::BatchTest < ActiveSupport::TestCase
4
+ setup :clear_columns_for_bulk_table
5
+ setup :setup_columns_for_bulk_table
6
+ setup :setup_job
7
+ teardown :clear_file
8
+
9
+ def test_initialize
10
+ assert_equal @job, @batch.job
11
+ assert !@batch.filename.nil?
12
+ assert !@batch.csv.nil?
13
+ @batch.csv.close
14
+ content = File.read(@batch.filename)
15
+ assert_equal "Id,Name__c,dob__c,Car__c\n", content
16
+ assert_equal [ 'Id', "Name__c", "dob__c", "Car__c"], @batch.send(:csv_header)
17
+ end
18
+
19
+ def test_record__from_hash
20
+ @batch.csv.expects(:<<).with([ 'recordid', 'record name', "2008-10-14", 'record car'])
21
+ @batch.record :id => "recordid", :name => "record name", :car => "record car", :dob => Date.parse("10/14/2008")
22
+
23
+ @batch.csv.expects(:<<).with([ 'recordid', 'record name', "2008-10-14", 'record car'])
24
+ @batch.record :id => "recordid", :name => "record name", :car => "record car", :dob => "10/14/2008"
25
+
26
+ @batch.csv.expects(:<<).with([ 'recordid', '', '', 'record car'])
27
+ @batch.record :id => "recordid", :car => "record car"
28
+
29
+ @batch.csv.expects(:<<).with([ 'recordid', '', '', ''])
30
+ @batch.record :id => "recordid"
31
+ end
32
+
33
+ def test_record__from_object
34
+ bulk_table = Salesforce::BulkTable.new("Id" => "btid", :name => "name", "Car__c" => 'car', :dob => "10/14/2008")
35
+ @batch.csv.expects(:<<).with([ 'btid', "name", "2008-10-14", "car"])
36
+ @batch.record bulk_table
37
+ end
38
+
39
+ def test_create
40
+ @batch.csv.expects(:close)
41
+ File.expects(:read).returns("csv_contents")
42
+ Salesforce.connection.expects(:async_post).with("job/#{@job.id}/batch", "csv_contents", :format => :xml, :content_type => "text/csv").returns("id" => "batchid", "state" => "In Progress")
43
+ @batch.create!
44
+ assert_equal "batchid", @batch.id
45
+ assert @batch.in_progress?
46
+ end
47
+
48
+ def test_update_status
49
+ Salesforce.connection.expects(:async_get).with("job/#{@job.id}/batch/#{@batch.id}", :format => :xml).returns(:state => "Not Processed")
50
+ @batch.update_status
51
+ assert @batch.not_processed?
52
+
53
+ Salesforce.connection.expects(:async_get).with("job/#{@job.id}/batch/#{@batch.id}", :format => :xml).returns(:state => "Completed")
54
+ @batch.update_status
55
+ assert @batch.completed?
56
+
57
+ Salesforce.connection.expects(:async_get).never
58
+ @batch.update_status
59
+ end
60
+
61
+ def test_results
62
+ csv = "Id,Success,Created,Errors\n1,true,no,\n2,true,yes,"
63
+ Salesforce.connection.expects(:async_get).with("job/#{@job.id}/batch/#{@batch.id}/result").returns(csv)
64
+ assert_equal 2, @batch.results.size
65
+ end
66
+
67
+ private
68
+
69
+ def setup_job
70
+ @job = Salesforce::Bulk::UpdateJob.new(Salesforce::BulkTable)
71
+ @batch = @job.batch do
72
+ end
73
+ end
74
+
75
+ def clear_file
76
+ FileUtils.rm_rf(@batch.filename) if @batch.filename.present?
77
+ end
78
+ end
79
+
@@ -0,0 +1,125 @@
1
+ require 'test_helper'
2
+
3
+ class Salesforce::Bulk::UpdateJobTest < ActiveSupport::TestCase
4
+
5
+ setup :setup_columns_for_bulk_table
6
+ setup :setup_columns_for_account
7
+
8
+
9
+ def test_initialize
10
+ job = Salesforce::Bulk::UpdateJob.new(Salesforce::Account)
11
+ assert_equal Salesforce::Account, job.object_type
12
+ assert_equal 'update', job.operation
13
+ assert_equal 'Parallel', job.concurrency_mode
14
+ assert_equal 'Account', job.object
15
+ assert_equal 'Id,City,Address,Name,Type,State', job.send(:csv_header).join(',')
16
+ end
17
+
18
+ def test_initialize__with_columns
19
+ job = Salesforce::Bulk::UpdateJob.new(Salesforce::Account, [:name, :state])
20
+ assert_equal Salesforce::Account, job.object_type
21
+ assert_equal 'update', job.operation
22
+ assert_equal 'Parallel', job.concurrency_mode
23
+ assert_equal 'Account', job.object
24
+ assert_equal 'Id,Name,State', job.send(:csv_header).join(',')
25
+ end
26
+
27
+ def test_initialize__with_all
28
+ job = Salesforce::Bulk::UpdateJob.new(Salesforce::Account, :all)
29
+ assert_equal Salesforce::Account, job.object_type
30
+ assert_equal 'update', job.operation
31
+ assert_equal 'Parallel', job.concurrency_mode
32
+ assert_equal 'Account', job.object
33
+ assert_equal 'Id,City,Address,Name,Type,State', job.send(:csv_header).join(',')
34
+ end
35
+
36
+ def test_csv_columns__unrecognized_column
37
+ assert_raises Salesforce::UnrecognizedColumn do
38
+ Salesforce::Bulk::UpdateJob.new(Salesforce::Account, [ :ssn ]).csv_columns
39
+ end
40
+ end
41
+
42
+ def test_bulk_update
43
+ Salesforce::Bulk::UpdateJob.any_instance.expects(:process!)
44
+
45
+ job = Salesforce::BulkTable.bulk_update do
46
+ serial!
47
+ batch do
48
+ record({})
49
+ record({})
50
+ end
51
+ end
52
+
53
+ assert_equal Salesforce::BulkTable, job.object_type
54
+ assert_equal 'update', job.operation
55
+ assert_equal 'Serial', job.concurrency_mode
56
+ assert_equal 'BulkTable__c', job.object
57
+ assert_equal 1, job.batches.size
58
+ end
59
+
60
+ def test_process
61
+ job = Salesforce::Bulk::UpdateJob.new(Salesforce::Account)
62
+ job.expects(:create_job!)
63
+ job.expects(:create_batches!)
64
+ job.expects(:close_job!)
65
+ job.process!
66
+ end
67
+
68
+ def test_create_job
69
+ job = Salesforce::Bulk::UpdateJob.new(Salesforce::Account)
70
+ xml = anything
71
+ Salesforce.connection.expects(:async_post).with("job", xml, :format => :xml).returns({ "id" => 3})
72
+ job.send :create_job!
73
+ assert_equal 3, job.id
74
+ end
75
+
76
+ def test_completed
77
+ job_with_batches
78
+ @batch_1.stubs(:update_status)
79
+ @batch_2.stubs(:update_status)
80
+ @batch_1.expects(:completed?).returns(false)
81
+ @batch_1.expects(:failed?).returns(false)
82
+ assert_equal false, @job.completed?
83
+
84
+ @batch_1.expects(:completed?).returns(true)
85
+ @batch_2.expects(:completed?).returns(false)
86
+ @batch_2.expects(:failed?).returns(false)
87
+ assert_equal false, @job.completed?
88
+
89
+ @batch_1.expects(:completed?).returns(true)
90
+ @batch_2.expects(:completed?).returns(false)
91
+ @batch_2.expects(:failed?).returns(true)
92
+ assert @job.completed?
93
+ end
94
+
95
+ def test_results
96
+ job_with_batches
97
+ @batch_1.expects(:results).returns([ :result_1, :result_2])
98
+ @batch_2.expects(:results).returns([ :result_3, :result_4])
99
+ assert_equal [ :result_1, :result_2, :result_3, :result_4 ], @job.results
100
+ end
101
+
102
+ def test_close_job
103
+ Salesforce::Authentication.stubs(:session_id).returns('session_id')
104
+ job_with_batches
105
+ Salesforce.connection.expects(:async_post).with("job/jobId", includes("<state>Closed</state>"), :format => :xml).returns("state" => "Closed", "number_batches_total" => 2)
106
+ @job.send(:close_job!)
107
+ assert_equal 2, @job.number_batches_total
108
+ assert @job.closed?
109
+ end
110
+
111
+ private
112
+
113
+ def job_with_batches
114
+ Salesforce::Authentication.stubs(:session_id).returns('session_id')
115
+
116
+ @job = Salesforce::Bulk::UpdateJob.new(Salesforce::Account)
117
+ @job.id = "jobId"
118
+ @batch_1 = Salesforce::Bulk::Batch.new(@job)
119
+ @batch_2 = Salesforce::Bulk::Batch.new(@job)
120
+ @job.batches << @batch_1
121
+ @job.batches << @batch_2
122
+ end
123
+
124
+
125
+ end
@@ -0,0 +1,115 @@
1
+ require 'test_helper'
2
+
3
+ class Salesforce::ColumnTest < ActiveSupport::TestCase
4
+ def test_initializer
5
+ col = Salesforce::Column.new("name" => "Name", "type" => "string", "updateable" => true)
6
+ assert_equal "name", col.name
7
+ assert_equal "Name", col.original_name
8
+ assert_equal :string, col.type
9
+ assert col.editable?
10
+ end
11
+
12
+ def test_initializer__custom
13
+ col = Salesforce::Column.new("name" => "Name__c", "type" => "string", "updateable" => true)
14
+ assert_equal "name", col.name
15
+ assert_equal "Name__c", col.original_name
16
+ assert_equal :string, col.type
17
+ assert col.editable?
18
+ end
19
+
20
+ def test_initializer__not_editable
21
+ col = Salesforce::Column.new("name" => "Name__c", "type" => "string", "updateable" => false, "createable" => false)
22
+ assert_equal "name", col.name
23
+ assert_equal "Name__c", col.original_name
24
+ assert_equal :string, col.type
25
+ assert_equal false, col.editable?
26
+ end
27
+
28
+ def test_initializer__editable
29
+ col = Salesforce::Column.new("name" => "Name__c", "type" => "string", "updateable" => true, "createable" => false)
30
+ assert_equal "name", col.name
31
+ assert_equal "Name__c", col.original_name
32
+ assert_equal :string, col.type
33
+ assert col.editable?
34
+ assert col.updateable?
35
+ assert_equal false, col.createable?
36
+ col.updateable = false
37
+ col.createable = true
38
+ assert col.editable?
39
+ assert col.createable?
40
+ assert_equal false, col.updateable?
41
+ end
42
+
43
+ def test_to_soql_value
44
+ assert_equal "'string'", Salesforce::Column.to_soql_value('string')
45
+ assert_equal "TRUE", Salesforce::Column.to_soql_value(true)
46
+ assert_equal "FALSE", Salesforce::Column.to_soql_value(false)
47
+ assert_equal "NULL", Salesforce::Column.to_soql_value(nil)
48
+ assert_equal "2012-01-02", Salesforce::Column.to_soql_value(Date.parse('01/02/2012'))
49
+ assert_equal "2012-01-02T18:40:00-08:00", Salesforce::Column.to_soql_value(Time.zone.parse('01/02/2012 06:40PM'))
50
+ assert_equal "1", Salesforce::Column.to_soql_value(1)
51
+ assert_equal "1.0", Salesforce::Column.to_soql_value(1.0)
52
+ assert_equal "1.04", Salesforce::Column.to_soql_value(BigDecimal.new("1.04"))
53
+ assert_equal "'col'", Salesforce::Column.to_soql_value(:col)
54
+ assert_equal "('string1','string2','string3')", Salesforce::Column.to_soql_value(['string1','string2','string3'])
55
+ assert_equal "('string1',1,2012-01-02)", Salesforce::Column.to_soql_value(['string1',1,Date.parse("01/02/2012")])
56
+ end
57
+
58
+ def test_to_csv_value
59
+ assert_equal "string", Salesforce::Column.to_csv_value('string')
60
+ assert_equal "TRUE", Salesforce::Column.to_csv_value(true)
61
+ assert_equal "FALSE", Salesforce::Column.to_csv_value(false)
62
+ assert_equal "", Salesforce::Column.to_csv_value(nil)
63
+ assert_equal "2012-01-02", Salesforce::Column.to_csv_value(Date.parse('01/02/2012'))
64
+ assert_equal "2012-01-02T18:40:00-08:00", Salesforce::Column.to_csv_value(Time.zone.parse('01/02/2012 06:40PM'))
65
+ assert_equal "1", Salesforce::Column.to_csv_value(1)
66
+ assert_equal "1.0", Salesforce::Column.to_csv_value(1.0)
67
+ assert_equal "1.04", Salesforce::Column.to_csv_value(BigDecimal.new("1.04"))
68
+ assert_equal "col", Salesforce::Column.to_csv_value(:col)
69
+ end
70
+
71
+ def test_typecast
72
+ assert_equal "123456789012345", Salesforce::Column.typecast(:id, "123456789012345")
73
+ assert_equal "123456789012345", Salesforce::Column.typecast(:id, "123456789012345123")
74
+ assert_equal "123456789012345", Salesforce::Column.typecast(:reference, "123456789012345")
75
+ assert_equal "123456789012345", Salesforce::Column.typecast(:reference, "123456789012345123")
76
+ assert_equal Date.parse("08/31/2011"), Salesforce::Column.typecast(:date, "2011-08-31")
77
+ assert_equal Date.parse("08/31/2011"), Salesforce::Column.typecast(:date, Date.parse("08/31/2011"))
78
+ assert_equal nil, Salesforce::Column.typecast(:date, nil)
79
+ assert_equal nil, Salesforce::Column.typecast(:date, 'nil')
80
+
81
+ assert_equal Time.zone.parse('01/02/2012 06:40PM'), Salesforce::Column.typecast(:datetime, "2012-01-02T18:40:00-08:00")
82
+ assert_equal Time.zone.parse('01/02/2012 06:40PM'), Salesforce::Column.typecast(:datetime, Time.zone.parse('01/02/2012 06:40PM'))
83
+ assert_equal nil, Salesforce::Column.typecast(:datetime, nil)
84
+ assert_equal Time.now.to_s, Salesforce::Column.typecast(:datetime, 'nil').to_s
85
+
86
+ assert_equal BigDecimal("2012"), Salesforce::Column.typecast(:double, "2012")
87
+ assert_equal BigDecimal("2012.33"), Salesforce::Column.typecast(:double, "2012.33")
88
+ assert_equal BigDecimal("1"), Salesforce::Column.typecast(:double, 1)
89
+ assert_equal BigDecimal("1.2"), Salesforce::Column.typecast(:double, 1.2)
90
+ assert_equal 0, Salesforce::Column.typecast(:double, nil)
91
+ assert_equal 0, Salesforce::Column.typecast(:double, 'nil')
92
+
93
+ assert_equal true, Salesforce::Column.typecast(:boolean, true)
94
+ assert_equal false, Salesforce::Column.typecast(:boolean, false)
95
+ end
96
+
97
+ def test_typecast__using_full_length_ids
98
+ Salesforce::Config.instance.use_full_length_ids
99
+ assert_equal "123456789012345", Salesforce::Column.typecast(:id, "123456789012345")
100
+ assert_equal "123456789012345123", Salesforce::Column.typecast(:id, "123456789012345123")
101
+ assert_equal "123456789012345", Salesforce::Column.typecast(:reference, "123456789012345")
102
+ assert_equal "123456789012345123", Salesforce::Column.typecast(:reference, "123456789012345123")
103
+ end
104
+
105
+ def test_equals
106
+ col1 = Salesforce::Column.new("name" => "Name", "type" => "string", "updateable" => true)
107
+ col2 = Salesforce::Column.new("name" => "Name", "type" => "string", "updateable" => false)
108
+ col3 = Salesforce::Column.new("name" => "Name__c", "type" => "string", "updateable" => true)
109
+
110
+ assert col1 == col2
111
+ assert col2 != col3
112
+ assert col1 != col3
113
+ end
114
+
115
+ end
@@ -0,0 +1,163 @@
1
+ require 'test_helper'
2
+
3
+ class Salesforce::ConfigTest < ActiveSupport::TestCase
4
+
5
+ setup :clean_config
6
+
7
+ def test_configure
8
+ Salesforce.configure do
9
+ username "foo"
10
+ password "bar"
11
+ end
12
+ assert_equal "foo", Salesforce::Config.username
13
+ assert_equal "bar", Salesforce::Config.password
14
+ assert_equal '22.0', Salesforce::Config.api_version
15
+ assert_equal false, Salesforce::Config.use_sandbox?
16
+ assert_equal false, Salesforce::Config.use_full_length_ids?
17
+ end
18
+
19
+ def test_configure__username__password_can_be_blocks
20
+ user_count = 0
21
+ password_count = 4
22
+
23
+ Salesforce.configure do
24
+ username { user_count = user_count + 1 }
25
+ password { password_count = password_count + 1 }
26
+ end
27
+
28
+ assert_equal 1, Salesforce::Config.username
29
+ assert_equal 2, Salesforce::Config.username
30
+ assert_equal 3, Salesforce::Config.username
31
+ assert_equal 4, Salesforce::Config.username
32
+
33
+ assert_equal 5, Salesforce::Config.password
34
+ assert_equal 6, Salesforce::Config.password
35
+ assert_equal 7, Salesforce::Config.password
36
+ assert_equal 8, Salesforce::Config.password
37
+ end
38
+
39
+ def test_config__on_login_failure
40
+ assert_nil Salesforce::Config.on_login_failure
41
+
42
+ @my_stuff = 0
43
+
44
+ Salesforce.configure do
45
+ on_login_failure { @my_stuff = @my_stuff + 1 }
46
+ end
47
+
48
+ Salesforce::Config.on_login_failure
49
+ assert_equal 1, @my_stuff
50
+ Salesforce::Config.on_login_failure
51
+
52
+ assert_equal 2, @my_stuff
53
+ end
54
+
55
+ def test_config__specific_api_version
56
+ Salesforce.configure do
57
+ username "foo"
58
+ password "bar"
59
+ api_version 21
60
+ end
61
+ assert_equal "foo", Salesforce::Config.username
62
+ assert_equal "bar", Salesforce::Config.password
63
+ assert_equal '21.0', Salesforce::Config.api_version
64
+ assert_equal false, Salesforce::Config.use_sandbox?
65
+ end
66
+
67
+ def test_config__sandbox
68
+ Salesforce.configure do
69
+ username "foo"
70
+ password "bar"
71
+ use_sandbox
72
+ end
73
+
74
+ assert_equal "foo", Salesforce::Config.username
75
+ assert_equal "bar", Salesforce::Config.password
76
+ assert Salesforce::Config.use_sandbox?
77
+ end
78
+
79
+ def test_login_url__regular
80
+ Salesforce.configure do
81
+ username "foo"
82
+ password "bar"
83
+ api_version 21
84
+ end
85
+
86
+ assert_equal "https://login.salesforce.com/services/Soap/c/21.0", Salesforce::Config.login_url
87
+ end
88
+
89
+ def test_login_url__sandbox
90
+ Salesforce.configure do
91
+ username "foo"
92
+ password "bar"
93
+ use_sandbox
94
+ end
95
+
96
+ assert_equal "https://test.salesforce.com/services/Soap/c/22.0", Salesforce::Config.login_url
97
+ end
98
+
99
+ def test_passthrough_methods
100
+ config = Salesforce::Config.instance
101
+ config.username "username"
102
+ assert_equal "username", Salesforce::Config.username
103
+ config.password "password"
104
+ assert_equal "password", Salesforce::Config.password
105
+ config.api_version "23"
106
+ assert_equal "23.0", Salesforce::Config.api_version
107
+ config.use_sandbox
108
+ assert Salesforce::Config.use_sandbox?
109
+ assert_equal config.login_url, Salesforce::Config.login_url
110
+ config.session_id "session_id"
111
+ assert_equal "session_id", Salesforce::Config.session_id
112
+
113
+ config.server_instance "na99"
114
+ assert_equal "na99", Salesforce::Config.server_instance
115
+
116
+ config.user_id "user_id"
117
+ assert_equal "user_id", Salesforce::Config.user_id
118
+ assert_equal config.server_url, Salesforce::Config.server_url
119
+ end
120
+
121
+ def test_server_url__and_server_host
122
+ config = Salesforce::Config.instance
123
+ config.server_instance "sa2"
124
+ config.api_version 99
125
+ assert_equal "https://sa2.salesforce.com/services/data/v99.0", Salesforce::Config.server_url
126
+ assert_equal "https://sa2.salesforce.com", Salesforce::Config.server_host
127
+ end
128
+
129
+ def test_configured
130
+ config = Salesforce::Config.instance
131
+ assert_equal false, config.configured?
132
+
133
+ config.username "username"
134
+ assert_equal false, config.configured?
135
+
136
+ config.password "password"
137
+ assert config.configured?
138
+
139
+ config.username nil
140
+ assert_equal false, config.configured?
141
+ end
142
+
143
+ def test_soap_enterprise_namespace
144
+ assert_equal "urn:enterprise.soap.sforce.com", Salesforce::Config.soap_enterprise_namespace
145
+ assert_equal "urn:enterprise.soap.sforce.com", Salesforce::Config.instance.soap_enterprise_namespace
146
+ end
147
+
148
+ def test_use_full_length_ids?
149
+
150
+ Salesforce.configure do
151
+ use_full_length_ids
152
+ end
153
+
154
+ assert Salesforce::Config.use_full_length_ids?
155
+ end
156
+
157
+ private
158
+
159
+ def clean_config
160
+ Salesforce::Config.instance_variable_set(:@instance, nil)
161
+ end
162
+
163
+ end