Example #1
0
        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>()));
        }
Example #2
0
        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());
        }
Example #3
0
        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());
        }
Example #4
0
        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)));
        }
Example #5
0
        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)));
        }
Example #6
0
        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)));
        }
Example #7
0
        public void ConsumeRequestWithEnoughCapacitySendsCorrectEvent(
            [Frozen]Mock<ICapacityRepository> repositoryStub,
            [Frozen]Mock<IChannel<ReservationAcceptedEvent>> channelMock,
            CapacityGate sut,
            RequestReservationCommand command,
            Capacity capacity)
        {
            repositoryStub
                .Setup(r => r.Read(It.IsAny<DateTime>()))
                .Returns(capacity.ToMaybe());

            sut.Consume(command);

            var expected = command.Accept().Id;
            channelMock.Verify(c => c.Send(It.Is<ReservationAcceptedEvent>(e => e.Id == expected)));
        }
Example #8
0
        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(new[] { capacity });

            sut.Consume(command.WithQuantity(capacity.Remaining - 1));

            channelMock.Verify(r => r.Send(It.IsAny<SoldOutEvent>()), Times.Never());
        }