Commit 5546d36

mokha <mokha@cisco.com>
2018-03-06 21:56:21
decode a logout request.
1 parent 11daf05
Changed files (3)
lib
saml
kit
spec
saml
kit
cli
lib/saml/kit/cli/report.rb
@@ -27,13 +27,6 @@ module Saml
           text.length >= max ? "#{text[0..max]}..." : text
         end
 
-        def build_body_for(document, table)
-          case document
-          when Saml::Kit::LogoutRequest
-            table.push(['Name Id', document.name_id])
-          end
-        end
-
         def build_table_for(document)
           table = []
           document.build_header(table)
lib/saml/kit/core_ext/document.rb
@@ -39,6 +39,12 @@ module Saml
       end
     end
 
+    class LogoutRequest
+      def build_body(table = [])
+        table.push(['Name Id', name_id])
+      end
+    end
+
     class Metadata
       def build_header(table = [])
         table.push(['Entity Id', entity_id])
spec/saml/kit/cli/commands/decode_spec.rb
@@ -18,22 +18,37 @@ RSpec.describe Saml::Kit::Cli::Commands::Decode do
   end
 
   describe '#post' do
-    let(:command) { "decode post #{post_binding.serialize(builder)[1]['SAMLResponse']}" }
-    let(:document) { builder.build }
-    let(:user) { double(name_id_for: SecureRandom.uuid) }
-    let(:builder) do
-      Saml::Kit::Response.builder(user) do |x|
-        x.sign_with(Xml::Kit::KeyPair.generate(use: :signing))
-      end
-    end
     let(:post_binding) do
       Saml::Kit::Bindings::HttpPost.new(location: 'https://www.example.com/')
     end
 
-    specify { expect(status).to be_success }
-    specify { expect(output).to include(document.to_xml(pretty: true)) }
-    specify { expect(output).to include("Decoded #{document.send(:name)}") }
-    specify { expect(output).to include(document.signature.certificate.x509.to_text) }
+    context "when the document is a Response" do
+      let(:command) { "decode post #{post_binding.serialize(builder)[1]['SAMLResponse']}" }
+      let(:builder) do
+        Saml::Kit::Response.builder(user) do |x|
+          x.sign_with(Xml::Kit::KeyPair.generate(use: :signing))
+        end
+      end
+      let(:user) { double(name_id_for: SecureRandom.uuid) }
+      let(:document) { builder.build }
+
+      specify { expect(status).to be_success }
+      specify { expect(output).to include(document.to_xml(pretty: true)) }
+      specify { expect(output).to include("Decoded #{document.send(:name)}") }
+      specify { expect(output).to include(document.signature.certificate.x509.to_text) }
+    end
+
+    context "when the document is a LogoutRequest" do
+      let(:command) { "decode post #{post_binding.serialize(builder)[1]['SAMLRequest']}" }
+      let(:builder) { Saml::Kit::LogoutRequest.builder(user) }
+      let(:user) { double(name_id_for: SecureRandom.uuid) }
+      let(:document) { builder.build }
+
+      specify { expect(status).to be_success }
+      specify { expect(output).to include(document.to_xml(pretty: true)) }
+      specify { expect(output).to include("Decoded #{document.send(:name)}") }
+      specify { expect(output).to include(user.name_id_for) }
+    end
   end
 
   describe '#raw' do