public async Task occupy_room_fails_if_room_was_already_occupied( string requestedDateRangeStartDate, string requestedDateRangeEndDate, string alreadyOccupiedDateRangeStartDate, string alreadyOccupiedDateRangeEndDate) { // Given var irrelevantRoomId = Room.RoomId.New; var irrelevantPreviousReservationId = ReservationId.New; var irrelevantNewReservationId = ReservationId.New; var requestedDateRange = new Range( DateTime.ParseExact(requestedDateRangeStartDate, "yyyy-MM-dd", CultureInfo.InvariantCulture), DateTime.ParseExact(requestedDateRangeEndDate, "yyyy-MM-dd", CultureInfo.InvariantCulture)); var irrelevantPreviousOccupiedEvent = new RoomOccupied( irrelevantPreviousReservationId, DateTime.ParseExact(alreadyOccupiedDateRangeStartDate, "yyyy-MM-dd", CultureInfo.InvariantCulture), DateTime.ParseExact(alreadyOccupiedDateRangeEndDate, "yyyy-MM-dd", CultureInfo.InvariantCulture)); var room = new Room(irrelevantRoomId); var handler = new OccupyRoomHandler(); room.Apply(irrelevantPreviousOccupiedEvent); // When var result = await handler.ExecuteCommandAsync( room, new OccupyRoom(irrelevantRoomId, irrelevantNewReservationId, requestedDateRange), CancellationToken.None); // Then Assert.False(result.IsSuccess); Assert.Empty(room.UncommittedEvents); Assert.Equal( $"Room already occupied", ((FailedExecutionResult)result).Errors.Single()); }
public void Apply(RoomOccupied @event) { _occupiedRanges.Add(new Range(@event.StartDateUtc, @event.EndDateUtc)); }