Пример #1
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.Execute(command.WithQuantity(capacity.Remaining + 1));

            repositoryMock.Verify(r => r.Append(command.Date.Date, It.IsAny <CapacityReservedEvent>()), Times.Never());
        }
Пример #2
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.Execute(command.WithQuantity(Capacity.Default.Remaining));

            channelMock.Verify(c => c.Send(It.IsAny <ReservationAcceptedEvent>()));
        }
Пример #3
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>()));
        }
Пример #4
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(new[] { capacity });

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

            channelMock.Verify(c => c.Send(It.IsAny<ReservationRejectedEvent>()), Times.Never());
        }
Пример #5
0
        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(capacity.ToMaybe());

            sut.Execute(command.WithQuantity(capacity.Remaining + 1));

            channelMock.Verify(c => c.Send(It.IsAny <CapacityReservedEvent>()), Times.Never());
        }
Пример #6
0
        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(capacity.ToMaybe());

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

            channelMock.Verify(c => c.Send(It.IsAny<CapacityReservedEvent>()), Times.Never());
        }
Пример #7
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.Execute(command.WithQuantity(capacity.Remaining));

            var expected = command.Date.Date;

            channelMock.Verify(c => c.Send(It.Is <SoldOutEvent>(e => e.Date == expected)));
        }
Пример #8
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.Execute(command);

            var expected = command.Accept().Id;

            channelMock.Verify(c => c.Send(It.Is <ReservationAcceptedEvent>(e => e.Id == expected)));
        }
Пример #9
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.Execute(requestWithinCapacity);

            var expected = requestWithinCapacity.ReserveCapacity().Id;

            repositoryMock.Verify(r => r.Append(requestWithinCapacity.Date.Date, It.Is <CapacityReservedEvent>(e => e.Id == expected)));
        }
Пример #10
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.Execute(requestExceedingCapacity);

            var expected = requestExceedingCapacity.Reject().Id;

            channelMock.Verify(c => c.Send(It.Is <ReservationRejectedEvent>(e => e.Id == expected)));
        }
Пример #11
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.Execute(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());
        }
Пример #12
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());
        }
Пример #13
0
        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());
        }
Пример #14
0
 public void SutIsConsumer(CapacityGate sut)
 {
     Assert.IsAssignableFrom <ICommandHandler <RequestReservationCommand> >(sut);
 }
Пример #15
0
 public void SutIsConsumer(CapacityGate sut)
 {
     Assert.IsAssignableFrom<IConsumer<RequestReservationCommand>>(sut);
 }
Пример #16
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)));
        }
Пример #17
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)));
        }
Пример #18
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)));
        }
Пример #19
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)));
        }
Пример #20
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());
        }