Commit d3ce092

mo <mo.khan@gmail.com>
2018-02-26 02:32:47
parse status code using xpath.
1 parent de43390
Changed files (2)
lib
spec
lib/saml/kit/respondable.rb
@@ -16,7 +16,7 @@ module Saml
 
       # Returns the /Status/StatusCode@Value
       def status_code
-        to_h.fetch(name, {}).fetch('Status', {}).fetch('StatusCode', {}).fetch('Value', nil)
+        at_xpath('./*/samlp:Status/samlp:StatusCode/@Value').try(:value)
       end
 
       # Returns the /InResponseTo attribute.
spec/saml/kit/response_spec.rb
@@ -1,9 +1,14 @@
 RSpec.describe Saml::Kit::Response do
+  subject { described_class.build(user, request) }
+
+  let(:request) { instance_double(Saml::Kit::AuthenticationRequest, id: ::Xml::Kit::Id.generate, issuer: FFaker::Internet.uri('https'), assertion_consumer_service_url: FFaker::Internet.uri('https'), name_id_format: Saml::Kit::Namespaces::PERSISTENT, provider: nil, signed?: true, trusted?: true) }
+  let(:user) { User.new(attributes: { id: SecureRandom.uuid }) }
+
+  specify { expect(subject.status_code).to eql(Saml::Kit::Namespaces::SUCCESS) }
+
   describe '#valid?' do
     subject { described_class.build(user, request, configuration: configuration) }
 
-    let(:request) { instance_double(Saml::Kit::AuthenticationRequest, id: ::Xml::Kit::Id.generate, issuer: FFaker::Internet.http_url, assertion_consumer_service_url: FFaker::Internet.http_url, name_id_format: Saml::Kit::Namespaces::PERSISTENT, provider: nil, signed?: true, trusted?: true) }
-    let(:user) { User.new(attributes: { id: SecureRandom.uuid }) }
     let(:registry) { instance_double(Saml::Kit::DefaultRegistry) }
     let(:metadata) { instance_double(Saml::Kit::IdentityProviderMetadata) }