sterling_api 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/doc/admin.wsdl ADDED
@@ -0,0 +1,57 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <wsdl:definitions
3
+ targetNamespace="http://www.cpscreen.com/schemas"
4
+ xmlns:tns="http://www.cpscreen.com/schemas"
5
+ xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
6
+ xmlns="http://schemas.xmlsoap.org/wsdl/"
7
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
8
+ xmlns:xs="http://www.w3.org/2001/XMLSchema">
9
+ <wsdl:types>
10
+ <xs:schema elementFormDefault="qualified" targetNamespace="http://www.cpscreen.com/schemas">
11
+ <xs:include schemaLocation="AdminRequest.xsd"/>
12
+ <xs:include schemaLocation="AdminResponse.xsd"/>
13
+ </xs:schema>
14
+ </wsdl:types>
15
+ <wsdl:message name="AdminRequestMessage">
16
+ <wsdl:part name="Message" element="tns:ChoicePointAdminRequest"/>
17
+ </wsdl:message>
18
+ <wsdl:message name="AdminResponseMessage">
19
+ <wsdl:part name="Message" element="tns:ChoicePointAdminResponse"/>
20
+ </wsdl:message>
21
+ <wsdl:portType name="AdminInterface">
22
+ <wsdl:operation name="ChangePasswords">
23
+ <wsdl:input message="tns:AdminRequestMessage"/>
24
+ <wsdl:output message="tns:AdminResponseMessage"/>
25
+ </wsdl:operation>
26
+ <wsdl:operation name="GetPackages">
27
+ <wsdl:input message="tns:AdminRequestMessage"/>
28
+ <wsdl:output message="tns:AdminResponseMessage"/>
29
+ </wsdl:operation>
30
+ </wsdl:portType>
31
+ <wsdl:binding name="AdminSoapHttpBinding" type="tns:AdminInterface">
32
+ <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
33
+ <wsdl:operation name="ChangePasswords">
34
+ <soap:operation soapAction="http://www.cpscreen.com/pub/xchange/admin/ChangePasswords"/>
35
+ <wsdl:input>
36
+ <soap:body use="literal"/>
37
+ </wsdl:input>
38
+ <wsdl:output>
39
+ <soap:body use="literal"/>
40
+ </wsdl:output>
41
+ </wsdl:operation>
42
+ <wsdl:operation name="GetPackages">
43
+ <soap:operation soapAction="http://www.cpscreen.com/pub/xchange/admin/GetPackages"/>
44
+ <wsdl:input>
45
+ <soap:body use="literal"/>
46
+ </wsdl:input>
47
+ <wsdl:output>
48
+ <soap:body use="literal"/>
49
+ </wsdl:output>
50
+ </wsdl:operation>
51
+ </wsdl:binding>
52
+ <wsdl:service name="AdminService">
53
+ <wsdl:port name="AdminEndpoint" binding="tns:AdminSoapHttpBinding">
54
+ <soap:address location="https://www.cpscreen.com/pub/xchange/admin"/>
55
+ </wsdl:port>
56
+ </wsdl:service>
57
+ </wsdl:definitions>
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ # Include hook code here
data/install.rb ADDED
@@ -0,0 +1 @@
1
+ # Install hook code here
@@ -0,0 +1,339 @@
1
+
2
+ require 'nokogiri'
3
+
4
+ module SterlingApi
5
+
6
+ class BackgroundCheck
7
+ extend XmlHelper
8
+
9
+ def self.all_ids(mode)
10
+ mode.to_s =~ /prod/ ? [25212, 25213, 25214, 25750, 25751, 25752, 25753, 25911] : [19432, 19439, 19440, 19442, 19443, 19444, 19445, 19437]
11
+ end
12
+
13
+ def self.mvr_ids(mode)
14
+ mode.to_s =~ /prod/ ? [25214, 25750] : [19440, 19442]
15
+ end
16
+
17
+ #
18
+ # PRI-FAM:
19
+ # PRI-FFM:
20
+ # PRI-FIM:
21
+ # PRINCRF:
22
+ # PRINCRP:
23
+ # PersonalData/PersonName
24
+ # PersonalData/PostalAddress
25
+ #
26
+ # SSNV:
27
+ # PersonalData/DemographicDetail
28
+ #
29
+ # MVR:
30
+ # PersonalData/Licenses
31
+ #
32
+
33
+
34
+ # combos
35
+ # 19432 = Package 1 = PRI-FIM, PRINCRF, PRINCRP, SSNV
36
+ # 19439 = Package 2 = PRI-FAM, PRINCRP, SSNV
37
+ # 19440 = Package 3 = MVR, PRINCRP, SSNV
38
+ #
39
+ # ala carte
40
+ # 19442 = Package 5 = MVR only
41
+ # 19443 = Package 6 = PRINCRP
42
+ # 19444 = Package 7 = PRI-FFM, SSNV
43
+ # 19445 = Package 9 = PRI-FFM
44
+ # 19437 = Package 14 = PRI-FAM
45
+ #
46
+ #
47
+ # 2011-02-22:
48
+ # Package 1 can logically be ordered with 5,9 & 14
49
+ # Package 2 can logically be ordered with 5 & 9
50
+ # Package 3 can logically be ordered with 9 & 14
51
+ # Any combination of 5,6,7,9 & 14 could be ordered.
52
+ #
53
+ #
54
+ def self.for_package(package_id, options)
55
+ package_id = package_id.to_i
56
+
57
+ background_check = self.new(options.merge(:package_id => package_id))
58
+
59
+ background_check.add_ssnv # required for one-step orders
60
+
61
+ background_check.add_name_and_address if all_ids(options[:mode]).include?(package_id)
62
+ background_check.add_mvr if mvr_ids(options[:mode]).include?(package_id)
63
+
64
+ background_check
65
+ end
66
+
67
+ def initialize(options={})
68
+ @options = options
69
+ @xml = create_root
70
+ self
71
+ end
72
+
73
+ # <BackgroundCheck
74
+ # userId="#{@order_as_user_id}"
75
+ # account="#{@account}"
76
+ # password="#{@password}">
77
+ # <BackgroundSearchPackage>
78
+ # <PersonalData>
79
+ # <ContactMethod>
80
+ # <InternetEmailAddress></InternetEmailAddress>
81
+ # </ContactMethod>
82
+ # </PersonalData>
83
+ # <Screenings>
84
+ # <PackageID>#{@package_id}</PackageID>
85
+ # <UserArea>
86
+ # <UserAreaContent>
87
+ # <PositionTitle>#{@position_applied_for}</PositionTitle>
88
+ # </UserAreaContent>
89
+ # </UserArea>
90
+ # (if non-MVR)
91
+ # <Screening type="abuse">
92
+ # (if MVR)
93
+ # <Screening type="license", qualifer="mvPersonal">
94
+ # </Screenings>
95
+ # </BackgroundSearchPackage>
96
+ # <UserArea>
97
+ # <UserAreaContent>
98
+ # <OnlineAddress>
99
+ # <InternetWebAddress>#{AppSettings[:sterling_return_url]}</InternetWebAddress>
100
+ # </OnlineAddress>
101
+ # <ReturnOrderNumber>Y</ReturnOrderNumber>
102
+ # <ResultStatusReturn>
103
+ # <RedStatusReturn>Ineligble</RedStatusReturn>
104
+ # <YellowStatusReturn>Decisional</YellowStatusReturn>
105
+ # <GreenStatusReturn>Eligible</GreenStatusReturn>
106
+ # </ResultStatusReturn>
107
+ # </UserAreaContent>
108
+ # </UserArea>
109
+ # </BackgroundCheck>
110
+ #
111
+ def create_root
112
+ builder = Nokogiri::XML::Builder.new do |xml|
113
+ xml.BackgroundCheck(
114
+ :userId => @options[:order_as_user_id],
115
+ :account => @options[:account],
116
+ :password => @options[:password]
117
+ ){
118
+ xml.BackgroundSearchPackage{
119
+ xml.PersonalData{
120
+ xml.ContactMethod{
121
+ xml.InternetEmailAddress @options[:contact_email]
122
+ }
123
+ }
124
+ xml.Screenings{
125
+ xml.PackageID @options[:package_id]
126
+ xml.UserArea {
127
+ xml.userAreaContent{
128
+ xml.PositionTitle @options[:position_applied_for]
129
+ }
130
+ }
131
+ if MVR_IDS.include?(@options[:package_id])
132
+ xml.Screening(:type => "license", :qualifier => "mvPersonal")
133
+ else
134
+ xml.Screening(:type => "abuse")
135
+ end
136
+ }
137
+ }
138
+ xml.UserArea{
139
+ xml.UserAreaContent{
140
+ xml.OnlineAddress{
141
+ xml.InternetWebAddress AppSettings[:sterling_return_url]
142
+ }
143
+ xml.ReturnOrderNumber "Y"
144
+ xml.ResultStatusReturn {
145
+ xml.RedStatusReturn "Ineligible"
146
+ xml.YellowStatusReturn "Decisional"
147
+ xml.GreenStatusReturn "Eligible"
148
+ }
149
+ }
150
+ }
151
+ }
152
+ end
153
+
154
+ builder.to_xml
155
+ end
156
+
157
+ # Contains 0*
158
+ # //BackgroundCheck/BackgroundSearchPackage/Screenings/Screening/SearchLicense
159
+ #
160
+ # options should contain:
161
+ # licenses: an array of license info hashes
162
+ #
163
+ # license info hash:
164
+ # :license_number AN 1..20
165
+ # :license_region 2 char State/Region
166
+ #
167
+ def add_mvr
168
+ builder = Nokogiri::XML::Builder.with(screening_node) do |xml|
169
+ @options[:licenses].each do |hash|
170
+ # xml.SearchLicense(:validFrom => ymd(hash[:valid_from]), :validTo => ymd(hash[:valid_to])) {
171
+ xml.Region hash[:license_region] # State
172
+ xml.SearchLicense {
173
+ xml.License {
174
+ xml.LicenseNumber(hash[:license_number])
175
+ xml.LicenseName 'mvr'
176
+ xml.LicenseDescription 'mvr'
177
+ xml.LicensingAgency
178
+ }
179
+ }
180
+ end
181
+ end
182
+
183
+ @xml = builder.to_xml
184
+ end
185
+
186
+ #
187
+ # expects an array of :person_names in @options
188
+ # expects an array of :postal_addresses in @options
189
+ #
190
+ # <PersonName type="subject|alias">
191
+ # <GivenName>Kevin</GivenName>
192
+ # <MiddleName>Fred</MiddleName>
193
+ # <FamilyName>Test</FamilyName>
194
+ # </PersonName>
195
+ # <PostalAddress type="current|prior" validFrom="2009-01-01">
196
+ # <Municipality>Madison</Municipality>
197
+ # <Region>WI</Region>
198
+ # <PostalCode>53711</PostalCode>
199
+ # <CountryCode>US</CountryCode>
200
+ # <DeliveryAddress>
201
+ # <AddressLine>1234 Main Rd</AddressLine>
202
+ # </DeliveryAddress>
203
+ # </PostalAddress>
204
+ def add_name_and_address
205
+ builder = Nokogiri::XML::Builder.with(personal_data_node) do |xml|
206
+ @options[:person_names].each do |hash|
207
+ xml.PersonName(:type => hash[:type]){
208
+ xml.GivenName hash[:first_name]
209
+ xml.MiddleName hash[:middle_name]
210
+ xml.FamilyName hash[:last_name]
211
+ }
212
+ end if @options[:person_names]
213
+
214
+ @options[:postal_addresses].each do |hash|
215
+ xml.PostalAddress(:type => hash[:type], :validFrom => ymd(hash[:valid_from]), :validTo => ymd(hash[:valid_to])){
216
+ xml.Municipality hash[:municipality]
217
+ xml.Region hash[:region]
218
+ xml.PostalCode hash[:postal_code]
219
+ xml.CountryCode hash[:country_code]
220
+ xml.DeliveryAddress{
221
+ xml.AddressLine hash[:address1]
222
+ xml.AddressLine(hash[:address2]) if hash[:address2].present?
223
+ }
224
+ }
225
+ end if @options[:postal_addresses]
226
+ end
227
+
228
+ @xml = builder.to_xml
229
+ end
230
+
231
+ # <DemographicDetail>
232
+ # <GovernmentId issuingAuthority="SSN">123456789</GovernmentId>
233
+ # <DateOfBirth>1950-01-01</DateOfBirth>
234
+ # </DemographicDetail>
235
+ #
236
+ def add_ssnv
237
+ builder = Nokogiri::XML::Builder.with(personal_data_node) do |xml|
238
+ xml.DemographicDetail{
239
+ xml.GovernmentId(@options[:ssn], :issuingAuthority => 'SSN')
240
+ xml.DateOfBirth(ymd(@options[:date_of_birth]))
241
+ }
242
+ end
243
+
244
+ @xml = builder.to_xml
245
+ end
246
+
247
+ def to_xml
248
+ self.class.xml_rpc_wrapper(@xml)
249
+ end
250
+
251
+ protected
252
+
253
+ def doc
254
+ Nokogiri::XML(@xml)
255
+ end
256
+
257
+ def personal_data_node
258
+ doc.at('//BackgroundCheck/BackgroundSearchPackage/PersonalData')
259
+ end
260
+
261
+ def screening_node
262
+ doc.at('//BackgroundCheck/BackgroundSearchPackage/Screenings/Screening')
263
+ end
264
+
265
+ # expects a Time or DateTime
266
+ def ymd(date)
267
+ return date if date.is_a?(String)
268
+ date.strftime("%Y-%m-%d") if date
269
+ end
270
+
271
+
272
+ module XML
273
+
274
+ SAMPLE_ORDER_RESPONSE = %Q{<?xml version="1.0" encoding="UTF-8"?>
275
+ <soapenv:Envelope
276
+ xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
277
+ xmlns:cp="http://www.cpscreen.com/schemas"
278
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
279
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema">
280
+ <soapenv:Body>
281
+ <BackgroundReports xmlns="http://www.cpscreen.com/schemas">
282
+ <BackgroundReportPackage type="report">
283
+ <ProviderReferenceId>WPS-6266154</ProviderReferenceId>
284
+ <PackageInformation>
285
+ <ClientReferences>
286
+ <ClientReference>Youth123456</ClientReference>
287
+ <ClientReference>CN=Youth Tester/O=Youth</ClientReference>
288
+ </ClientReferences>
289
+ <Quotebacks>
290
+ <Quoteback name="Youth-83SQ7J"/>
291
+ </Quotebacks>
292
+ </PackageInformation>
293
+ <PersonalData>
294
+ <PersonName type="subject">
295
+ <GivenName>Test</GivenName>
296
+ <FamilyName>Youth</FamilyName>
297
+ </PersonName>
298
+ <DemographicDetail>
299
+ <GovernmentId issuingAuthority="SSN">123456789</GovernmentId>
300
+ <DateOfBirth/>
301
+ <Gender>F</Gender>
302
+ </DemographicDetail>
303
+ </PersonalData>
304
+ <ScreeningStatus>
305
+ <OrderStatus>InProgress</OrderStatus>
306
+ </ScreeningStatus>
307
+ <ScreeningResults mediaType="html">
308
+ <InternetWebAddress>https://screentest.lexisnexis.com/pub/l/login/userLogin.do?referer=https://screentest.lexisnexis.com/pub/l/jsp/menu/orderViewingMenuFrameSet.jsp?key=123|ABCDEFG</InternetWebAddress>
309
+ </ScreeningResults>
310
+ </BackgroundReportPackage>
311
+ </BackgroundReports>
312
+ </soapenv:Body>
313
+ </soapenv:Envelope>
314
+ }
315
+
316
+ SAMPLE_USER_LOCKED_RESPONSE = %q[<?xml version="1.0" encoding="UTF-8"?>
317
+ <soapenv:Envelope
318
+ xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
319
+ xmlns:cp="http://www.cpscreen.com/schemas"
320
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
321
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema">
322
+ <soapenv:Body>
323
+ <BackgroundReports xmlns="http://www.cpscreen.com/schemas">
324
+ <BackgroundReportPackage type="errors">
325
+ <ErrorReport>
326
+ <ErrorCode>210</ErrorCode>
327
+ <ErrorDescription>User is locked</ErrorDescription>
328
+ </ErrorReport>
329
+ </BackgroundReportPackage>
330
+ </BackgroundReports>
331
+ </soapenv:Body>
332
+ </soapenv:Envelope>
333
+ ]
334
+
335
+ end # module XML
336
+
337
+ end # class BackgroundCheck
338
+
339
+ end
@@ -0,0 +1,65 @@
1
+
2
+ require 'nokogiri'
3
+
4
+ module SterlingApi
5
+
6
+ class PasswordChange
7
+ extend XmlHelper
8
+
9
+ #
10
+ # options:
11
+ # :account
12
+ # :password
13
+ # :new_password
14
+ #
15
+ def initialize(account, password, new_password, subaccount=nil)
16
+ @account, @password, @new_password, @subaccount = account, password, new_password, subaccount
17
+ @xml = create_xml
18
+ self
19
+ end
20
+
21
+ %q[
22
+ <ChoicePointAdminRequest
23
+ xmlns="http://www.cpscreen.com/schemas"
24
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
25
+ xsi:schemaLocation="http://www.cpscreen.com/schemas AdminRequest.xsd"
26
+ userId="XCHANGE"
27
+ account="999999KLX"
28
+ password="XXXXXXXXX">
29
+
30
+ <ChangePassword>
31
+ <Account>999999KLX</Account>
32
+ <UserId>XCHANGE</UserId>
33
+ <Password>As@34Gsg!#</Password>
34
+ <NewPassword>the_new_password</NewPassword>
35
+ </ChangePassword>
36
+
37
+ </ChoicePointAdminRequest>
38
+ ]
39
+ def create_xml
40
+ builder = Nokogiri::XML::Builder.new do |xml|
41
+ xml.ChoicePointAdminRequest(
42
+ :xmlns => 'http://www.cpscreen.com/schemas',
43
+ :userId => 'XCHANGE',
44
+ :account => "#{@account}#{@subaccount}",
45
+ :password => @password
46
+ ){
47
+ xml.ChangePassword{
48
+ xml.Account "#{@account}#{@subaccount}"
49
+ xml.UserId 'XCHANGE'
50
+ xml.Password @password
51
+ xml.NewPassword @new_password
52
+ }
53
+ }
54
+ end
55
+
56
+ builder.to_xml
57
+ end
58
+
59
+ def to_xml
60
+ self.class.soap_wrapper(@xml)
61
+ end
62
+
63
+ end
64
+
65
+ end
@@ -0,0 +1,116 @@
1
+ require 'net/http'
2
+ require 'net/https'
3
+
4
+ module SterlingApi
5
+
6
+ module RemoteActions
7
+
8
+ class Response
9
+ attr_accessor :status
10
+ attr_accessor :body
11
+ attr_accessor :raw_response
12
+
13
+ def initialize(ret_val, resp)
14
+ self.status = ret_val
15
+ self.raw_response = resp
16
+ self.body = resp.body
17
+ end
18
+
19
+ def failure?
20
+ !success?
21
+ end
22
+
23
+ def success?
24
+ (self.body =~ %r{<Error(Report)?>}m).nil?
25
+ end
26
+
27
+ def errors
28
+ error_code = self.body.match(%r{<ErrorCode>(.+)</ErrorCode>})[1] rescue '???'
29
+ error_description = self.body.match(%r{<ErrorDescription>(.+)</ErrorDescription>})[1] rescue '???'
30
+ {
31
+ :error_code => error_code,
32
+ :error_description => error_description
33
+ }
34
+ end
35
+ end
36
+
37
+ # for use in tests
38
+ #
39
+ # options:
40
+ # :ret_val the Net::HTTP return value
41
+ # pass true for Net::HTTPSuccess, Net::HTTPRedirection
42
+ # pass false for all others
43
+ #
44
+ # :body the body 'returned' by the supposed Net::HTTP request
45
+ #
46
+ class MockResponse < Response
47
+ def initialize(options={})
48
+ Struct.new('MockHttpResponse', :body) unless defined?(Struct::MockHttpResponse)
49
+ mock_http_response = Struct::MockHttpResponse.new(options[:body])
50
+ super(options[:ret_val], mock_http_response)
51
+ end
52
+ end
53
+
54
+ class Request
55
+ attr_accessor :headers
56
+ attr_accessor :proxy
57
+ attr_accessor :proxy_port
58
+ attr_accessor :body
59
+ attr_accessor :http_process
60
+ attr_accessor :url
61
+
62
+ def initialize(options={})
63
+ default_options = {
64
+ :body => nil,
65
+ :headers => {'Content-Type' => 'application/xml', 'Accept' => 'application/xml'},
66
+ :proxy => nil,
67
+ :proxy_port => nil,
68
+ }
69
+ default_options.merge!(options)
70
+
71
+ self.proxy = default_options[:proxy]
72
+ self.proxy_port = default_options[:proxy_port]
73
+ self.headers = default_options[:headers]
74
+ self.body = default_options[:body]
75
+ self.url = default_options[:url]
76
+ end
77
+
78
+ def host_from_url
79
+ self.url.match(%r{(?:https?://)?([^/]+)})[1].gsub(/:\d+$/, "") rescue nil
80
+ end
81
+
82
+ def is_ssl?
83
+ !!(self.url =~ /^https:/i)
84
+ end
85
+
86
+ def port_from_url
87
+ if m = self.url.match(%r{(?:(http|https)://)[^:]+:(\d+)/?})
88
+ return m[2].to_i
89
+ elsif self.url =~ /^https:/i
90
+ return 443
91
+ else
92
+ 80
93
+ end
94
+ end
95
+
96
+ def send_request
97
+ self.http_process = Net::HTTP.new( host_from_url, port_from_url, self.proxy, self.proxy_port )
98
+ self.http_process.use_ssl = is_ssl?
99
+
100
+ http_process.start
101
+ resp = http_process.post(self.url, self.body, self.headers)
102
+ ret_val = false
103
+ case resp
104
+ when Net::HTTPSuccess, Net::HTTPRedirection
105
+ ret_val = true
106
+ else
107
+ ret_val = false
108
+ end
109
+ return SterlingApi::RemoteActions::Response.new(ret_val, resp)
110
+ end
111
+
112
+ end
113
+
114
+ end
115
+
116
+ end
@@ -0,0 +1,3 @@
1
+ module SterlingApi
2
+ VERSION = "1.0.4"
3
+ end
@@ -0,0 +1,43 @@
1
+
2
+ module SterlingApi
3
+
4
+ module XmlHelper
5
+
6
+ def soap_wrapper(xml)
7
+ %Q{<?xml version="1.0"?>
8
+ <soapenv:Envelope
9
+ xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
10
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
11
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
12
+ <soapenv:Body>
13
+ #{strip_instruct(xml)}
14
+ </soapenv:Body>
15
+ </soapenv:Envelope>
16
+ }
17
+ end
18
+
19
+ def xml_rpc_wrapper(xml)
20
+ %Q{<?xml version="1.0"?>
21
+ <methodCall>
22
+ <methodName>webhuckXMLrequest</methodName>
23
+ <params>
24
+ <param>
25
+ <value>
26
+ <struct>
27
+ #{strip_instruct(xml)}
28
+ </struct>
29
+ </value>
30
+ </param>
31
+ </params>
32
+ </methodCall>
33
+ }
34
+ end
35
+
36
+ def strip_instruct(xml)
37
+ xml.gsub!(%r{<\?xml\s+version=['"]1.0['"]\s*\?>}, '')
38
+ xml
39
+ end
40
+
41
+ end
42
+
43
+ end
@@ -0,0 +1,50 @@
1
+ module SterlingApi
2
+
3
+ module XmlSamples
4
+
5
+ CHANGE_PASSWORD_COMPLETE_RESPONSE = %q[<?xml version="1.0" encoding="UTF-8"?>
6
+ <soapenv:Envelope
7
+ xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
8
+ xmlns:cp="http://www.cpscreen.com/schemas"
9
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema">
11
+ <soapenv:Body>
12
+ <ChoicePointAdminResponse xmlns="http://www.cpscreen.com/schemas">
13
+ <ChangePassword>
14
+ <Status>Complete</Status>
15
+ <Account>036483</Account>
16
+ <UserId>XCHANGE</UserId>
17
+ <Password>This should be right</Password>
18
+ <NewPassword>hC0^eL0@sK9@aN7^mV4#iT6(cM0!vG1(cH8#aO8@</NewPassword>
19
+ </ChangePassword>
20
+ </ChoicePointAdminResponse>
21
+ </soapenv:Body>
22
+ </soapenv:Envelope>
23
+ ]
24
+
25
+ CHANGE_PASSWORD_FAIL_RESPONSE = %q[<?xml version="1.0" encoding="UTF-8"?>
26
+ <soapenv:Envelope
27
+ xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
28
+ xmlns:cp="http://www.cpscreen.com/schemas"
29
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
30
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema">
31
+ <soapenv:Body>
32
+ <ChoicePointAdminResponse xmlns="http://www.cpscreen.com/schemas">
33
+ <ChangePassword>
34
+ <Status>Fail</Status>
35
+ <Account>036483</Account>
36
+ <UserId>XCHANGE</UserId>
37
+ <Password>This should be wrong</Password>
38
+ <NewPassword>hC0^eL0@sK9@aN7^mV4#iT6(cM0!vG1(cH8#aO8@</NewPassword>
39
+ <Error>
40
+ <ErrorCode>250</ErrorCode>
41
+ <ErrorDescription>Invalid old password</ErrorDescription>
42
+ </Error>
43
+ </ChangePassword>
44
+ </ChoicePointAdminResponse>
45
+ </soapenv:Body>
46
+ </soapenv:Envelope>
47
+ ]
48
+
49
+ end
50
+ end