Beispiel #1
0
        public void ReserveCapacityReturnsCorrectResult(RequestReservationCommand sut)
        {
            CapacityReservedEvent actual = sut.ReserveCapacity();

            sut.AsSource().OfLikeness <CapacityReservedEvent>()
            .ShouldEqual(actual);
        }
Beispiel #2
0
        public void MakeReservationReturnsCorrectResult(BookingViewModel sut)
        {
            RequestReservationCommand actual = sut.MakeReservation();
            var expected = sut.AsSource().OfLikeness <RequestReservationCommand>().Without(d => d.Id);

            expected.ShouldEqual(actual);
        }
Beispiel #3
0
        public void ReserveDoesNotHaveSideEffects(
            RequestReservationCommand request,
            CapacityReservedEvent @event,
            Capacity sut)
        {
            var actual = sut.Apply(@event);

            Assert.NotEqual(actual, sut);
        }
Beispiel #4
0
        public void CanReserveReturnsTrueWhenQuantityIsEqualToRemaining(
            Capacity sut,
            RequestReservationCommand command)
        {
            var request = command.WithQuantity(sut.Remaining);
            var @event  = request.ReserveCapacity();
            var actual  = sut.CanApply(@event);

            Assert.True(actual);
        }
Beispiel #5
0
        public void ReserveReturnsInstanceWithWithoutDecrementingRemainingWhenRequestWasAlreadyAccepted(
            RequestReservationCommand request,
            CapacityReservedEvent @event,
            Capacity sut)
        {
            var expected = sut.Apply(@event);
            var actual   = expected.Apply(@event);

            Assert.Equal(expected, actual);
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
        public void ReserveDoesNotThrowWhenQuantityIsEqualToRemaining(
            Capacity sut,
            RequestReservationCommand command)
        {
            var request = command.WithQuantity(sut.Remaining);
            var @event  = request.ReserveCapacity();

            Assert.DoesNotThrow(() =>
                                sut.Apply(@event));
        }
Beispiel #8
0
        public void ReserveThrowsWhenQuantityIsGreaterThanRemaining(
            Capacity sut,
            RequestReservationCommand command)
        {
            var greaterQuantity = sut.Remaining + 1;
            var request         = command.WithQuantity(greaterQuantity);
            var @event          = request.ReserveCapacity();

            Assert.Throws <ArgumentOutOfRangeException>(() =>
                                                        sut.Apply(@event));
        }
Beispiel #9
0
        public void ReserveDoesNotThrowWhenQuantityIsLessThanRemaining(
            Capacity sut,
            RequestReservationCommand command)
        {
            var lesserQuantity = sut.Remaining - 1;
            var request        = command.WithQuantity(lesserQuantity);
            var @event         = request.ReserveCapacity();

            Assert.DoesNotThrow(() =>
                                sut.Apply(@event));
        }
Beispiel #10
0
        public void ReserveReturnsInstanceWithCorrectlyDecrementedRemaining(
            int quantity,
            Capacity sut,
            RequestReservationCommand command)
        {
            var expected = sut.Remaining - quantity;
            var @event   = command.WithQuantity(quantity).ReserveCapacity();

            Capacity actual = sut.Apply(@event);

            Assert.Equal(expected, actual.Remaining);
        }
Beispiel #11
0
        public void CanReserveReturnsFalseWhenQuantityIsGreaterThanRemaining(
            Capacity sut,
            RequestReservationCommand command)
        {
            var greaterQuantity = sut.Remaining + 1;
            var request         = command.WithQuantity(greaterQuantity);
            var @event          = request.ReserveCapacity();

            bool actual = sut.CanApply(@event);

            Assert.False(actual);
        }
Beispiel #12
0
        public void CanReserveIsConsistentAccrossReplays(
            Capacity initial,
            RequestReservationCommand command)
        {
            var remaining = initial.Remaining;
            var request   = command.WithQuantity(remaining);
            var @event    = request.ReserveCapacity();
            var sut       = initial.Apply(@event);

            var result = sut.CanApply(@event);

            Assert.True(result);
        }
Beispiel #13
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>()));
        }
Beispiel #14
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());
        }
Beispiel #15
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());
        }
Beispiel #16
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)));
        }
Beispiel #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.Execute(command.WithQuantity(capacity.Remaining));

            var expected = command.Date.Date;

            channelMock.Verify(c => c.Send(It.Is <SoldOutEvent>(e => e.Date == expected)));
        }
Beispiel #18
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)));
        }
Beispiel #19
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)));
        }
Beispiel #20
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());
        }
Beispiel #21
0
 public void SutIsMessage(RequestReservationCommand sut)
 {
     Assert.IsAssignableFrom <IMessage>(sut);
 }
Beispiel #22
0
        public void EnvelopReturnsCorrectBody(RequestReservationCommand sut)
        {
            var actual = sut.Envelop();

            Assert.Equal(sut, actual.Body);
        }
Beispiel #23
0
 public void NameIsCorrect([Frozen] string expected, RequestReservationCommand sut)
 {
     Assert.Equal <string>(expected, sut.Name);
 }
Beispiel #24
0
 public void DateIsCorrect([Frozen] DateTime expected, RequestReservationCommand sut)
 {
     Assert.Equal <DateTime>(expected, sut.Date);
 }
Beispiel #25
0
 public void QuantityIsCorrect([Frozen] int expected, RequestReservationCommand sut)
 {
     Assert.Equal <int>(expected, sut.Quantity);
 }
Beispiel #26
0
 public void IdIsUnique(RequestReservationCommand sut, RequestReservationCommand other)
 {
     Assert.NotEqual(sut.Id, other.Id);
 }
Beispiel #27
0
 public void IdIsStable(RequestReservationCommand sut)
 {
     Assert.Equal(sut.Id, sut.Id);
 }
Beispiel #28
0
        public void EnvelopReturnsCorrectVersion(RequestReservationCommand sut)
        {
            var actual = sut.Envelop();

            Assert.Equal("1", actual.Version);
        }
Beispiel #29
0
        public void AcceptReturnsCorrectResult(RequestReservationCommand sut)
        {
            ReservationAcceptedEvent actual = sut.Accept();

            sut.AsSource().OfLikeness <ReservationAcceptedEvent>().ShouldEqual(actual);
        }