public void ForumsAppearInCategories()
        {
            var c1 = new Category {
                CategoryID = 1, Title = "Cat1"
            };
            var c2 = new Category {
                CategoryID = 2, Title = "Cat2"
            };
            var f1 = new Forum {
                ForumID = 1, CategoryID = null
            };
            var f2 = new Forum {
                ForumID = 2, CategoryID = 1
            };
            var f3 = new Forum {
                ForumID = 3, CategoryID = 2
            };
            var cats = new List <Category> {
                c1, c2
            };
            var forums = new List <Forum> {
                f1, f2, f3
            };
            var container = new CategorizedForumContainer(cats, forums);

            Assert.Contains(f2, container.CategoryDictionary[c1]);
            Assert.Contains(f3, container.CategoryDictionary[c2]);
            Assert.DoesNotContain(f1, container.CategoryDictionary[c1]);
            Assert.DoesNotContain(f3, container.CategoryDictionary[c1]);
        }
예제 #2
0
        public void ForumsAppearInCategories()
        {
            var c1 = new Category(1)
            {
                Title = "Cat1"
            };
            var c2 = new Category(2)
            {
                Title = "Cat2"
            };
            var f1 = new Forum(1)
            {
                CategoryID = null
            };
            var f2 = new Forum(2)
            {
                CategoryID = 1
            };
            var f3 = new Forum(3)
            {
                CategoryID = 2
            };
            var cats = new List <Category> {
                c1, c2
            };
            var forums = new List <Forum> {
                f1, f2, f3
            };
            var container = new CategorizedForumContainer(cats, forums);

            Assert.True(container.CategoryDictionary[c1].Contains(f2));
            Assert.True(container.CategoryDictionary[c2].Contains(f3));
            Assert.False(container.CategoryDictionary[c1].Contains(f1));
            Assert.False(container.CategoryDictionary[c1].Contains(f3));
        }
        public void UncategorizedForumsShowUpOnProperty()
        {
            var c1 = new Category {
                CategoryID = 1
            };
            var c2 = new Category {
                CategoryID = 2
            };
            var f1 = new Forum {
                ForumID = 1, CategoryID = null
            };
            var f2 = new Forum {
                ForumID = 2, CategoryID = 1
            };
            var f3 = new Forum {
                ForumID = 3, CategoryID = 2
            };
            var f4 = new Forum {
                ForumID = 4, CategoryID = 0
            };
            var cats = new List <Category> {
                c1, c2
            };
            var forums = new List <Forum> {
                f1, f2, f3, f4
            };
            var container = new CategorizedForumContainer(cats, forums);

            Assert.Contains(f1, container.UncategorizedForums);
            Assert.DoesNotContain(f2, container.UncategorizedForums);
            Assert.DoesNotContain(f3, container.UncategorizedForums);
            Assert.Contains(f4, container.UncategorizedForums);
        }
예제 #4
0
        public void UncategorizedForumsShowUpOnProperty()
        {
            var c1 = new Category(1);
            var c2 = new Category(2);
            var f1 = new Forum(1)
            {
                CategoryID = null
            };
            var f2 = new Forum(2)
            {
                CategoryID = 1
            };
            var f3 = new Forum(3)
            {
                CategoryID = 2
            };
            var f4 = new Forum(4)
            {
                CategoryID = 0
            };
            var cats = new List <Category> {
                c1, c2
            };
            var forums = new List <Forum> {
                f1, f2, f3, f4
            };
            var container = new CategorizedForumContainer(cats, forums);

            Assert.True(container.UncategorizedForums.Contains(f1));
            Assert.False(container.UncategorizedForums.Contains(f2));
            Assert.False(container.UncategorizedForums.Contains(f3));
            Assert.True(container.UncategorizedForums.Contains(f4));
        }
예제 #5
0
        public void AllCollectionsPersist()
        {
            var c1 = new Category(1);
            var c2 = new Category(2);
            var f1 = new Forum(1)
            {
                CategoryID = null
            };
            var f2 = new Forum(2)
            {
                CategoryID = 1
            };
            var f3 = new Forum(3)
            {
                CategoryID = 2
            };
            var cats = new List <Category> {
                c1, c2
            };
            var forums = new List <Forum> {
                f1, f2, f3
            };
            var container = new CategorizedForumContainer(cats, forums);

            Assert.Equal(cats, container.AllCategories);
            Assert.Equal(forums, container.AllForums);
        }
예제 #6
0
        public void GetForumReadStatus(User user, CategorizedForumContainer container)
        {
            Dictionary <int, DateTime> lastReads = null;

            if (user != null)
            {
                lastReads = _lastReadRepository.GetLastReadTimesForForums(user.UserID);
            }
            foreach (var forum in container.AllForums)
            {
                var status = ReadStatus.NoNewPosts;
                if (lastReads != null && lastReads.ContainsKey(forum.ForumID))
                {
                    if (forum.LastPostTime > lastReads[forum.ForumID])
                    {
                        status = ReadStatus.NewPosts;
                    }
                }
                if (lastReads != null && !lastReads.ContainsKey(forum.ForumID))
                {
                    status = ReadStatus.NewPosts;
                }
                if (forum.IsArchived)
                {
                    status |= ReadStatus.Closed;
                }
                container.ReadStatusLookup.Add(forum.ForumID, status);
            }
        }
        public CategorizedForumContainer GetCategorizedForumContainerFilteredForUser(User user)
        {
            var nonViewableForumIDs = GetNonViewableForumIDs(user);
            var forums     = _forumRepository.GetAllVisible().Where(f => !nonViewableForumIDs.Contains(f.ForumID));
            var totalPost  = 0;
            var totalTopic = 0;

            foreach (var item in forums)
            {
                if (user.UserType == 1)
                {
                    item.PostCount = _postRepository.GetReplyCountByStudent(item.ForumID, false, 1);
                }
                else
                {
                    item.PostCount = _postRepository.GetReplyCountByStudent(item.ForumID, false, 2);
                }
                totalPost  += item.PostCount;
                totalTopic += item.TopicCount;
            }

            var categories = _categoryRepository.GetAll();
            var container  = new CategorizedForumContainer(categories, forums);

            _lastReadService.GetForumReadStatus(user, container);
            container.ForumTitle = _settingsManager.Current.ForumTitle;
            container.Posts      = _postRepository.GetAll();
            container.Comments   = _postRepository.GetAllComments();
            container.users      = user;
            return(container);
        }
        public void CategoriesInCorrectOrder()
        {
            var c1 = new Category {
                CategoryID = 1, SortOrder = 5
            };
            var c2 = new Category {
                CategoryID = 2, SortOrder = 1
            };
            var c3 = new Category {
                CategoryID = 3, SortOrder = 3
            };
            var f1 = new Forum {
                ForumID = 1, CategoryID = 1
            };
            var f2 = new Forum {
                ForumID = 2, CategoryID = 2
            };
            var f3 = new Forum {
                ForumID = 3, CategoryID = 3
            };
            var cats = new List <Category> {
                c1, c2, c3
            };
            var forums = new List <Forum> {
                f1, f2, f3
            };
            var container = new CategorizedForumContainer(cats, forums);

            Assert.True(container.CategoryDictionary.ToArray()[0].Key == c2);
            Assert.True(container.CategoryDictionary.ToArray()[1].Key == c3);
            Assert.True(container.CategoryDictionary.ToArray()[2].Key == c1);
        }
        public void CategoryWithNoForumsDoesNotAppear()
        {
            var c1 = new Category {
                CategoryID = 1, Title = "Cat1"
            };
            var c2 = new Category {
                CategoryID = 2, Title = "Cat2"
            };
            var c3 = new Category {
                CategoryID = 3, Title = "Cat3"
            };
            var f1 = new Forum {
                ForumID = 1, CategoryID = null
            };
            var f2 = new Forum {
                ForumID = 2, CategoryID = 1
            };
            var f3 = new Forum {
                ForumID = 3, CategoryID = 2
            };
            var cats = new List <Category> {
                c1, c2, c3
            };
            var forums = new List <Forum> {
                f1, f2, f3
            };
            var container = new CategorizedForumContainer(cats, forums);

            Assert.False(container.CategoryDictionary.ContainsKey(c3));
        }
예제 #10
0
        public CategorizedForumContainer GetCategorizedForumContainer()
        {
            var forums     = _forumRepository.GetAll();
            var categories = _categoryRepository.GetAll();
            var container  = new CategorizedForumContainer(categories, forums);

            container.ForumTitle = _settingsManager.Current.ForumTitle;
            return(container);
        }
예제 #11
0
        public async Task <CategorizedForumContainer> GetCategorizedForumContainer()
        {
            var forums     = _forumRepository.GetAll();
            var categories = await _categoryRepository.GetAll();

            var container = new CategorizedForumContainer(categories, forums.Result);

            container.ForumTitle = _settingsManager.Current.ForumTitle;
            return(container);
        }
예제 #12
0
        public CategorizedForumContainer GetCategorizedForumContainerFilteredForUser(User user)
        {
            var nonViewableForumIDs = GetNonViewableForumIDs(user);
            var forums     = _forumRepository.GetAllVisible().Where(f => !nonViewableForumIDs.Contains(f.ForumID));
            var categories = _categoryRepository.GetAll();
            var container  = new CategorizedForumContainer(categories, forums);

            _lastReadService.GetForumReadStatus(user, container);
            container.ForumTitle = _settingsManager.Current.ForumTitle;
            return(container);
        }
        public void ForumPermissions()
        {
            var controller = GetController();
            var container  = new CategorizedForumContainer(new List <Category>(), new List <Forum>());

            _forumService.Setup(f => f.GetCategorizedForumContainer()).Returns(container);
            var result = controller.ForumPermissions();

            _forumService.Verify(f => f.GetCategorizedForumContainer(), Times.Once());
            Assert.AreSame(container, result.ViewData.Model);
        }
예제 #14
0
        public void ForumReadStatusUserNewPostsNoLastReadRecords()
        {
            var service = GetService();
            var forum   = new Forum(1)
            {
                LastPostTime = new DateTime(2000, 1, 1, 5, 0, 0)
            };
            var user = new User(2, DateTime.MinValue);

            _lastReadRepo.Setup(l => l.GetLastReadTimesForForums(2)).Returns(new Dictionary <int, DateTime>());
            var container = new CategorizedForumContainer(new List <Category>(), new[] { forum });

            service.GetForumReadStatus(user, container);
            Assert.AreEqual(1, container.ReadStatusLookup.Count);
            Assert.AreEqual(ReadStatus.NewPosts, container.ReadStatusLookup[1]);
        }
예제 #15
0
        public async Task ForumReadStatusUserNewPostsNoLastReadRecords()
        {
            var service = GetService();
            var forum   = new Forum {
                ForumID = 1, LastPostTime = new DateTime(2000, 1, 1, 5, 0, 0)
            };
            var user = new User {
                UserID = 2
            };

            _lastReadRepo.Setup(l => l.GetLastReadTimesForForums(2)).ReturnsAsync(new Dictionary <int, DateTime>());
            var container = new CategorizedForumContainer(new List <Category>(), new[] { forum });
            await service.GetForumReadStatus(user, container);

            Assert.Single(container.ReadStatusLookup);
            Assert.Equal(ReadStatus.NewPosts, container.ReadStatusLookup[1]);
        }
예제 #16
0
        public void ForumReadStatusForNoUser()
        {
            var service = GetService();
            var forum1  = new Forum(1);
            var forum2  = new Forum(2)
            {
                IsArchived = true
            };
            var forum3    = new Forum(3);
            var container = new CategorizedForumContainer(new List <Category>(), new[] { forum1, forum2, forum3 });

            service.GetForumReadStatus(null, container);
            Assert.AreEqual(3, container.ReadStatusLookup.Count);
            Assert.AreEqual(ReadStatus.NoNewPosts, container.ReadStatusLookup[1]);
            Assert.AreEqual(ReadStatus.NoNewPosts | ReadStatus.Closed, container.ReadStatusLookup[2]);
            Assert.AreEqual(ReadStatus.NoNewPosts, container.ReadStatusLookup[3]);
        }
예제 #17
0
        public void ForumReadStatusUserNoNewPostsArchived()
        {
            var service = GetService();
            var forum   = new Forum(1)
            {
                LastPostTime = new DateTime(2000, 1, 1, 5, 0, 0), IsArchived = true
            };
            var user = new User(2, DateTime.MinValue);

            _lastReadRepo.Setup(l => l.GetLastReadTimesForForums(2)).Returns(new Dictionary <int, DateTime> {
                { 1, new DateTime(2000, 1, 1, 7, 0, 0) }
            });
            var container = new CategorizedForumContainer(new List <Category>(), new[] { forum });

            service.GetForumReadStatus(user, container);
            Assert.Single(container.ReadStatusLookup);
            Assert.Equal(ReadStatus.NoNewPosts | ReadStatus.Closed, container.ReadStatusLookup[1]);
        }
예제 #18
0
        public async Task ForumReadStatusForNoUser()
        {
            var service = GetService();
            var forum1  = new Forum {
                ForumID = 1
            };
            var forum2 = new Forum {
                ForumID = 2, IsArchived = true
            };
            var forum3 = new Forum {
                ForumID = 3
            };
            var container = new CategorizedForumContainer(new List <Category>(), new[] { forum1, forum2, forum3 });
            await service.GetForumReadStatus(null, container);

            Assert.Equal(3, container.ReadStatusLookup.Count);
            Assert.Equal(ReadStatus.NoNewPosts, container.ReadStatusLookup[1]);
            Assert.Equal(ReadStatus.NoNewPosts | ReadStatus.Closed, container.ReadStatusLookup[2]);
            Assert.Equal(ReadStatus.NoNewPosts, container.ReadStatusLookup[3]);
        }
        public void UncategorizedInCorrectOrder()
        {
            var f1 = new Forum {
                ForumID = 1, SortOrder = 5
            };
            var f2 = new Forum {
                ForumID = 2, SortOrder = 1
            };
            var f3 = new Forum {
                ForumID = 3, SortOrder = 3
            };
            var forums = new List <Forum> {
                f1, f2, f3
            };
            var container = new CategorizedForumContainer(new List <Category>(), forums);

            Assert.True(container.UncategorizedForums[0] == f2);
            Assert.True(container.UncategorizedForums[1] == f3);
            Assert.True(container.UncategorizedForums[2] == f1);
        }
예제 #20
0
 public static MvcHtmlString ForumReadIndicator(this HtmlHelper helper, Forum forum, CategorizedForumContainer container, string path)
 {
     return(ForumReadIndicator(helper, forum, container, path, null));
 }
예제 #21
0
        public static MvcHtmlString ForumReadIndicator(this HtmlHelper helper, Forum forum, CategorizedForumContainer container, string path, string cssClass)
        {
            var alt   = Resources.NoNewPosts;
            var image = "NoNewIndicator.png";

            if (container.ReadStatusLookup.ContainsKey(forum.ForumID))
            {
                var status = container.ReadStatusLookup[forum.ForumID];
                switch (status)
                {
                case ReadStatus.Closed | ReadStatus.NoNewPosts:
                    alt   = Resources.Archived;
                    image = "ClosedIndicator.png";
                    break;

                case ReadStatus.Closed | ReadStatus.NewPosts:
                    alt   = Resources.ArchivedNewPosts;
                    image = "NewClosedIndicator.png";
                    break;

                case ReadStatus.NewPosts:
                    alt   = Resources.NewPosts;
                    image = "NewIndicator.png";
                    break;

                default:
                    break;
                }
            }
            var build = new StringBuilder();

            build.Append("<img src=\"");
            build.Append(path);
            build.Append(image);
            build.Append("\" alt=\"");
            build.Append(alt);
            build.Append("\"");
            if (!String.IsNullOrEmpty(cssClass))
            {
                build.Append(" class=\"");
                build.Append(cssClass);
                build.Append("\"");
            }
            build.Append(" />");
            return(MvcHtmlString.Create(build.ToString()));
        }