/// <param name="databehandler">
        ///     Virksomhet (offentlig eller privat) som har en kontraktfestet avtale med Avsender med
        ///     formål å dekke hele eller deler av prosessen med å formidle en digital postmelding fra
        ///     <see cref="Avsender" /> til Meldingsformidler.
        /// </param>
        /// <param name="klientkonfigurasjon">
        ///     Brukes for å sette parametere som proxy, timeout, logging av forespørsel/respons og selve dokumentpakken.
        /// </param>
        /// <remarks>
        ///     Se <a href="http://begrep.difi.no/SikkerDigitalPost/forretningslag/Aktorer">oversikt over aktører</a>
        /// </remarks>
        public SikkerDigitalPostKlient(Databehandler databehandler, Klientkonfigurasjon klientkonfigurasjon)
        {
            ValidateDatabehandlerCertificateAndThrowIfInvalid(databehandler, klientkonfigurasjon.Miljø);

            Databehandler = databehandler;
            Klientkonfigurasjon = klientkonfigurasjon;
            RequestHelper = new RequestHelper(klientkonfigurasjon);
        }
            public void Initializes_fields()
            {
                //Arrange
                var clientConfiguration = new Klientkonfigurasjon(Miljø.FunksjoneltTestmiljø);

                //Act
                var requestHelper = new RequestHelper(clientConfiguration);

                //Assert
                Assert.Equal(clientConfiguration, requestHelper.ClientConfiguration);
            }
            public async Task Returns_receipt_successfully()
            {
                //Arrange
                var forretningsmeldingEnvelope = DomainUtility.GetForretningsmeldingEnvelope();

                var documentBundle = AsiceGenerator.Create(DomainUtility.GetForsendelseSimple(), new GuidUtility(), DomainUtility.GetAvsenderCertificate(), DomainUtility.GetKlientkonfigurasjon());

                var requestHelper = new RequestHelper(new Klientkonfigurasjon(Miljø.FunksjoneltTestmiljø));
                var fakeHttpClientHandlerResponse = new FakeResponseHandler()
                {
                    HttpContent = new StringContent(XmlResource.Response.GetTransportOk().OuterXml),
                    StatusCode = HttpStatusCode.OK
                };
                requestHelper.HttpClient = new HttpClient(fakeHttpClientHandlerResponse);

                //Act 
                var kvittering = await requestHelper.SendMessage(forretningsmeldingEnvelope, documentBundle).ConfigureAwait(false);

                Assert.IsType<TransportOkKvittering>(kvittering);
            }
            public async Task Adds_user_agent()
            {
                //Arrange
                var forretningsmeldingEnvelope = DomainUtility.GetForretningsmeldingEnvelope();
                var documentBundle = AsiceGenerator.Create(DomainUtility.GetForsendelseSimple(), new GuidUtility(), DomainUtility.GetAvsenderCertificate(), DomainUtility.GetKlientkonfigurasjon());

                Action<HttpRequestMessage> testingAction = message =>
                {
                    Assert.Contains("sikker-digital-post", message.Headers.UserAgent.ToString());
                };

                var requestHelper = new RequestHelper(
                    new Klientkonfigurasjon(Miljø.FunksjoneltTestmiljø),
                    new FakeResponseHandler()
                    {
                        TestingAction = testingAction,
                        HttpContent = new StringContent(XmlResource.Response.GetTransportOk().OuterXml)
                    }
                );

                //Act 
                await requestHelper.SendMessage(forretningsmeldingEnvelope, documentBundle).ConfigureAwait(false); 
            }