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));
            }
        }
Ejemplo n.º 3
0
 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));
            }
        }
Ejemplo n.º 6
0
        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);
            }
        }