public IActionResult GetDevis([FromRoute] int grossisteId, [FromBody] GetDevisRequest request) { request.GrossisteId = grossisteId; var devis = _grossisteService.GetDevis(request); return(Ok(devis)); }
public void GetDevis_DoitLancerUneException_QuandDoublonBiereCommandee() { // Arrange var request = new GetDevisRequest { Commandes = new List <GetDevisRequest.Commande> { new GetDevisRequest.Commande { BiereId = 1, Quantite = 10 }, new GetDevisRequest.Commande { BiereId = 2, Quantite = 10 }, new GetDevisRequest.Commande { BiereId = 1, Quantite = 10 }, } }; InjectClassFor(InitializeContext()); // Act Action action = () => ClassUnderTest.GetDevis(request); // Assert action.Should() .Throw <ValidationException>() .WithMessage(DevisValidationMessage.BiereDoublon); }
public void GetDevis_DoitRenvoyerDevisSansReduction_QuandInferieur10() { // Arrange var grossiste = fixture.Create <Core.Domain.Grossiste>(); var request = new GetDevisRequest { GrossisteId = grossiste.Id, Commandes = new List <GetDevisRequest.Commande> { new GetDevisRequest.Commande { BiereId = 1, Quantite = 2 }, new GetDevisRequest.Commande { BiereId = 2, Quantite = 3 }, } }; var chimayBleue = new Biere { Id = 1, Prix = 2.8, Nom = "Chimay Bleue" }; var chimayBleueExtra = new Biere { Id = 2, Prix = 3.8, Nom = "Chimay Bleue Extra" }; var context = InitializeContext(); context.Grossistes.Add(grossiste); context.Bieres.Add(chimayBleue); context.Bieres.Add(chimayBleueExtra); context.StockGrossistes.Add(new StockGrossiste { Id = 1, BiereId = 1, Quantite = 5, GrossisteId = grossiste.Id }); context.StockGrossistes.Add(new StockGrossiste { Id = 2, BiereId = 2, Quantite = 10, GrossisteId = grossiste.Id }); context.SaveChanges(); InjectClassFor(context); // Act var response = ClassUnderTest.GetDevis(request); // Assert response.LignesDevis[0].Biere.Should().Be(chimayBleue.Nom); response.LignesDevis[0].Quantite.Should().Be(2); response.LignesDevis[0].PrixUnitaire.Should().Be(chimayBleue.Prix); response.LignesDevis[1].Biere.Should().Be(chimayBleueExtra.Nom); response.LignesDevis[1].Quantite.Should().Be(3); response.LignesDevis[1].PrixUnitaire.Should().Be(chimayBleueExtra.Prix); response.PrixFinal.Should().Be(2 * chimayBleue.Prix + 3 * chimayBleueExtra.Prix); }
public void GetDevis_DoitLancerUneException_QuandCommandeVide() { // Arrange var request = new GetDevisRequest(); InjectClassFor(InitializeContext()); // Act Action action = () => ClassUnderTest.GetDevis(request); // Assert action.Should() .Throw <ValidationException>() .WithMessage(DevisValidationMessage.CommandeVide); }
public void GetDevis_DoitLancerUneException_QuandGrossisteStockInsufissant() { // Arrange var grossiste = fixture.Create <Core.Domain.Grossiste>(); var request = new GetDevisRequest { GrossisteId = grossiste.Id, Commandes = new List <GetDevisRequest.Commande> { new GetDevisRequest.Commande { BiereId = 1, Quantite = 2 }, new GetDevisRequest.Commande { BiereId = 2, Quantite = 15 }, } }; var chimayBleue = new Biere { Id = 1, Prix = 2.8, Nom = "Chimay Bleue" }; var chimayBleueExtra = new Biere { Id = 2, Prix = 3.8, Nom = "Chimay Bleue Extra" }; var context = InitializeContext(); context.Grossistes.Add(grossiste); context.Bieres.Add(chimayBleue); context.Bieres.Add(chimayBleueExtra); context.StockGrossistes.Add(new StockGrossiste { Id = 1, BiereId = 1, Quantite = 5, GrossisteId = grossiste.Id }); context.StockGrossistes.Add(new StockGrossiste { Id = 2, BiereId = 2, Quantite = 10, GrossisteId = grossiste.Id }); context.SaveChanges(); InjectClassFor(context); // Act Action action = () => ClassUnderTest.GetDevis(request); // Assert action.Should() .Throw <ValidationException>() .WithMessage(DevisValidationMessage.StockInsuffisant); }
public void GetDevis_DoitRenvoyerDevisAvecReduction_QuandSuperieur20() { // Arrange var grossiste = fixture.Create <Core.Domain.Grossiste>(); var request = new GetDevisRequest { GrossisteId = grossiste.Id, Commandes = new List <GetDevisRequest.Commande> { new GetDevisRequest.Commande { BiereId = 1, Quantite = 15 }, new GetDevisRequest.Commande { BiereId = 2, Quantite = 10 }, } }; var chimayBleue = new Biere { Id = 1, Prix = 2.8, Nom = "Chimay Bleue" }; var chimayBleueExtra = new Biere { Id = 2, Prix = 3.8, Nom = "Chimay Bleue Extra" }; var context = InitializeContext(); context.Grossistes.Add(grossiste); context.Bieres.Add(chimayBleue); context.Bieres.Add(chimayBleueExtra); context.StockGrossistes.Add(new StockGrossiste { Id = 1, BiereId = 1, Quantite = 15, GrossisteId = grossiste.Id }); context.StockGrossistes.Add(new StockGrossiste { Id = 2, BiereId = 2, Quantite = 10, GrossisteId = grossiste.Id }); context.SaveChanges(); InjectClassFor(context); // Act var response = ClassUnderTest.GetDevis(request); // Assert response.PrixFinal.Should().Be((15 * chimayBleue.Prix + 10 * chimayBleueExtra.Prix) * 0.8); }
public void GetDevis_DoitLancerUneException_QuandGrossisteExistePas() { // Arrange var request = new GetDevisRequest { Commandes = fixture.Build <GetDevisRequest.Commande>().CreateMany() }; InjectClassFor(InitializeContext()); // Act Action action = () => ClassUnderTest.GetDevis(request); // Assert action.Should() .Throw <ValidationException>() .WithMessage(DevisValidationMessage.GrossisteInexistant); }
public void GetDevis_DoitLancerUneException_QuandGrossisteStockIncomplet() { // Arrange var grossiste = fixture.Create <Core.Domain.Grossiste>(); var request = new GetDevisRequest { GrossisteId = grossiste.Id, Commandes = new List <GetDevisRequest.Commande> { new GetDevisRequest.Commande { BiereId = 1, Quantite = 10 }, new GetDevisRequest.Commande { BiereId = 2, Quantite = 10 }, new GetDevisRequest.Commande { BiereId = 3, Quantite = 10 }, } }; var context = InitializeContext(); context.Grossistes.Add(grossiste); context.StockGrossistes.Add(new StockGrossiste { Id = 1, BiereId = 1, GrossisteId = grossiste.Id }); context.StockGrossistes.Add(new StockGrossiste { Id = 2, BiereId = 2, GrossisteId = grossiste.Id }); context.SaveChanges(); InjectClassFor(context); // Act Action action = () => ClassUnderTest.GetDevis(request); // Assert action.Should() .Throw <ValidationException>() .WithMessage(DevisValidationMessage.StockIncomplet); }
public GetDevisResponse GetDevis(GetDevisRequest request) { var response = new GetDevisResponse(); if (!request.Commandes.Any()) { throw new ValidationException(DevisValidationMessage.CommandeVide); } var bieresCommandes = request.Commandes.Select(c => c.BiereId).ToArray(); if (bieresCommandes.Distinct().Count() != bieresCommandes.Length) { throw new ValidationException(DevisValidationMessage.BiereDoublon); } var grossiste = _brasserieContext .Grossistes .Include(g => g.StockGrossistes) .ThenInclude(sg => sg.Biere) .FirstOrDefault(g => g.Id == request.GrossisteId); if (grossiste == null) { throw new ValidationException(DevisValidationMessage.GrossisteInexistant); } var bieresGrossiste = grossiste.StockGrossistes.Select(sg => sg.BiereId).Distinct(); if (!bieresCommandes.All(b => bieresGrossiste.Contains(b))) { throw new ValidationException(DevisValidationMessage.StockIncomplet); } foreach (var commande in request.Commandes) { var biereGrossiste = grossiste.StockGrossistes.First(sg => sg.BiereId == commande.BiereId); if (biereGrossiste.Quantite < commande.Quantite) { throw new ValidationException(DevisValidationMessage.StockInsuffisant); } response.LignesDevis.Add(new GetDevisResponse.LigneDevis { Biere = biereGrossiste.Biere.Nom, Quantite = commande.Quantite, PrixUnitaire = biereGrossiste.Biere.Prix }); } if (response.QuantiteTotale > 10) { response.Reduction = 10; } if (response.QuantiteTotale > 20) { response.Reduction = 20; } return(response); }