C#C
C#3y ago
SWEETPONY

❔ Only a single database provider can be registered in a service provider

I decided to write unit test:
[TestFixture]
public class SecuritySettingsTest
{
    private SegmentTestContextFactory_segmentTestContextFactory;
    private SecurityLogic _securityLogic;

    private readonly CultureInfo _culture = new( "en-US" );

    [OneTimeSetUp]
    public void Setup()
    {
        _segmentTestContextFactory = new();
        _securityLogic = new( _segmentTestContextFactory );
    }

    [Test]
    public void RoleTemplatesGet_AllIds_ReturnsAllTemplates()
    {
        var templates = new List<PermissionTemplate>
        {
            new PermissionTemplate { Id = "1", Title = "Template 1" },
            new PermissionTemplate { Id = "2", Title = "Template 2" }
        };

        using ( var context = _segmentTestContextFactory.CreateDbContext() )
        {
            context.Set<PermissionTemplate>().AddRange( templates );
            context.SaveChanges();
        }

        var ids = templates.Select( t => t.Id ).ToHashSet();
        var currentOperator = new Mock<IUserPrincipal>().Object;

        var result = _securityLogic.RoleTemplatesGet( ids, currentOperator );

        Assert.IsNotNull( result );
        Assert.AreEqual( templates.Count, result.Count );
        for ( var i = 0; i < result.Count; i++ )
        {
            Assert.AreEqual( templates[ i ].Id, result[ i ].Id );
            Assert.AreEqual( templates[ i ].Title, result[ i ].Title );
        }
    }
}

public class SegmentTestContextFactory : ISegmentDbContextFactory
{
    public SegmentDbContext CreateDbContext()
    {
        var optionsBuilder = new DbContextOptionsBuilder<SegmentDbContext>();
        optionsBuilder.UseInMemoryDatabase(databaseName: "TestDatabase");

        return new SegmentDbContext( optionsBuilder.Options );
    }
}
Was this page helpful?