Example #1
0
        public async Task ShouldRetrieveAllCustomers()
        {
            var provider = EntityManagerProviderFactory.CreateTestEntityManagerProvider();
            var unitOfWork = new UnitOfWork<Customer>(provider);

            await InitFakeBackingStoreAsync(CompositionContext.Fake.Name);
            var expectedCount = await unitOfWork.Entities.CountAsync();
            var customers = await unitOfWork.Entities.AllAsync(q => q.OrderBy(x => x.CompanyName));

            Assert.IsTrue(customers.Count() == expectedCount);
            Assert.IsTrue(unitOfWork.Entities.CountInCache() == expectedCount);
        }
Example #2
0
        public async Task ShouldRetrieveAllCustomersAndOrders()
        {
            var provider = EntityManagerProviderFactory.CreateTestEntityManagerProvider();
            var unitOfWork = new UnitOfWork<Customer>(provider);

            await InitFakeBackingStoreAsync(CompositionContext.Fake.Name);
            unitOfWork.Clear();
            var customers = await unitOfWork.Entities.AllAsync();
            Assert.IsTrue(customers.Any());
            Assert.IsFalse(provider.Manager.FindEntities<Order>(EntityState.AllButDetached).Any());

            unitOfWork.Clear();
            customers = await unitOfWork.Entities.AllAsync(includeProperties: "Orders");
            Assert.IsTrue(customers.Any());
            Assert.IsTrue(provider.Manager.FindEntities<Order>(EntityState.AllButDetached).Any());

            unitOfWork.Clear();
            customers = await unitOfWork.Entities.AllAsync(CancellationToken.None);
            Assert.IsTrue(customers.Any());
            Assert.IsFalse(provider.Manager.FindEntities<Order>(EntityState.AllButDetached).Any());

            unitOfWork.Clear();
            customers = await unitOfWork.Entities.AllAsync(CancellationToken.None, includeProperties: "Orders");
            Assert.IsTrue(customers.Any());
            Assert.IsTrue(provider.Manager.FindEntities<Order>(EntityState.AllButDetached).Any());

            unitOfWork.Clear();
            customers = await unitOfWork.Entities.AllInDataSourceAsync();
            Assert.IsTrue(customers.Any());
            Assert.IsFalse(provider.Manager.FindEntities<Order>(EntityState.AllButDetached).Any());

            unitOfWork.Clear();
            customers = await unitOfWork.Entities.AllInDataSourceAsync(includeProperties: "Orders");
            Assert.IsTrue(customers.Any());
            Assert.IsTrue(provider.Manager.FindEntities<Order>(EntityState.AllButDetached).Any());

            unitOfWork.Clear();
            customers = await unitOfWork.Entities.AllInDataSourceAsync(CancellationToken.None);
            Assert.IsTrue(customers.Any());
            Assert.IsFalse(provider.Manager.FindEntities<Order>(EntityState.AllButDetached).Any());

            unitOfWork.Clear();
            customers = await unitOfWork.Entities.AllInDataSourceAsync(CancellationToken.None, includeProperties: "Orders");
            Assert.IsTrue(customers.Any());
            Assert.IsTrue(provider.Manager.FindEntities<Order>(EntityState.AllButDetached).Any());
        }
Example #3
0
        public async Task ShouldCancelProjectionQueryTask()
        {
            var provider = EntityManagerProviderFactory.CreateTestEntityManagerProvider();
            var unitOfWork = new UnitOfWork<Customer>(provider);

            var cts = new CancellationTokenSource();
            cts.Cancel();
            await unitOfWork.Entities.FindAsync(q => q.Select(x => x.CompanyName), cts.Token)
                .ContinueWith(task => Assert.IsTrue(task.IsCanceled, "Should be cancelled"));

            await unitOfWork.Entities.FindInDataSourceAsync(q => q.Select(x => x.CompanyName), cts.Token)
                .ContinueWith(task => Assert.IsTrue(task.IsCanceled, "Should be cancelled"));
        }
Example #4
0
        public async Task ShouldCancelQueryTaskWithToken()
        {
            var provider = EntityManagerProviderFactory.CreateTestEntityManagerProvider();
            var unitOfWork = new UnitOfWork<Customer>(provider);

            var cts = new CancellationTokenSource();
            cts.Cancel();
            await unitOfWork.Entities.AllAsync(cts.Token)
                .ContinueWith(task => Assert.IsTrue(task.IsCanceled, "Should be cancelled"));

            await unitOfWork.Entities.AllInDataSourceAsync(cts.Token)
                .ContinueWith(task => Assert.IsTrue(task.IsCanceled, "Should be cancelled"));
        }
Example #5
0
        public async Task ShouldCancelQueryTask()
        {
            var provider = EntityManagerProviderFactory.CreateTestEntityManagerProvider();
            var unitOfWork = new UnitOfWork<Customer>(provider);
            var em = provider.Manager;
            em.Querying += (sender, args) => args.Cancel = true;

            await unitOfWork.Entities.AllAsync()
                .ContinueWith(task => Assert.IsTrue(task.IsCanceled, "Should be cancelled"));
        }
Example #6
0
        public async Task ShouldRetrieveCustomersWithProjectionSelector()
        {
            var provider = EntityManagerProviderFactory.CreateTestEntityManagerProvider();
            var unitOfWork = new UnitOfWork<Customer>(provider);

            var selector =
                ProjectionSelector.Combine(new[]
                                        {
                                            new ProjectionSelector("CustomerID"),
                                            new ProjectionSelector("CompanyName")
                                        });
            var pd = PredicateBuilder.Make("City", FilterOperator.IsEqualTo, "SomeCity");
            var sortSelector = new SortSelector("CompanyName");

            await InitFakeBackingStoreAsync(CompositionContext.Fake.Name);
            var result = await unitOfWork.Entities.FindAsync(q => q.Select(selector),
                                                             pd.ToPredicate<Customer>(),
                                                             q => q.OrderBySelector(sortSelector));

            Assert.IsTrue(result.Cast<object>().Any());
        }
Example #7
0
        public async Task ShouldRetrieveCustomersWithSelectorFromCache()
        {
            var provider = EntityManagerProviderFactory.CreateTestEntityManagerProvider();
            var unitOfWork = new UnitOfWork<Customer>(provider);

            await InitFakeBackingStoreAsync(CompositionContext.Fake.Name);
            var customers = await unitOfWork.Entities.FindInDataSourceAsync(x => x.City == "SomeCity",
                                                                                 q => q.OrderBy(x => x.CompanyName));

            Assert.IsTrue(customers.Any());

            var names = unitOfWork.Entities.FindInCache(
                            q => q.Select(x => x.CompanyName),
                            x => x.City == "SomeCity",
                            q => q.OrderBy(x => x));
            Assert.IsTrue(names.Count() == customers.Count());
            Assert.IsTrue(
                names.All((value, index) => customers.ElementAt(index).CompanyName == value));

        }
Example #8
0
        public async Task ShouldRetrieveOrderProjectionAndCustomer()
        {
            var provider = EntityManagerProviderFactory.CreateTestEntityManagerProvider();
            var unitOfWork = new UnitOfWork<Customer>(provider);

            await InitFakeBackingStoreAsync(CompositionContext.Fake.Name);

            var orders = await unitOfWork.Entities.FindAsync(
                q => q.SelectMany(x => x.Orders), fetchOptions: options => options.Include(x => x.Customer));

            Assert.IsTrue(orders.Any());
            var customers = provider.Manager.FindEntities<Customer>(EntityState.AllButDetached);
            Assert.IsTrue(customers.Any());
        }
Example #9
0
        public void ShouldCreateEntityWithPublicFactoryMethod()
        {
            var provider = EntityManagerProviderFactory.CreateTestEntityManagerProvider();
            var unitOfWork = new UnitOfWork<EntityWithPublicFactoryMethod>(provider);

            var task = unitOfWork.Factory.CreateAsync();
            Assert.IsNotNull(task.Result);
            Assert.IsTrue(task.Result.Id == 200);
            Assert.IsTrue(task.Result.EntityAspect.EntityState.IsAdded());
        }
Example #10
0
        public async Task ShouldRetrieveCustomerWithIdFromCache()
        {
            var provider = EntityManagerProviderFactory.CreateTestEntityManagerProvider();
            var unitOfWork = new UnitOfWork<Customer>(provider);

            var id = SampleDataProvider.CreateGuid(1);
            Assert.IsFalse(unitOfWork.Entities.ExistsInCache(id));
            Customer customer = null;
            try
            {
                customer = unitOfWork.Entities.WithIdFromCache(id);
            }
            catch (EntityNotFoundException)
            {
                // Expected exception
            }
            Assert.IsNull(customer);

            // Fetch from data source
            await InitFakeBackingStoreAsync(CompositionContext.Fake.Name);
            await unitOfWork.Entities.WithIdFromDataSourceAsync(id);

            Assert.IsTrue(unitOfWork.Entities.ExistsInCache(id));
            customer = unitOfWork.Entities.WithIdFromCache(id);
            Assert.IsNotNull(customer);
            Assert.IsTrue(customer.CustomerID == id);
        }
Example #11
0
        public async Task ShouldRetrieveCustomerWithId()
        {
            var provider = EntityManagerProviderFactory.CreateTestEntityManagerProvider();
            var unitOfWork = new UnitOfWork<Customer>(provider);

            var id = SampleDataProvider.CreateGuid(1);
            await InitFakeBackingStoreAsync(CompositionContext.Fake.Name);
            var customer = await unitOfWork.Entities.WithIdAsync(id);

            Assert.IsNotNull(customer);
            Assert.IsTrue(customer.CustomerID == id);
        }
Example #12
0
        public async Task ShouldRetrieveCustomersWithPredicateExpressionFromCache()
        {
            var provider = EntityManagerProviderFactory.CreateTestEntityManagerProvider();
            var unitOfWork = new UnitOfWork<Customer>(provider);
            Expression<Func<Customer, bool>> expression = c => c.City == "SomeCity";

            var entities = unitOfWork.Entities.FindInCache(expression);
            Assert.IsFalse(entities.Any());

            await InitFakeBackingStoreAsync(CompositionContext.Fake.Name);
            var result = await unitOfWork.Entities.FindInDataSourceAsync(expression);

            Assert.IsTrue(result.Any());
            Assert.IsTrue(result.All(c => c.City == "SomeCity"));

            entities = unitOfWork.Entities.FindInCache(expression);
            Assert.IsTrue(entities.Count() == result.Count());
            Assert.IsTrue(entities.All(c => c.City == "SomeCity"));
        }
Example #13
0
        public async Task ShouldRetrieveCustomersWithPredicateExpression()
        {
            var provider = EntityManagerProviderFactory.CreateTestEntityManagerProvider();
            var unitOfWork = new UnitOfWork<Customer>(provider);

            await InitFakeBackingStoreAsync(CompositionContext.Fake.Name);
            var customers = await unitOfWork.Entities.FindAsync(c => c.City == "SomeCity");

            Assert.IsTrue(customers.Any());
            Assert.IsTrue(customers.All(c => c.City == "SomeCity"));
        }
Example #14
0
        public async Task ShouldRetrieveCustomersWithPredicateDescription()
        {
            var provider = EntityManagerProviderFactory.CreateTestEntityManagerProvider();
            var unitOfWork = new UnitOfWork<Customer>(provider);
            var pd = PredicateBuilder.Make("City", FilterOperator.IsEqualTo, "SomeCity");

            await InitFakeBackingStoreAsync(CompositionContext.Fake.Name);
            var customers = await unitOfWork.Entities.FindAsync(pd.ToPredicate<Customer>());

            Assert.IsTrue(customers.Any());
            Assert.IsTrue(customers.All(c => c.City == "SomeCity"));
        }
Example #15
0
        public async Task ShouldRetrieveDistinctCitiesDynamic()
        {
            var provider = EntityManagerProviderFactory.CreateTestEntityManagerProvider();
            var unitOfWork = new UnitOfWork<Customer>(provider);

            await InitFakeBackingStoreAsync(CompositionContext.Fake.Name);

            var cities = await unitOfWork.Entities.FindAsync(
                q => q.Select(new ProjectionSelector("City")), fetchOptions: options => options.Distinct());
            Assert.IsTrue(cities.Cast<string>().Any());
            Assert.IsTrue(cities.Cast<string>().GroupBy(x => x).All(x => x.Count() == 1));
        }
Example #16
0
        public async Task ShouldCancelSaveTask()
        {
            var provider = EntityManagerProviderFactory.CreateTestEntityManagerProvider();
            var unitOfWork = new UnitOfWork<Customer>(provider);
            var em = provider.Manager;

            var customer = new Customer { CustomerID = Guid.NewGuid(), CompanyName = "Foo" };
            em.AddEntity(customer);
            em.Saving += (sender, args) =>
                args.Cancel = true;

            Assert.IsTrue(em.HasChanges());
            await unitOfWork.CommitAsync()
                .ContinueWith(task => Assert.IsTrue(task.IsCanceled, "Should be cancelled"));
        }
Example #17
0
        public async Task ShouldRetrieveCustomersIfSortedWithSortFunction()
        {
            var provider = EntityManagerProviderFactory.CreateTestEntityManagerProvider();
            var unitOfWork = new UnitOfWork<Customer>(provider);

            await InitFakeBackingStoreAsync(CompositionContext.Fake.Name);
            var customers = await unitOfWork.Entities.AllAsync(q => q.OrderBy(c => c.City));

            Assert.IsTrue(customers.Any());
        }
Example #18
0
        public async Task ShouldRetrieveCustomersWithSelector()
        {
            var provider = EntityManagerProviderFactory.CreateTestEntityManagerProvider();
            var unitOfWork = new UnitOfWork<Customer>(provider);

            await InitFakeBackingStoreAsync(CompositionContext.Fake.Name);
            var result = await unitOfWork.Entities.FindAsync(q => q.Select(x => x.CompanyName),
                                                                     x => x.City == "SomeCity",
                                                                     q => q.OrderBy(x => x));

            Assert.IsTrue(result.Any());
        }
Example #19
0
        public async Task ShouldRetrieveSkipAndTakeCustomers()
        {
            var provider = EntityManagerProviderFactory.CreateTestEntityManagerProvider();
            var unitOfWork = new UnitOfWork<Customer>(provider);

            await InitFakeBackingStoreAsync(CompositionContext.Fake.Name);

            var all = await unitOfWork.Entities.AllAsync();
            var customers = await unitOfWork.Entities.AllAsync(fetchOptions: options => options.Skip(1).Take(2));
            Assert.IsTrue(customers.Count() == 2);
            Assert.IsTrue(all.ToArray()[1].CustomerID == customers.ToArray()[0].CustomerID);
        }