public void FindAll_ReturnsExpectedData()
        {
            // Arrange
            DummyEntity[] data =
            {
                new DummyEntity {
                    Name = "Some Name", Id = 1
                },
                new DummyEntity {
                    Name = "Other Name", Id = 2
                }
            };

            TestHelpers.InjectData(_options, data);

            using DummyContext context = new DummyContext(_options);
            IDummyRepository dummyRepository = new DummyRepository(context);

            // Act
            IEnumerable <DummyEntity> result = dummyRepository.FindAll().ToList();

            // Assert
            Assert.AreEqual(2, result.Count());
            Assert.AreEqual("Some Name", result.First().Name);
            Assert.AreEqual("Other Name", result.Last().Name);
        }
Example #2
0
        public void TestSetup()
        {
            _folder = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
            Directory.CreateDirectory(_folder);

            var cacheFolder = Path.Combine(_folder, "Cache");

            Directory.CreateDirectory(cacheFolder);

            // override configuration
            var config = UQConfiguration.Instance as UQConfiguration;

            config.HorizontalCacheConfigurationSection.SetParameter("folder", cacheFolder);
            config.HorizontalCacheConfigurationSection.ProviderType = typeof(TestTextFileCacheProvider <>);
            config.HorizontalCacheConfigurationSection.SetCacheDataProviderType(typeof(TestCacheDataProvider <>));

            config.HorizontalCacheConfigurationSection.IsEnabled = true;


            // create 1000 files for testing
            var dao = new DummyEntityDAO2();

            dao.SetProperties(new Dictionary <string, object>
            {
                ["folder"] = _folder
            });

            dao.GenerateFiles(1000);

            // forces the cache initialization
            var context = new DummyContext(_folder);

            context.DummyEntitiesWithCache.Select(x => x.Key).ToList();
        }
Example #3
0
        public void TestOrderByWithTake()
        {
            // Arrange
            var methodCounter = new DaoMethodCallsCounter();
            var context       = new DummyContext(_folder, methodCounter);

            // Act
            var result = context.DummyEntitiesWithCache
                         .OrderBy(x => x.Key)
                         .Select(x => new
            {
                x.Key,
                x.Name
            })
                         .Take(3)
                         .ToList();

            // Assert
            Assert.IsNotNull(result);
            Assert.AreEqual(3, result.Count);
            Assert.AreEqual("0", result[0].Key);
            Assert.AreEqual("Dummy Item 0", result[0].Name);

            Assert.AreEqual("1", result[1].Key);
            Assert.AreEqual("Dummy Item 1", result[1].Name);

            Assert.AreEqual("10", result[2].Key);
            Assert.AreEqual("Dummy Item 10", result[2].Name);

            var cacheProvider = ReflectionHelper.WinkleCacheDataProviderOut(context.DummyEntitiesWithCache);

            Assert.AreEqual(0, cacheProvider.CreateEntityFromCachedEntryCount); //ok that's not nice
            Assert.AreEqual(0, methodCounter.EntityCallsCount);
        }
Example #4
0
            private void Creating_graphs_of_detached_change_tracking_proxies_does_not_use_expensive_lookup(
                Func <DummyContext, FullyVirtualPrin> createPrincipal,
                Func <DummyContext, FullyVirtualDep> createDependent)
            {
                using (var context = new DummyContext())
                {
                    var principal = createPrincipal(context);
                    var dependent = createDependent(context);
                    Assert.IsAssignableFrom <IEntityWithRelationships>(principal);
                    Assert.IsAssignableFrom <IEntityWithRelationships>(dependent);
                    context.Entry(principal).State = EntityState.Detached;
                    context.Entry(dependent).State = EntityState.Detached;

                    var stateManager     = ((IObjectContextAdapter)context).ObjectContext.ObjectStateManager;
                    var principalManager = stateManager.GetRelationshipManager(principal);
                    var dependentManager = stateManager.GetRelationshipManager(dependent);

                    var mockPrincipalLoader = new Mock <ExpensiveOSpaceLoader>();
                    principalManager.SetExpensiveLoader(mockPrincipalLoader.Object);

                    var mockDependentLoader = new Mock <ExpensiveOSpaceLoader>();
                    dependentManager.SetExpensiveLoader(mockDependentLoader.Object);

                    principal.Dependents.Add(dependent);
                    dependent.Principal = principal;

                    mockPrincipalLoader.Verify(m => m.LoadTypesExpensiveWay(It.IsAny <Assembly>()), Times.Never());
                    mockDependentLoader.Verify(m => m.LoadTypesExpensiveWay(It.IsAny <Assembly>()), Times.Never());
                    mockPrincipalLoader.Verify(m => m.GetRelationshipTypeExpensiveWay(It.IsAny <Type>(), It.IsAny <string>()), Times.Never());
                    mockDependentLoader.Verify(m => m.GetAllRelationshipTypesExpensiveWay(It.IsAny <Assembly>()), Times.Never());
                    mockPrincipalLoader.Verify(m => m.GetRelationshipTypeExpensiveWay(It.IsAny <Type>(), It.IsAny <string>()), Times.Never());
                    mockDependentLoader.Verify(m => m.GetAllRelationshipTypesExpensiveWay(It.IsAny <Assembly>()), Times.Never());
                }
            }
Example #5
0
        public void ExecuteAsync()
        {
            foreach (var item in TestCases())
            {
                var filter = new DerivedSequenceFilter(item.shortCircuiting);
                var source = new DummySource[] {
                    new DummySource(),
                    new DummySource(),
                };
                var context     = new DummyContext();
                var invokedNext = false;
                SequenceFilterFunc <DummySource> next = _ => {
                    invokedNext = true;
                    return(Task.FromResult(_));
                };

                new TestCaseRunner($"No.{item.testNumber}")
                .Run(() => filter.ExecuteAsync(source, context, next))
                .Verify((actual, desc) => {
                    Assert.AreEqual(source, actual, $"{desc}: 入力シーケンスが出力に素通しされていません。");
                    Assert.AreEqual(context, filter.ActualContext, $"{desc}: フィルター時のコンテキストが同一インスタンスではありません。");
                    Assert.AreEqual(item.shortCircuiting, !invokedNext, $"{desc}: ショートサーキットの有無が期待値と一致しません。");
                }, (Type)null);
            }

            (int testNumber, bool shortCircuiting)[] TestCases() => new[] {
Example #6
0
 /// <summary>
 /// Inject test data
 /// </summary>
 internal static void InjectData <T>(DbContextOptions <DummyContext> options, params T[] entities)
     where T : class
 {
     using DummyContext context = new DummyContext(options);
     context.Set <T>().AddRange(entities);
     context.SaveChanges();
 }
Example #7
0
        public void CreateAsync_Abyss()
        {
            var createResult = Rand.Array <DummyEntity>();
            IEnumerable <DummyEntity> actualSource = default;
            var middleware = new SpyFilterMiddlewareToCreateAsync(src => {
                actualSource = src;
                return(createResult);
            }, cancelled: false);

            var          nextResult                    = Rand.Array <DummyEntity>();
            DummyContext actualNextContext             = default;
            IEnumerable <DummyEntity> actualNextSource = default;
            Func <DummyContext, Task <FilterFunc <DummyEntity> > > next = ctx => {
                actualNextContext = ctx;
                return(Task.FromResult <FilterFunc <DummyEntity> >(src => {
                    actualNextSource = src;
                    return nextResult;
                }));
            };

            var context = new DummyContext();
            var source  = new[] { new DummyEntity(), new DummyEntity() };

            new TestCaseRunner()
            .Run(async() => (await middleware.CreateAsync(context, next))(source))
            .Verify((actual, desc) => {
                Assert.AreEqual(nextResult, actual, desc);

                Assert.AreEqual(context, middleware.ActualContext, desc);
                Assert.AreEqual(false, middleware.ActualCancelled, desc);
                Assert.AreEqual(source, actualSource, desc);
                Assert.AreEqual(context, actualNextContext, desc);
                Assert.AreEqual(createResult, actualNextSource, desc);
            }, (Type)null);
        }
Example #8
0
            protected override Task <FilterFunc <DummyEntity> > CreateAsync(DummyContext context, Func <DummyContext, Task <FilterFunc <DummyEntity> > > next)
            {
                ActualContext = context;
                ActualNext    = next;

                return(Task.FromResult(_createAsyncResult));
            }
Example #9
0
        public void TestCountWithContainsFilter()
        {
            // Arrange
            var methodCounter = new DaoMethodCallsCounter();
            var context       = new DummyContext(_folder, methodCounter);

            var identifiers = Enumerable.Range(177, 20000).Select(i => i.ToString());

            // Act

            var stopWatch = new System.Diagnostics.Stopwatch();

            stopWatch.Start();

            var data = context.DummyEntitiesWithCache
                       .Count(x => identifiers.Contains(x.Key));

            stopWatch.Stop();

            // Assert
            var cacheProvider = ReflectionHelper.WinkleCacheDataProviderOut(context.DummyEntitiesWithCache);

            Assert.AreEqual(0, cacheProvider.CreateEntityFromCachedEntryCount);
            Assert.IsTrue(stopWatch.ElapsedMilliseconds < 40);  //YSV: successive call might take only 20 ms. Not sure what happens when it call it first
            Assert.AreEqual(0, methodCounter.EntityCallsCount);
            Assert.AreEqual(0, methodCounter.GetIdentifiersCallsCount);
            Assert.AreEqual(823, data);
        }
Example #10
0
        public void Build()
        {
            var pipeline    = new PipelineBuilder <DummySource, DummyContext>();
            var factoryLogs = new List <int?>();
            var filterLogs  = new List <int?>();

            {
                Func <SequenceFilterFunc <DummySource, DummyContext>, SequenceFilterFunc <DummySource, DummyContext> > FilterFactory(int id)
                {
                    return(next => {
                        factoryLogs.Add(id);
                        return (source, context) => {
                            filterLogs.Add(id);
                            return next(source, context);
                        };
                    });
                }

                pipeline.Add(FilterFactory(0));
                pipeline.Add(FilterFactory(1));
                pipeline.Add(FilterFactory(2));
            }

            new TestCaseRunner()
            .Run(() => pipeline.Build())
            .Verify((actual, _) => {
                var source       = new DummySource[] { new DummySource(), new DummySource() };
                var context      = new DummyContext();
                var actualSource = actual(source, context).GetAwaiter().GetResult();

                CollectionAssert.AreEqual(new int[] { 2, 1, 0 }, factoryLogs, "フィルターファクトリーの呼び出し順序が一致しません。");
                CollectionAssert.AreEqual(new int[] { 0, 1, 2 }, filterLogs, "フィルターの適用順序が一致しません。");
                Assert.AreEqual(source, actualSource, "入力シーケンスが出力に素通しされていません。");
            }, (Type)null);
        }
        public void Configure(StoreDatabaseDriverSettings settings)
        {
            _settings = settings;
            var ctx = new DummyContext(_settings.ConnectionString);

            ctx.Database.EnsureCreated();
        }
Example #12
0
            public void PrependNamespaceToRelationshipName_can_expand_a_name_using_expensive_lookup_as_a_last_resort()
            {
                using (var context = new DummyContext())
                {
                    var anEntity = context.NavVirtuals.Attach(new NavVirtual());

                    var objectContext = ((IObjectContextAdapter)context).ObjectContext;
                    var manager       = objectContext.ObjectStateManager.GetRelationshipManager(anEntity);
                    var oSpaceType    = objectContext.MetadataWorkspace
                                        .GetItemCollection(DataSpace.OSpace)
                                        .GetItem <EdmType>(typeof(NavVirtual).FullName);

                    var edmTypes = new Dictionary <string, EdmType>
                    {
                        { typeof(NavVirtual).FullName, oSpaceType }
                    };

                    var mockLoader = new Mock <ExpensiveOSpaceLoader>();
                    mockLoader.Setup(m => m.LoadTypesExpensiveWay(typeof(NavVirtual).Assembly))
                    .Returns(edmTypes);
                    manager.SetExpensiveLoader(mockLoader.Object);

                    manager.WrappedOwner.DetachContext();
                    typeof(RelationshipManager).GetField("_relationships", BindingFlags.Instance | BindingFlags.NonPublic)
                    .SetValue(manager, null);

                    Assert.Equal(
                        "System.Data.Entity.Core.Objects.DataClasses.FullyVirtualPrin_Other",
                        manager.PrependNamespaceToRelationshipName("FullyVirtualPrin_Other"));
                }
            }
Example #13
0
        public void TestSelectManySimple()
        {
            // Arrange
            var methodCounter = new DaoMethodCallsCounter();
            var context       = new DummyContext(_folder, methodCounter);

            // Act
            var result = context.DummyEntitiesWithCache
                         .SelectMany(x => x.ListData.Select(i =>
                                                            new
            {
                x.Key,
                Number = i
            }).ToList())
                         .Where(x => x.Key.Contains(x.Number))
                         .ToList();

            // Assert
            Assert.IsNotNull(result);
            Assert.AreEqual(813, result.Count);

            foreach (var x in result)
            {
                Assert.IsTrue(x.Key.Contains(x.Number));
            }

            var cacheProvider = ReflectionHelper.WinkleCacheDataProviderOut(context.DummyEntitiesWithCache);

            Assert.AreEqual(1000, cacheProvider.CreateEntityFromCachedEntryCount);
            Assert.AreEqual(0, methodCounter.EntityCallsCount);
        }
        public void TestFirstOrDefaultWithContainsFilter()
        {
            // Arrange
            var methodCounter = new DaoMethodCallsCounter();
            var context       = new DummyContext(_folder, methodCounter);

            var identifiers = Enumerable.Range(177, 20000).Select(i => i.ToString());

            // Act

            var stopWatch = new System.Diagnostics.Stopwatch();

            stopWatch.Start();

            //var data = context.DummyEntitiesWithCache
            //                .FirstOrDefault(x => identifiers.Contains(x.Key));

            var data = context.DummyEntitiesWithCache
                       .FirstOrDefault(x => x.Key == "177");

            stopWatch.Stop();

            // Assert
            var cacheProvider = ReflectionHelper.WinkleCacheDataProviderOut(context.DummyEntitiesWithCache);

            Assert.AreEqual(0, cacheProvider.CreateEntityFromCachedEntryCount);
            Assert.IsTrue(stopWatch.ElapsedMilliseconds < 30);  //YSV: one call to the datastorage
            // Ok, that's a problem here
            Assert.AreEqual(1, methodCounter.EntityCallsCount);
            Assert.AreEqual(0, methodCounter.GetIdentifiersCallsCount);
            Assert.IsNotNull(data);
        }
Example #15
0
        public void TestEffectivelyProcessesContains()
        {
            // Arrange
            var methodCounter = new DaoMethodCallsCounter();
            var context       = new DummyContext(_folder, methodCounter);

            var identifiers = Enumerable.Range(0, 20000).Select(i => i.ToString());

            // Act
            var stopWatch = new System.Diagnostics.Stopwatch();

            stopWatch.Start();

            var data = context.DummyEntitiesWithCache
                       .Where(x => identifiers.Contains(x.Key))
                       .Select(x => x.Key)
                       .ToList();

            stopWatch.Stop();

            // Assert
            var cacheProvider = ReflectionHelper.WinkleCacheDataProviderOut(context.DummyEntitiesWithCache);

            Assert.AreEqual(0, cacheProvider.CreateEntityFromCachedEntryCount); // only identifiers are used
            Assert.IsTrue(stopWatch.ElapsedMilliseconds < 30);                  // proves that Where is replaced
            Assert.AreEqual(0, methodCounter.EntityCallsCount);
        }
Example #16
0
        public void TestWhereWithFilterByString()
        {
            // Arrange
            var methodCounter = new DaoMethodCallsCounter();
            var context       = new DummyContext(_folder, methodCounter);

            // Act
            var stopWatch = new System.Diagnostics.Stopwatch();

            stopWatch.Start();

            var data = context.DummyEntitiesWithCache
                       .Where(x => (x.Name ?? string.Empty).IndexOf("11", StringComparison.InvariantCultureIgnoreCase) >= 0)
                       .Select(x => new { Id = x.Key, x.Name })
                       .ToList();

            stopWatch.Stop();

            // Assert
            var cacheProvider = ReflectionHelper.WinkleCacheDataProviderOut(context.DummyEntitiesWithCache);

            Assert.AreEqual(0, cacheProvider.CreateEntityFromCachedEntryCount); // only identifiers are used
            Assert.IsTrue(stopWatch.ElapsedMilliseconds < 30);                  // proves that Where is replaced
            Assert.AreEqual(0, methodCounter.EntityCallsCount);
        }
        public void TestGroupByWithToList()
        {
            // Arrange
            var methodCounter = new DaoMethodCallsCounter();
            var context       = new DummyContext(_folder, methodCounter);

            // Act
            var result = context.DummyEntitiesWithCache.GroupBy(x => int.Parse(x.Key) % 10)
                         .Select(g =>
                                 new
            {
                g.Key,
                Data = g.ToList()
            })
                         .ToList();

            // Assert
            Assert.IsNotNull(result);
            Assert.AreEqual(10, result.Count);

            foreach (var x in result)
            {
                Assert.AreEqual(100, x.Data.Count);
                foreach (var d in x.Data)
                {
                    Assert.IsNotNull(d.NonCachedField);
                }
            }

            var cacheProvider = ReflectionHelper.WinkleCacheDataProviderOut(context.DummyEntitiesWithCache);

            Assert.AreEqual(0, cacheProvider.CreateEntityFromCachedEntryCount);
            Assert.AreEqual(1000, methodCounter.EntityCallsCount);
        }
Example #18
0
        public void Seed_ShouldInitializeDatabase()
        {
            var stores                  = 10;
            var persons                 = 10;
            var transactions            = 10;
            var productsPerStore        = 100;
            var purchasesPerTransaction = 10;
            var options                 = new DbContextOptionsBuilder <DummyContext>()
                                          .UseInMemoryDatabase(Guid.NewGuid().ToString())
                                          .Options;

            using var context = new DummyContext(options);
            var initializer = new ContextInitializer(persons, stores, productsPerStore, purchasesPerTransaction, transactions);

            initializer.Seed(context);

            Assert.AreEqual(persons, context.Persons.Count());
            Assert.AreEqual(stores, context.Stores.Count());
            Assert.AreEqual(productsPerStore, context.Stores.First().Products.Count());
            Assert.AreEqual(productsPerStore, context.Stores.Last().Products.Count());
            Assert.AreEqual(purchasesPerTransaction, context.Transactions.Include(o => o.Purchases).First().Purchases.Count());
            Assert.AreEqual(purchasesPerTransaction, context.Transactions.Include(o => o.Purchases).Last().Purchases.Count());
            Assert.AreEqual(transactions, context.Persons.First().Transactions.Count());
            Assert.AreEqual(transactions, context.Persons.Last().Transactions.Count());
        }
Example #19
0
            public void InitializeRelatedCollection_throws_for_change_tracking_proxy_related_end_that_has_been_serialized()
            {
                using (var context = new DummyContext())
                {
                    var anEntity = SerializeAndDeserialize(context.Principals.Create());
                    Assert.IsAssignableFrom <IEntityWithRelationships>(anEntity);

                    var stateManager = ((IObjectContextAdapter)context).ObjectContext.ObjectStateManager;
                    var manager      = stateManager.GetRelationshipManager(anEntity);

                    var mockLoader = new Mock <ExpensiveOSpaceLoader>();
                    manager.SetExpensiveLoader(mockLoader.Object);

                    var relatedEnd = manager.GetRelatedCollection <FullyVirtualDep>(
                        "System.Data.Entity.Core.Objects.DataClasses.FullyVirtualPrin_Dependents", "FullyVirtualPrin_Dependents_Target");

                    Assert.Equal(
                        Strings.RelationshipManager_CollectionAlreadyInitialized(
                            Strings.RelationshipManager_CollectionInitializeIsForDeserialization),
                        Assert.Throws <InvalidOperationException>(
                            () =>
                            manager.InitializeRelatedCollection(
                                "System.Data.Entity.Core.Objects.DataClasses.FullyVirtualPrin_Dependents",
                                "FullyVirtualPrin_Dependents_Target",
                                relatedEnd)).Message);
                }
            }
Example #20
0
        public void TestFilterWithCachedProperties()
        {
            // Arrange
            var methodCounter = new DaoMethodCallsCounter();
            var context       = new DummyContext(_folder, methodCounter);

            // Act
            var stopWatch = new System.Diagnostics.Stopwatch();

            stopWatch.Start();

            var result = context.DummyEntitiesWithCache.Any(x => x.Name.Contains("100"));

            stopWatch.Stop();

            // Assert
            var cacheProvider = ReflectionHelper.WinkleCacheDataProviderOut(context.DummyEntitiesWithCache);

            // That's vary from 1 to 129, but we ultimately want it only once
            Assert.AreEqual(0, cacheProvider.CreateEntityFromCachedEntryCount);
            Assert.IsTrue(stopWatch.ElapsedMilliseconds < 30);  //effectively gets data from cache
            Assert.IsTrue(result);
            Assert.AreEqual(0, methodCounter.EntityCallsCount);
            Assert.AreEqual(0, methodCounter.GetIdentifiersCallsCount);
        }
        public void TestCombinesWithPendingChangesAddUpdate()
        {
            // Arrange
            var methodCounter = new DaoMethodCallsCounter();
            var context       = new DummyContext(_folder, methodCounter);

            var newItem = new DummyEntity
            {
                Key  = "1051",
                Name = "Test 1051"
            };

            var newItem2 = new DummyEntity
            {
                Key  = "751",
                Name = "Test 751"
            };

            context.DummyEntitiesWithCache.Add(newItem);
            context.DummyEntitiesWithCache.Update(newItem2);

            // Act
            var addedItem   = context.DummyEntitiesWithCache.FirstOrDefault(x => x.Key == "1051");
            var updatedItem = context.DummyEntitiesWithCache.FirstOrDefault(x => x.Key == "751");

            // Assert
            Assert.AreEqual(newItem2, updatedItem);
            Assert.AreEqual(newItem, addedItem);
            Assert.AreEqual(0, methodCounter.EntityCallsCount);
            Assert.AreEqual(0, methodCounter.GetIdentifiersCallsCount);
        }
Example #22
0
        public DummyController(DummyContext context)
        {
            _context = context;
            Bag bag1 = new Bag()
            {
                Name = "Bag1",
            };

            _context.Bags.Add(bag1);
            _context.SaveChangesAsync();
            Dummy dummy1 = new Dummy()
            {
                Name  = "d1",
                BagId = 1
            };
            Dummy dummy2 = new Dummy()
            {
                Name  = "d2",
                BagId = 1
            };

            _context.Dummies.Add(dummy1);
            _context.Dummies.Add(dummy2);
            _context.SaveChangesAsync();
        }
Example #23
0
        public UnitOfWork(DummyContext context)
        {
            _myAppContext = context;

            //Initialise our specific model Repositories
            Customer = new CustomerRepository(_myAppContext);
            Order    = new OrderRepository(_myAppContext);
            Product  = new ProductRepository(_myAppContext);
        }
 public void Initialize()
 {
     today     = System.DateTime.Now;
     yesterday = today.AddDays(-1);
     aantal    = -1;
     p         = new Product();
     Tim       = new Student();
     context   = new DummyContext();
 }
        public DummyRepo CreateNewDummyRepo(string dbName)
        {
            var builder = new DbContextOptionsBuilder <DummyContext>();

            builder.UseInMemoryDatabase(dbName);
            var context = new DummyContext(builder.Options);

            return(new DummyRepo(context));
        }
 public void AddReferenceToCollection_NullPropertyName()
 {
     try
     {
         IUpdatable context = new DummyContext();
         context.AddReferenceToCollection(new object(), null, new object());
         Assert.Fail("An ArgumentException was expected when passing null in for the property name.");
     }
     catch (System.ArgumentException) { }
 }
 public void AddReferenceToCollection_NullResourceToBeAdded()
 {
     try
     {
         IUpdatable context = new DummyContext();
         context.AddReferenceToCollection(new object(), "PropertyName", null);
         Assert.Fail("An ArgumentNullException was expected when passing null in for resource to be added.");
     }
     catch (System.ArgumentException) { }
 }
 public void LoadProperty_NullSelector()
 {
     try
     {
         DummyContext context = new DummyContext();
         context.LoadProperty<TestModel>(new TestModel(), null);
         Assert.Fail("An ArgumentNullException was expected.");
     }
     catch (ArgumentNullException) { }
 }
 public void AddReferenceToCollection_PropertyNotFound()
 {
     try
     {
         IUpdatable context = new DummyContext();
         context.AddReferenceToCollection(this, System.Guid.NewGuid().ToString(), new object());
         Assert.Fail("An UnknownPropertyException is expected if a property name is given that doesn't exist on the resource object.");
     }
     catch(UnknownPropertyException) { }
 }
Example #30
0
        public void ProjectConfiguration_UsesCachedValue()
        {
            var options     = TestHelper.CreateOptions($@"ResourceTests\SonarProjectConfig\Path_Windows\SonarProjectConfig.xml");
            var context     = new DummyContext();
            var firstSut    = new SonarAnalysisContext(context, Enumerable.Empty <DiagnosticDescriptor>());
            var secondSut   = new SonarAnalysisContext(context, Enumerable.Empty <DiagnosticDescriptor>());
            var firstConfig = firstSut.ProjectConfiguration(options);

            secondSut.ProjectConfiguration(options).Should().BeSameAs(firstConfig);
        }
Example #31
0
        public void DummyContext_ShouldBuildWithoutErrors()
        {
            string connectionString = $"Server=DESKTOP-6AQTT80;Database=TransactionContextTest;Trusted_Connection=True";
            var    options          = new DbContextOptionsBuilder <DummyContext>()
                                      .UseSqlServer(connectionString)
                                      .Options;

            using var context = new DummyContext(options);
            context.Database.EnsureCreated();
            context.Database.EnsureDeleted();
        }
        public void AddReferenceToCollection_MakeSureObjectIsAdded()
        {
            DummyContext context = new DummyContext();
            IUpdatable up = context;
            up.AddReferenceToCollection(context, "CollectionProperty", "TestString");

            Assert.AreEqual(1, context.CollectionProperty.Count, "The number of items in the collection property is not correct.");
            Assert.AreEqual("TestString", context.CollectionProperty[0], @"
            The first string in the collection is not correct.
            ");
        }
Example #33
0
        public void TestSelectManyCombinesWithPendingChangesAddOrUpdate()
        {
            // Arrange
            var methodCounter = new DaoMethodCallsCounter();
            var context       = new DummyContext(_folder, methodCounter);

            context.DummyEntitiesWithCache.Add(new DummyEntity
            {
                Key      = "1001",
                ListData = new[]
                {
                    "1", "2", "10"
                }
            });

            context.DummyEntitiesWithCache.Update(new DummyEntity
            {
                Key      = "0",
                ListData = new[]
                {
                    "0", "1", "2"
                }
            });

            // Act
            var result = context.DummyEntitiesWithCache
                         .SelectMany(x => x.ListData.Select(i =>
                                                            new
            {
                x.Key,
                Number = i
            }).ToList())
                         .Where(x => x.Key.Contains(x.Number))
                         .ToList();

            // Assert
            Assert.IsNotNull(result);
            Assert.AreEqual(816, result.Count);

            foreach (var x in result)
            {
                Assert.IsTrue(x.Key.Contains(x.Number));
            }

            Assert.IsNotNull(result.FirstOrDefault(x => x.Key == "1001" && x.Number == "1"));
            Assert.IsNotNull(result.FirstOrDefault(x => x.Key == "1001" && x.Number == "10"));
            Assert.IsNotNull(result.FirstOrDefault(x => x.Key == "0" && x.Number == "0"));

            var cacheProvider = ReflectionHelper.WinkleCacheDataProviderOut(context.DummyEntitiesWithCache);

            Assert.AreEqual(1000, cacheProvider.CreateEntityFromCachedEntryCount);
            Assert.AreEqual(0, methodCounter.EntityCallsCount);
        }
        public void FindAll_ReturnsEmptyListOnNoDummies()
        {
            // Arrange
            using DummyContext context = new DummyContext(_options);
            IDummyRepository dummyRepository = new DummyRepository(context);

            // Act
            IEnumerable <DummyEntity> result = dummyRepository.FindAll();

            // Assert
            Assert.AreEqual(0, result.Count());
        }
        public static void ClassInitialize(TestContext ctx)
        {
            _connection = new SqliteConnection("DataSource=:memory:");
            _connection.Open();

            _options = new DbContextOptionsBuilder <DummyContext>()
                       .UseSqlite(_connection)
                       .Options;

            using DummyContext context = new DummyContext(_options);
            context.Database.EnsureCreated();
        }
 public void LoadProperty_InvalidExpression()
 {
     try
     {
         DummyContext context = new DummyContext();
         context.LoadProperty<TestModel>(new TestModel(), (a) => new object());
         Assert.Fail(@"
     An ArgumentException was expected when we have an invalid expression.
     The selector must be in the form of (entity) => entity.Property where Property is
     a property on the object.
     ");
     }
     catch (ArgumentException) { }
 }
        public void CommandTimeout_is_obtained_from_and_set_in_ObjectContext_if_ObjectContext_exists()
        {
            using (var context = new DummyContext())
            {
                var objectContext = ((IObjectContextAdapter)context).ObjectContext;
                objectContext.CommandTimeout = 77;

                var internalContext = new EagerInternalContext(context, objectContext, false);

                Assert.Equal(77, internalContext.CommandTimeout);

                internalContext.CommandTimeout = 88;

                Assert.Equal(88, objectContext.CommandTimeout);
            }
        }
        public void LoadProperty_CorrectParametersArePassed()
        {
            TestModel model = new TestModel();
            DummyContext context = new DummyContext();
            context.LoadProperty(model, a => a.Name);

            Assert.AreEqual(1, context.LoadPropertyParameters.Count, @"
            The context.LoadProperty method was not called.
            ");
            Assert.AreEqual(model, context.LoadPropertyParameters[0].Item1, @"
            The entity passed to the context.LoadProperty method was not correct.
            ");
            Assert.AreEqual("Name", context.LoadPropertyParameters[0].Item2, @"
            The property name passed to the context.LaodProperty method was not correct.
            ");
        }
        public void DbContexts_are_associated_with_interception_context_when_InternalContexts_are_constructed()
        {
            using (var context = new DummyContext())
            {
                var objectContext = ((IObjectContextAdapter)context).ObjectContext;

                // One context already associated due to LazyInternalContext in construction path above
                Assert.Equal(new[] { context }, objectContext.InterceptionContext.DbContexts);

                using (var context2 = new DummyContext())
                {
                    new EagerInternalContext(context2, objectContext, false);

                    // Now both contexts are associated
                    Assert.Contains(context, objectContext.InterceptionContext.DbContexts);
                    Assert.Contains(context2, objectContext.InterceptionContext.DbContexts);
                }
            }
        }
 public void RemoveReferenceFromCollection_WhitespacePropertyName()
 {
     try
     {
         IUpdatable context = new DummyContext();
         context.RemoveReferenceFromCollection(new object(), " ", new object());
         Assert.Fail("An ArgumentException was expected when passing an empty string in for the property name.");
     }
     catch (System.ArgumentException) { }
 }
 public void SetValue_EmptyPropertyName()
 {
     try
     {
         IUpdatable context = new DummyContext();
         context.SetValue(new object(), string.Empty, "Value");
         Assert.Fail("An ArgumentException was expected.");
     }
     catch (System.ArgumentException) { }
 }
        public void SetValue_CorrectValueSet()
        {
            IUpdatable context = new DummyContext();
            TestModel model = new TestModel() { Name = "TestString" };

            context.SetValue(model, "Name", "TestStringAgain");

            Assert.AreEqual("TestStringAgain", model.Name,
                    "The Name property should have been reset.");
        }
 public void SetReference_NullPropertyName()
 {
     try
     {
         IUpdatable context = new DummyContext();
         context.SetReference(new object(), null, "Value");
         Assert.Fail("An ArgumentException was expected.");
     }
     catch (System.ArgumentException) { }
 }
        public void SaveChanges_PendingChangesIsCleared()
        {
            DummyContext context = new DummyContext();
            IUpdatable up = context;
            context.PendingChanges.Add(new Tuple<WhippedCreamUpdatableContext.ODataOperation, object>(
                        WhippedCreamUpdatableContext.ODataOperation.Insert, "TestString"));
            context.PendingChanges.Add(new Tuple<WhippedCreamUpdatableContext.ODataOperation, object>(
                        WhippedCreamUpdatableContext.ODataOperation.Delete, "TestStringAgain"));

            up.SaveChanges();

            Assert.AreEqual(0, context.PendingChanges.Count, "The number of items in the pending collection should be zero after a call to SaveChanges.");
        }
 public void GetResource_NullQuery()
 {
     try
     {
         IUpdatable context = new DummyContext();
         context.GetResource(null, null);
         Assert.Fail("An ArgumentNullException was expected for a null query.");
     }
     catch(System.ArgumentNullException) { }
 }
 public void AddReferenceToCollection_PropertyShouldBeAList()
 {
     try
     {
         IUpdatable context = new DummyContext();
         context.AddReferenceToCollection(context, "NotACollectionProperty", new object());
         Assert.Fail(@"
     A PropertyTypeMustBeACollectionException is expected if a property name is given of a property that isn't a collection.
     ");
     }
     catch (PropertyTypeMustBeACollectionException) { }
 }
 public void SetValue_WhiteSpacePropertyName()
 {
     try
     {
         IUpdatable context = new DummyContext();
         context.SetValue(new object(), "\t", "value");
         Assert.Fail("An ArgumentException was expected.");
     }
     catch (System.ArgumentException) { }
 }
 public void SetValue_NullResource()
 {
     try
     {
         IUpdatable context = new DummyContext();
         context.SetValue(null, "Name", "Value");
         Assert.Fail("An ArgumentNullException was expected.");
     }
     catch (System.ArgumentNullException) { }
 }
 public void RemoveReferenceFromCollection_NullResource()
 {
     try
     {
         IUpdatable context = new DummyContext();
         context.RemoveReferenceFromCollection(null, "PropertyName", new object());
         Assert.Fail("An ArgumentNullException was expected when passing null in for the target resource.");
     }
     catch (System.ArgumentNullException) { }
 }
 public void CreateResource_WhiteSpaceFullTypeName()
 {
     try
     {
         IUpdatable context = new DummyContext();
         context.CreateResource("TestContainer", "  ");
         Assert.Fail("An ArgumentException was expected.");
     }
     catch(System.ArgumentException) { }
 }
        public void GetValue_CorrectValueReturned()
        {
            IUpdatable context = new DummyContext();
            TestModel model = new TestModel() { Name = "TestString" };

            Assert.AreEqual("TestString", context.GetValue(model, "Name"),
                    "The value of the Name property should have been returned.");
        }
 public void GetResource_ReturnsNullIfCollectionIsEmpty()
 {
     DummyContext context = new DummyContext();
     IUpdatable up = context;
     Assert.IsNull(up.GetResource(context.Models.AsQueryable(), null),
               "There were not items in the collection, so null should have been returned.");
 }
        public void GetResource_ReturnsFirstItem()
        {
            DummyContext context = new DummyContext();
            IUpdatable up = context;
            context.Models.Add(new TestModel() { Name = "TestName" });
            context.Models.Add(new TestModel() { Name = "TestNameAgain" });

            var result = up.GetResource(context.Models.AsQueryable(), null);

            Assert.IsNotNull(result);
            Assert.IsInstanceOf<TestModel>(result, "The returned object should be a TestModel.");
            Assert.AreEqual("TestName", (result as TestModel).Name,
                    "The Name property on the returned object should be equal to the first item that was added to the collection.");
        }
        public void DeleteResource_AddsDeleteEntryIntoPendingChanges()
        {
            DummyContext context = new DummyContext();
            IUpdatable up = context;
            if(context.PendingChanges.Count != 0)
                Assert.Fail("Unable to determine if an operation item was added to the PendingChanges collection.");

            object target = new object();
            up.DeleteResource(target);

            Assert.AreEqual(1, context.PendingChanges.Count,
                    "There should have been an operation entry added to the PendingChanges collection.");
            Assert.AreEqual(WhippedCreamUpdatableContext.ODataOperation.Delete,
                    context.PendingChanges.First().Item1,
                    "The operation type should be a delete operation.");
            Assert.AreEqual(target,
                    context.PendingChanges.First().Item2,
                    "The object queued for deletion should have been the object passed to the DeleteResource method.");
        }
        public void SetValue_UnknownPropertyName()
        {
            try
            {
                IUpdatable context = new DummyContext();
                TestModel model = new TestModel() { Name = "TestName" };

                context.SetValue(model, "NotNameProperty", "Value");
                Assert.Fail("An UnknownPropertyException was expected.");
            }
            catch (UnknownPropertyException) { }
        }
 public void ResolveResource_ReturnsWhatWasPassedToit()
 {
     IUpdatable context = new DummyContext();
     object resource = new object();
     Assert.AreEqual(resource, context.ResolveResource(resource),
             "The resource returned is not correct.");
 }
        public void SaveChanges_CallsSaveEntityCorrectNumberOfTimes()
        {
            DummyContext context = new DummyContext();
            IUpdatable up = context;
            context.PendingChanges.Add(new Tuple<WhippedCreamUpdatableContext.ODataOperation, object>(
                        WhippedCreamUpdatableContext.ODataOperation.Insert, "TestString"));
            context.PendingChanges.Add(new Tuple<WhippedCreamUpdatableContext.ODataOperation, object>(
                        WhippedCreamUpdatableContext.ODataOperation.Delete, "TestStringAgain"));

            up.SaveChanges();

            Assert.AreEqual(2, context.SaveEntityParameters.Count, "The number of times SaveEntity was called should have been two.");
        }
        public void SaveChanges_CorrectParametersWerePassed()
        {
            DummyContext context = new DummyContext();
            IUpdatable up = context;
            context.PendingChanges.Add(new Tuple<WhippedCreamUpdatableContext.ODataOperation, object>(
                        WhippedCreamUpdatableContext.ODataOperation.Insert, "TestString"));

            up.SaveChanges();

            Assert.AreEqual(WhippedCreamUpdatableContext.ODataOperation.Insert,
                    context.SaveEntityParameters[0].Item1,
                    "The first item in the first parameter set should be an insert flag.");
            Assert.AreEqual("TestString",
                    context.SaveEntityParameters[0].Item2,
                    "The second item in the first parameter set should be \"TestString\".");
        }
        public void RemoveReferenceFromCollection_MakeSureObjectIsRemoved()
        {
            DummyContext context = new DummyContext();
            IUpdatable up = context;
            context.CollectionProperty.Add("TestString");
            if(context.CollectionProperty.Count != 1)
                Assert.Fail("Unable to determine if the 'TestString' instance was removed.");
            up.RemoveReferenceFromCollection(context, "CollectionProperty", "TestString");

            Assert.AreEqual(0, context.CollectionProperty.Count, "The number of items in the collection property is not correct.");
        }
 public void DeleteResource_NullResource()
 {
     try
     {
         IUpdatable context = new DummyContext();
         context.DeleteResource(null);
         Assert.Fail("An ArgumentNullException was expected for a null resource.");
     }
     catch(System.ArgumentNullException) { }
 }