main
1# frozen_string_literal: true
2
3RSpec.describe Saml::Kit::Builders::AuthenticationRequest do
4 subject { described_class.new(configuration: configuration) }
5
6 let(:configuration) do
7 config = Saml::Kit::Configuration.new
8 config.entity_id = issuer
9 config
10 end
11
12 describe '#to_xml' do
13 let(:issuer) { FFaker::Movie.title }
14 let(:assertion_consumer_service_url) { 'https://airport.dev/session/acs' }
15
16 it 'returns a valid authentication request' do
17 travel_to 1.second.from_now
18 subject.assertion_consumer_service_url = assertion_consumer_service_url
19 result = Hash.from_xml(subject.to_xml)
20
21 expect(result['AuthnRequest']['ID']).to be_present
22 expect(result['AuthnRequest']['Version']).to eql('2.0')
23 expect(result['AuthnRequest']['IssueInstant']).to eql(Time.now.utc.iso8601)
24 expect(result['AuthnRequest']['AssertionConsumerServiceURL']).to eql(assertion_consumer_service_url)
25 expect(result['AuthnRequest']['Issuer']).to eql(issuer)
26 expect(result['AuthnRequest']['NameIDPolicy']['Format']).to eql(Saml::Kit::Namespaces::PERSISTENT)
27 end
28
29 context 'when force authn is enabled' do
30 before { subject.force_authn = true }
31
32 let(:result) { Hash.from_xml(subject.to_xml) }
33
34 specify { expect(result['AuthnRequest']['ForceAuthn']).to eql('true') }
35 end
36 end
37end