Beispiel #1
0
        public ElevatorRequestHandler Create(Elevator elevator)
        {
            var elevatorMover          = new ElevatorMover(elevator, _logger, _waiterService);
            var elevatorRequestHandler = new ElevatorRequestHandler(_requestQueue, elevatorMover);

            return(elevatorRequestHandler);
        }
Beispiel #2
0
        public async Task MoveToFloorAsyncShouldMoveUpIfDirectionIsUp(Elevator elevator, ElevatorRequest request)
        {
            var elevatorMover = new ElevatorMover(
                elevator,
                _movementLogger.Object,
                _waiterService.Object
                );

            await elevatorMover.MoveToFloorAsync(request);

            Assert.Equal(request.ToFloor, elevator.CurrentFloor);
        }
Beispiel #3
0
        public async Task HandleRequestsAsyncShouldMoveElevatorToCorrectFloor(ElevatorRequest request)
        {
            _queue.Setup(q => q.ReadAllAsync(It.IsAny <CancellationToken>()))
            .Returns(GetRequestAsAsyncEnumerable(request));
            var elevatorMover = new ElevatorMover(
                new Elevator(), _movementLogger.Object, _waiterService.Object
                );
            var requestHandler = new ElevatorRequestHandler(
                _queue.Object,
                elevatorMover
                );

            await requestHandler.HandleRequestsAsync();

            Assert.Equal(request.ToFloor, elevatorMover.Elevator.CurrentFloor);
        }
Beispiel #4
0
        public void HasToMoveToAnotherFloorToPickUpPassengerShouldBeTrueIfHasToMove()
        {
            var request = new ElevatorRequest()
            {
                FromFloor = 5, ToFloor = 0
            };
            var elevator = new Elevator()
            {
                CurrentFloor = 0
            };
            var elevatorMover = new ElevatorMover(
                elevator,
                _movementLogger.Object,
                _waiterService.Object
                );

            Assert.True(elevatorMover.HasToMoveToAnotherFloorToPickUpPassengerFor(request));
        }
Beispiel #5
0
        public async Task MoveUpAsyncShouldMoveElevatorUpwards()
        {
            var request = new ElevatorRequest {
                FromFloor = 0, ToFloor = 5
            };
            var elevator = new Elevator
            {
                CurrentFloor = 0,
                Name         = nameof(MoveDownAsyncShouldMoveElevatorDownwards)
            };
            var elevatorMover = new ElevatorMover(
                elevator,
                _movementLogger.Object,
                _waiterService.Object
                );

            await elevatorMover.MoveUpAsync(request);

            Assert.Equal(request.ToFloor, elevator.CurrentFloor);
        }
Beispiel #6
0
        public async Task CollectAndHandleRequestsAsyncShouldAbortIfCanceled()
        {
            var cts = new CancellationTokenSource();

            _queue.Setup(q => q.ReadAllAsync(cts.Token))
            .Throws <TaskCanceledException>();
            var elevatorMover = new ElevatorMover(
                new Elevator(), _movementLogger.Object, _waiterService.Object
                );
            var requestHandler = new ElevatorRequestHandler(
                _queue.Object,
                elevatorMover
                );

            cts.Cancel();

            await Assert.ThrowsAsync <TaskCanceledException>(() =>
                                                             requestHandler.HandleRequestsAsync(cts.Token)
                                                             );
        }
Beispiel #7
0
        public async Task MoveDownAsyncShouldAbortIfCanceled()
        {
            var cts     = new CancellationTokenSource();
            var request = new ElevatorRequest {
                FromFloor = 5, ToFloor = 0
            };
            var elevator = new Elevator
            {
                CurrentFloor = 5,
                Name         = nameof(MoveDownAsyncShouldMoveElevatorDownwards)
            };
            var elevatorMover = new ElevatorMover(
                elevator,
                _movementLogger.Object,
                new WaiterService()
                );

            cts.Cancel();

            await Assert.ThrowsAsync <TaskCanceledException>(() =>
                                                             elevatorMover.MoveDownAsync(request, cts.Token)
                                                             );
        }