Newer
Older
EfCoreQueryFilter / Test.cs
@Derek Comartin Derek Comartin on 22 Sep 2021 1 KB Init
using System;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Xunit;

namespace MultiTenant
{
    public class Test
    {
        private readonly OrderDbContext.TenantFactory _factory;

        public Test()
        {
            var sc = new ServiceCollection();
            sc.AddSingleton<OrderDbContext.TenantFactory>(_ => OrderDbContext.Factory);
            var provider = sc.BuildServiceProvider();
            _factory = provider.GetRequiredService<OrderDbContext.TenantFactory>();
        }

        private async Task AddOrder(Token token)
        {
            await using var db = _factory(token);
            db.Orders.Add(new Order
            {
                TenantId = token.TenantId,
                OrderId = Guid.NewGuid()
            });
            await db.SaveChangesAsync();
        }

        [Fact]
        public async Task TestFilter()
        {
            var tenant1 = new Token(Guid.NewGuid());
            await AddOrder(tenant1);

            var tenant2 = new Token(Guid.NewGuid());
            await AddOrder(tenant2);
            await AddOrder(tenant2);

            await using var db = _factory(tenant1);
            var tenant1Orders = await db.Orders.CountAsync();
            Assert.Equal(1, tenant1Orders);
        }
    }
}