mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-14 10:54:50 +08:00
Adding publish date, version-specific create/modify/publish dates, and unpublish method on content manager
--HG-- extra : convert_revision : svn%3A5ff7c347-ad56-4c35-b696-ccb81de16e03/trunk%4045209
This commit is contained in:
@@ -3,8 +3,10 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Autofac.Builder;
|
||||
using JetBrains.Annotations;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using Orchard.ContentManagement.Aspects;
|
||||
using Orchard.Core.Common.Models;
|
||||
using Orchard.Core.Common.Providers;
|
||||
using Orchard.Core.Common.Records;
|
||||
@@ -37,16 +39,25 @@ namespace Orchard.Core.Tests.Common.Providers {
|
||||
|
||||
protected override IEnumerable<Type> DatabaseTypes {
|
||||
get {
|
||||
return new[] { typeof(ContentTypeRecord), typeof(ContentItemRecord), typeof(ContentItemVersionRecord), typeof(CommonRecord) };
|
||||
return new[] {
|
||||
typeof(ContentTypeRecord),
|
||||
typeof(ContentItemRecord),
|
||||
typeof(ContentItemVersionRecord),
|
||||
typeof(CommonRecord),
|
||||
typeof(CommonVersionRecord),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
[UsedImplicitly]
|
||||
class TestHandler : ContentHandler {
|
||||
public TestHandler() {
|
||||
Filters.Add(new ActivatingFilter<CommonAspect>("test-item"));
|
||||
Filters.Add(new ActivatingFilter<ContentPart<CommonVersionRecord>>("test-item"));
|
||||
Filters.Add(new ActivatingFilter<TestUser>("user"));
|
||||
}
|
||||
}
|
||||
|
||||
class TestUser : ContentPart, IUser {
|
||||
public int Id { get { return 6655321; } }
|
||||
public string UserName {get { return "x"; }}
|
||||
@@ -76,5 +87,107 @@ namespace Orchard.Core.Tests.Common.Providers {
|
||||
|
||||
Assert.That(item.Record.OwnerId, Is.EqualTo(6655321));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void PublishingShouldSetPublishUtc() {
|
||||
var contentManager = _container.Resolve<IContentManager>();
|
||||
|
||||
var createUtc = _clock.UtcNow;
|
||||
var item = contentManager.Create<ICommonAspect>("test-item", VersionOptions.Draft, init => { });
|
||||
|
||||
Assert.That(item.CreatedUtc, Is.EqualTo(createUtc));
|
||||
Assert.That(item.PublishedUtc, Is.Null);
|
||||
|
||||
_clock.Advance(TimeSpan.FromMinutes(1));
|
||||
var publishUtc = _clock.UtcNow;
|
||||
|
||||
contentManager.Publish(item.ContentItem);
|
||||
|
||||
Assert.That(item.CreatedUtc, Is.EqualTo(createUtc));
|
||||
Assert.That(item.PublishedUtc, Is.EqualTo(publishUtc));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void VersioningItemShouldCreatedAndPublishedUtcValuesPerVersion() {
|
||||
var contentManager = _container.Resolve<IContentManager>();
|
||||
|
||||
var createUtc = _clock.UtcNow;
|
||||
var item1 = contentManager.Create<ICommonAspect>("test-item", VersionOptions.Draft, init => { });
|
||||
|
||||
Assert.That(item1.CreatedUtc, Is.EqualTo(createUtc));
|
||||
Assert.That(item1.PublishedUtc, Is.Null);
|
||||
|
||||
_clock.Advance(TimeSpan.FromMinutes(1));
|
||||
var publish1Utc = _clock.UtcNow;
|
||||
contentManager.Publish(item1.ContentItem);
|
||||
|
||||
// db records need to be updated before demanding draft as item2 below
|
||||
_session.Flush();
|
||||
|
||||
_clock.Advance(TimeSpan.FromMinutes(1));
|
||||
var draftUtc = _clock.UtcNow;
|
||||
var item2 = contentManager.GetDraftRequired<ICommonAspect>(item1.ContentItem.Id);
|
||||
|
||||
_clock.Advance(TimeSpan.FromMinutes(1));
|
||||
var publish2Utc = _clock.UtcNow;
|
||||
contentManager.Publish(item2.ContentItem);
|
||||
|
||||
// both instances non-versioned dates show it was created upfront
|
||||
Assert.That(item1.CreatedUtc, Is.EqualTo(createUtc));
|
||||
Assert.That(item2.CreatedUtc, Is.EqualTo(createUtc));
|
||||
|
||||
// both instances non-versioned dates show the most recent publish
|
||||
Assert.That(item1.PublishedUtc, Is.EqualTo(publish2Utc));
|
||||
Assert.That(item2.PublishedUtc, Is.EqualTo(publish2Utc));
|
||||
|
||||
// version1 versioned dates show create was upfront and publish was oldest
|
||||
Assert.That(item1.VersionCreatedUtc, Is.EqualTo(createUtc));
|
||||
Assert.That(item1.VersionPublishedUtc, Is.EqualTo(publish1Utc));
|
||||
|
||||
// version2 versioned dates show create was midway and publish was most recent
|
||||
Assert.That(item2.VersionCreatedUtc, Is.EqualTo(draftUtc));
|
||||
Assert.That(item2.VersionPublishedUtc, Is.EqualTo(publish2Utc));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void UnpublishShouldClearFlagButLeaveMostrecentPublishDatesIntact() {
|
||||
var contentManager = _container.Resolve<IContentManager>();
|
||||
|
||||
var createUtc = _clock.UtcNow;
|
||||
var item = contentManager.Create<ICommonAspect>("test-item", VersionOptions.Draft, init => { });
|
||||
|
||||
Assert.That(item.CreatedUtc, Is.EqualTo(createUtc));
|
||||
Assert.That(item.PublishedUtc, Is.Null);
|
||||
|
||||
_clock.Advance(TimeSpan.FromMinutes(1));
|
||||
var publishUtc = _clock.UtcNow;
|
||||
contentManager.Publish(item.ContentItem);
|
||||
|
||||
// db records need to be updated before seeking by published flags
|
||||
_session.Flush();
|
||||
|
||||
_clock.Advance(TimeSpan.FromMinutes(1));
|
||||
var unpublishUtc = _clock.UtcNow;
|
||||
contentManager.Unpublish(item.ContentItem);
|
||||
|
||||
// db records need to be updated before seeking by published flags
|
||||
_session.Flush();
|
||||
_session.Clear();
|
||||
|
||||
var publishedItem = contentManager.Get<ICommonAspect>(item.ContentItem.Id, VersionOptions.Published);
|
||||
var latestItem = contentManager.Get<ICommonAspect>(item.ContentItem.Id, VersionOptions.Latest);
|
||||
var draftItem = contentManager.Get<ICommonAspect>(item.ContentItem.Id, VersionOptions.Draft);
|
||||
var allVersions = contentManager.GetAllVersions(item.ContentItem.Id);
|
||||
|
||||
Assert.That(publishedItem, Is.Null);
|
||||
Assert.That(latestItem, Is.Not.Null);
|
||||
Assert.That(draftItem, Is.Not.Null);
|
||||
Assert.That(allVersions.Count(), Is.EqualTo(1));
|
||||
Assert.That(publishUtc, Is.Not.EqualTo(unpublishUtc));
|
||||
Assert.That(latestItem.PublishedUtc, Is.EqualTo(publishUtc));
|
||||
Assert.That(latestItem.VersionPublishedUtc, Is.EqualTo(publishUtc));
|
||||
Assert.That(latestItem.ContentItem.VersionRecord.Latest, Is.True);
|
||||
Assert.That(latestItem.ContentItem.VersionRecord.Published, Is.False);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -39,6 +39,10 @@
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\lib\moq\Moq.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="NHibernate, Version=2.1.2.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\lib\fluentnhibernate\NHibernate.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="NHibernate.ByteCode.Castle, Version=2.1.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\..\lib\fluentnhibernate\NHibernate.ByteCode.Castle.dll</HintPath>
|
||||
@@ -73,6 +77,10 @@
|
||||
<Project>{6CB3EB30-F725-45C0-9742-42599BA8E8D2}</Project>
|
||||
<Name>Orchard.Tests.Packages</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\Orchard.Tests\Orchard.Tests.csproj">
|
||||
<Project>{ABC826D4-2FA1-4F2F-87DE-E6095F653810}</Project>
|
||||
<Name>Orchard.Tests</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\Orchard.Web\Core\Orchard.Core.csproj">
|
||||
<Project>{9916839C-39FC-4CEB-A5AF-89CA7E87119F}</Project>
|
||||
<Name>Orchard.Core</Name>
|
||||
|
Reference in New Issue
Block a user