diff --git a/src/Orchard.Tests/ContentManagement/DefaultContentManagerTests.cs b/src/Orchard.Tests/ContentManagement/DefaultContentManagerTests.cs index 97bb5eae3..66237c51a 100644 --- a/src/Orchard.Tests/ContentManagement/DefaultContentManagerTests.cs +++ b/src/Orchard.Tests/ContentManagement/DefaultContentManagerTests.cs @@ -55,6 +55,7 @@ namespace Orchard.Tests.ContentManagement { _contentDefinitionManager = new Mock(); var builder = new ContainerBuilder(); + builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterType().As(); builder.RegisterInstance(_contentDefinitionManager.Object); @@ -400,6 +401,67 @@ namespace Orchard.Tests.ContentManagement { 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(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(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(DefaultGammaName, VersionOptions.Published); + gamma1.Record.Frap = "foo"; + Trace.WriteLine("flush"); + _session.Flush(); + _session.Clear(); + + Trace.WriteLine("gammaPublished"); + var gammaPublished = _manager.Query().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(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(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] public void NonVersionedPartsAreBoundToSameRecord() { Trace.WriteLine("gamma1"); diff --git a/src/Orchard/ContentManagement/DefaultContentManager.cs b/src/Orchard/ContentManagement/DefaultContentManager.cs index afbad5a88..45ef8054f 100644 --- a/src/Orchard/ContentManagement/DefaultContentManager.cs +++ b/src/Orchard/ContentManagement/DefaultContentManager.cs @@ -272,7 +272,7 @@ namespace Orchard.ContentManagement { }); 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) .ToDictionary(g => g.Key); diff --git a/src/Orchard/ContentManagement/DefaultContentQuery.cs b/src/Orchard/ContentManagement/DefaultContentQuery.cs index 7a6ead49e..17f977377 100644 --- a/src/Orchard/ContentManagement/DefaultContentQuery.cs +++ b/src/Orchard/ContentManagement/DefaultContentQuery.cs @@ -145,7 +145,7 @@ namespace Orchard.ContentManagement { return criteria .List() - .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(); }