lexis_nexis_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>
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "lexis_nexis_api/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "lexis_nexis_api"
7
+ s.version = LexisNexisApi::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Jeff Emminger"]
10
+ s.email = ["jeff@7compass.com"]
11
+ s.homepage = "http://github.com/7compass/lexis_nexis_api"
12
+ s.summary = %q{Lexis Nexis Api gem}
13
+ s.description = %q{}
14
+
15
+ s.rubyforge_project = "lexis_nexis_api"
16
+
17
+ s.add_runtime_dependency("nokogiri")
18
+ s.add_runtime_dependency("net/http")
19
+ s.add_runtime_dependency("net/https")
20
+
21
+ s.files = `git ls-files`.split("\n")
22
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
23
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
24
+ s.require_paths = ["lib"]
25
+
26
+ s.license = 'MIT'
27
+ end
@@ -0,0 +1,309 @@
1
+
2
+ require 'nokogiri'
3
+
4
+ module LexisNexisApi
5
+
6
+ class BackgroundCheck
7
+ extend XmlHelper
8
+
9
+ #
10
+ # PRI-FAM:
11
+ # PRI-FFM:
12
+ # PRI-FIM:
13
+ # PRINCRF:
14
+ # PRINCRP:
15
+ # PersonalData/PersonName
16
+ # PersonalData/PostalAddress
17
+ #
18
+ # SSNV:
19
+ # PersonalData/DemographicDetail
20
+ #
21
+ # MVR:
22
+ # PersonalData/Licenses
23
+ #
24
+
25
+
26
+ # combos
27
+ # 2112 = Package 1 = PRI-FIM, PRINCRF, PRINCRP, SSNV
28
+ # 2113 = Package 2 = PRI-FAM, PRINCRP, SSNV
29
+ # 2114 = Package 3 = MVR, PRINCRP, SSNV
30
+ #
31
+ # ala carte
32
+ # 2116 = Package 5 = MVR only
33
+ # 2117 = Package 6 = PRINCRP
34
+ # 2168 = Package 7 = PRI-FFM, SSNV
35
+ # 2169 = Package 9 = PRI-FFM
36
+ # 2360 = Package 14 = PRI-FAM
37
+ #
38
+ #
39
+ # 2011-02-22:
40
+ # Package 1 can logically be ordered with 5,9 & 14
41
+ # Package 2 can logically be ordered with 5 & 9
42
+ # Package 3 can logically be ordered with 9 & 14
43
+ # Any combination of 5,6,7,9 & 14 could be ordered.
44
+ #
45
+ #
46
+ def self.for_package(package_id, options)
47
+ package_id = package_id.to_i
48
+
49
+ background_check = self.new(options.merge(:package_id => package_id))
50
+
51
+ background_check.add_ssnv # required for one-step orders
52
+
53
+ background_check.add_name_and_address if [2112, 2113, 2114, 2116, 2117, 2168, 2169, 2360].include?(package_id)
54
+ background_check.add_mvr if [2114, 2116].include?(package_id)
55
+
56
+ background_check
57
+ end
58
+
59
+ def initialize(options={})
60
+ @options = options
61
+ @xml = create_root
62
+ self
63
+ end
64
+
65
+ #
66
+ # <BackgroundCheck
67
+ # xmlns="http://www.cpscreen.com/schemas"
68
+ # userId="XCHANGE"
69
+ # account="#{@account}"
70
+ # password="#{@password}">
71
+ # <BackgroundSearchPackage xmlns="">
72
+ # <PackageInformation>
73
+ # <PositionAppliedFor>Current InterVarsity Staff</PositionAppliedFor>
74
+ # <PackageId>#{options[:package_id]}</PackageId>
75
+ # <ClientReferences>
76
+ # <ClientReference>Region: Graduate &amp; Faculty Ministry North Atlantic</ClientReference>
77
+ # <ClientReference>Washington, DC</ClientReference>
78
+ # </ClientReferences>
79
+ # <OrderAccount>
80
+ # <UserId></UserId>
81
+ # <Account></Account>
82
+ # </OrderAccount>
83
+ # </PackageInformation>
84
+ # <PersonalData>
85
+ # <ContactMethod>
86
+ # <InternetEmailAddress></InternetEmailAddress>
87
+ # </ContactMethod>
88
+ # </PersonalData>
89
+ # </BackgroundSearchPackage>
90
+ # </BackgroundCheck>
91
+ #
92
+ def create_root
93
+ builder = Nokogiri::XML::Builder.new do |xml|
94
+ xml.BackgroundCheck(
95
+ :xmlns => 'http://www.cpscreen.com/schemas',
96
+ :userId => 'XCHANGE',
97
+ :account => @options[:account],
98
+ :password => @options[:password]
99
+ ){
100
+ xml.BackgroundSearchPackage(:xmlns => ''){
101
+ xml.PackageInformation{
102
+ xml.PositionAppliedFor @options[:position_applied_for]
103
+ xml.PackageId @options[:package_id]
104
+ xml.ClientReferences{
105
+ xml.ClientReference @options[:client_reference1]
106
+ xml.ClientReference @options[:order_as_user_id]
107
+ }
108
+ xml.OrderAccount{
109
+ xml.UserId 'XCHANGE'
110
+ xml.Account "#{@options[:account]}#{@options[:order_as_account_suffix]}"
111
+ } if @options[:order_as_account_suffix]
112
+ }
113
+ xml.PersonalData{
114
+ xml.ContactMethod{
115
+ xml.InternetEmailAddress @options[:contact_email]
116
+ }
117
+ }
118
+ }
119
+ }
120
+ end
121
+
122
+ builder.to_xml
123
+ end
124
+
125
+ #
126
+ # Optional element:
127
+ # /BackgroundCheck/BackgroundSearchPackage/PersonalData/Licenses
128
+ #
129
+ # Contains 0*
130
+ # /BackgroundCheck/BackgroundSearchPackage/PersonalData/Licenses/License
131
+ #
132
+ # options should contain:
133
+ # licenses: an array of license info hashes
134
+ #
135
+ # license info hash:
136
+ # :valid_from datetime or string YYYY-MM-DD
137
+ # :valid_to datetime or string YYYY-MM-DD
138
+ # :country_code 2 char ISO country code
139
+ # :license_number AN 1..20
140
+ # :license_region 2 char State/Region
141
+ #
142
+ def add_mvr
143
+ builder = Nokogiri::XML::Builder.with(personal_data_node) do |xml|
144
+ xml.Licenses {
145
+ @options[:licenses].each do |hash|
146
+ xml.License(:validFrom => ymd(hash[:valid_from]), :validTo => ymd(hash[:valid_to])) {
147
+ xml.CountryCode(hash[:country_code])
148
+ xml.LicenseNumber(hash[:license_number])
149
+ xml.LicenseName 'mvr'
150
+ xml.LicenseDescription 'mvr'
151
+ xml.LicenseRegion hash[:license_region] # State
152
+ }
153
+ end
154
+ }
155
+ end
156
+
157
+ @xml = builder.to_xml
158
+ end
159
+
160
+ #
161
+ # expects an array of :person_names in @options
162
+ # expects an array of :postal_addresses in @options
163
+ #
164
+ # <PersonName type="subject|alias">
165
+ # <GivenName>Kevin</GivenName>
166
+ # <MiddleName>Fred</MiddleName>
167
+ # <FamilyName>Test</FamilyName>
168
+ # </PersonName>
169
+ # <PostalAddress type="current|prior" validFrom="2009-01-01">
170
+ # <Municipality>Madison</Municipality>
171
+ # <Region>WI</Region>
172
+ # <PostalCode>53711</PostalCode>
173
+ # <CountryCode>US</CountryCode>
174
+ # <DeliveryAddress>
175
+ # <AddressLine>1234 Main Rd</AddressLine>
176
+ # </DeliveryAddress>
177
+ # </PostalAddress>
178
+ def add_name_and_address
179
+ builder = Nokogiri::XML::Builder.with(personal_data_node) do |xml|
180
+ @options[:person_names].each do |hash|
181
+ xml.PersonName(:type => hash[:type]){
182
+ xml.GivenName hash[:first_name]
183
+ xml.MiddleName hash[:middle_name]
184
+ xml.FamilyName hash[:last_name]
185
+ }
186
+ end if @options[:person_names]
187
+
188
+ @options[:postal_addresses].each do |hash|
189
+ xml.PostalAddress(:type => hash[:type], :validFrom => ymd(hash[:valid_from]), :validTo => ymd(hash[:valid_to])){
190
+ xml.Municipality hash[:municipality]
191
+ xml.Region hash[:region]
192
+ xml.PostalCode hash[:postal_code]
193
+ xml.CountryCode hash[:country_code]
194
+ xml.DeliveryAddress{
195
+ xml.AddressLine hash[:address1]
196
+ xml.AddressLine(hash[:address2]) if hash[:address2].present?
197
+ }
198
+ }
199
+ end if @options[:postal_addresses]
200
+ end
201
+
202
+ @xml = builder.to_xml
203
+ end
204
+
205
+ # <DemographicDetail>
206
+ # <GovernmentId issuingAuthority="SSN">123456789</GovernmentId>
207
+ # <DateOfBirth>1950-01-01</DateOfBirth>
208
+ # </DemographicDetail>
209
+ #
210
+ def add_ssnv
211
+ builder = Nokogiri::XML::Builder.with(personal_data_node) do |xml|
212
+ xml.DemographicDetail{
213
+ xml.GovernmentId(@options[:ssn], :issuingAuthority => 'SSN')
214
+ xml.DateOfBirth(ymd(@options[:date_of_birth]))
215
+ }
216
+ end
217
+
218
+ @xml = builder.to_xml
219
+ end
220
+
221
+ def to_xml
222
+ self.class.soap_wrapper(@xml)
223
+ end
224
+
225
+ protected
226
+
227
+ def doc
228
+ Nokogiri::XML(@xml)
229
+ end
230
+
231
+ def personal_data_node
232
+ doc.at('//xmlns:BackgroundCheck/BackgroundSearchPackage/PersonalData', 'xmlns' => 'http://www.cpscreen.com/schemas')
233
+ end
234
+
235
+ # expects a Time or DateTime
236
+ def ymd(date)
237
+ return date if date.is_a?(String)
238
+ date.strftime("%Y-%m-%d") if date
239
+ end
240
+
241
+
242
+ module XML
243
+
244
+ SAMPLE_ORDER_RESPONSE = %Q{<?xml version="1.0" encoding="UTF-8"?>
245
+ <soapenv:Envelope
246
+ xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
247
+ xmlns:cp="http://www.cpscreen.com/schemas"
248
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
249
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema">
250
+ <soapenv:Body>
251
+ <BackgroundReports xmlns="http://www.cpscreen.com/schemas">
252
+ <BackgroundReportPackage type="report">
253
+ <ProviderReferenceId>WPS-6266154</ProviderReferenceId>
254
+ <PackageInformation>
255
+ <ClientReferences>
256
+ <ClientReference>Youth123456</ClientReference>
257
+ <ClientReference>CN=Youth Tester/O=Youth</ClientReference>
258
+ </ClientReferences>
259
+ <Quotebacks>
260
+ <Quoteback name="Youth-83SQ7J"/>
261
+ </Quotebacks>
262
+ </PackageInformation>
263
+ <PersonalData>
264
+ <PersonName type="subject">
265
+ <GivenName>Test</GivenName>
266
+ <FamilyName>Youth</FamilyName>
267
+ </PersonName>
268
+ <DemographicDetail>
269
+ <GovernmentId issuingAuthority="SSN">123456789</GovernmentId>
270
+ <DateOfBirth/>
271
+ <Gender>F</Gender>
272
+ </DemographicDetail>
273
+ </PersonalData>
274
+ <ScreeningStatus>
275
+ <OrderStatus>InProgress</OrderStatus>
276
+ </ScreeningStatus>
277
+ <ScreeningResults mediaType="html">
278
+ <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>
279
+ </ScreeningResults>
280
+ </BackgroundReportPackage>
281
+ </BackgroundReports>
282
+ </soapenv:Body>
283
+ </soapenv:Envelope>
284
+ }
285
+
286
+ SAMPLE_USER_LOCKED_RESPONSE = %q[<?xml version="1.0" encoding="UTF-8"?>
287
+ <soapenv:Envelope
288
+ xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
289
+ xmlns:cp="http://www.cpscreen.com/schemas"
290
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
291
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema">
292
+ <soapenv:Body>
293
+ <BackgroundReports xmlns="http://www.cpscreen.com/schemas">
294
+ <BackgroundReportPackage type="errors">
295
+ <ErrorReport>
296
+ <ErrorCode>210</ErrorCode>
297
+ <ErrorDescription>User is locked</ErrorDescription>
298
+ </ErrorReport>
299
+ </BackgroundReportPackage>
300
+ </BackgroundReports>
301
+ </soapenv:Body>
302
+ </soapenv:Envelope>
303
+ ]
304
+
305
+ end # module XML
306
+
307
+ end # class BackgroundCheck
308
+
309
+ end
@@ -0,0 +1,65 @@
1
+
2
+ require 'nokogiri'
3
+
4
+ module LexisNexisApi
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 LexisNexisApi
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] rescue nil
80
+ end
81
+
82
+ def is_ssl?
83
+ !!(self.url =~ /^https:/i)
84
+ end
85
+
86
+ def port_from_url
87
+ return 443 if self.url =~ /^https:/i
88
+
89
+ if m = self.url.match(%r{(?:http://)[^:]+:(\d+)/?})
90
+ return m[1].to_i
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 LexisNexisApi::RemoteActions::Response.new(ret_val, resp)
110
+ end
111
+
112
+ end
113
+
114
+ end
115
+
116
+ end
@@ -0,0 +1,3 @@
1
+ module LexisNexisApi
2
+ VERSION = "1.0.4"
3
+ end
@@ -0,0 +1,26 @@
1
+
2
+ module LexisNexisApi
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 strip_instruct(xml)
20
+ xml.gsub!(%r{<\?xml\s+version=['"]1.0['"]\s*\?>}, '')
21
+ xml
22
+ end
23
+
24
+ end
25
+
26
+ end
@@ -0,0 +1,50 @@
1
+ module LexisNexisApi
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