public void ConsumeAcceptsRequestWithinDefaultCapacityWhenRepositoryReturnsNoCapacity( [Frozen]Mock<ICapacityRepository> repositoryStub, [Frozen]Mock<IChannel<ReservationAcceptedEvent>> channelMock, CapacityGate sut, RequestReservationCommand command) { repositoryStub .Setup(r => r.Read(command.Date.Date)) .Returns(Maybe.Empty<Capacity>()); sut.Consume(command.WithQuantity(Capacity.Default.Remaining)); channelMock.Verify(c => c.Send(It.IsAny<ReservationAcceptedEvent>())); }
public void ConsumeDoesNotSendRejectEventWhenRequestIsWithinCapacity( [Frozen]Mock<ICapacityRepository> repositoryStub, [Frozen]Mock<IChannel<ReservationRejectedEvent>> channelMock, CapacityGate sut, RequestReservationCommand command, Capacity capacity) { repositoryStub .Setup(r => r.Read(command.Date.Date)) .Returns(capacity.ToMaybe()); sut.Consume(command.WithQuantity(capacity.Remaining)); channelMock.Verify(c => c.Send(It.IsAny<ReservationRejectedEvent>()), Times.Never()); }
public void ConsumeDoesNotForwardReplayedEvent( [Frozen]Mock<ICapacityRepository> repositoryMock, [Frozen]Mock<IChannel<CapacityReservedEvent>> capacityChannelMock, [Frozen]Mock<IChannel<SoldOutEvent>> soldOutChannelMock, CapacityGate sut, RequestReservationCommand command, Capacity originalCapacity) { var requestWithinCapacity = command.WithQuantity(originalCapacity.Remaining - 1); var newCapacity = originalCapacity.Apply(requestWithinCapacity.ReserveCapacity()); repositoryMock .Setup(r => r.Read(command.Date.Date)) .Returns(newCapacity.ToMaybe()); sut.Consume(requestWithinCapacity); repositoryMock.Verify(r => r.Append(requestWithinCapacity.Date.Date, It.IsAny<CapacityReservedEvent>()), Times.Never()); capacityChannelMock.Verify(r => r.Send(It.IsAny<CapacityReservedEvent>()), Times.Never()); soldOutChannelMock.Verify(r => r.Send(It.IsAny<SoldOutEvent>()), Times.Never()); }
public void ConsumeSendsSoldOutEventWhenSoldOut( [Frozen]Mock<ICapacityRepository> repositoryStub, [Frozen]Mock<IChannel<SoldOutEvent>> channelMock, CapacityGate sut, RequestReservationCommand command, Capacity capacity) { repositoryStub .Setup(r => r.Read(command.Date.Date)) .Returns(capacity.ToMaybe()); sut.Consume(command.WithQuantity(capacity.Remaining)); var expected = command.Date.Date; channelMock.Verify(c => c.Send(It.Is<SoldOutEvent>(e => e.Date == expected))); }
public void ConsumeWritesEventToRepositoryWhenCapacityIsAvailable( [Frozen]Mock<ICapacityRepository> repositoryMock, CapacityGate sut, RequestReservationCommand command, Capacity capacity) { repositoryMock .Setup(r => r.Read(command.Date.Date)) .Returns(capacity.ToMaybe()); var requestWithinCapacity = command.WithQuantity(capacity.Remaining - 1); sut.Consume(requestWithinCapacity); var expected = requestWithinCapacity.ReserveCapacity().Id; repositoryMock.Verify(r => r.Append(requestWithinCapacity.Date.Date, It.Is<CapacityReservedEvent>(e => e.Id == expected))); }
public void ConsumeSendsRejectEventWhenRequestExceedsCapacity( [Frozen]Mock<ICapacityRepository> repositoryStub, [Frozen]Mock<IChannel<ReservationRejectedEvent>> channelMock, CapacityGate sut, RequestReservationCommand command, Capacity capacity) { repositoryStub .Setup(r => r.Read(command.Date.Date)) .Returns(capacity.ToMaybe()); var requestExceedingCapacity = command.WithQuantity(capacity.Remaining + 1); sut.Consume(requestExceedingCapacity); var expected = requestExceedingCapacity.Reject().Id; channelMock.Verify(c => c.Send(It.Is<ReservationRejectedEvent>(e => e.Id == expected))); }
public void ConsumeDoesNotWriteEventToRepositoryWhenCapacityIsExceeded( [Frozen]Mock<ICapacityRepository> repositoryMock, CapacityGate sut, RequestReservationCommand command, Capacity capacity) { repositoryMock .Setup(r => r.Read(command.Date.Date)) .Returns(capacity.ToMaybe()); sut.Consume(command.WithQuantity(capacity.Remaining + 1)); repositoryMock.Verify(r => r.Append(command.Date.Date, It.IsAny<CapacityReservedEvent>()), Times.Never()); }
public void ConsumeDoesNotSendSoldOutWhenNotSoldOut( [Frozen]Mock<ICapacityRepository> repositoryStub, [Frozen]Mock<IChannel<SoldOutEvent>> channelMock, CapacityGate sut, RequestReservationCommand command, Capacity capacity) { repositoryStub .Setup(r => r.Read(command.Date.Date)) .Returns(capacity.ToMaybe()); sut.Execute(command.WithQuantity(capacity.Remaining - 1)); channelMock.Verify(r => r.Send(It.IsAny<SoldOutEvent>()), Times.Never()); }
public void ConsumeDoesNotSendReservedEventWhenCapacityIsExceeded( [Frozen]Mock<ICapacityRepository> repositoryStub, [Frozen]Mock<IChannel<CapacityReservedEvent>> channelMock, CapacityGate sut, RequestReservationCommand command, Capacity capacity) { repositoryStub .Setup(r => r.Read(command.Date.Date)) .Returns(new[] { capacity }); sut.Consume(command.WithQuantity(capacity.Remaining + 1)); channelMock.Verify(c => c.Send(It.IsAny<CapacityReservedEvent>()), Times.Never()); }
public void WithQuantityReturnsCorrectResult(RequestReservationCommand sut, int newQuantity) { RequestReservationCommand actual = sut.WithQuantity(newQuantity); sut.AsSource().OfLikeness<RequestReservationCommand>() .With(d => d.Quantity).EqualsWhen((s, d) => d.Quantity == newQuantity) .Without(d => d.Id) .ShouldEqual(actual); }