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