public async Task CreateBestelling_ShouldReturn201StatusCode()
        {
            // Arrange
            var klant = new KlantBuilder().SetDummy().SetId(10).SetEmail("*****@*****.**").Create();

            var bestelling = new Bestelling()
            {
                ContactInfo  = new ContactInfo(),
                Afleveradres = new Afleveradres(),
                BestelRegels = new List <BestelRegel>()
            };

            _jwtHelperMock.Setup(h => h.GetEmail(It.IsAny <HttpContext>())).Returns(klant.Email);
            _klantDataMapperMock.Setup(k => k.GetByEmail(klant.Email)).Returns(klant);

            _commandPublisherMock.Setup(repo => repo.Publish <long>(It.Is <PlaatsBestellingCommand>(c =>
                                                                                                    c.RoutingKey == NameConstants.BestelServicePlaatsBestellingCommandQueue &&
                                                                                                    c.Bestelling.Klantnummer == klant.Id
                                                                                                    ))).ReturnsAsync(42);

            // Act
            var result = await _target.CreateBestelling(bestelling);

            // Assert
            _commandPublisherMock.VerifyAll();
            _klantDataMapperMock.VerifyAll();

            var createdResult = result as CreatedResult;

            Assert.IsNotNull(createdResult);
            Assert.AreEqual(201, createdResult.StatusCode);
            Assert.IsInstanceOfType(createdResult.Value, typeof(long));
            Assert.AreEqual(42L, createdResult.Value);
        }
        public async Task CreateBestelling_ShouldCreateNewBestelling()
        {
            var klant = new Klant
            {
                Voornaam       = "Pieter",
                Achternaam     = "Pas",
                Email          = "*****@*****.**",
                Telefoonnummer = "06123456789",
                Adres          = new Adres
                {
                    Straatnaam = "Schepen Canishof",
                    Huisnummer = "71",
                    Postcode   = "6831 HJ",
                    Plaats     = "Arnhem",
                    Land       = "Nederland"
                }
            };

            _dbContext.KlantEntities.Add(klant);
            _dbContext.SaveChanges();

            var bestelling = new Bestelling
            {
                ContactInfo = new ContactInfo
                {
                    Naam           = $"{klant.Voornaam} {klant.Achternaam}",
                    Email          = klant.Email,
                    Telefoonnummer = klant.Telefoonnummer
                },
                Afleveradres = new Afleveradres
                {
                    Adres    = $"{klant.Adres.Straatnaam} {klant.Adres.Huisnummer}",
                    Plaats   = klant.Adres.Plaats,
                    Postcode = klant.Adres.Postcode,
                    Land     = klant.Adres.Land
                },
                BestelRegels = new List <BestelRegel>
                {
                    new BestelRegel
                    {
                        Artikelnummer = 10,
                        Aantal        = 5
                    }
                }
            };

            _jwtHelperMock.Setup(h => h.GetEmail(It.IsAny <HttpContext>())).Returns(klant.Email);

            PlaatsBestellingCommand commandResult = null;
            var receiver = _nijnContext.CreateCommandReceiver(NameConstants.BestelServicePlaatsBestellingCommandQueue);

            receiver.DeclareCommandQueue();
            receiver.StartReceivingCommands(request =>
            {
                commandResult = JsonConvert.DeserializeObject <PlaatsBestellingCommand>(request.Message);
                return(new ResponseCommandMessage("10", "Long", request.CorrelationId));
            });

            var result = await _target.CreateBestelling(bestelling);

            var queue = _nijnContext.CommandBus.Queues[NameConstants.BestelServicePlaatsBestellingCommandQueue];

            Assert.IsInstanceOfType(result, typeof(CreatedResult));
            Assert.AreEqual(1, queue.CalledTimes);

            Assert.IsNotNull(commandResult, "commandResult != null");
            var bestellingResult = commandResult.Bestelling;

            Assert.AreEqual(bestelling.ContactInfo.Naam, bestellingResult.ContactInfo.Naam);
            Assert.AreEqual(bestelling.ContactInfo.Email, bestellingResult.ContactInfo.Email);
            Assert.AreEqual(bestelling.ContactInfo.Telefoonnummer, bestellingResult.ContactInfo.Telefoonnummer);

            Assert.AreEqual(bestelling.Afleveradres.Adres, bestellingResult.Afleveradres.Adres);
            Assert.AreEqual(bestelling.Afleveradres.Plaats, bestellingResult.Afleveradres.Plaats);
            Assert.AreEqual(bestelling.Afleveradres.Postcode, bestellingResult.Afleveradres.Postcode);
            Assert.AreEqual(bestelling.Afleveradres.Land, bestellingResult.Afleveradres.Land);

            Assert.AreEqual(1, bestellingResult.BestelRegels.Count);
            Assert.IsTrue(bestellingResult.BestelRegels.Any(r => r.Artikelnummer == 10 && r.Aantal == 5));
        }