public void BestellingToegevoegd_InsertGetsCalled() { var bestelling = new BestellingToegevoegdEvent() { Bestelling = new Bestelling() { Id = 1, KlantId = "1", AdresRegel1 = "Laagstraat 11", Plaats = "Laaghoven", Postcode = "1234FG", BesteldeArtikelen = new List <BestellingItem> { new BestellingItem(1, 3) { Id = 1 }, new BestellingItem(2, 5) { Id = 2 } } } }; var datamapperMock = new Mock <IBestellingDatamapper>(MockBehavior.Strict); datamapperMock.Setup(dm => dm.Insert(It.Is <Bestelling>(b => b.Id == 1))).Returns(Task.CompletedTask).Verifiable(); var bestellingListener = new BestellingListener(datamapperMock.Object); bestellingListener.BestellingToegevoegd(bestelling); datamapperMock.Verify(dm => dm.Insert(It.Is <Bestelling>(b => b.Id == 1))); }
public async Task VolgendeBestellingWhenNoMoreLeftReturns0() { var datamapperMock = new Mock <IBestellingDatamapper>(MockBehavior.Strict); datamapperMock .Setup(m => m.GetFirstUndone()).ReturnsAsync(0); var klantDatamapperMock = new Mock <IKlantDatamapper>(MockBehavior.Strict); var listener = new BestellingListener(datamapperMock.Object, klantDatamapperMock.Object, null, null); var result = await listener.VolgendeBestellingInpakken(new VolgendeBestellingCommand()); Assert.AreEqual(0, result); }
public async Task WhenDeBestellingIsGeplaatst() { using (var context = new BeheerContext(options)) { BestellingDatamapper bestellingDatamapper = new BestellingDatamapper(context); KlantDatamapper klantDatamapper = new KlantDatamapper(context); TestBusContext testBusContext = new TestBusContext(); CommandPublisher commandPublisher = new CommandPublisher(testBusContext); EventPublisher eventPublisher = new EventPublisher(testBusContext); bestellingListener = new BestellingListener(bestellingDatamapper, klantDatamapper, commandPublisher, eventPublisher); id = await bestellingListener.PlaatsBestelling(bestelling); } }
public async Task FinishBestellingLowersVoorraad() { var bestelling = new Bestelling { KlantId = "1", AdresRegel1 = "Laagstraat 11", Plaats = "Laaghoven", Postcode = "1234FG", BesteldeArtikelen = new List <BestellingItem> { new BestellingItem(1, 3), new BestellingItem(2, 5) } }; var eventpublisherMock = new Mock <IEventPublisher>(MockBehavior.Strict); eventpublisherMock.Setup(m => m.Publish( It.Is <BestellingVerzondenEvent>(d => d.RoutingKey == NameConstants.BestellingVerzondenEvent))); var datamapperMock = new Mock <IBestellingDatamapper>(MockBehavior.Strict); datamapperMock .Setup(m => m.GetBestelling(1)) .ReturnsAsync(bestelling); var mock = new Mock <ICommandPublisher>(MockBehavior.Strict); mock.Setup(s => s.Publish <bool>(It.IsAny <HaalVoorraadUitMagazijnCommand>(), "Kantilever.MagazijnService", "Kantilever.MagazijnService.HaalVoorraadUitMagazijnCommand")).ReturnsAsync(false); var klantDatamapperMock = new Mock <IKlantDatamapper>(MockBehavior.Strict); var listener = new BestellingListener(datamapperMock.Object, klantDatamapperMock.Object, mock.Object, eventpublisherMock.Object); await listener.FinishBestelling(new BestellingAfrondenCommand { Id = 1 }); mock.Verify( s => s.Publish <bool>(It.IsAny <HaalVoorraadUitMagazijnCommand>(), "Kantilever.MagazijnService", "Kantilever.MagazijnService.HaalVoorraadUitMagazijnCommand"), Times.Exactly(2)); }
public async Task VolgendeBestellingGivesVolgendeBestellingAndThrowsInpakkenGestartEvent() { var eventpublisherMock = new Mock <IEventPublisher>(MockBehavior.Strict); eventpublisherMock.Setup(m => m.Publish( It.Is <BestellingInpakkenGestartEvent>(d => d.RoutingKey == NameConstants.BestellingInpakkenGestartEvent))); var datamapperMock = new Mock <IBestellingDatamapper>(MockBehavior.Strict); datamapperMock .Setup(m => m.GetFirstUndone()).ReturnsAsync(1); var klantDatamapperMock = new Mock <IKlantDatamapper>(MockBehavior.Strict); var listener = new BestellingListener(datamapperMock.Object, klantDatamapperMock.Object, null, eventpublisherMock.Object); int?result = await listener.VolgendeBestellingInpakken(new VolgendeBestellingCommand()); Assert.AreEqual(1, result); }
public async Task BestellingInpakkenGestart_ChangesBestellingStatus() { var bestelling = new Bestelling { Id = 1, KlantId = "1", AdresRegel1 = "Laagstraat 11", Plaats = "Laaghoven", Postcode = "1234FG", BestellingStatus = BestellingStatus.GereedVoorBehandeling, BesteldeArtikelen = new List <BestellingItem> { new BestellingItem(1, 3) { Id = 1 }, new BestellingItem(2, 5) { Id = 2 } } }; var datamapperMock = new Mock <IBestellingDatamapper>(MockBehavior.Strict); datamapperMock.Setup(dm => dm.Get(bestelling.Id)) .ReturnsAsync(bestelling) .Verifiable(); datamapperMock.Setup(dm => dm.Update(It.Is <Bestelling>(b => b.Id == 1))).Returns(Task.CompletedTask) .Verifiable(); var listener = new BestellingListener(datamapperMock.Object); await listener.BestellingInpakkenGestart(new BestellingInpakkenGestartEvent { Id = bestelling.Id }); Assert.AreEqual(BestellingStatus.InBehandelingDoorMagazijn, bestelling.BestellingStatus); }
public async Task KeurBestellingAf_UpdatesBestelling_And_FiresEvent() { var klant = new Klant() { Voornaam = "Hans", Achternaam = "van Huizen", Id = "1", KredietMetSales = 30.25m, KredietOver = 469.75m }; var bestelling = new Bestelling { Id = 2, KlantId = "1", Klant = klant, AdresRegel1 = "Laagstraat 11", Plaats = "Laaghoven", Postcode = "1234FG", BestellingStatus = BestellingStatus.TerControleVoorSales, BesteldeArtikelen = new List <BestellingItem> { new BestellingItem(1, 1) { Artikel = new Artikel() { Artikelnummer = 1, Prijs = 20m } }, new BestellingItem(2, 1) { Artikel = new Artikel() { Artikelnummer = 1, Prijs = 5m } } } }; var eventpublisherMock = new Mock <IEventPublisher>(MockBehavior.Strict); eventpublisherMock .Setup(ep => ep.Publish(It.Is <BestellingAfgekeurdEvent>(e => e.RoutingKey == NameConstants.BestellingAfgekeurdEvent))) .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.GetBestelling(bestelling.Id)) .ReturnsAsync(bestelling) .Verifiable(); datamapperMock .Setup(m => m.Update(bestelling)) .Returns(Task.CompletedTask) .Verifiable(); var klantDatamapperMock = new Mock <IKlantDatamapper>(MockBehavior.Strict); klantDatamapperMock.Setup(k => k.GetUnFinishedBestellingenOfKlant("1")) .ReturnsAsync(new List <Bestelling>()); klantDatamapperMock.Setup(k => k.Update(klant)).Returns(Task.CompletedTask).Verifiable(); var bestellingListener = new BestellingListener(datamapperMock.Object, klantDatamapperMock.Object, null, eventpublisherMock.Object); var result = await bestellingListener.KeurBestellingAf(new BestellingAfkeurenCommand { Id = bestelling.Id }); Assert.AreEqual(BestellingStatus.Afgekeurd, bestelling.BestellingStatus); Assert.AreEqual(0, bestelling.Klant.KredietMetSales); Assert.AreEqual(500, bestelling.Klant.KredietOver); }
public async Task KeurBestellingGoed_UpdatesBestelling_And_FiresEvent_AndLowersKredietLeft() { var klant = new Klant() { Id = "1", KredietOver = 500m }; var bestelling = new Bestelling { Id = 2, KlantId = "1", Klant = klant, AdresRegel1 = "Laagstraat 11", Plaats = "Laaghoven", Postcode = "1234FG", BestellingStatus = BestellingStatus.TerControleVoorSales, BesteldeArtikelen = new List <BestellingItem> { new BestellingItem(1, 1) { Artikel = new Artikel { Prijs = 10m } }, new BestellingItem(2, 2) { Artikel = new Artikel { Prijs = 5m } } } }; var eventpublisherMock = new Mock <IEventPublisher>(MockBehavior.Strict); eventpublisherMock .Setup(ep => ep.Publish(It.Is <BestellingGoedGekeurdEvent>(e => e.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.GetBestelling(bestelling.Id)) .ReturnsAsync(bestelling) .Verifiable(); datamapperMock .Setup(m => m.Update(bestelling)) .Returns(Task.CompletedTask) .Verifiable(); var klantDatamapperMock = new Mock <IKlantDatamapper>(MockBehavior.Strict); klantDatamapperMock.Setup(k => k.Update(klant)).Returns(Task.CompletedTask).Verifiable(); var bestellingListener = new BestellingListener(datamapperMock.Object, klantDatamapperMock.Object, null, eventpublisherMock.Object); var result = await bestellingListener.KeurBestellingGoed(new BestellingGoedkeurenCommand { Id = bestelling.Id }); Assert.AreEqual(BestellingStatus.GereedVoorBehandeling, bestelling.BestellingStatus); Assert.AreEqual(475.80m, klant.KredietOver); }
public async Task MultipleBestellingenInsertIntoDatabaseWithStatusGereedvoorBehandelingUntilKredietLimietIsBereikt() { var klant = new Klant() { Id = "1", KredietOver = 500 }; var bestelling1 = new NieuweBestellingCommand { KlantId = "1", AdresRegel1 = "Laagstraat 11", Plaats = "Laaghoven", Postcode = "1234FG", BesteldeArtikelen = new List <BestellingItem> { new BestellingItem(1, 1), } }; var bestelling2 = new NieuweBestellingCommand { KlantId = "1", AdresRegel1 = "Laagstraat 11", Plaats = "Laaghoven", Postcode = "1234FG", BesteldeArtikelen = new List <BestellingItem> { new BestellingItem(1, 1), } }; var bestelling3 = new NieuweBestellingCommand { KlantId = "1", AdresRegel1 = "Laagstraat 11", Plaats = "Laaghoven", Postcode = "1234FG", BesteldeArtikelen = new List <BestellingItem> { new BestellingItem(1, 1), } }; var finalBestelling1 = 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 = 19.99m } }, } }; var finalBestelling2 = new Bestelling { Id = 2, KlantId = "1", Klant = klant, AdresRegel1 = "Laagstraat 11", Plaats = "Laaghoven", Postcode = "1234FG", BesteldeArtikelen = new List <BestellingItem> { new BestellingItem(1, 1) { Artikel = new Artikel { Prijs = 199.99m } }, } }; var finalBestelling3 = new Bestelling { Id = 3, KlantId = "1", Klant = klant, AdresRegel1 = "Laagstraat 11", Plaats = "Laaghoven", Postcode = "1234FG", BesteldeArtikelen = new List <BestellingItem> { new BestellingItem(1, 1) { Artikel = new Artikel { Prijs = 249.99m } }, } }; var eventpublisherMock = new Mock <IEventPublisher>(MockBehavior.Strict); eventpublisherMock.Setup(m => m.Publish( It.Is <BestellingToegevoegdEvent>(d => d.RoutingKey == NameConstants.BestellingToegevoegdEvent))); int id = 0; var datamapperMock = new Mock <IBestellingDatamapper>(MockBehavior.Strict); datamapperMock .Setup(m => m.Insert(It.Is <Bestelling>(b => b.KlantId == "1"))) .Callback((Bestelling b) => b.Id = ++id) .Returns(Task.CompletedTask) .Verifiable("Bestelling needs to have ControlevoorSales status"); eventpublisherMock .Setup(ep => ep.Publish(It.Is <KlantKredietAangepastEvent>(e => e.RoutingKey == NameConstants.KlantKredietAangepastEvent))) .Verifiable(); datamapperMock.Setup(m => m.GetBestelling(1)).ReturnsAsync(finalBestelling1); datamapperMock.Setup(m => m.GetBestelling(2)).ReturnsAsync(finalBestelling2); datamapperMock.Setup(m => m.GetBestelling(3)).ReturnsAsync(finalBestelling3); datamapperMock .Setup(m => m.Update( It.Is <Bestelling>(b => (b.BestellingStatus == BestellingStatus.GereedVoorBehandeling && (b.Id == 1 || b.Id == 2)) || (b.BestellingStatus == BestellingStatus.TerControleVoorSales && b.Id == 3)))) .Returns(Task.CompletedTask) .Verifiable("Bestelling should have GereedVoorBehandeling status"); var klantDatamapperMock = new Mock <IKlantDatamapper>(MockBehavior.Strict); klantDatamapperMock.Setup(k => k.Update(It.Is <Klant>(kl => kl.Id == "1"))).Returns(Task.CompletedTask).Verifiable(); var listener = new BestellingListener(datamapperMock.Object, klantDatamapperMock.Object, null, eventpublisherMock.Object); var result1 = await listener.PlaatsBestelling(bestelling1); var result2 = await listener.PlaatsBestelling(bestelling2); var result3 = await listener.PlaatsBestelling(bestelling3); Assert.AreEqual(1, result1); Assert.AreEqual(2, result2); Assert.AreEqual(3, result3); Assert.AreEqual(568.67m, klant.KredietMetSales); Assert.AreEqual(233.82m, klant.KredietOver); //2 bestellingen will go to magazijn, 1 not so check for 2 times klantDatamapperMock.Verify(k => k.Update(It.Is <Klant>(kl => kl.Id == "1")), Times.Exactly(3)); }
public async Task NewBestellingUnderKredietLimitEuroInsertsIntoDatabaseWithStatusGereed() { var bestelling = new NieuweBestellingCommand { KlantId = "1", AdresRegel1 = "Laagstraat 11", Plaats = "Laaghoven", Postcode = "1234FG", BesteldeArtikelen = new List <BestellingItem> { new BestellingItem(1, 3), new BestellingItem(2, 5) } }; var eventpublisherMock = new Mock <IEventPublisher>(MockBehavior.Strict); eventpublisherMock.Setup(m => m.Publish( It.Is <BestellingToegevoegdEvent>(d => d.RoutingKey == NameConstants.BestellingToegevoegdEvent))); 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.Insert(It.Is <Bestelling>(b => b.KlantId == "1" && b.BesteldeArtikelen.Count == 2))) .Callback((Bestelling b) => b.Id = 1) .Returns(Task.CompletedTask).Verifiable(); var klant = new Klant() { Id = "1", KredietOver = 500m }; var finalBestelling = new Bestelling { Id = 1, KlantId = "1", Klant = klant, AdresRegel1 = "Laagstraat 11", Plaats = "Laaghoven", Postcode = "1234FG", BesteldeArtikelen = new List <BestellingItem> { new BestellingItem(1, 3) { Artikel = new Artikel { Prijs = 19.99m } }, new BestellingItem(2, 5) { Artikel = new Artikel { Prijs = 14.99m } } } }; datamapperMock.Setup(m => m.GetBestelling(1)).ReturnsAsync(finalBestelling).Verifiable(); 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(kd => kd.Update(It.Is <Klant>(k => k.Id == "1"))).Returns(Task.CompletedTask).Verifiable(); var listener = new BestellingListener(datamapperMock.Object, klantDatamapperMock.Object, null, eventpublisherMock.Object); var result = await listener.PlaatsBestelling(bestelling); Assert.AreEqual(1, result); Assert.AreEqual(163.27m, klant.KredietMetSales); Assert.AreEqual(336.73m, klant.KredietOver); }
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); }