tsig_api 1.0.5
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 +7 -0
- data/.gitignore +18 -0
- data/MIT-LICENSE +20 -0
- data/README.md +4 -0
- data/Rakefile +23 -0
- data/init.rb +4 -0
- data/install.rb +1 -0
- data/lib/tsig_api.rb +30 -0
- data/lib/tsig_api/authorize.rb +15 -0
- data/lib/tsig_api/base.rb +108 -0
- data/lib/tsig_api/carrier.rb +16 -0
- data/lib/tsig_api/contact.rb +79 -0
- data/lib/tsig_api/group.rb +15 -0
- data/lib/tsig_api/message.rb +116 -0
- data/lib/tsig_api/remote_actions.rb +71 -0
- data/lib/tsig_api/team.rb +79 -0
- data/test/test_helper.rb +18 -0
- data/test/tsig_api_authorize_test.rb +71 -0
- data/test/tsig_api_carrier_test.rb +124 -0
- data/test/tsig_api_contact_test.rb +148 -0
- data/test/tsig_api_group_test.rb +90 -0
- data/test/tsig_api_message_test.rb +167 -0
- data/test/tsig_api_team_test.rb +182 -0
- data/test/tsig_api_test.rb +37 -0
- data/tsig_api.gemspec +21 -0
- data/tsig_api.yml +13 -0
- data/uninstall.rb +1 -0
- metadata +79 -0
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'net/https'
|
3
|
+
|
4
|
+
module TsigApi
|
5
|
+
module RemoteActions
|
6
|
+
|
7
|
+
class Response
|
8
|
+
attr_accessor :status
|
9
|
+
attr_accessor :body
|
10
|
+
attr_accessor :raw_response
|
11
|
+
|
12
|
+
def initialize(ret_val, resp)
|
13
|
+
self.status = ret_val
|
14
|
+
self.raw_response = resp
|
15
|
+
self.body = resp.body
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
class Request
|
20
|
+
attr_accessor :headers
|
21
|
+
attr_accessor :proxy
|
22
|
+
attr_accessor :proxy_port
|
23
|
+
attr_accessor :body
|
24
|
+
attr_accessor :http_process
|
25
|
+
attr_accessor :url
|
26
|
+
|
27
|
+
def initialize(options={})
|
28
|
+
default_options = {
|
29
|
+
:body => nil,
|
30
|
+
:headers => {'Content-Type' => 'application/xml', 'Accept' => 'application/xml'},
|
31
|
+
:proxy => nil,
|
32
|
+
:proxy_port => nil,
|
33
|
+
:url => '/api/parser'
|
34
|
+
}
|
35
|
+
default_options.merge!(options)
|
36
|
+
|
37
|
+
self.proxy = default_options[:proxy]
|
38
|
+
self.proxy_port = default_options[:proxy_port]
|
39
|
+
self.headers = default_options[:headers]
|
40
|
+
self.body = default_options[:body]
|
41
|
+
self.url = default_options[:url]
|
42
|
+
|
43
|
+
self.http_process = Net::HTTP.new( TsigApi::TXTSIG_HOST, TsigApi::TXTSIG_PORT, self.proxy, self.proxy_port )
|
44
|
+
|
45
|
+
if TsigApi::TXTSIG_PORT.to_i == 443
|
46
|
+
self.http_process.use_ssl = true
|
47
|
+
|
48
|
+
# We know we're under SSL, but motherfucking openssl won't
|
49
|
+
# stop complaining about our cert since we upgraded to
|
50
|
+
# higher SHA2 hashing
|
51
|
+
self.http_process.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def send_request
|
56
|
+
http_process.start
|
57
|
+
resp = http_process.post(self.url, self.body, self.headers)
|
58
|
+
ret_val = false
|
59
|
+
case resp
|
60
|
+
when Net::HTTPSuccess, Net::HTTPRedirection
|
61
|
+
ret_val = true
|
62
|
+
else
|
63
|
+
ret_val = false
|
64
|
+
end
|
65
|
+
return TsigApi::RemoteActions::Response.new(ret_val, resp)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'tsig_api/base'
|
2
|
+
|
3
|
+
module TsigApi
|
4
|
+
class Team < TsigApi::Base
|
5
|
+
self.remote_type = :team
|
6
|
+
|
7
|
+
# this might be somewhat redundant to query(:all_teams => true), but
|
8
|
+
# it seems that that will only return the ids, not id => name
|
9
|
+
#
|
10
|
+
def list
|
11
|
+
xml = group_id_node
|
12
|
+
TsigApi::RemoteActions::Request.new(:body => request_xml(:list, xml))
|
13
|
+
end
|
14
|
+
|
15
|
+
def create(options = {:name => nil, :add_contacts => nil})
|
16
|
+
contact_xml = ""
|
17
|
+
if options[:add_contacts]
|
18
|
+
contact_xml += "<param name='add_contacts'>"
|
19
|
+
options[:add_contacts].each do |ac|
|
20
|
+
contact_xml += "<contact>#{ac}</contact>"
|
21
|
+
end
|
22
|
+
contact_xml += "</param>"
|
23
|
+
end
|
24
|
+
xml = "
|
25
|
+
#{group_id_node}
|
26
|
+
#{param_node('team_name', options[:name])}
|
27
|
+
#{contact_xml}
|
28
|
+
"
|
29
|
+
TsigApi::RemoteActions::Request.new(:body => request_xml(:create, xml))
|
30
|
+
end
|
31
|
+
|
32
|
+
def query(options = {:name => nil, :team_id => nil, :all_teams => nil})
|
33
|
+
xml = group_id_node
|
34
|
+
if options[:team_id]
|
35
|
+
xml += "<param name='team_id'>#{options[:team_id]}</param>"
|
36
|
+
elsif options[:name]
|
37
|
+
xml += "<param name='team_name'>#{options[:name]}</param>"
|
38
|
+
elsif options[:all_teams]
|
39
|
+
xml += "<param name='all_teams'>1</param>"
|
40
|
+
end
|
41
|
+
TsigApi::RemoteActions::Request.new(:body => request_xml(:query, xml))
|
42
|
+
end
|
43
|
+
|
44
|
+
def update(team_id, options = {:name => nil, :add_contacts => nil, :del_contacts => nil})
|
45
|
+
xml = group_id_node
|
46
|
+
xml += param_node('team_id', team_id)
|
47
|
+
xml += param_node('team_name', options[:name]) if options[:name]
|
48
|
+
if options[:add_contacts]
|
49
|
+
add_contact_xml = "<param name='add_contacts'>"
|
50
|
+
options[:add_contacts].each do |ac|
|
51
|
+
add_contact_xml += "<contact>#{ac}</contact>"
|
52
|
+
end
|
53
|
+
add_contact_xml += "</param>"
|
54
|
+
xml += add_contact_xml
|
55
|
+
end
|
56
|
+
if options[:del_contacts]
|
57
|
+
del_contact_xml = "<param name='del_contacts'>"
|
58
|
+
options[:del_contacts].each do |dc|
|
59
|
+
del_contact_xml += "<contact>#{dc}</contact>"
|
60
|
+
end
|
61
|
+
del_contact_xml += "</param>"
|
62
|
+
xml += del_contact_xml
|
63
|
+
end
|
64
|
+
TsigApi::RemoteActions::Request.new(:body => request_xml(:update, xml))
|
65
|
+
end
|
66
|
+
|
67
|
+
def delete(options = {:team_id => nil, :name => nil})
|
68
|
+
xml = group_id_node
|
69
|
+
|
70
|
+
if options[:team_id]
|
71
|
+
xml+= param_node('team_id', options[:team_id])
|
72
|
+
elsif options[:name]
|
73
|
+
xml+= "<param name='team_id'></param>#{param_node('team_name', options[:name])}"
|
74
|
+
end
|
75
|
+
TsigApi::RemoteActions::Request.new(:body => request_xml(:delete, xml))
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
|
2
|
+
ENV["RAILS_ENV"] = "test"
|
3
|
+
require File.dirname(__FILE__) + '/../../../../config/environment'
|
4
|
+
require 'test_help'
|
5
|
+
require 'rexml/document'
|
6
|
+
require File.dirname(__FILE__) + '/../lib/tsig_api'
|
7
|
+
|
8
|
+
class ActiveSupport::TestCase
|
9
|
+
require 'rr'
|
10
|
+
include RR::Adapters::TestUnit
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
# dummy: lets me rename a test as xtest to prevent it from running
|
15
|
+
def xtest(*args)
|
16
|
+
file = File.basename(caller.first)
|
17
|
+
puts "Disabled test [#{file}]: #{args.first}"
|
18
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '/test_helper')
|
2
|
+
|
3
|
+
class TsigApiAuthorizeTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
response_xml = <<-EOS
|
7
|
+
<?xml version='1.0'?>
|
8
|
+
<txtsig_response version="1.0">
|
9
|
+
<content type="response">
|
10
|
+
<item type="user">
|
11
|
+
<element name='success'>true</element>
|
12
|
+
<element name='client_id'>1234</element>
|
13
|
+
<element name='api_password'>abcde01234abcde01234abcde01234ab</element>
|
14
|
+
</item>
|
15
|
+
</content>
|
16
|
+
</txtsig_response>
|
17
|
+
EOS
|
18
|
+
|
19
|
+
error_xml = <<-EOS
|
20
|
+
<?xml version='1.0'?>
|
21
|
+
<txtsig_response version="1.0">
|
22
|
+
<content type="error">
|
23
|
+
<item type="error_description">
|
24
|
+
<element name="error_code">10</element>
|
25
|
+
<element name="error_text"><![CDATA[General Fault]]></element>
|
26
|
+
</item>
|
27
|
+
</content>
|
28
|
+
</txtsig_response>
|
29
|
+
EOS
|
30
|
+
|
31
|
+
net_response = stub("net_response")
|
32
|
+
net_response.body{response_xml}
|
33
|
+
net_error = stub("net_error")
|
34
|
+
net_error.body{error_xml}
|
35
|
+
|
36
|
+
@valid_response = TsigApi::RemoteActions::Response.new(true, net_response)
|
37
|
+
stub(@valid_response).body{response_xml}
|
38
|
+
@error_response = TsigApi::RemoteActions::Response.new(true, net_error)
|
39
|
+
stub(@error_response).body{error_xml}
|
40
|
+
|
41
|
+
TsigApi::Base.establish_connection(1234, 'joe', 'clear-text-pass')
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_should_initialize
|
45
|
+
a = TsigApi::Authorize.new
|
46
|
+
assert_equal a.class, TsigApi::Authorize
|
47
|
+
assert_equal a.class.remote_type, :authorize
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_should_build_query_xml
|
51
|
+
a = TsigApi::Authorize.new
|
52
|
+
request = a.query
|
53
|
+
assert request.body.include?('<api_username><![CDATA[joe')
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_should_send_request_and_parse_response
|
57
|
+
a = TsigApi::Authorize.new
|
58
|
+
request = a.query
|
59
|
+
stub(request).send_request{@valid_response}
|
60
|
+
content_type, response_hash = a.parse_response(request.send_request)
|
61
|
+
assert_equal content_type, "response"
|
62
|
+
assert_equal response_hash["client_id"], '1234'
|
63
|
+
assert_equal response_hash["api_password"], 'abcde01234abcde01234abcde01234ab'
|
64
|
+
# now we fake an error response
|
65
|
+
stub(request).send_request{@error_response}
|
66
|
+
content_type, response_hash = a.parse_response(request.send_request)
|
67
|
+
assert_equal content_type, "error"
|
68
|
+
assert_equal response_hash["error_code"], "10"
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '/test_helper')
|
2
|
+
|
3
|
+
class TsigApiCarrierTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
response_xml = <<-EOS
|
7
|
+
<?xml version='1.0'?>
|
8
|
+
<txtsig_response version="1.0">
|
9
|
+
<content type="response">
|
10
|
+
<item type="carriers">
|
11
|
+
<element name='cingular'>
|
12
|
+
Cingular
|
13
|
+
</element>
|
14
|
+
<element name='att'>
|
15
|
+
AT&T
|
16
|
+
</element>
|
17
|
+
<element name='alltel'>
|
18
|
+
Alltel
|
19
|
+
</element>
|
20
|
+
<element name='verizon'>
|
21
|
+
Verizon
|
22
|
+
</element>
|
23
|
+
<element name='nextel'>
|
24
|
+
Nextel
|
25
|
+
</element>
|
26
|
+
<element name='sprint'>
|
27
|
+
Sprint
|
28
|
+
</element>
|
29
|
+
<element name='tmobile'>
|
30
|
+
T-Mobile
|
31
|
+
</element>
|
32
|
+
<element name='boostmobile'>
|
33
|
+
Boost Mobile
|
34
|
+
</element>
|
35
|
+
<element name='virginmobile'>
|
36
|
+
Virgin Mobile
|
37
|
+
</element>
|
38
|
+
<element name='uscellular'>
|
39
|
+
US Cellular
|
40
|
+
</element>
|
41
|
+
<element name='suncom'>
|
42
|
+
SunCom
|
43
|
+
</element>
|
44
|
+
<element name='centennial'>
|
45
|
+
Centennial Wireless
|
46
|
+
</element>
|
47
|
+
<element name='fido_ca'>
|
48
|
+
Fido (Canada)
|
49
|
+
</element>
|
50
|
+
<element name='bellmobility_ca'>
|
51
|
+
Bell Mobility (Canada)
|
52
|
+
</element>
|
53
|
+
<element name='rogers_ca'>
|
54
|
+
Rogers (Canada)
|
55
|
+
</element>
|
56
|
+
<element name='virginmobile_ca'>
|
57
|
+
Virgin Mobile (Canada)
|
58
|
+
</element>
|
59
|
+
<element name='telus_ca'>
|
60
|
+
Telus (Canada)
|
61
|
+
</element>
|
62
|
+
<element name='cellularone'>
|
63
|
+
Cellular One
|
64
|
+
</element>
|
65
|
+
</item>
|
66
|
+
</content>
|
67
|
+
</txtsig_response>
|
68
|
+
EOS
|
69
|
+
|
70
|
+
error_xml = <<-EOS
|
71
|
+
<?xml version='1.0'?>
|
72
|
+
<txtsig_response version="1.0">
|
73
|
+
<content type="error">
|
74
|
+
<item type="error_description">
|
75
|
+
<element name="error_code">10</element>
|
76
|
+
<element name="error_text"><![CDATA[General Fault]]></element>
|
77
|
+
</item>
|
78
|
+
</content>
|
79
|
+
</txtsig_response>
|
80
|
+
EOS
|
81
|
+
|
82
|
+
net_response = stub("net_response")
|
83
|
+
net_response.body{response_xml}
|
84
|
+
net_error = stub("net_error")
|
85
|
+
net_error.body{error_xml}
|
86
|
+
|
87
|
+
@valid_response = TsigApi::RemoteActions::Response.new(true, net_response)
|
88
|
+
stub(@valid_response).body{response_xml}
|
89
|
+
@error_response = TsigApi::RemoteActions::Response.new(true, net_error)
|
90
|
+
stub(@error_response).body{error_xml}
|
91
|
+
|
92
|
+
TsigApi::Base.establish_connection(1234, 'joe', '123456789012345678901234567890ab')
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_should_initialize_carrier
|
96
|
+
c = TsigApi::Carrier.new("Group A")
|
97
|
+
assert_equal c.class, TsigApi::Carrier
|
98
|
+
assert_equal c.class.remote_type, :carriers
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_should_build_query_xml
|
102
|
+
c = TsigApi::Carrier.new("Group A")
|
103
|
+
request = c.query
|
104
|
+
assert request.body.include?('<action type="list_carriers">')
|
105
|
+
assert request.body.include?('<client_id><![CDATA[1234]]></client_id>')
|
106
|
+
assert request.body.include?('<api_username><![CDATA[joe]]></api_username>')
|
107
|
+
assert request.body.include?('<api_password><![CDATA[123456789012345678901234567890ab]]></api_password>')
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_should_send_request_and_parse_response
|
111
|
+
c = TsigApi::Carrier.new("Group A")
|
112
|
+
request = c.query
|
113
|
+
stub(request).send_request{@valid_response}
|
114
|
+
content_type, response_hash = c.parse_response(request.send_request)
|
115
|
+
assert_equal content_type, "response"
|
116
|
+
assert_equal response_hash["cellularone"], "Cellular One"
|
117
|
+
# now we fake an error response
|
118
|
+
stub(request).send_request{@error_response}
|
119
|
+
content_type, response_hash = c.parse_response(request.send_request)
|
120
|
+
assert_equal content_type, "error"
|
121
|
+
assert_equal response_hash["error_code"], "10"
|
122
|
+
end
|
123
|
+
|
124
|
+
end
|
@@ -0,0 +1,148 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '/test_helper')
|
2
|
+
|
3
|
+
class TsigApiContactTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
|
7
|
+
@tsig_contact = TsigApi::Contact.new("Group A")
|
8
|
+
@valid_contact = {:first_name => "John", :last_name => "Test", :cell_carrier => "verizon", :cell_number => "999-999-9999", :receive_messages => true}
|
9
|
+
|
10
|
+
create_response_xml = <<-EOS
|
11
|
+
<?xml version='1.0'?>
|
12
|
+
<txtsig_response version="1.0">
|
13
|
+
<content type="response">
|
14
|
+
<item type="contact">
|
15
|
+
<element name='success'>1</element>
|
16
|
+
<element name='contact_id'>15</element>
|
17
|
+
</item>
|
18
|
+
</content>
|
19
|
+
</txtsig_response>
|
20
|
+
EOS
|
21
|
+
|
22
|
+
query_response_xml = <<-EOS
|
23
|
+
<?xml version='1.0'?>
|
24
|
+
<txtsig_response version="1.0">
|
25
|
+
<content type="response">
|
26
|
+
<item type="contact">
|
27
|
+
<element name='success'>1</element>
|
28
|
+
<element name='contacts'>
|
29
|
+
<contact_id>15</contact_id>
|
30
|
+
</element>
|
31
|
+
</item>
|
32
|
+
</content>
|
33
|
+
</txtsig_response>
|
34
|
+
EOS
|
35
|
+
|
36
|
+
update_response_xml = <<-EOS
|
37
|
+
<?xml version='1.0'?>
|
38
|
+
<txtsig_response version="1.0">
|
39
|
+
<content type="response">
|
40
|
+
<item type="contact">
|
41
|
+
<element name='success'>1</element>
|
42
|
+
<element name='contact_id'>15</element>
|
43
|
+
</item>
|
44
|
+
</content>
|
45
|
+
</txtsig_response>
|
46
|
+
EOS
|
47
|
+
|
48
|
+
delete_response_xml = <<-EOS
|
49
|
+
<?xml version='1.0'?>
|
50
|
+
<txtsig_response version="1.0">
|
51
|
+
<content type="response">
|
52
|
+
<item type="contact">
|
53
|
+
<element name='success'>1</element>
|
54
|
+
</item>
|
55
|
+
</content>
|
56
|
+
</txtsig_response>
|
57
|
+
EOS
|
58
|
+
|
59
|
+
error_xml = <<-EOS
|
60
|
+
<?xml version='1.0'?>
|
61
|
+
<txtsig_response version="1.0">
|
62
|
+
<content type="error">
|
63
|
+
<item type="error_description">
|
64
|
+
<element name="error_code">10</element>
|
65
|
+
<element name="error_text"><![CDATA[General Fault]]></element>
|
66
|
+
</item>
|
67
|
+
</content>
|
68
|
+
</txtsig_response>
|
69
|
+
EOS
|
70
|
+
|
71
|
+
create_response = stub("create_response")
|
72
|
+
create_response.body{create_response_xml}
|
73
|
+
query_response = stub("query_response")
|
74
|
+
query_response.body{query_response_xml}
|
75
|
+
update_response = stub("update_response")
|
76
|
+
update_response.body{update_response_xml}
|
77
|
+
delete_response = stub("delete_response")
|
78
|
+
delete_response.body{delete_response_xml}
|
79
|
+
error_response = stub("net_error")
|
80
|
+
error_response.body{error_xml}
|
81
|
+
|
82
|
+
@valid_create_response = TsigApi::RemoteActions::Response.new(true, create_response)
|
83
|
+
stub(@valid_create_response).body{create_response_xml}
|
84
|
+
@valid_query_response = TsigApi::RemoteActions::Response.new(true, query_response)
|
85
|
+
stub(@valid_query_response).body{query_response_xml}
|
86
|
+
@valid_update_response = TsigApi::RemoteActions::Response.new(true, update_response)
|
87
|
+
stub(@valid_update_response).body{update_response_xml}
|
88
|
+
@valid_delete_response = TsigApi::RemoteActions::Response.new(true, delete_response)
|
89
|
+
stub(@valid_delete_response).body{delete_response_xml}
|
90
|
+
@error_response = TsigApi::RemoteActions::Response.new(true, error_response)
|
91
|
+
stub(@error_response).body{error_xml}
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_should_initialize_contact
|
95
|
+
assert_equal @tsig_contact.class, TsigApi::Contact
|
96
|
+
assert_equal @tsig_contact.class.remote_type, :contact
|
97
|
+
end
|
98
|
+
|
99
|
+
def test_should_build_create_xml
|
100
|
+
contact_hash = @valid_contact.merge({:add_teams => ['Team A', 'Team B']})
|
101
|
+
request = @tsig_contact.create(contact_hash)
|
102
|
+
doc = REXML::Document.new(request.body)
|
103
|
+
assert_equal "999-999-9999", REXML::XPath.first(doc, "//param[@name='cell_number']").get_text.to_s
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_should_send_create_request_and_parse_response
|
107
|
+
contact_hash = @valid_contact.merge({:add_teams => ['Team A', 'Team B']})
|
108
|
+
request = @tsig_contact.create(contact_hash)
|
109
|
+
stub(request).send_request{@valid_create_response}
|
110
|
+
content_type, response_hash = @tsig_contact.parse_response(request.send_request)
|
111
|
+
assert_equal content_type, "response"
|
112
|
+
assert_equal response_hash["success"], "1"
|
113
|
+
assert_equal response_hash["contact_id"], "15"
|
114
|
+
# now we fake an error response
|
115
|
+
stub(request).send_request{@error_response}
|
116
|
+
content_type, response_hash = @tsig_contact.parse_response(request.send_request)
|
117
|
+
assert_equal content_type, "error"
|
118
|
+
assert_equal response_hash["error_code"], "10"
|
119
|
+
end
|
120
|
+
|
121
|
+
def test_should_send_query_and_parse_response
|
122
|
+
request = @tsig_contact.query(:first_name => "John", :last_name => "Test")
|
123
|
+
stub(request).send_request{@valid_query_response}
|
124
|
+
content_type, response_hash = @tsig_contact.parse_response(request.send_request)
|
125
|
+
assert_equal "response", content_type
|
126
|
+
assert_equal response_hash["success"], "1"
|
127
|
+
assert_equal response_hash["contacts"], ["15"]
|
128
|
+
end
|
129
|
+
|
130
|
+
def test_should_send_delete_and_parse_response
|
131
|
+
request = @tsig_contact.delete(15)
|
132
|
+
stub(request).send_request{@valid_delete_response}
|
133
|
+
content_type, response_hash = @tsig_contact.parse_response(request.send_request)
|
134
|
+
assert_equal "response", content_type
|
135
|
+
assert_equal response_hash["success"], "1"
|
136
|
+
end
|
137
|
+
|
138
|
+
def test_should_send_update_request_and_parse_response
|
139
|
+
contact_hash = @valid_contact.merge({:add_teams => ['Team A'], :del_teams => ['Team B']})
|
140
|
+
request = @tsig_contact.update(15, contact_hash)
|
141
|
+
stub(request).send_request{@valid_update_response}
|
142
|
+
content_type, response_hash = @tsig_contact.parse_response(request.send_request)
|
143
|
+
assert_equal content_type, "response"
|
144
|
+
assert_equal response_hash["success"], "1"
|
145
|
+
assert_equal response_hash["contact_id"], "15"
|
146
|
+
end
|
147
|
+
|
148
|
+
end
|