main
 1# frozen_string_literal: true
 2
 3RSpec.describe Saml::Kit::Document do
 4  subject do
 5    Saml::Kit::AuthenticationRequest.build do |x|
 6      x.id = id
 7      x.issuer = issuer
 8      x.destination = destination
 9    end
10  end
11
12  let(:id) { Xml::Kit::Id.generate }
13  let(:issuer) { FFaker::Internet.uri('https') }
14  let(:destination) { FFaker::Internet.uri('https') }
15
16  specify { expect(subject.id).to eql(id) }
17  specify { expect(subject.issuer).to eql(issuer) }
18  specify { expect(subject.version).to eql('2.0') }
19  specify { expect(subject.destination).to eql(destination) }
20  specify { expect(subject.issue_instant.to_i).to eql(Time.now.to_i) }
21  specify { expect(Saml::Kit::AuthenticationRequest.new('blah').id).to be_nil }
22
23  describe '.to_saml_document' do
24    subject { described_class }
25
26    let(:user) { User.new(attributes: { id: SecureRandom.uuid }) }
27    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) }
28
29    it 'returns a Response' do
30      xml = Saml::Kit::Response.build_xml(user, request)
31      result = subject.to_saml_document(xml)
32      expect(result).to be_instance_of(Saml::Kit::Response)
33    end
34
35    it 'returns a LogoutResponse' do
36      xml = Saml::Kit::LogoutResponse.build_xml(request)
37      result = subject.to_saml_document(xml)
38      expect(result).to be_instance_of(Saml::Kit::LogoutResponse)
39    end
40
41    it 'returns an AuthenticationRequest' do
42      xml = Saml::Kit::AuthenticationRequest.build_xml
43      result = subject.to_saml_document(xml)
44      expect(result).to be_instance_of(Saml::Kit::AuthenticationRequest)
45    end
46
47    it 'returns a LogoutRequest' do
48      xml = Saml::Kit::LogoutRequest.build_xml(user)
49      result = subject.to_saml_document(xml)
50      expect(result).to be_instance_of(Saml::Kit::LogoutRequest)
51    end
52
53    it 'returns an Assertion' do
54      xml = Saml::Kit::Response.build(user, request).assertion.to_xml
55      result = subject.to_saml_document(xml)
56      expect(result).to be_instance_of(Saml::Kit::Assertion)
57    end
58
59    it 'returns an invalid document' do
60      xml = <<-XML
61      <html>
62        <head></head>
63        <body></body>
64      </html>
65      XML
66      result = subject.to_saml_document(xml)
67      expect(result).to be_instance_of(Saml::Kit::InvalidDocument)
68    end
69
70    it 'returns an invalid document when the xml is not XML' do
71      result = subject.to_saml_document('NOT XML')
72      expect(result).to be_instance_of(Saml::Kit::InvalidDocument)
73    end
74
75    it 'returns an invalid document when given nil' do
76      result = subject.to_saml_document(nil)
77      expect(result).to be_instance_of(Saml::Kit::InvalidDocument)
78    end
79  end
80end