Commit 2231946

mo <mo.khan@gmail.com>
2017-12-23 18:26:11
update response examples.
1 parent e029742
Changed files (2)
lib
saml
spec
lib/saml/kit/response.rb
@@ -1,5 +1,6 @@
 module Saml
   module Kit
+    # {include:file:spec/examples/response_spec.rb}
     class Response < Document
       include Respondable
       extend Forwardable
spec/examples/response_spec.rb
@@ -2,8 +2,52 @@ require_relative './user'
 
 RSpec.describe "Response" do
   let(:user) { User.new(id: SecureRandom.uuid, email: "hello@example.com") }
+  let(:request) { Saml::Kit::AuthenticationRequest.build }
 
-  it 'generates a response' do
+  it 'consumes a Response' do
+    raw_xml = <<-XML
+<?xml version="1.0" encoding="UTF-8"?>
+<Response xmlns="urn:oasis:names:tc:SAML:2.0:protocol" ID="_32594448-5d41-4e5b-87c5-ee32ef1f14f7" Version="2.0" IssueInstant="2017-12-23T18:13:58Z" Destination="" Consent="urn:oasis:names:tc:SAML:2.0:consent:unspecified" InResponseTo="_55236abc-636f-41d1-8c0d-81c5384786dd">
+  <Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://www.example.com/metadata</Issuer>
+  <Status>
+    <StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
+  </Status>
+  <Assertion xmlns="urn:oasis:names:tc:SAML:2.0:assertion" ID="_843f14bc-51e9-40d3-9861-23e59ccc8427" IssueInstant="2017-12-23T18:13:58Z" Version="2.0">
+    <Issuer>https://www.example.com/metadata</Issuer>
+    <Subject>
+      <NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent">ed215a85-597f-4e74-a892-ac83c386190b</NameID>
+      <SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
+        <SubjectConfirmationData InResponseTo="_55236abc-636f-41d1-8c0d-81c5384786dd" NotOnOrAfter="2017-12-23T21:13:58Z" Recipient=""/>
+      </SubjectConfirmation>
+    </Subject>
+    <Conditions NotBefore="2017-12-23T18:13:58Z" NotOnOrAfter="2017-12-23T21:13:58Z">
+      <AudienceRestriction>
+        <Audience/>
+      </AudienceRestriction>
+    </Conditions>
+    <AuthnStatement AuthnInstant="2017-12-23T18:13:58Z" SessionIndex="_843f14bc-51e9-40d3-9861-23e59ccc8427" SessionNotOnOrAfter="2017-12-23T21:13:58Z">
+      <AuthnContext>
+        <AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:Password</AuthnContextClassRef>
+      </AuthnContext>
+    </AuthnStatement>
+  </Assertion>
+</Response>
+    XML
+    response = Saml::Kit::Response.new(raw_xml)
+    expect(response.assertion.name_id).to eql('ed215a85-597f-4e74-a892-ac83c386190b')
+    expect(response.issuer).to eql("https://www.example.com/metadata")
+  end
+
+  it 'builds a Response document' do
+    response = Saml::Kit::Response.build(user, request) do |builder|
+      builder.issuer = "blah"
+    end
+
+    expect(response.issuer).to eql("blah")
+    expect(response.to_xml).to have_xpath("/samlp:Response/saml:Assertion/saml:Issuer[text()=\"blah\"]")
+  end
+
+  it 'generates a SAMLResponse' do
     xml = Saml::Kit::Metadata.build_xml do |builder|
       builder.contact_email = 'hi@example.com'
       builder.organization_name = "Acme, Inc"
@@ -34,6 +78,7 @@ RSpec.describe "Response" do
     allow(saml_request).to receive(:provider).and_return(sp)
 
     url, saml_params = saml_request.response_for(user, binding: :http_post)
+
     expect(url).to eql("https://www.example.com/consume")
     expect(saml_params['SAMLResponse']).to be_present
   end