Exemple #1
0
        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));
 }