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); }
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)); }
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); }
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)); }
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); }