From 63cbb03b93fb2fca04ec5005c2e66b5b8f082f37 Mon Sep 17 00:00:00 2001 From: Suha Can Date: Sat, 4 Dec 2010 17:33:02 -0800 Subject: [PATCH] Adding unit tests for the Comments module. --HG-- branch : dev --- .../Comments/Services/CommentServiceTests.cs | 211 ++++++++++++++++++ .../Orchard.Tests.Modules.csproj | 6 + .../Handlers/CommentPartHandler.cs | 2 - 3 files changed, 217 insertions(+), 2 deletions(-) create mode 100644 src/Orchard.Tests.Modules/Comments/Services/CommentServiceTests.cs diff --git a/src/Orchard.Tests.Modules/Comments/Services/CommentServiceTests.cs b/src/Orchard.Tests.Modules/Comments/Services/CommentServiceTests.cs new file mode 100644 index 000000000..66354e7d9 --- /dev/null +++ b/src/Orchard.Tests.Modules/Comments/Services/CommentServiceTests.cs @@ -0,0 +1,211 @@ +using System; +using System.Collections.Generic; +using Autofac; +using JetBrains.Annotations; +using Moq; +using NUnit.Framework; +using Orchard.Comments.Handlers; +using Orchard.Comments.Models; +using Orchard.Comments.Services; +using Orchard.ContentManagement; +using Orchard.ContentManagement.Drivers; +using Orchard.ContentManagement.Handlers; +using Orchard.ContentManagement.MetaData; +using Orchard.ContentManagement.Records; +using Orchard.Core.Common.Handlers; +using Orchard.Core.Common.Models; +using Orchard.Data; +using Orchard.DisplayManagement; +using Orchard.DisplayManagement.Descriptors; +using Orchard.DisplayManagement.Implementation; +using Orchard.Environment; +using Orchard.Environment.Extensions; +using Orchard.Security; +using Orchard.Tests.Stubs; +using Orchard.UI.Notify; + +namespace Orchard.Tests.Modules.Comments.Services { + [TestFixture] + public class CommentServiceTests : DatabaseEnabledTestsBase { + private IContentManager _contentManager; + private ICommentService _commentService; + + public override void Register(ContainerBuilder builder) { + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterInstance(new Mock().Object); + builder.RegisterInstance(new Mock().Object); + builder.RegisterInstance(new Mock().Object); + builder.RegisterInstance(new Mock().Object); + builder.RegisterInstance(new Mock().Object); + builder.RegisterInstance(new Mock().Object); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterType().As(); + builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>)); + } + + public override void Init() { + base.Init(); + _commentService = _container.Resolve(); + _contentManager = _container.Resolve(); + } + + + protected override IEnumerable DatabaseTypes { + get { + return new[] { + typeof(CommentPartRecord), + typeof(ContentItemRecord), + typeof(ContentItemVersionRecord), + typeof(ContentTypeRecord), + }; + } + } + + [Test] + public void CommentedItemShouldHaveACommentPart() { + var commentedItem = _contentManager.New("commentedItem"); + _contentManager.Create(commentedItem); + _contentManager.Create(commentedItem, VersionOptions.Published); + + Assert.That(commentedItem.As(), Is.Not.Null); + } + + [Test] + public void GetCommentsShouldReturnAllComments() { + for (int i = 0; i < 12; i++) { + var commentedItem = _contentManager.New("commentedItem"); + _contentManager.Create(commentedItem); + _contentManager.Create(commentedItem, VersionOptions.Published); + + } + + Assert.That(_commentService.GetComments().Count(), Is.EqualTo(12)); + } + + [Test] + public void GetCommentedContentShouldReturnCommentedContentItem() { + var commentedItem = _contentManager.New("commentedItem"); + _contentManager.Create(commentedItem); + _contentManager.Create(commentedItem, VersionOptions.Published); + int commentId = commentedItem.As().Id; + + Assert.That(_commentService.GetCommentedContent(commentId), Is.Not.Null); + } + + [Test] + public void UpdateShouldChangeComment() { + var commentedItem = _contentManager.New("commentedItem"); + _contentManager.Create(commentedItem); + _contentManager.Create(commentedItem, VersionOptions.Published); + int commentId = commentedItem.As().Id; + + Assert.That(_commentService.GetComment(commentId).Record.Author, Is.Null.Or.Empty); + + _commentService.UpdateComment(commentId, "test", "", "", "new text", CommentStatus.Pending); + + Assert.That(_commentService.GetComment(commentId).Record.Author, Is.EqualTo("test")); + } + + [Test] + public void CommentsShouldBePendingByDefault() { + var commentedItem = _contentManager.New("commentedItem"); + _contentManager.Create(commentedItem); + _contentManager.Create(commentedItem, VersionOptions.Published); + int commentId = commentedItem.As().Id; + + Assert.That(_commentService.GetComment(commentId).Record.Status, Is.EqualTo(CommentStatus.Pending)); + } + + [Test] + public void ApproveShouldUpdateCommentStatus() { + var commentedItem = _contentManager.New("commentedItem"); + _contentManager.Create(commentedItem); + _contentManager.Create(commentedItem, VersionOptions.Published); + int commentId = commentedItem.As().Id; + _commentService.ApproveComment(commentId); + + Assert.That(_commentService.GetComment(commentId).Record.Status, Is.EqualTo(CommentStatus.Approved)); + } + + [Test] + public void UnapproveShouldPendComment() { + var commentedItem = _contentManager.New("commentedItem"); + _contentManager.Create(commentedItem); + _contentManager.Create(commentedItem, VersionOptions.Published); + int commentId = commentedItem.As().Id; + _commentService.ApproveComment(commentId); + + Assert.That(_commentService.GetComment(commentId).Record.Status, Is.EqualTo(CommentStatus.Approved)); + + _commentService.UnapproveComment(commentId); + + Assert.That(_commentService.GetComment(commentId).Record.Status, Is.EqualTo(CommentStatus.Pending)); + } + + [Test] + public void MarkAsSpamShouldFlagComments() { + var commentedItem = _contentManager.New("commentedItem"); + _contentManager.Create(commentedItem); + _contentManager.Create(commentedItem, VersionOptions.Published); + int commentId = commentedItem.As().Id; + _commentService.ApproveComment(commentId); + + Assert.That(_commentService.GetComment(commentId).Record.Status, Is.EqualTo(CommentStatus.Approved)); + + _commentService.MarkCommentAsSpam(commentId); + + Assert.That(_commentService.GetComment(commentId).Record.Status, Is.EqualTo(CommentStatus.Spam)); + } + + [Test] + public void DeleteShouldRemoveComments() { + var commentIds = new int[12]; + + for (int i = 0; i < 12; i++) { + var commentedItem = _contentManager.New("commentedItem"); + _contentManager.Create(commentedItem); + _contentManager.Create(commentedItem, VersionOptions.Published); + commentIds[i] = commentedItem.As().Id; + } + + Assert.That(_commentService.GetComments().Count(), Is.EqualTo(12)); + + for (int i = 0; i < 12; i++) { + _commentService.DeleteComment(commentIds[i]); + } + } + } + + [UsedImplicitly] + public class CommentedItemHandler : ContentHandler { + public CommentedItemHandler() { + Filters.Add(new ActivatingFilter("commentedItem")); + Filters.Add(new ActivatingFilter("commentedItem")); + Filters.Add(new ActivatingFilter("commentedItem")); + } + } + + public class CommentedItem : ContentPart { + } + + public class CommentedItemDriver : ContentPartDriver { + public static readonly string ContentTypeName = "commentedItem"; + } + + public class StubCommentValidator : ICommentValidator { + public bool ValidateComment(CommentPart commentPart) { + return true; + } + } +} diff --git a/src/Orchard.Tests.Modules/Orchard.Tests.Modules.csproj b/src/Orchard.Tests.Modules/Orchard.Tests.Modules.csproj index 8b3915057..02b5112a1 100644 --- a/src/Orchard.Tests.Modules/Orchard.Tests.Modules.csproj +++ b/src/Orchard.Tests.Modules/Orchard.Tests.Modules.csproj @@ -135,6 +135,7 @@ + @@ -179,6 +180,10 @@ {C0C45321-B51D-4D8D-9B7B-AA4C2E0B2962} Orchard.CodeGeneration + + {14C049FD-B35B-415A-A824-87F26B26E7FD} + Orchard.Comments + {D9A7B330-CD22-4DA1-A95A-8DE1982AD8EB} Orchard.Media @@ -252,6 +257,7 @@ +