public async Task <MazebotSolverImageResponse> GetMapImage(string sessionId, string mazeId, bool includeSolution) { var session = await _repository.Get(sessionId); if (!session.Any()) { return(null); } var maze = session.SingleOrDefault(r => string.Equals(r.Response?.MazeId, mazeId)); if (maze == null) { return(null); } var response = new MazebotSolverImageResponse(); var map = new Map(maze.Response.Maze.Map); var start = maze.Response.Maze.StartingPosition; var solution = maze.Response.Solution.PathTaken; using (var image = _imager.GetImage(map, start[0], start[1], solution, includeSolution)) { if (image == null) { return(null); } using (var stream = new MemoryStream()) { if (image.Frames.Count > 1) { image.SaveAsGif(stream); response.ContentType = "image/gif"; } else { image.SaveAsPng(stream); response.ContentType = "image/png"; } response.Image = stream.ToArray(); } } return(response); }
public async void GetMapSolution_Should_Return_Correctly() { var service = Substitute.For <IMazebotSolver>(); var response = new MazebotSolverImageResponse { Image = new byte[] { 1, 2, 3 }, ContentType = "application/json" }; service.GetMapImage(Arg.Any <string>(), Arg.Any <string>(), Arg.Any <bool>()).Returns(response); var actual = await _controller.GetMapSolution(service, "sessionId", "mazeId"); actual.Should().BeOfType <FileContentResult>(); actual.As <FileContentResult>().FileContents.Should().BeSameAs(response.Image); actual.As <FileContentResult>().ContentType.Should().Be(response.ContentType); }