Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to convert OkObjectResult to a List<>?

Currently writing a unit test to check that it returns the correct venueType

[Fact]
    public async Task GetVenue_Should_Return_GetVenueType()
    {
        var venues = new[]
        {
            new VenueTypeResponse()
            {
                id = 1,
                Name = "Cafe",
                ImageUrl = "Cafe.png"
            },
            new VenueTypeResponse()
            {
                id = 2,
                Name = "Takeaway",
                ImageUrl = "Takeaway.png"
            }
        };

        mockedVenueService.Setup(x => x.GetVenueType()).Returns(Task.FromResult(new List<VenueTypeResponse>(venues)));

        var controller = new VenueController(mockedVenueService.Object, mockedCafeService.Object, mockedCafeRequestValidator.Object);

        var result = await controller.GetVenueType() as OkObjectResult;
        var data = result.Value as List<VenueTypeResponse>; //errors here: outputs null
                  
        Assert.IsType<OkObjectResult>(result);

        Assert.Collection(data, x => Assert.Contains("Cafe", x.Name),
                                x => Assert.Contains("Takeaway", x.Name));
        Assert.Collection(data, x => Assert.Contains("Cafe.png", x.ImageUrl),
                                x => Assert.Contains("Takeaway.png", x.ImageUrl));

        Assert.Equal(StatusCodes.Status200OK, result.StatusCode);
        
    }

when I try to do convert the OkObjectResult in the data variable it just outputs null?

Am I doing something wrong in the process of the conversion?

Implementation of GetVenueType()

    [HttpGet]
    [Route("venue-type")]
    [ProducesResponseType(typeof(VenueTypeResponse), 200)]
    [ProducesResponseType(401)]
    public async Task<IActionResult> GetVenueType()
    {
        var result = new VersionResponse()
        {
            Data = await _venueService.GetVenueType()

        };
        return Ok(result);
    }
like image 203
James McCoy Avatar asked Dec 05 '25 14:12

James McCoy


1 Answers

Do you mean you cannot get List<> from OkObjectResult?Here is a demo to get list from OkObjectResult:

TestController:

public async Task<IActionResult> GetVenueType()
{
    List<Spray> sprays = new List<Spray> { new Spray { Id = 1, Name = "product1", Price = 10, Quantity = 1, Total = 1, Image = "image1.png" }, new Spray { Id = 2, Name = "product2", Price = 20, Quantity = 1, Total = 20, Image = "Image2.png" } };
    return Ok(sprays);
}

public ActionResult TestOK()
{
    IActionResult result = new TestController().GetVenueType().Result;
    var data = result as OkObjectResult;
    List<Spray> sprays = (List<Spray>)data.Value;
    List<Spray> ss = sprays.Where(s => s.Name.Contains("product1")).ToList<Spray>();

    return Ok(ss);
}

result: enter image description here

like image 52
Yiyi You Avatar answered Dec 09 '25 04:12

Yiyi You