public async Task <IActionResult> BetaalBestelling(Betaling betaling) { var command = new BetaalBestellingCommand { Bedrag = betaling.Bedrag, BestellingId = betaling.Factuurnummer }; var bestellingId = await _commandPublisher.Publish <int>(command, NameConstants.BetaalBestellingCommandQueue); if (bestellingId == 0) { return(BadRequest()); } return(Ok()); }
public async Task <int> BetaalBestelling(BetaalBestellingCommand bestellingCommand) { var klant = await _klantDatamapper.GetKlantWithBestellingId(bestellingCommand.BestellingId); if (klant == null) { return(0); } klant.KredietOver += bestellingCommand.Bedrag; klant.KredietMetSales -= bestellingCommand.Bedrag; await RefreshKlantBestellingen(klant); await _klantDatamapper.Update(klant); _eventPublisher.Publish(new KlantKredietAangepastEvent() { KlantId = klant.Id, NieuweKrediet = klant.KredietOver }); return(bestellingCommand.BestellingId); }
public async Task BetaalBedragVerlaagdKredietEnKeurtBestellingAutomatischGoed() { var betaalCommand = new BetaalBestellingCommand() { BestellingId = 1, Bedrag = 100m }; var klant = new Klant() { Id = "1", KredietMetSales = 100, KredietOver = 200 }; var finalBestelling = new Bestelling { Id = 1, KlantId = "1", Klant = klant, AdresRegel1 = "Laagstraat 11", Plaats = "Laaghoven", Postcode = "1234FG", BesteldeArtikelen = new List <BestellingItem> { new BestellingItem(1, 1) { Artikel = new Artikel { Prijs = 20m } }, new BestellingItem(2, 1) { Artikel = new Artikel { Prijs = 5m } } } }; var eventpublisherMock = new Mock <IEventPublisher>(MockBehavior.Strict); eventpublisherMock.Setup(m => m.Publish( It.Is <BestellingGoedGekeurdEvent>(d => d.RoutingKey == NameConstants.BestellingGoedgekeurdEvent))).Verifiable(); eventpublisherMock .Setup(ep => ep.Publish(It.Is <KlantKredietAangepastEvent>(e => e.RoutingKey == NameConstants.KlantKredietAangepastEvent))) .Verifiable(); var datamapperMock = new Mock <IBestellingDatamapper>(MockBehavior.Strict); datamapperMock .Setup(m => m.Update( It.Is <Bestelling>(b => b.BestellingStatus == BestellingStatus.GereedVoorBehandeling))) .Returns(Task.CompletedTask) .Verifiable("Bestelling should have GereedVoorBehandeling status"); var klantDatamapperMock = new Mock <IKlantDatamapper>(MockBehavior.Strict); klantDatamapperMock.Setup(k => k.GetUnFinishedBestellingenOfKlant("1")) .ReturnsAsync(new List <Bestelling>() { finalBestelling }) .Verifiable(); klantDatamapperMock.Setup(k => k.GetKlantWithBestellingId(1)).ReturnsAsync(klant).Verifiable(); klantDatamapperMock.Setup(k => k.Update(klant)).Returns(Task.CompletedTask).Verifiable(); var listener = new BestellingListener(datamapperMock.Object, klantDatamapperMock.Object, null, eventpublisherMock.Object); var result = await listener.BetaalBestelling(betaalCommand); Assert.AreEqual(BestellingStatus.GereedVoorBehandeling, finalBestelling.BestellingStatus); Assert.AreEqual(0, klant.KredietMetSales); Assert.AreEqual(269.75m, klant.KredietOver); }