public void Contains()
        {
            var db = new TrackerDataContext { Log = Console.Out };

            var assignedId = new List<int?> { null, 1 };
            // null and int
            var q1 = db.Task.ByAssignedId(assignedId);

            var assignedList = q1.ToList();
            Assert.IsNotNull(assignedList);


            var details = new List<string> { null, "test" };
            // null and string
            var q2 = db.Task.ByDetails(details);
            var detailList = q2.ToList();
            Assert.IsNotNull(detailList);

            // null and int direct
            var q3 = db.Task.ByAssignedId(null, 1);

            var assignedList2 = q3.ToList();
            Assert.IsNotNull(assignedList2);

            // string, null direct
            var q4 = db.Task.ByDetails("test", null, "other");
            var detailList2 = q4.ToList();
            Assert.IsNotNull(detailList2);

            // should use IN operator
            var q5 = db.Task.ByCreatedId(1, 2);
            var createdList = q5.ToList();
            Assert.IsNotNull(createdList);
        }
        public ActionResult Index()
        {
            ViewData["Message"] = "Welcome to PLINQO!";

            if (User.Identity.IsAuthenticated)
            {

                var dashboard = new Dashboard();

                using (var db = new TrackerDataContext())
                {
                    dashboard.CurrentUser = db.User.GetByEmailAddress(User.Identity.Name);
                    if (dashboard.CurrentUser != null)
                    {
                        dashboard.TasksNotStarted = db.Task.ByAssignedId(dashboard.CurrentUser.Id).ByStatus(Status.NotStarted).Future();
                        dashboard.TasksInProgress = db.Task.ByAssignedId(dashboard.CurrentUser.Id).ByStatus(Status.InProgress).Future();
                        dashboard.TasksCompleted = db.Task.ByAssignedId(dashboard.CurrentUser.Id).ByStatus(Status.Completed).Future();
                        dashboard.TasksWaitingOnSomeone = db.Task.ByAssignedId(dashboard.CurrentUser.Id).ByStatus(Status.WaitingOnSomeoneElse).Future();
                        dashboard.TotalTasks = db.Task.FutureCount();
                        dashboard.TotalTasksCreatedByMe = db.Task.ByCreatedId(dashboard.CurrentUser.Id).FutureCount();
                        dashboard.TotalTasksAssignedToMe = db.Task.ByAssignedId(dashboard.CurrentUser.Id).FutureCount();
                        dashboard.TotalTasksCompleted = db.Task.ByStatus(Status.Completed).FutureCount();
                    }

                    db.ExecuteFutureQueries();
                }

                return View(dashboard);
            }
            else
            {
                return View();
            }
        }
        public void TestFixtureSetUp()
        {
            // setup memcached
            _memcached = Process.Start(
                @"..\..\..\..\Libraries\memcached.exe",
                "-vv -p 11200");

            using (var db = new TrackerDataContext())
            {
                var role1 = new Role
                {
                    Name = "Test Role"
                };
                var role2 = new Role
                {
                    Name = "Duck Roll"
                };

                db.Role.InsertOnSubmit(role1);
                db.Role.InsertOnSubmit(role2);
                db.SubmitChanges();

                _roleIds.Add(role1.Id);
                _roleIds.Add(role2.Id);
            }
        }
        public void ExecuteQueryLoadWith()
        {
            var db = new TrackerDataContext { Log = Console.Out };
            db.DeferredLoadingEnabled = false;
            db.ObjectTrackingEnabled = false;

            DataLoadOptions options = new DataLoadOptions();
            options.LoadWith<Task>(t => t.CreatedUser);

            db.LoadOptions = options;

            var q1 = db.User
                .ByEmailAddress("*****@*****.**");

            var q2 = db.Task
                .Where(t => t.LastModifiedBy == "*****@*****.**");

            var result = db.ExecuteQuery(q1, q2);

            Assert.IsNotNull(result);

            var userResult = result.GetResult<User>();
            Assert.IsNotNull(userResult);

            var users = userResult.ToList();
            Assert.IsNotNull(users);

            var taskResult = result.GetResult<Task>();
            Assert.IsNotNull(taskResult);

            var tasks = taskResult.ToList();
            Assert.IsNotNull(tasks);
        }
        public void FutureCountTest()
        {
            var db = new TrackerDataContext { Log = Console.Out };

            // build up queries

            var q1 = db.User
                .ByEmailAddress("*****@*****.**")
                .Future();

            var q2 = db.Task
                .Where(t => t.Summary == "Test")
                .FutureCount();

            // should be 2 queries 
            //Assert.AreEqual(2, db.FutureQueries.Count);

            // this triggers the loading of all the future queries
            var users = q1.ToList();
            Assert.IsNotNull(users);

            // should be cleared at this point
            //Assert.AreEqual(0, db.FutureQueries.Count);

            // this should already be loaded
            Assert.IsTrue(((IFutureQuery)q2).IsLoaded);

            int count = q2.Value;
            Assert.Greater(count, 0);
        }
        public void SlidingExpirationTest()
        {
            using (var db = new TrackerDataContext { Log = Console.Out })
            {
                var query = db.Role.Where(r => r.Name == "Test Role");
                var key = query.Take(1).GetHashKey();
                var role = query.FromCacheFirstOrDefault(new CacheSettings(TimeSpan.FromSeconds(2)));

                var cache = CacheManager.Get<ICollection<Role>>(key);
                Assert.IsNotNull(cache);
                Assert.AreEqual(role.Id, cache.FirstOrDefault().Id);

                System.Threading.Thread.Sleep(1500);

                cache = CacheManager.Get<ICollection<Role>>(key);
                Assert.IsNotNull(cache);
                Assert.AreEqual(role.Id, cache.FirstOrDefault().Id);

                System.Threading.Thread.Sleep(1500);

                cache = CacheManager.Get<ICollection<Role>>(key);
                Assert.IsNotNull(cache);
                Assert.AreEqual(role.Id, cache.FirstOrDefault().Id);

                System.Threading.Thread.Sleep(2500);

                cache = CacheManager.Get<ICollection<Role>>(key);
                Assert.IsNull(cache);
            }
        }
        public void Reflection()
        {
            var db = new TrackerDataContext { Log = Console.Out };
            IQueryable source = db.Task.Where(t => t.LastModifiedBy == "*****@*****.**").OrderBy(t => t.CreatedId);


            // can be static
            Type queryableType = typeof(Queryable);
            // can be static
            MethodInfo countMethod = (from m in queryableType.GetMethods(BindingFlags.Static | BindingFlags.Public)
                                      where m.Name == "Count"
                                        && m.IsGenericMethod
                                        && m.GetParameters().Length == 1
                                      select m).FirstOrDefault();


            Assert.IsNotNull(countMethod);

            var genericMethod = countMethod.MakeGenericMethod(new[] { source.ElementType });
            var expression = Expression.Call(null, genericMethod, source.Expression);

            Assert.IsNotNull(expression);

            Type dataContextType = db.GetType();
            PropertyInfo providerProperty = dataContextType.GetProperty("Provider", BindingFlags.Instance | BindingFlags.NonPublic);

            object provider = providerProperty.GetValue(db, null);

            Type providerType = provider.GetType().GetInterface("IProvider");
            MethodInfo getCommandMethod = providerType.GetMethod("GetCommand", BindingFlags.Instance | BindingFlags.Public);

            object commandObject = getCommandMethod.Invoke(provider, new object[] { expression });

            Assert.IsNotNull(commandObject);
        }
        public void ContainmentTest()
        {
            var db = new TrackerDataContext { Log = Console.Out };

            var q1 = db.Task.BySummary(ContainmentOperator.Contains, "Earth");
            var list = q1.ToList();
            Assert.IsNotNull(list);

            var q2 = db.Task.BySummary(ContainmentOperator.StartsWith, "Make");
            list = q2.ToList();
            Assert.IsNotNull(list);

            var q3 = db.Task.BySummary(ContainmentOperator.EndsWith, "Earth");
            list = q3.ToList();
            Assert.IsNotNull(list);

            var q4 = db.Task.BySummary(ContainmentOperator.NotContains, "test");
            list = q4.ToList();
            Assert.IsNotNull(list);

            var q5 = db.Task.ByDetails(ContainmentOperator.Equals, null);
            list = q5.ToList();
            Assert.IsNotNull(list);

            var q6 = db.Task.ByDetails(ContainmentOperator.NotEquals, null);
            list = q6.ToList();
            Assert.IsNotNull(list);
        }
        public void ContainmentStartsWith()
        {
            var db = new TrackerDataContext { Log = Console.Out };

            var q5 = db.Task.ByDetails(ContainmentOperator.StartsWith, null);
            var list = q5.ToList();
            Assert.IsNotNull(list);          
        }
 public void TestFixtureTearDown()
 {
     using (var db = new TrackerDataContext { Log = Console.Out })
     {
         db.Guid.Delete(_guid1Id);
         db.Guid.Delete(_guid2Id);
         db.Guid.Delete(_guid3Id);
     }
 }
 public ActionResult Delete(int id)
 {
     using (var db = new TrackerDataContext())
     {
         db.Audit.Delete(a => a.TaskId == id);
         db.Task.Delete(id);
     }
     return RedirectToAction("Index");
 }
        public void Run(RuleContext context)
        {
            var currentUser = (User)context.TrackedObject.Current;

            using (var db = new TrackerDataContext())
            {
                db.ObjectTrackingEnabled = false;
                var user = db.User.GetByEmailAddress(currentUser.EmailAddress);
                context.Success = (null == user || user.Id == currentUser.Id);
            }
        }
        public void ByTest()
        {
            using (var db = new TrackerDataContext { Log = Console.Out })
            {
                var a = db.Task.ByCreatedDate(CreateDates[0]).ToList();
                var b = db.Task.ByCreatedDate(CreateDates[1]).ToList();

                var c = db.Task.ByCreatedDate(CreateDates[0], null).ToList();
                Assert.AreEqual(a.Count, c.Count);
            }
        }
 public void TearDown()
 {
     using (var db = new TrackerDataContext { Log = Console.Out })
     {
         db.Audit.Delete(a => a.User.EmailAddress.EndsWith("startrek.com"));
         db.UserRole.Delete(ur => ur.User.EmailAddress.EndsWith("startrek.com"));
         db.Task.Delete(t =>
             t.AssignedUser.EmailAddress.EndsWith("startrek.com") ||
             t.CreatedUser.EmailAddress.EndsWith("startrek.com"));
         db.User.Delete(u => u.EmailAddress.EndsWith("startrek.com"));
     }
 }
        public void TestFixtureTearDown()
        {
            using (var db = new TrackerDataContext())
                db.Role.Delete(r => _roleIds.Contains(r.Id));


            if (_memcached != null)
            {
                _memcached.Kill();
                _memcached.Dispose();
            }
        }
 public ActionResult Details(int id)
 {
     Task task = null;
     using (var db = new TrackerDataContext())
     {
         var options = new DataLoadOptions();
         options.LoadWith<Task>(t => t.AssignedUser);
         options.LoadWith<Task>(t => t.CreatedUser);
         db.LoadOptions = options;
         task = db.Task.GetByKey(id);
     }
     return View(task);
 }
        public void LongProfile()
        {
            using (var db = new TrackerDataContext())
            {
                var query = db.Role.Where(r => r.Name == "Duck Roll");
                var key = query.GetHashKey();
                var roles = query.FromCache("Long").ToList();

                var cache = CacheManager.Get<ICollection<Role>>(key);
                Assert.IsNotNull(cache);
                Assert.AreEqual(roles.Count, cache.Count);
            }
        }
        public void SimpleTest()
        {
            using (var db = new TrackerDataContext())
            {
                var query = db.Role.Where(r => r.Name == "Test Role");
                var key = query.Take(1).GetHashKey();
                var role = query.FromCacheFirstOrDefault();

                var cache = CacheManager.Get<ICollection<Role>>(key);
                Assert.IsNotNull(cache);
                Assert.AreEqual(role.Id, cache.FirstOrDefault().Id);
            }
        }
        public ActionResult AddRole(int userId, int roleId)
        {
            using (var db = new TrackerDataContext())
            {
                var options = new DataLoadOptions();
                options.LoadWith<User>(u => u.UserRoleList);

                var user = db.User.GetByKey(userId);
                var role = db.Role.GetByKey(roleId);
                user.RoleList.Add(role);
                db.SubmitChanges();
            }
            return RedirectToAction("Edit", new { id = userId });
        }
        public ActionResult CopyTask(int id)
        {
            Task copiedTask = null;
            using (var db = new TrackerDataContext())
            {
                Task task = db.Task.GetByKey(id);
                copiedTask = task.Clone();
                copiedTask.Id = 0;
                copiedTask.CreatedUser = db.User.GetByEmailAddress(System.Web.HttpContext.Current.User.Identity.Name);
                db.Task.InsertOnSubmit(copiedTask);
                db.SubmitChanges();
            }

            return RedirectToAction("Edit", new {id = copiedTask.Id});
        }
        public void IncludeFirstOrDefault()
        {
            var db = new TrackerDataContext { Log = Console.Out };
            
            var tasks = db.Task
                .Where(t => t.CreatedId != null)
                .Include(t => t.CreatedUser);

            // loads all, then does first
            var task = tasks.FirstOrDefault();


            Assert.IsNotNull(task);
            Assert.IsNotNull(task.CreatedUser);
        }
        public void NoCacheEmptyResultTest()
        {
            using (var db = new TrackerDataContext())
            {
                var guid = System.Guid.NewGuid().ToString();
                var query = db.Role.Where(r => r.Name == guid);
                var key = query.Take(1).GetHashKey();
                var role = query.FromCacheFirstOrDefault(new CacheSettings(2) { CacheEmptyResult = false });

                Assert.IsNull(role);

                var cache = CacheManager.Get<ICollection<Role>>(key);
                Assert.IsNull(cache);
            }
        }
        public void ByTest()
        {
                using (var db = new TrackerDataContext {Log = Console.Out})
                {
                    var a = db.Task.ByStatus(Status.InProgress).ToList();
                    var b = db.Task.ByStatus(Status.NotStarted).ToList();

                    var c = db.Task.ByStatus(Status.InProgress, null).ToList();
                    Assert.AreEqual(a.Count, c.Count);

                    var d = db.Task.ByStatus(Status.InProgress, Status.NotStarted).ToList();
                    Assert.AreEqual(a.Count + b.Count, d.Count);
                }

        }
        public void ByTest()
        {

            using (var db = new TrackerDataContext { Log = Console.Out })
            {
                var a = db.Task.ByCreatedId(UserIds[1]).ToList();
                var b = db.Task.ByCreatedId(UserIds[2]).ToList();

                var c = db.Task.ByCreatedId(UserIds[1], null).ToList();
                Assert.AreEqual(a.Count, c.Count);

                var d = db.Task.ByCreatedId(UserIds[1], UserIds[2]).ToList();
                Assert.AreEqual(a.Count + b.Count, d.Count);
            }

        }
        public void SimpleTest()
        {
            using (var db = new TrackerDataContext())
            {
                var query = db.Role.Where(r => r.Name == "Duck Roll");
                var roles = query.FromCache().ToList();

                Assert.IsInstanceOf(typeof(MemcachedProvider), CacheManager.GetProvider());

                var key = query.GetHashKey();

                var cache = CacheManager.Get<ICollection<Role>>(key);
                Assert.IsNotNull(cache);
                Assert.AreEqual(roles.Count, cache.Count);
            }
        }
        public void ByTest()
        {

            using (var db = new TrackerDataContext { Log = Console.Out })
            {
                var a = db.Guid.ById(_guid1Id).ToList();
                var b = db.Guid.ById(_guid2Id).ToList();

                var c = db.Guid.ById(_guid1Id, null).ToList();
                Assert.AreEqual(a.Count, c.Count);

                var d = db.Guid.ById(_guid1Id, _guid2Id).ToList();
                Assert.AreEqual(a.Count + b.Count, d.Count);
            }

        }
        public ActionResult RemoveRole(int userId, int roleId)
        {
            using (var db = new TrackerDataContext())
            {
                var options = new DataLoadOptions();
                options.LoadWith<User>(u => u.UserRoleList);
                options.LoadWith<UserRole>(r => r.Role);
                db.LoadOptions = options;

                var user = db.User.GetByKey(userId);
                var role = user.RoleList.FirstOrDefault(r => r.Id == roleId);

                user.RoleList.Remove(role);
                db.SubmitChanges();
            }
            return RedirectToAction("Edit", new { id = userId });
        }
 private void CreateTask(int userId)
 {
     var task = new Task()
     {
         AssignedId = userId,
         Status = Status.InProgress,
         Summary = "Explain the visions that inspire you",
         Priority = Priority.High,
         CreatedId = userId,
     };
     using (var db = new TrackerDataContext { Log = Console.Out })
     {
         db.Task.InsertOnSubmit(task);
         db.SubmitChanges();
         TaskId = task.Id;
     }
 }
        public void AbsoluteExpirationTest()
        {
            using (var db = new TrackerDataContext())
            {
                var query = db.Role.Where(r => r.Name == "Test Role");
                var key = query.GetHashKey();
                var roles = query.FromCache(new CacheSettings(DateTime.Now.AddSeconds(2))).ToList();

                var cache = CacheManager.Get<ICollection<Role>>(key);
                Assert.IsNotNull(cache);
                Assert.AreEqual(roles.Count, cache.Count);

                System.Threading.Thread.Sleep(3000);

                cache = CacheManager.Get<ICollection<Role>>(key);
                Assert.IsNull(cache);
            }
        }
        public void AbsoluteExpirationTest()
        {
            using (var db = new TrackerDataContext())
            {
                var query = db.Role.Where(r => r.Name == "Test Role");
                var key = query.Take(1).GetHashKey();
                var role = query.FromCacheFirstOrDefault(CacheSettings.FromAbsolute(DateTime.Now.AddSeconds(2)));

                var cache1 = CacheManager.Get<ICollection<Role>>(key);
                Assert.IsNotNull(cache1);
                Assert.AreEqual(role.Id, cache1.FirstOrDefault().Id);

                System.Threading.Thread.Sleep(2500);

                var cache2 = CacheManager.Get<ICollection<Role>>(key);
                Assert.IsNull(cache2);
            }
        }