#18979: Fixing GetMany() and Query() in regards to DraftRequired option

Work Item: 18979

--HG--
branch : 1.x
This commit is contained in:
Sebastien Ros
2012-10-08 15:09:01 -07:00
parent 8cbaa17b60
commit c7ec452fd5
3 changed files with 64 additions and 2 deletions

View File

@@ -55,6 +55,7 @@ namespace Orchard.Tests.ContentManagement {
_contentDefinitionManager = new Mock<IContentDefinitionManager>(); _contentDefinitionManager = new Mock<IContentDefinitionManager>();
var builder = new ContainerBuilder(); var builder = new ContainerBuilder();
builder.RegisterType<DefaultContentQuery>().As<IContentQuery>();
builder.RegisterType<DefaultContentManager>().As<IContentManager>(); builder.RegisterType<DefaultContentManager>().As<IContentManager>();
builder.RegisterType<DefaultContentManagerSession>().As<IContentManagerSession>(); builder.RegisterType<DefaultContentManagerSession>().As<IContentManagerSession>();
builder.RegisterInstance(_contentDefinitionManager.Object); builder.RegisterInstance(_contentDefinitionManager.Object);
@@ -400,6 +401,67 @@ namespace Orchard.Tests.ContentManagement {
Assert.That(gamma2.Record.Versions, Has.Count.EqualTo(2)); Assert.That(gamma2.Record.Versions, Has.Count.EqualTo(2));
} }
[Test]
public void UsingGetManyDraftRequiredShouldBuildNewVersionIfLatestIsAlreadyPublished() {
Trace.WriteLine("gamma1");
var gamma1 = _manager.Create(DefaultGammaName, VersionOptions.Published);
Trace.WriteLine("flush");
_session.Flush();
_session.Clear();
Trace.WriteLine("gammaDraft1");
var gammaDraft1 = _manager.GetMany<ContentItem>(new [] { gamma1.Id }, VersionOptions.Draft, QueryHints.Empty);
Assert.That(gammaDraft1.Count(), Is.EqualTo(0));
Trace.WriteLine("flush");
_session.Flush();
_session.Clear();
Trace.WriteLine("gammaDraft2");
var gammaDraft2 = _manager.GetMany<ContentItem>(new[] { gamma1.Id }, VersionOptions.DraftRequired, QueryHints.Empty);
Assert.That(gammaDraft2.Count(), Is.EqualTo(1));
Assert.That(gammaDraft2.First().VersionRecord.Id, Is.Not.EqualTo(gamma1.VersionRecord.Id));
Assert.That(gamma1.Version, Is.EqualTo(1));
Assert.That(gammaDraft2.First().Version, Is.EqualTo(2));
Trace.WriteLine("flush");
_session.Flush();
_session.Clear();
}
[Test]
public void UsingQueryDraftRequiredShouldBuildNewVersionIfLatestIsAlreadyPublished() {
Trace.WriteLine("gamma1");
var gamma1 = _manager.Create<GammaPart>(DefaultGammaName, VersionOptions.Published);
gamma1.Record.Frap = "foo";
Trace.WriteLine("flush");
_session.Flush();
_session.Clear();
Trace.WriteLine("gammaPublished");
var gammaPublished = _manager.Query<GammaPart, GammaRecord>().Where(x => x.Frap == "foo").List();
Assert.That(gammaPublished.Count(), Is.EqualTo(1));
Trace.WriteLine("flush");
_session.Flush();
_session.Clear();
Trace.WriteLine("gammaDraft1");
var gammaDraft1 = _manager.Query<GammaPart, GammaRecord>(VersionOptions.Draft).Where(x => x.Frap == "foo").List();
Assert.That(gammaDraft1.Count(), Is.EqualTo(0));
Trace.WriteLine("flush");
_session.Flush();
_session.Clear();
Trace.WriteLine("gammaDraft2");
var gammaDraft2 = _manager.Query<GammaPart, GammaRecord>(VersionOptions.DraftRequired).Where(x => x.Frap == "foo").List();
Assert.That(gammaDraft2.Count(), Is.EqualTo(1));
Assert.That(gammaDraft2.First().ContentItem.VersionRecord.Id, Is.Not.EqualTo(gamma1.ContentItem.VersionRecord.Id));
Assert.That(gamma1.ContentItem.Version, Is.EqualTo(1));
Assert.That(gammaDraft2.First().ContentItem.Version, Is.EqualTo(2));
Trace.WriteLine("flush");
_session.Flush();
_session.Clear();
}
[Test] [Test]
public void NonVersionedPartsAreBoundToSameRecord() { public void NonVersionedPartsAreBoundToSameRecord() {
Trace.WriteLine("gamma1"); Trace.WriteLine("gamma1");

View File

@@ -272,7 +272,7 @@ namespace Orchard.ContentManagement {
}); });
var itemsById = contentItemVersionRecords var itemsById = contentItemVersionRecords
.Select(r => Get(r.ContentItemRecord.Id, options == VersionOptions.DraftRequired ? options : VersionOptions.VersionRecord(r.Id))) .Select(r => Get(r.ContentItemRecord.Id, options.IsDraftRequired ? options : VersionOptions.VersionRecord(r.Id)))
.GroupBy(ci => ci.Id) .GroupBy(ci => ci.Id)
.ToDictionary(g => g.Key); .ToDictionary(g => g.Key);

View File

@@ -145,7 +145,7 @@ namespace Orchard.ContentManagement {
return criteria return criteria
.List<ContentItemVersionRecord>() .List<ContentItemVersionRecord>()
.Select(x => ContentManager.Get(x.Id, _versionOptions == VersionOptions.DraftRequired ? _versionOptions : VersionOptions.VersionRecord(x.Id))) .Select(x => ContentManager.Get(x.ContentItemRecord.Id, _versionOptions != null && _versionOptions.IsDraftRequired ? _versionOptions : VersionOptions.VersionRecord(x.Id)))
.ToReadOnlyCollection(); .ToReadOnlyCollection();
} }