aspnetcore/test/MusicStore.Test/GenreMenuComponentTest.cs

57 lines
1.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc.ViewComponents;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using MusicStore.Models;
using Xunit;
namespace MusicStore.Components
{
public class GenreMenuComponentTest
{
private readonly IServiceProvider _serviceProvider;
public GenreMenuComponentTest()
{
var services = new ServiceCollection();
services.AddOptions();
services
.AddEntityFrameworkInMemoryDatabase()
.AddDbContext<MusicStoreContext>((p, b) => b.UseInMemoryDatabase().UseInternalServiceProvider(p));
_serviceProvider = services.BuildServiceProvider();
}
[Fact]
public async Task GenreMenuComponent_Returns_NineGenres()
{
// Arrange
var dbContext = _serviceProvider.GetRequiredService<MusicStoreContext>();
var genreMenuComponent = new GenreMenuComponent(dbContext);
PopulateData(dbContext);
// Act
var result = await genreMenuComponent.InvokeAsync();
// Assert
Assert.NotNull(result);
var viewResult = Assert.IsType<ViewViewComponentResult>(result);
Assert.Null(viewResult.ViewName);
var genreResult = Assert.IsType<List<Genre>>(viewResult.ViewData.Model);
Assert.Equal(9, genreResult.Count);
}
private static void PopulateData(MusicStoreContext context)
{
var genres = Enumerable.Range(1, 10).Select(n => new Genre { GenreId = n });
context.AddRange(genres);
context.SaveChanges();
}
}
}