Exemple #1
0
        public IActionResult MoveRovers([FromBody] MarsRoverRequest request)
        {
            MarsRoverResponse response;

            try
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }
                response = _marsRoverService.MoveAllRovers(request);
                if (response == null)
                {
                    return(NotFound());
                }
                else
                {
                    return(Ok(response));
                }
            }
            catch (MarsRoverException)
            {
                throw new MarsRoverException();
            }
        }
Exemple #2
0
        public MarsRoverResponse MoveAllRovers(MarsRoverRequest request)
        {
            MarsRoverResponse response = new MarsRoverResponse();

            try
            {
                this._maxCoordinates = new Coordinates
                {
                    X = request.MaxCoordinates.X,
                    Y = request.MaxCoordinates.Y
                };
                foreach (DeployedRover _rover in request.RoverPositions)
                {
                    Rover outputRover = new Rover(_rover.RoverCoordinates.X, _rover.RoverCoordinates.Y, _rover.RoverOrientation, _rover.MovementInstructions);
                    outputRover.StartMovement();
                    CheckOutOfBoundary(outputRover);
                    response = SaveFinalPosition(outputRover, response);
                    LogInputOutputHistory(_rover, outputRover);
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            return(response);
        }
Exemple #3
0
            public void Test_33E_MMRMMRMRRM_Rover_Movement()
            {
                // Arrange
                var roverPositions      = new List <DeployedRover>();
                var roverFinalPositions = new List <RoverFinalPosition>();

                var roverPosition = new DeployedRover()
                {
                    RoverCoordinates = new Coordinates()
                    {
                        X = 3,
                        Y = 3
                    },
                    RoverOrientation     = "E",
                    MovementInstructions = "MMRMMRMRRM"
                };

                roverPositions.Add(roverPosition);

                var request = new MarsRoverRequest()
                {
                    MaxCoordinates = new Coordinates()
                    {
                        X = 5,
                        Y = 5
                    },
                    RoverPositions = roverPositions
                };


                var roverFinalPosition = new RoverFinalPosition()
                {
                    RoverCoordinates = new Coordinates()
                    {
                        X = 5,
                        Y = 1
                    },
                    RoverOrientation = "E"
                };

                roverFinalPositions.Add(roverFinalPosition);

                var expectedResponse = new MarsRoverResponse()
                {
                    FinalRoverPositions = roverFinalPositions
                };

                MarsRoverServiceMock.Setup(x => x.MoveAllRovers(request))
                .Returns(expectedResponse);

                // Act
                var result = ControllerUnderTest.MoveRovers(request);

                // Assert
                var okResult = Assert.IsType <OkObjectResult>(result);

                Assert.Same(expectedResponse, okResult.Value);
            }
        public IActionResult Index(MarsRoverViewModel model)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    ModelState.AddModelError("error", "Invalid form entry");
                    return(View(model));
                }

                var roverPositions = new List <DeployedRover>();
                var roverPosition  = new DeployedRover()
                {
                    RoverCoordinates = new Coordinates()
                    {
                        X = model.DeployedRoverX.Value,
                        Y = model.DeployedRoverY.Value
                    },
                    RoverOrientation     = model.RoverOrientation,
                    MovementInstructions = model.MovementInstructions
                };
                roverPositions.Add(roverPosition);
                var request = new MarsRoverRequest()
                {
                    MaxCoordinates = new Coordinates()
                    {
                        X = model.MaxCoordinatesX.Value,
                        Y = model.MaxCoordinatesY.Value
                    },
                    RoverPositions = roverPositions
                };
                MarsRoverResponse response = _clientService.MoverRover(request);
                if (response == null)
                {
                    ModelState.AddModelError("error", "An error occured");
                    return(View(model));
                }

                foreach (RoverFinalPosition _finalRover in response.FinalRoverPositions)
                {
                    model.FinalPosition = new FinalMarRoverPosition()
                    {
                        RoverCoordinateX = _finalRover.RoverCoordinates.X,
                        RoverCoordinateY = _finalRover.RoverCoordinates.Y,
                        RoverOrientation = _finalRover.RoverOrientation
                    };
                }
                return(View(model));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.StackTrace);
                ModelState.AddModelError("error", ex.Message);
            }
            return(View(model));
        }
Exemple #5
0
            public void Should_return_BadRequestResult()
            {
                // Arrange
                var roverPositions = new List <DeployedRover>();
                var request        = new MarsRoverRequest()
                {
                    MaxCoordinates = new Coordinates()
                    {
                        X = 5,
                        Y = 5
                    },
                    RoverPositions = roverPositions
                };

                ControllerUnderTest.ModelState.AddModelError("Key", "Some error");

                // Act
                var result = ControllerUnderTest.MoveRovers(request);

                // Assert
                var badRequestResult = Assert.IsType <BadRequestObjectResult>(result);

                Assert.IsType <SerializableError>(badRequestResult.Value);
            }
Exemple #6
0
        public MarsRoverResponse MoverRover(MarsRoverRequest payload)
        {
            string url = Configuration["BaseUrl"] + "/MoveRovers";

            return(_restService.PostRestAction <MarsRoverResponse, MarsRoverRequest>(payload, url));
        }