main
 1# frozen_string_literal: true
 2
 3RSpec.describe Soap do
 4  describe '#to_xml' do
 5    subject { described_class.new(key_pair.certificate) }
 6
 7    let(:key_pair) { ::Xml::Kit::KeyPair.generate(use: :encryption) }
 8    let(:result) { Hash.from_xml(subject.to_xml) }
 9
10    specify { expect(result['Envelope']).to be_present }
11    specify { expect(result['Envelope']['Header']).to be_present }
12
13    specify do
14      cipher_value = result['Envelope']['Header']['Security']['EncryptedKey']['CipherData']['CipherValue']
15      symmetric_key = key_pair.private_key.private_decrypt(Base64.decode64(cipher_value))
16      expect(symmetric_key).to eql(subject.symmetric_cipher.key)
17
18      algorithm = result['Envelope']['Body']['EncryptedData']['EncryptionMethod']['Algorithm']
19      cipher_value = result['Envelope']['Body']['EncryptedData']['CipherData']['CipherValue']
20      result = ::Xml::Kit::Crypto::SymmetricCipher.new(algorithm, symmetric_key).decrypt(Base64.decode64(cipher_value))
21      hash = Hash.from_xml(result)
22      expect(hash['EncryptMe']['Secret']).to eql('secret')
23    end
24
25    specify { expect(result['Envelope']['Body']).to be_present }
26  end
27end