コード例 #1
0
        public void ValidApkKeuringsVerzoekCommandModelStateTrue()
        {
            // Arrange
            var model = new ApkKeuringsVerzoekCommand
            {
                Kenteken                   = "11-AA-22",
                Kilometerstand             = 200,
                EigenaarNaam               = "Max",
                VoertuigType               = "Personenauto",
                KeuringsDatum              = DateTime.Now.Date,
                KeuringsinstantieKvkNummer = "19283746501",
                KeuringsinstantieType      = "apk",
                Bedrijfsnaam               = "MaRoWo",
                BedrijfPlaats              = "Utrecht"
            };

            var context = new ValidationContext(model, null, null);
            var results = new List <ValidationResult>();

            // Act
            var isModelStateValid = Validator.TryValidateObject(model, context, results, true);

            // Assert
            Assert.IsTrue(isModelStateValid);
        }
コード例 #2
0
        public void HandleApkKeuringsVerzoekRdwApkAgentCalledTest()
        {
            // Arrange
            var rdwApkAgentMock      = new Mock <IRdwApkAgent>(MockBehavior.Strict);
            var verzoekConverterMock = new Mock <IKeuringsVerzoekConverter>(MockBehavior.Strict);
            var logRepoMock          = new Mock <IRepository <ApkAanvraagLog, long> >(MockBehavior.Strict);

            verzoekConverterMock.Setup(l => l.ToKeuringsVerzoekAntwoord(It.IsAny <Keuringsregistratie>())).Returns(new KeuringsVerzoekAntwoord());

            logRepoMock.Setup(l => l.Insert(It.IsAny <ApkAanvraagLog>()));
            logRepoMock.Setup(l => l.Update(It.IsAny <ApkAanvraagLog>()));

            rdwApkAgentMock.Setup(x => x.SendApkKeuringsVerzoek(It.IsAny <string>())).Returns(
                "<?xml version=\"1.0\" encoding=\"utf - 8\"?><apkKeuringsverzoekResponseMessage xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"><keuringsregistratie correlatieId=\"f7f56961-6928-46ef-9b49-98d611ce2b71\" xmlns=\"http://www.rdw.nl\" xmlns:apk=\"http://www.rdw.nl/apk\"><kenteken>string</kenteken><apk:keuringsdatum>24-11-2016</apk:keuringsdatum><apk:steekproef xsi:nil=\"true\"/></keuringsregistratie></apkKeuringsverzoekResponseMessage>"
                );

            var publisherMock = new Mock <IEventPublisher>(MockBehavior.Strict);

            publisherMock.Setup(x => x.Publish(It.IsAny <DomainEvent>()));

            var target = new RdwApkManager(rdwApkAgentMock.Object, verzoekConverterMock.Object, logRepoMock.Object, "http://www.rdw.nl", "http://www.rdw.nl/apk", publisherMock.Object);
            var apkKeuringsVerzoekCommand = new ApkKeuringsVerzoekCommand();

            var result = target.HandleApkKeuringsVerzoek(apkKeuringsVerzoekCommand);

            // Act - Assert
            rdwApkAgentMock.Verify(x => x.SendApkKeuringsVerzoek(It.IsAny <string>()), Times.Once());
            verzoekConverterMock.Verify(l => l.ToKeuringsVerzoekAntwoord(It.IsAny <Keuringsregistratie>()), Times.Once());
            logRepoMock.Verify(x => x.Insert(It.IsAny <ApkAanvraagLog>()), Times.Once());
            logRepoMock.Verify(x => x.Update(It.IsAny <ApkAanvraagLog>()), Times.Once());
            publisherMock.Verify(x => x.Publish(It.IsAny <DomainEvent>()), Times.Once());
            Assert.IsNotNull(result);
        }
コード例 #3
0
 public IActionResult Post([FromBody] ApkKeuringsVerzoekCommand command)
 {
     if (!ModelState.IsValid)
     {
         var badRequest = new BadRequest()
         {
             Message = $"Request bevat: {ModelState.ErrorCount} fouten", InvalidProperties = ModelState.Keys
         };
         _logger.Log(new LogMessage(badRequest.Message));
         return(BadRequest(badRequest));
     }
     try
     {
         var result = _apkManager.HandleApkKeuringsVerzoek(command);
         return(new JsonResult(result));
     }
     catch (Exception ex)
     {
         var badRequest = new BadRequest {
             Message = "RDW niet bereikbaar", InvalidProperties = new List <string>()
         };
         _logger.LogException(new LogMessage($"{badRequest.Message}", ex.StackTrace));
         return(BadRequest(badRequest));
     }
 }
コード例 #4
0
        public void EmptyInvalidModelModelStateFalse()
        {
            // Arrange
            var model   = new ApkKeuringsVerzoekCommand();
            var context = new ValidationContext(model, null, null);
            var results = new List <ValidationResult>();

            // Act
            var isModelStateValid = Validator.TryValidateObject(model, context, results, true);

            // Assert
            Assert.IsFalse(isModelStateValid);
        }
コード例 #5
0
        /// <summary>
        /// HandleApkKeuringsVerzoek
        /// </summary>
        /// <param name="apkRequestCommand"></param>
        /// <returns></returns>
        public KeuringsVerzoekAntwoord HandleApkKeuringsVerzoek(ApkKeuringsVerzoekCommand apkCommand)
        {
            if (apkCommand == null)
            {
                throw new ArgumentNullException("ApkKeuringsVerzoekCommand should not be null");
            }

            var apkKeuringsVerzoek = CreateRequestFromCommand(apkCommand);

            string responseMessage = LogAndSendRequest(apkKeuringsVerzoek);
            var    respone         = HandleRdwResponse(responseMessage);

            PublishApkEvent(respone, apkCommand);
            return(respone);
        }
コード例 #6
0
        private void PublishApkEvent(KeuringsVerzoekAntwoord respone, ApkKeuringsVerzoekCommand apkCommand)
        {
            var apkCreated = new ApkAfgemeldEvent();

            apkCreated.CorrelationID = Guid.NewGuid();
            apkCreated.RoutingKey    = "Minor.Case2.MaRoWe.RWD.Integration.ApkAfgemeld";
            apkCreated.TimeStamp     = DateTime.UtcNow;

            apkCreated.Kenteken          = apkCommand.Kenteken;
            apkCreated.OnderhoudsBeurtId = apkCommand.OnderhoudsBeurtId;
            apkCreated.HasSteekProef     = respone.IsSteekProef;
            if (respone.IsSteekProef)
            {
                apkCreated.SteekProefDatum = respone.SteepkProefDate.Value;
            }
            _publisher.Publish(apkCreated);
        }
コード例 #7
0
        public void ManagerTestCommand()
        {
            var logServiceMock = new Mock <ILogService>(MockBehavior.Strict);

            logServiceMock.Setup(x => x.Log(It.IsAny <LogMessage>()));
            logServiceMock.Setup(x => x.LogException(It.IsAny <LogMessage>()));
            var rdwApkAgentMock      = new Mock <IRdwApkAgent>(MockBehavior.Strict);
            var verzoekConverterMock = new Mock <IKeuringsVerzoekConverter>(MockBehavior.Strict);
            var logRepoMock          = new Mock <IRepository <ApkAanvraagLog, long> >(MockBehavior.Strict);
            var publisherMock        = new Mock <IEventPublisher>(MockBehavior.Strict);
            var target = new RdwApkManager(rdwApkAgentMock.Object, verzoekConverterMock.Object, logRepoMock.Object, "http://www.rdw.nl", "http://www.rdw.nl/apk", publisherMock.Object);

            var apkKeuringsVerzoekCommand = new ApkKeuringsVerzoekCommand()
            {
                BedrijfPlaats = "De heurne",
                Bedrijfsnaam  = "Marowo",
                EigenaarNaam  = "Henk",
                Kenteken      = "bl-bl-31",
                KeuringsDatum = new DateTime(2016, 1, 30),
                KeuringsinstantieKvkNummer = "1234 1234",
                KeuringsinstantieType      = "Garage",
                Kilometerstand             = 1234,
                VoertuigType = "auto"
            };

            var result = target.CreateRequestFromCommand(apkKeuringsVerzoekCommand);

            Assert.IsNotNull(result);

            Assert.AreEqual("De heurne", result.Keuringsverzoek.Keuringsinstantie.Plaats);
            Assert.AreEqual("Marowo", result.Keuringsverzoek.Keuringsinstantie.Naam);
            Assert.AreEqual("Henk", result.Keuringsverzoek.Voertuig.Naam);
            Assert.AreEqual("bl-bl-31", result.Keuringsverzoek.Voertuig.Kenteken);
            Assert.AreEqual("30-1-2016", result.Keuringsverzoek.Keuringsdatum);
            Assert.AreEqual("1234 1234", result.Keuringsverzoek.Keuringsinstantie.Kvk);
            Assert.AreEqual("Garage", result.Keuringsverzoek.Keuringsinstantie.Type);
            Assert.AreEqual("1234", result.Keuringsverzoek.Voertuig.Kilometerstand);
            Assert.AreEqual("auto", result.Keuringsverzoek.Voertuig.Type);
            Assert.AreEqual("http://www.rdw.nl", result.Keuringsverzoek.Xmlns);
            Assert.AreEqual("http://www.rdw.nl/apk", result.Keuringsverzoek.Apk);

            Assert.AreNotEqual("00000000-0000-0000-0000-000000000000", result.Keuringsverzoek.CorrelatieId);

            logServiceMock.Verify(x => x.Log(It.IsAny <LogMessage>()), Times.Never());
            logServiceMock.Verify(x => x.LogException(It.IsAny <LogMessage>()), Times.Never());
        }
コード例 #8
0
        private ApkKeuringsVerzoekCommand CreateApkKeuringsVerzoekCommand(ApkAanvraagViewModel apkAanvraag)
        {
            var apkKeuringsVerzoekCommand = new ApkKeuringsVerzoekCommand()
            {
                OnderhoudsBeurtId          = apkAanvraag.OndehoudsopdrachtId,
                Kenteken                   = apkAanvraag.Kenteken,
                Kilometerstand             = apkAanvraag.Kilometerstand,
                EigenaarNaam               = apkAanvraag.EigenaarAuto,
                VoertuigType               = apkAanvraag.VoertuigType,
                KeuringsDatum              = DateTime.UtcNow,
                KeuringsinstantieKvkNummer = _settings.Value.KvkNummer,
                KeuringsinstantieType      = _settings.Value.InstantieType,
                Bedrijfsnaam               = _settings.Value.BedrijfsNaam,
                BedrijfPlaats              = _settings.Value.BedrijfsPlaats
            };

            return(apkKeuringsVerzoekCommand);
        }
コード例 #9
0
        public void HandleApkKeuringsVerzoekCommandNullThrowsApkKeuringsVerzoekException()
        {
            // Arrange
            var rdwApkAgentMock      = new Mock <IRdwApkAgent>(MockBehavior.Strict);
            var verzoekConverterMock = new Mock <IKeuringsVerzoekConverter>(MockBehavior.Strict);
            var logRepoMock          = new Mock <IRepository <ApkAanvraagLog, long> >(MockBehavior.Strict);

            var publisherMock = new Mock <IEventPublisher>(MockBehavior.Strict);

            var target = new RdwApkManager(rdwApkAgentMock.Object,
                                           verzoekConverterMock.Object, logRepoMock.Object,
                                           "http://www.rdw.nl", "http://www.rdw.nl/apk",
                                           publisherMock.Object
                                           );
            ApkKeuringsVerzoekCommand apkKeuringsVerzoekCommand = null;

            // Act - Assert
            Assert.ThrowsException <ArgumentNullException>(() => target.HandleApkKeuringsVerzoek(apkKeuringsVerzoekCommand));
        }
コード例 #10
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="apkCommand"></param>
        /// <returns></returns>
        public ApkKeuringsverzoekRequestMessage CreateRequestFromCommand(ApkKeuringsVerzoekCommand apkCommand)
        {
            var verzoek = new ApkKeuringsverzoekRequestMessage();

            verzoek.Keuringsverzoek               = new Keuringsverzoek();
            verzoek.Keuringsverzoek.Apk           = _keuringVerzoekApk;
            verzoek.Keuringsverzoek.CorrelatieId  = Guid.NewGuid().ToString();
            verzoek.Keuringsverzoek.Keuringsdatum = apkCommand.KeuringsDatum.ToString("d-M-yyyy");
            verzoek.Keuringsverzoek.Xmlns         = _keuringsVerzoekXmlns;

            verzoek.Keuringsverzoek.Voertuig                = new Voertuig();
            verzoek.Keuringsverzoek.Voertuig.Kenteken       = apkCommand.Kenteken;
            verzoek.Keuringsverzoek.Voertuig.Kilometerstand = apkCommand.Kilometerstand.ToString();
            verzoek.Keuringsverzoek.Voertuig.Naam           = apkCommand.EigenaarNaam;
            verzoek.Keuringsverzoek.Voertuig.Type           = apkCommand.VoertuigType;

            verzoek.Keuringsverzoek.Keuringsinstantie        = new Keuringsinstantie();
            verzoek.Keuringsverzoek.Keuringsinstantie.Kvk    = apkCommand.KeuringsinstantieKvkNummer;
            verzoek.Keuringsverzoek.Keuringsinstantie.Naam   = apkCommand.Bedrijfsnaam;
            verzoek.Keuringsverzoek.Keuringsinstantie.Plaats = apkCommand.BedrijfPlaats;
            verzoek.Keuringsverzoek.Keuringsinstantie.Type   = apkCommand.KeuringsinstantieType;
            return(verzoek);
        }
コード例 #11
0
        public Task <HttpOperationResponse <object> > MakeApkRequestWithHttpMessagesAsync(ApkKeuringsVerzoekCommand command = null, Dictionary <string, List <string> > customHeaders = null, CancellationToken cancellationToken = default(CancellationToken))
        {
            TimesCalled++;

            HttpRequestMessage  _httpRequest  = new HttpRequestMessage();
            HttpResponseMessage _httpResponse = null;

            _httpRequest.Method = new HttpMethod("GET");

            // Create Result
            var _result = new HttpOperationResponse <object>();

            _result.Request  = _httpRequest;
            _result.Response = _httpResponse;
            _result.Body     = false;

            return(Task.FromResult(_result));
        }
コード例 #12
0
        /// <param name='command'>
        /// </param>
        /// <param name='customHeaders'>
        /// Headers that will be added to request.
        /// </param>
        /// <param name='cancellationToken'>
        /// The cancellation token.
        /// </param>
        /// <return>
        /// A response object containing the response body and response headers.
        /// </return>
        public async Task <HttpOperationResponse <object> > MakeApkRequestWithHttpMessagesAsync(ApkKeuringsVerzoekCommand command = default(ApkKeuringsVerzoekCommand), Dictionary <string, List <string> > customHeaders = null, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (command != null)
            {
                command.Validate();
            }
            // Tracing
            bool   _shouldTrace  = ServiceClientTracing.IsEnabled;
            string _invocationId = null;

            if (_shouldTrace)
            {
                _invocationId = ServiceClientTracing.NextInvocationId.ToString();
                Dictionary <string, object> tracingParameters = new Dictionary <string, object>();
                tracingParameters.Add("command", command);
                tracingParameters.Add("cancellationToken", cancellationToken);
                ServiceClientTracing.Enter(_invocationId, this, "MakeApkRequest", tracingParameters);
            }
            // Construct URL
            var _baseUrl = this.BaseUri.AbsoluteUri;
            var _url     = new Uri(new Uri(_baseUrl + (_baseUrl.EndsWith("/") ? "" : "/")), "api/v1/Apk").ToString();
            // Create HTTP transport objects
            HttpRequestMessage  _httpRequest  = new HttpRequestMessage();
            HttpResponseMessage _httpResponse = null;

            _httpRequest.Method     = new HttpMethod("POST");
            _httpRequest.RequestUri = new Uri(_url);
            // Set Headers
            if (customHeaders != null)
            {
                foreach (var _header in customHeaders)
                {
                    if (_httpRequest.Headers.Contains(_header.Key))
                    {
                        _httpRequest.Headers.Remove(_header.Key);
                    }
                    _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value);
                }
            }

            // Serialize Request
            string _requestContent = null;

            if (command != null)
            {
                _requestContent      = SafeJsonConvert.SerializeObject(command, this.SerializationSettings);
                _httpRequest.Content = new StringContent(_requestContent, Encoding.UTF8);
                _httpRequest.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json; charset=utf-8");
            }
            // Send Request
            if (_shouldTrace)
            {
                ServiceClientTracing.SendRequest(_invocationId, _httpRequest);
            }
            cancellationToken.ThrowIfCancellationRequested();
            _httpResponse = await this.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false);

            if (_shouldTrace)
            {
                ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse);
            }
            HttpStatusCode _statusCode = _httpResponse.StatusCode;

            cancellationToken.ThrowIfCancellationRequested();
            string _responseContent = null;

            if ((int)_statusCode != 200 && (int)_statusCode != 400)
            {
                var ex = new HttpOperationException(string.Format("Operation returned an invalid status code '{0}'", _statusCode));
                _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);

                ex.Request  = new HttpRequestMessageWrapper(_httpRequest, _requestContent);
                ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent);
                if (_shouldTrace)
                {
                    ServiceClientTracing.Error(_invocationId, ex);
                }
                _httpRequest.Dispose();
                if (_httpResponse != null)
                {
                    _httpResponse.Dispose();
                }
                throw ex;
            }
            // Create Result
            var _result = new HttpOperationResponse <object>();

            _result.Request  = _httpRequest;
            _result.Response = _httpResponse;
            // Deserialize Response
            if ((int)_statusCode == 200)
            {
                _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);

                try
                {
                    _result.Body = SafeJsonConvert.DeserializeObject <KeuringsVerzoekAntwoord>(_responseContent, this.DeserializationSettings);
                }
                catch (JsonException ex)
                {
                    _httpRequest.Dispose();
                    if (_httpResponse != null)
                    {
                        _httpResponse.Dispose();
                    }
                    throw new SerializationException("Unable to deserialize the response.", _responseContent, ex);
                }
            }
            // Deserialize Response
            if ((int)_statusCode == 400)
            {
                _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);

                try
                {
                    _result.Body = SafeJsonConvert.DeserializeObject <BadRequest>(_responseContent, this.DeserializationSettings);
                }
                catch (JsonException ex)
                {
                    _httpRequest.Dispose();
                    if (_httpResponse != null)
                    {
                        _httpResponse.Dispose();
                    }
                    throw new SerializationException("Unable to deserialize the response.", _responseContent, ex);
                }
            }
            if (_shouldTrace)
            {
                ServiceClientTracing.Exit(_invocationId, _result);
            }
            return(_result);
        }
コード例 #13
0
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='command'>
 /// </param>
 /// <param name='cancellationToken'>
 /// The cancellation token.
 /// </param>
 public static async Task <object> MakeApkRequestAsync(this IRdwIntegrationServiceAgent operations, ApkKeuringsVerzoekCommand command = default(ApkKeuringsVerzoekCommand), CancellationToken cancellationToken = default(CancellationToken))
 {
     using (var _result = await operations.MakeApkRequestWithHttpMessagesAsync(command, null, cancellationToken).ConfigureAwait(false))
     {
         return(_result.Body);
     }
 }
コード例 #14
0
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='command'>
 /// </param>
 public static object MakeApkRequest(this IRdwIntegrationServiceAgent operations, ApkKeuringsVerzoekCommand command = default(ApkKeuringsVerzoekCommand))
 {
     return(Task.Factory.StartNew(s => ((IRdwIntegrationServiceAgent)s).MakeApkRequestAsync(command), operations, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default).Unwrap().GetAwaiter().GetResult());
 }
        public Task <HttpOperationResponse <object> > MakeApkRequestWithHttpMessagesAsync(ApkKeuringsVerzoekCommand command = null, Dictionary <string, List <string> > customHeaders = null, CancellationToken cancellationToken = default(CancellationToken))
        {
            TimesCalled++;

            throw new Exception();
        }