示例#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 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());
        }
示例#3
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());
        }
示例#4
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)));
        }
示例#5
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)));
        }
示例#6
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)));
        }
示例#7
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)));
        }
示例#8
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)));
        }
示例#9
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)));
        }
示例#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.Consume(requestExceedingCapacity);

            var expected = requestExceedingCapacity.Reject().Id;
            channelMock.Verify(c => c.Send(It.Is<ReservationRejectedEvent>(e => e.Id == expected)));
        }
示例#11
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)));
        }
示例#12
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());
        }
示例#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());
        }