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