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(); } }
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)); }
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); }
public MarsRoverResponse MoverRover(MarsRoverRequest payload) { string url = Configuration["BaseUrl"] + "/MoveRovers"; return(_restService.PostRestAction <MarsRoverResponse, MarsRoverRequest>(payload, url)); }