public async Task When_updating_a_shipping_line_name() { using (var contextFactory = new FakeShipRegistryContextFactory(_options)) { //arrange var uow = contextFactory.Create(); var repository = new ShippingLineRepositoryAsync(uow); var existingLine = new ShippingLine(new Id(), new LineName("Maersk")); await repository.AddAsync(existingLine); var commandProcessor = new FakeCommandProcessor(); var command = new UpdateLineNameCommand(existingLine.Id, new LineName("Onassis")); var handler = new UpdateLineNameHandler(contextFactory, commandProcessor); //act await handler.HandleAsync(command); //assert var line = uow.Lines.SingleOrDefault(l => l.Id == existingLine.Id); Assert.That(line.LineName, Is.EqualTo(new LineName("Onassis"))); Assert.That(line.Version, Is.EqualTo(1)); var domainEvent = commandProcessor.Messages.SingleOrDefault(m => m.Action == Action.Post); Assert.That(domainEvent, Is.Not.Null); var addedMessage = (LineNameUpdatedEvent)domainEvent.Message; Assert.That(addedMessage.LineName, Is.EqualTo(new LineName("Onassis"))); Assert.That(addedMessage.Version, Is.EqualTo(1)); } }
public async Task When_getting_all_shipping_lines() { using (var contextFactory = new FakeShipRegistryContextFactory(_options)) { //arrange var uow = contextFactory.Create(); var repository = new ShippingLineRepositoryAsync(uow); var existingLineOne = new ShippingLine(new Id(), new LineName("Maersk")); await repository.AddAsync(existingLineOne); var existingLineTwo = new ShippingLine(new Id(), new LineName("Onassis")); await repository.AddAsync(existingLineTwo); var query = new ShippingLinesAllQuery(); var queryHandler = new ShippingLinesAllQueryHandler(contextFactory); //act var lines = await queryHandler.ExecuteAsync(query); //assert Assert.That(lines, Is.Not.Null); Assert.That(2, Is.EqualTo(lines.ShippingLines.Length)); } }
public override async Task <RemoveLineCommand> HandleAsync(RemoveLineCommand command, CancellationToken cancellationToken = new CancellationToken()) { using (var uow = _contextFactory.Create()) { var repo = new ShippingLineRepositoryAsync(uow); await repo.DeleteAsync(command.LineId); } return(await base.HandleAsync(command, cancellationToken)); }
public override async Task <AddShippingLineCommand> HandleAsync(AddShippingLineCommand command, CancellationToken cancellationToken = new CancellationToken()) { using (var uow = _contextFactory.Create()) { var repository = new ShippingLineRepositoryAsync(uow); var line = new ShippingLine(new Id(command.Id), command.LineName); await repository.AddAsync(line); await _commandProcessor.PostAsync(new NewLineAddedEvent(line.Id, line.LineName)); } return(await base.HandleAsync(command, cancellationToken)); }
public async Task When_registering_a_new_ship() { //arrange using (var contextFactory = new FakeShipRegistryContextFactory(_options)) { var uow = contextFactory.Create(); var lineRepo = new ShippingLineRepositoryAsync(uow); var shippingLine = lineRepo.AddAsync(new ShippingLine(new Id(), new LineName("Maersk"))).Result; var commandProcessor = new FakeCommandProcessor(); var handler = new NewShipRegistrationHandlerAsync(contextFactory, commandProcessor); var newShipCommand = new AddShipCommand( type: ShipType.Tanker, name: new ShipName("MV Toronto Star"), capacity: new Capacity(30000), shippingLine: shippingLine.Id); //act await handler.HandleAsync(newShipCommand); //assert var ship = uow.Ships.SingleOrDefault(s => s.Id == new Id(newShipCommand.Id)); Assert.That(ship, Is.Not.Null); Assert.That(ship.ShipType, Is.EqualTo(newShipCommand.Type)); Assert.That(ship.ShipName, Is.EqualTo(newShipCommand.Name)); Assert.That(ship.Capacity, Is.EqualTo(newShipCommand.Capacity)); Assert.That(ship.Id, Is.EqualTo(new Id(newShipCommand.Id))); Assert.That(ship.ShippingLineId, Is.EqualTo(newShipCommand.ShippingLine)); Assert.That(ship.Version, Is.EqualTo(0)); var domainEvent = commandProcessor.Messages.SingleOrDefault(m => m.Action == Action.Post); Assert.That(domainEvent, Is.Not.Null); var addedMessage = (NewShipAddedEvent)domainEvent.Message; Assert.That(addedMessage.Id, Is.EqualTo(newShipCommand.Id)); Assert.That(addedMessage.Capacity, Is.EqualTo(newShipCommand.Capacity)); Assert.That(addedMessage.Name, Is.EqualTo(newShipCommand.Name)); Assert.That(addedMessage.Type, Is.EqualTo(newShipCommand.Type)); Assert.That(addedMessage.ShipId, Is.EqualTo(new Id(newShipCommand.Id))); Assert.That(addedMessage.ShippingLine, Is.EqualTo(newShipCommand.ShippingLine)); } }
public override async Task <UpdateLineNameCommand> HandleAsync(UpdateLineNameCommand command, CancellationToken cancellationToken = new CancellationToken()) { using (var uow = _contextFactory.Create()) { var repository = new ShippingLineRepositoryAsync(uow); var line = await repository.GetAsync(command.LineId); if (line == null) { throw new NotFoundException($"Could not find a line with the Id: {command.LineId}"); } line.LineName = command.LineName; await repository.UpdateAsync(line); await _commandProcessor.PostAsync(new LineNameUpdatedEvent(line.Id, line.LineName, line.Version)); } return(await base.HandleAsync(command, cancellationToken)); }
public async Task When_getting_a_shipping_line() { using (var contextFactory = new FakeShipRegistryContextFactory(_options)) { //arrange var uow = contextFactory.Create(); var repository = new ShippingLineRepositoryAsync(uow); var existingLine = new ShippingLine(new Id(), new LineName("Maersk")); await repository.AddAsync(existingLine); var query = new ShippingLineByIdQuery(existingLine.Id); var queryHandler = new ShippingLineByIdQueryHandler(contextFactory); //act var line = await queryHandler.ExecuteAsync(query); //assert Assert.That(line, Is.Not.Null); Assert.That(line.Id, Is.EqualTo(existingLine.Id.Value)); Assert.That(line.LineName, Is.EqualTo(existingLine.LineName.ToString())); } }
public async Task When_removing_a_shipping_line() { using (var contextFactory = new FakeShipRegistryContextFactory(_options)) { //arrange var uow = contextFactory.Create(); var repository = new ShippingLineRepositoryAsync(uow); var existingLine = new ShippingLine(new Id(), new LineName("Maersk")); await repository.AddAsync(existingLine); var command = new RemoveLineCommand(existingLine.Id); var handler = new RemoveLineHandlerAsync(contextFactory); //act await handler.HandleAsync(command); //assert var line = uow.Lines.SingleOrDefault(l => l.Id == existingLine.Id); Assert.That(line, Is.Null); } }