Exemple #1
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 #2
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 #4
0
        private MarsRoverResponse SaveFinalPosition(Rover _outputRoverRover, MarsRoverResponse output)
        {
            var finalPosition = new RoverFinalPosition();

            finalPosition.RoverCoordinates.X = _outputRoverRover.X;
            finalPosition.RoverCoordinates.Y = _outputRoverRover.Y;
            finalPosition.RoverOrientation   = directionDictionary[_outputRoverRover.RoverOrientation];
            output.FinalRoverPositions.Add(finalPosition);
            return(output);
        }
Exemple #5
0
        public IActionResult Get(string id)
        {
            Domain.MarsRover result = this._marsGetService.Get(id).Result;
            if (string.IsNullOrEmpty(result?.RoverId))
            {
                return(NotFound());
            }

            MarsRoverResponse response = new MarsRoverResponse()
            {
                Message         = result.Message,
                CurrentPosition = $"({result.CurrentPositionX},{result.CurrentPositionY})"
            };

            return(Ok(response));
        }
Exemple #6
0
        public IActionResult MovementRover(MovementRequest movement)
        {
            char[] validLetters = { 'L', 'R', 'M' };
            var    notChars     = movement.MovementInstruction.Where(
                item => !char.IsLetter(item) || !validLetters.Contains(item)
                );

            if (notChars.Count() > 0)
            {
                return(NotFound("MovementInstruction must contain only R,L and M"));
            }

            Domain.MarsRover  result   = this._marsUpdateService.UpdateMovement(movement).Result;
            MarsRoverResponse response = new MarsRoverResponse()
            {
                Message         = result.Message,
                CurrentPosition = $"({result.CurrentPositionX},{result.CurrentPositionY})"
            };

            return(Ok(response));
        }
        // Get Photos with specific date
        public async void GetNasaPhotos(string earth_date)
        {
            if (earth_date == null)
            {
                return;
            }

            string     key        = _configuration.GetSection("API_Settings").GetSection("MarsRover_Api_Key").Value;
            string     url        = _configuration.GetSection("API_Settings").GetSection("MarsRover_Api_URL").Value;
            string     finalURL   = url + "?api_key=" + key + "&earth_date=" + earth_date;
            HttpClient httpClient = new HttpClient();
            var        response   = await httpClient.GetAsync(finalURL);

            string apiResponse = await response.Content.ReadAsStringAsync();

            MarsRoverResponse result = JsonConvert.DeserializeObject <MarsRoverResponse>(apiResponse);

            if (result == null)
            {
                return;
            }

            SaveImages(earth_date, result.photos);
        }