diff --git a/src/Orchard.Core.Tests/Common/Providers/CommonAspectProviderTests.cs b/src/Orchard.Core.Tests/Common/Providers/CommonAspectProviderTests.cs index bed6e4d2d..a6a6f8aab 100644 --- a/src/Orchard.Core.Tests/Common/Providers/CommonAspectProviderTests.cs +++ b/src/Orchard.Core.Tests/Common/Providers/CommonAspectProviderTests.cs @@ -6,13 +6,18 @@ using JetBrains.Annotations; using Moq; using NUnit.Framework; using Orchard.ContentManagement.Aspects; +using Orchard.Core.Common; using Orchard.Core.Common.Handlers; using Orchard.Core.Common.Models; using Orchard.ContentManagement; using Orchard.ContentManagement.Handlers; using Orchard.ContentManagement.Records; +using Orchard.Localization; using Orchard.Security; using Orchard.Tests.Modules; +using Orchard.Mvc.ViewModels; +using Orchard.Core.Common.ViewModels; +using System.Web.Mvc; namespace Orchard.Core.Tests.Common.Providers { [TestFixture] @@ -29,6 +34,7 @@ namespace Orchard.Core.Tests.Common.Providers { _authn = new Mock(); _authz = new Mock(); _membership = new Mock(); + builder.RegisterInstance(_authn.Object); builder.RegisterInstance(_authz.Object); builder.RegisterInstance(_membership.Object); @@ -87,7 +93,83 @@ namespace Orchard.Core.Tests.Common.Providers { } [Test] - public void PublishingShouldSetPublishUtc() { + public void PublishingShouldFailIfOwnerIsUnknown() + { + var contentManager = _container.Resolve(); + var updateModel = new Mock(); + + var user = contentManager.New("user"); + _authn.Setup(x => x.GetAuthenticatedUser()).Returns(user); + + var createUtc = _clock.UtcNow; + var item = contentManager.Create("test-item", VersionOptions.Draft, init => { }); + var viewModel = new OwnerEditorViewModel() { Owner = "user" }; + updateModel.Setup(x => x.TryUpdateModel(viewModel, "", null, null)).Returns(true); + contentManager.UpdateEditorModel(item.ContentItem, updateModel.Object); + } + + class UpdatModelStub : IUpdateModel { + + ModelStateDictionary _modelState = new ModelStateDictionary(); + + public ModelStateDictionary ModelErrors + { + get { return _modelState; } + } + + public string Owner { get; set; } + + public bool TryUpdateModel(TModel model, string prefix, string[] includeProperties, string[] excludeProperties) where TModel : class { + (model as OwnerEditorViewModel).Owner = Owner; + return true; + } + + public void AddModelError(string key, LocalizedString errorMessage) { + _modelState.AddModelError(key, errorMessage.ToString()); + } + } + + [Test] + public void PublishingShouldNotThrowExceptionIfOwnerIsNull() + { + var contentManager = _container.Resolve(); + + var item = contentManager.Create("test-item", VersionOptions.Draft, init => { }); + + var user = contentManager.New("user"); + _authn.Setup(x => x.GetAuthenticatedUser()).Returns(user); + _authz.Setup(x => x.TryCheckAccess(Permissions.ChangeOwner, user, item)).Returns(true); + + item.Owner = user; + + var updater = new UpdatModelStub() { Owner = null }; + + contentManager.UpdateEditorModel(item.ContentItem, updater); + } + + [Test] + public void PublishingShouldFailIfOwnerIsEmpty() + { + var contentManager = _container.Resolve(); + + var item = contentManager.Create("test-item", VersionOptions.Draft, init => { }); + + var user = contentManager.New("user"); + _authn.Setup(x => x.GetAuthenticatedUser()).Returns(user); + _authz.Setup(x => x.TryCheckAccess(Permissions.ChangeOwner, user, item)).Returns(true); + + item.Owner = user; + + var updater = new UpdatModelStub() {Owner = ""}; + + contentManager.UpdateEditorModel(item.ContentItem, updater); + + Assert.That(updater.ModelErrors.ContainsKey("CommonAspect.Owner"), Is.True); + } + + [Test] + public void PublishingShouldSetPublishUtc() + { var contentManager = _container.Resolve(); var createUtc = _clock.UtcNow; @@ -95,7 +177,7 @@ namespace Orchard.Core.Tests.Common.Providers { Assert.That(item.CreatedUtc, Is.EqualTo(createUtc)); Assert.That(item.PublishedUtc, Is.Null); - + _clock.Advance(TimeSpan.FromMinutes(1)); var publishUtc = _clock.UtcNow; @@ -105,6 +187,7 @@ namespace Orchard.Core.Tests.Common.Providers { Assert.That(item.PublishedUtc, Is.EqualTo(publishUtc)); } + [Test] public void VersioningItemShouldCreatedAndPublishedUtcValuesPerVersion() { var contentManager = _container.Resolve();