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!"); }
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!"); }
public async Task <bool> ExistsAs(Func <TStateMachine, State> stateSelector) { var id = await _harness.Exists(_correlationId, machine => stateSelector?.Invoke(machine)); return(id.HasValue); }