public IActionResult AddNew([FromBody] ArtikelViewModel newArticle) { var command = new ArtikelNeuanlageCommand() { Artikelnummer = newArticle.ArtikelNummer, Artikelbezeichnung = newArticle.Bezeichnung, }; if (newArticle.Kategorien != null) { command.Kategorien = newArticle.Kategorien.Select(k => k.Name).ToArray(); } try { _handler.Handle(command); } catch (ArtikelException ex) { return(BadRequest(ex.Message)); } catch (Exception) { return(new StatusCodeResult(500)); } return(Ok()); }
public void Should_Store_New_Article() { // Arrange IEvent evt = null; var newArtikel = new Art(new TypeBasedEventDispatcher <Art>(null), 1); newArtikel.EventRaised += (s, e) => evt = e.Event; var cmd = new ArtikelNeuanlageCommand() { Artikelnummer = 1, Artikelbezeichnung = "Dummy" }; var repoMock = new Mock <IArtikelRepository>(MockBehavior.Strict); repoMock.Setup(r => r.LadeArtikelMitKategorien(1)) .Returns(default(Art)); repoMock.Setup(r => r.CreateNew(1)).Returns(newArtikel); var subject = new Article.Services.ArtikelCommandHandler(repoMock.Object); // Act subject.Handle(cmd); // Assert repoMock.Verify(r => r.LadeArtikelMitKategorien(1), Times.Once); repoMock.Verify(r => r.CreateNew(1), Times.Once); newArtikel.Bezeichnung.Should().Be("Dummy"); evt.Should().NotBeNull(); evt.AggregateId.Should().Be(1); evt.Should().BeAssignableTo <ArtikelAngelegtEvent>(); (evt as ArtikelAngelegtEvent).Artikelbezeichnung.Should().Be("Dummy"); }
public void Handle(ArtikelNeuanlageCommand command) { var artikel = _repo.LadeArtikelMitKategorien(command.Artikelnummer); // pre-checks if (artikel != null) { throw new InvalidOperationException("Artikel existiert schon"); } artikel = _repo.CreateNew(command.Artikelnummer); artikel.Neuanlage(command.Artikelbezeichnung, command.Kategorien); }
public void Should_Throw_On_Existing_Article() { // Arrange var cmd = new ArtikelNeuanlageCommand() { Artikelnummer = 1 }; var repoMock = new Mock <IArtikelRepository>(MockBehavior.Strict); repoMock.Setup(r => r.LadeArtikelMitKategorien(1)) .Returns(new Art(null, 1)); var subject = new Article.Services.ArtikelCommandHandler(repoMock.Object); // Act Action action = () => subject.Handle(cmd); // Assert action.Should().Throw <InvalidOperationException>(); repoMock.Verify(r => r.LadeArtikelMitKategorien(1), Times.Once); }