Esempio n. 1
0
        public async Task Should_Mark_Book_As_Available()
        {
            var reservationId = NewId.NextGuid();
            var bookId        = NewId.NextGuid();
            var memberId      = NewId.NextGuid();

            await TestHarness.Bus.Publish <IBookAddedGlobalEvent>(new
            {
                BookId = bookId,
                Isbn   = "0307969959",
                Title  = "Neuromancer"
            });

            (await _bookSagaHarness.Exists(bookId, x => x.Available)).HasValue.Should()
            .BeTrue("Book Saga state machine should be existed at Available State!");

            await TestHarness.Bus.Publish <IReservationRequestedGlobalEvent>(new
            {
                ReservationId = reservationId,
                Timestamp     = InVar.Timestamp,
                MemberId      = memberId,
                BookId        = bookId
            });

            (await SagaHarness.Exists(reservationId, x => x.Reserved)).HasValue.Should()
            .BeTrue("Reservation Saga state machine should be existed at Reserved State!");
            (await _bookSagaHarness.Exists(bookId, x => x.Reserved)).HasValue.Should()
            .BeTrue("Book Saga state machine should be existed at Reserved State!");

            // Turn the clock toward 24 hours
            await AdvanceSystemTime(TimeSpan.FromHours(24));

            (await SagaHarness.NotExists(reservationId)).HasValue.Should().BeFalse(
                "The Reservation state machine should be finalized already cause of reservation expired itself!");
            (await _bookSagaHarness.Exists(bookId, x => x.Available)).HasValue.Should().BeTrue(
                "Book Saga state machine should be existed at Available State cause the reservation was expired!");
        }
Esempio n. 2
0
        public async Task Should_Reserved_The_Book()
        {
            var reservationId = NewId.NextGuid();
            var bookId        = NewId.NextGuid();
            var memberId      = NewId.NextGuid();

            await TestHarness.Bus.Publish <IBookAddedGlobalEvent>(new
            {
                BookId = bookId,
                Isbn   = "0307969959",
                Title  = "Neuromancer"
            });

            var existsId = await _bookSagaHarness.Exists(bookId, x => x.Available);

            existsId.HasValue.Should().BeTrue("Book saga state instance should exists!");

            await TestHarness.Bus.Publish <IReservationRequestedGlobalEvent>(new
            {
                ReservationId = reservationId,
                Timestamp     = InVar.Timestamp,
                MemberId      = memberId,
                BookId        = bookId
            });

            (await SagaHarness.Consumed.Any <IReservationRequestedGlobalEvent>()).Should()
            .BeTrue("Message should be consumed by Reservation Saga!");
            (await _bookSagaHarness.Consumed.Any <IReservationRequestedGlobalEvent>()).Should()
            .BeTrue("Message should be consumed by Book Saga!");

            existsId = await SagaHarness.Exists(reservationId, x => x.Reserved);

            existsId.HasValue.Should().BeTrue("Reservation saga state instance should exists!");

            SagaHarness.Sagas.ContainsInState(reservationId, Machine, x => x.Reserved).Should()
            .NotBeNull("Reservation saga state instance should exists on [Reserved] state!");
        }
Esempio n. 3
0
        public async Task <bool> ExistsAs(Func <TStateMachine, State> stateSelector)
        {
            var id = await _harness.Exists(_correlationId, machine => stateSelector?.Invoke(machine));

            return(id.HasValue);
        }