diff --git a/src/Umbraco.Core/Models/Content.cs b/src/Umbraco.Core/Models/Content.cs index 8bfb5718a2..57ad512616 100644 --- a/src/Umbraco.Core/Models/Content.cs +++ b/src/Umbraco.Core/Models/Content.cs @@ -31,8 +31,8 @@ namespace Umbraco.Core.Models /// Name of the content /// Parent object /// ContentType for the current Content object - public Content(string name, IContent parent, IContentType contentType) - : this(name, parent, contentType, new PropertyCollection()) + public Content(string name, IContent parent, IContentType contentType, string culture = null) + : this(name, parent, contentType, new PropertyCollection(), culture) { } /// @@ -42,8 +42,8 @@ namespace Umbraco.Core.Models /// Parent object /// ContentType for the current Content object /// Collection of properties - public Content(string name, IContent parent, IContentType contentType, PropertyCollection properties) - : base(name, parent, contentType, properties) + public Content(string name, IContent parent, IContentType contentType, PropertyCollection properties, string culture = null) + : base(name, parent, contentType, properties, culture) { _contentType = contentType ?? throw new ArgumentNullException(nameof(contentType)); _publishedState = PublishedState.Unpublished; @@ -56,8 +56,8 @@ namespace Umbraco.Core.Models /// Name of the content /// Id of the Parent content /// ContentType for the current Content object - public Content(string name, int parentId, IContentType contentType) - : this(name, parentId, contentType, new PropertyCollection()) + public Content(string name, int parentId, IContentType contentType, string culture = null) + : this(name, parentId, contentType, new PropertyCollection(), culture) { } /// @@ -67,8 +67,8 @@ namespace Umbraco.Core.Models /// Id of the Parent content /// ContentType for the current Content object /// Collection of properties - public Content(string name, int parentId, IContentType contentType, PropertyCollection properties) - : base(name, parentId, contentType, properties) + public Content(string name, int parentId, IContentType contentType, PropertyCollection properties, string culture = null) + : base(name, parentId, contentType, properties, culture) { _contentType = contentType ?? throw new ArgumentNullException(nameof(contentType)); _publishedState = PublishedState.Unpublished; diff --git a/src/Umbraco.Core/Models/ContentBase.cs b/src/Umbraco.Core/Models/ContentBase.cs index 7bc327c2d0..f0cb8c0574 100644 --- a/src/Umbraco.Core/Models/ContentBase.cs +++ b/src/Umbraco.Core/Models/ContentBase.cs @@ -30,8 +30,8 @@ namespace Umbraco.Core.Models /// /// Initializes a new instance of the class. /// - protected ContentBase(string name, int parentId, IContentTypeComposition contentType, PropertyCollection properties) - : this(name, contentType, properties) + protected ContentBase(string name, int parentId, IContentTypeComposition contentType, PropertyCollection properties, string culture = null) + : this(name, contentType, properties, culture) { if (parentId == 0) throw new ArgumentOutOfRangeException(nameof(parentId)); ParentId = parentId; @@ -40,22 +40,25 @@ namespace Umbraco.Core.Models /// /// Initializes a new instance of the class. /// - protected ContentBase(string name, IContentBase parent, IContentTypeComposition contentType, PropertyCollection properties) - : this(name, contentType, properties) + protected ContentBase(string name, IContentBase parent, IContentTypeComposition contentType, PropertyCollection properties, string culture = null) + : this(name, contentType, properties, culture) { if (parent == null) throw new ArgumentNullException(nameof(parent)); SetParent(parent); } - private ContentBase(string name, IContentTypeComposition contentType, PropertyCollection properties) + private ContentBase(string name, IContentTypeComposition contentType, PropertyCollection properties, string culture = null) { ContentTypeBase = contentType ?? throw new ArgumentNullException(nameof(contentType)); // initially, all new instances have Id = 0; // no identity VersionId = 0; // no versions + + //fixme we always need to set the invariant name else an exception will throw if we try to persist + Name = name; + SetName(culture, name); - Name = name; _contentTypeId = contentType.Id; _properties = properties ?? throw new ArgumentNullException(nameof(properties)); _properties.EnsurePropertyTypes(PropertyTypes); diff --git a/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs index caa2453aed..035c857e35 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/ContentRepositoryTest.cs @@ -83,9 +83,9 @@ namespace Umbraco.Tests.Persistence.Repositories var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var repository = CreateRepository((IScopeAccessor) provider, out var contentTypeRepository, cacheHelper: realCache); + var repository = CreateRepository((IScopeAccessor)provider, out var contentTypeRepository, cacheHelper: realCache); - var udb = (UmbracoDatabase) scope.Database; + var udb = (UmbracoDatabase)scope.Database; udb.EnableSqlCount = false; @@ -124,7 +124,7 @@ namespace Umbraco.Tests.Persistence.Repositories var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var repository = CreateRepository((IScopeAccessor) provider, out var contentTypeRepository, out DataTypeRepository _); + var repository = CreateRepository((IScopeAccessor)provider, out var contentTypeRepository, out DataTypeRepository _); var versions = new List(); var hasPropertiesContentType = MockedContentTypes.CreateSimpleContentType("umbTextpage1", "Textpage"); @@ -134,22 +134,22 @@ namespace Umbraco.Tests.Persistence.Repositories // save = create the initial version contentTypeRepository.Save(hasPropertiesContentType); - repository.Save(content1); - + repository.Save(content1); + versions.Add(content1.VersionId); // the first version // publish = new edit version content1.SetValue("title", "title"); - ((Content) content1).TryPublishValues(); - ((Content) content1).PublishedState = PublishedState.Publishing; - repository.Save(content1); - + ((Content)content1).TryPublishValues(); + ((Content)content1).PublishedState = PublishedState.Publishing; + repository.Save(content1); + versions.Add(content1.VersionId); // NEW VERSION // new edit version has been created Assert.AreNotEqual(versions[versions.Count - 2], versions[versions.Count - 1]); Assert.IsTrue(content1.Published); - Assert.AreEqual(PublishedState.Published, ((Content) content1).PublishedState); + Assert.AreEqual(PublishedState.Published, ((Content)content1).PublishedState); Assert.AreEqual(versions[versions.Count - 1], repository.Get(content1.Id).VersionId); // misc checks @@ -159,8 +159,8 @@ namespace Umbraco.Tests.Persistence.Repositories // save = update the current (draft) version content1.Name = "name-1"; content1.SetValue("title", "title-1"); - repository.Save(content1); - + repository.Save(content1); + versions.Add(content1.VersionId); // the same version // no new version has been created @@ -172,15 +172,15 @@ namespace Umbraco.Tests.Persistence.Repositories Assert.AreEqual(true, scope.Database.ExecuteScalar($"SELECT published FROM {Constants.DatabaseSchema.Tables.Document} WHERE nodeId=@id", new { id = content1.Id })); // unpublish = no impact on versions - ((Content) content1).PublishedState = PublishedState.Unpublishing; - repository.Save(content1); - + ((Content)content1).PublishedState = PublishedState.Unpublishing; + repository.Save(content1); + versions.Add(content1.VersionId); // the same version // no new version has been created Assert.AreEqual(versions[versions.Count - 2], versions[versions.Count - 1]); Assert.IsFalse(content1.Published); - Assert.AreEqual(PublishedState.Unpublished, ((Content) content1).PublishedState); + Assert.AreEqual(PublishedState.Unpublished, ((Content)content1).PublishedState); Assert.AreEqual(versions[versions.Count - 1], repository.Get(content1.Id).VersionId); // misc checks @@ -190,8 +190,8 @@ namespace Umbraco.Tests.Persistence.Repositories // save = update the current (draft) version content1.Name = "name-2"; content1.SetValue("title", "title-2"); - repository.Save(content1); - + repository.Save(content1); + versions.Add(content1.VersionId); // the same version // no new version has been created @@ -202,16 +202,16 @@ namespace Umbraco.Tests.Persistence.Repositories Assert.AreEqual(false, scope.Database.ExecuteScalar($"SELECT published FROM {Constants.DatabaseSchema.Tables.Document} WHERE nodeId=@id", new { id = content1.Id })); // publish = version - ((Content) content1).TryPublishValues(); - ((Content) content1).PublishedState = PublishedState.Publishing; - repository.Save(content1); - + ((Content)content1).TryPublishValues(); + ((Content)content1).PublishedState = PublishedState.Publishing; + repository.Save(content1); + versions.Add(content1.VersionId); // NEW VERSION // new version has been created Assert.AreNotEqual(versions[versions.Count - 2], versions[versions.Count - 1]); Assert.IsTrue(content1.Published); - Assert.AreEqual(PublishedState.Published, ((Content) content1).PublishedState); + Assert.AreEqual(PublishedState.Published, ((Content)content1).PublishedState); Assert.AreEqual(versions[versions.Count - 1], repository.Get(content1.Id).VersionId); // misc checks @@ -224,8 +224,8 @@ namespace Umbraco.Tests.Persistence.Repositories //Thread.Sleep(2000); // force date change - repository.Save(content1); - + repository.Save(content1); + versions.Add(content1.VersionId); // the same version // no new version has been created @@ -238,16 +238,16 @@ namespace Umbraco.Tests.Persistence.Repositories // publish = new version content1.Name = "name-4"; content1.SetValue("title", "title-4"); - ((Content) content1).TryPublishValues(); - ((Content) content1).PublishedState = PublishedState.Publishing; - repository.Save(content1); - + ((Content)content1).TryPublishValues(); + ((Content)content1).PublishedState = PublishedState.Publishing; + repository.Save(content1); + versions.Add(content1.VersionId); // NEW VERSION // a new version has been created Assert.AreNotEqual(versions[versions.Count - 2], versions[versions.Count - 1]); Assert.IsTrue(content1.Published); - Assert.AreEqual(PublishedState.Published, ((Content) content1).PublishedState); + Assert.AreEqual(PublishedState.Published, ((Content)content1).PublishedState); Assert.AreEqual(versions[versions.Count - 1], repository.Get(content1.Id).VersionId); // misc checks @@ -261,7 +261,7 @@ namespace Umbraco.Tests.Persistence.Repositories Console.WriteLine(); foreach (var v in allVersions) { - var c = (Content) v; + var c = (Content)v; Console.WriteLine($"{c.Id} {c.VersionId} {(c.Published ? "+" : "-")}pub pk={c.VersionId} ppk={c.PublishedVersionId} name=\"{c.Name}\" pname=\"{c.PublishName}\""); } @@ -297,7 +297,7 @@ namespace Umbraco.Tests.Persistence.Repositories var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var repository = CreateRepository((IScopeAccessor) provider, out var contentTypeRepository, out DataTypeRepository _); + var repository = CreateRepository((IScopeAccessor)provider, out var contentTypeRepository, out DataTypeRepository _); var emptyContentType = MockedContentTypes.CreateBasicContentType(); var hasPropertiesContentType = MockedContentTypes.CreateSimpleContentType("umbTextpage1", "Textpage"); @@ -310,11 +310,11 @@ namespace Umbraco.Tests.Persistence.Repositories contentTypeRepository.Save(hasPropertiesContentType); repository.Save(content1); repository.Save(content2); - repository.Save(content3); - - - // this will cause the GetPropertyCollection to execute and we need to ensure that - // all of the properties and property types are all correct + repository.Save(content3); + + + // this will cause the GetPropertyCollection to execute and we need to ensure that + // all of the properties and property types are all correct var result = repository.GetMany(content1.Id, content2.Id, content3.Id).ToArray(); var n1 = result[0]; var n2 = result[1]; @@ -347,7 +347,7 @@ namespace Umbraco.Tests.Persistence.Repositories var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var repository = CreateRepository((IScopeAccessor) provider, out var contentTypeRepository, out DataTypeRepository dataTypeDefinitionRepository); + var repository = CreateRepository((IScopeAccessor)provider, out var contentTypeRepository, out DataTypeRepository dataTypeDefinitionRepository); var editor = new DecimalPropertyEditor(Logger); var dtd = new DataType(editor) { Name = "test", DatabaseType = ValueStorageType.Decimal }; @@ -394,7 +394,7 @@ namespace Umbraco.Tests.Persistence.Repositories var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var repository = CreateRepository((IScopeAccessor) provider, out var contentTypeRepository); + var repository = CreateRepository((IScopeAccessor)provider, out var contentTypeRepository); var contentType = MockedContentTypes.CreateSimpleContentType("umbTextpage2", "Textpage"); ServiceContext.FileService.SaveTemplate(contentType.DefaultTemplate); // else, FK violation on contentType! IContent textpage = MockedContent.CreateSimpleContent(contentType); @@ -414,21 +414,21 @@ namespace Umbraco.Tests.Persistence.Repositories var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var repository = CreateRepository((IScopeAccessor) provider, out var contentTypeRepository, out TemplateRepository templateRepository); + var repository = CreateRepository((IScopeAccessor)provider, out var contentTypeRepository, out TemplateRepository templateRepository); var template = new Template("hello", "hello"); - templateRepository.Save(template); - - + templateRepository.Save(template); + + var contentType = MockedContentTypes.CreateSimpleContentType("umbTextpage2", "Textpage"); contentType.AllowedTemplates = Enumerable.Empty(); // because CreateSimpleContentType assigns one already contentType.SetDefaultTemplate(template); var textpage = MockedContent.CreateSimpleContent(contentType); contentTypeRepository.Save(contentType); - repository.Save(textpage); - - + repository.Save(textpage); + + var fetched = repository.Get(textpage.Id); Assert.NotNull(textpage.Template); @@ -448,20 +448,20 @@ namespace Umbraco.Tests.Persistence.Repositories var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var repository = CreateRepository((IScopeAccessor) provider, out var contentTypeRepository); + var repository = CreateRepository((IScopeAccessor)provider, out var contentTypeRepository); var contentType = MockedContentTypes.CreateSimpleContentType("umbTextpage1", "Textpage"); ServiceContext.FileService.SaveTemplate(contentType.DefaultTemplate); // else, FK violation on contentType! - contentTypeRepository.Save(contentType); - - + contentTypeRepository.Save(contentType); + + var textpage = MockedContent.CreateSimpleContent(contentType, "test@umbraco.org"); var anotherTextpage = MockedContent.CreateSimpleContent(contentType, "@lightgiants"); repository.Save(textpage); - repository.Save(anotherTextpage); - - - + repository.Save(anotherTextpage); + + + Assert.That(contentType.HasIdentity, Is.True); Assert.That(textpage.HasIdentity, Is.True); @@ -481,19 +481,19 @@ namespace Umbraco.Tests.Persistence.Repositories var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var repository = CreateRepository((IScopeAccessor) provider, out var contentTypeRepository); + var repository = CreateRepository((IScopeAccessor)provider, out var contentTypeRepository); var contentType = MockedContentTypes.CreateSimpleContentType("umbTextpage1", "Textpage"); ServiceContext.FileService.SaveTemplate(contentType.DefaultTemplate); // else, FK violation on contentType! var textpage = MockedContent.CreateSimpleContent(contentType); contentTypeRepository.Save(contentType); - repository.Save(textpage); - - + repository.Save(textpage); + + var subpage = MockedContent.CreateSimpleContent(contentType, "Text Page 1", textpage.Id); - repository.Save(subpage); - - + repository.Save(subpage); + + Assert.That(contentType.HasIdentity, Is.True); Assert.That(textpage.HasIdentity, Is.True); Assert.That(subpage.HasIdentity, Is.True); @@ -509,10 +509,10 @@ namespace Umbraco.Tests.Persistence.Repositories var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var repository = CreateRepository((IScopeAccessor) provider, out _); + var repository = CreateRepository((IScopeAccessor)provider, out _); var content = repository.Get(NodeDto.NodeIdSeed + 3); - var dirty = ((Content) content).IsDirty(); + var dirty = ((Content)content).IsDirty(); Assert.That(dirty, Is.False); } @@ -524,12 +524,12 @@ namespace Umbraco.Tests.Persistence.Repositories var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var repository = CreateRepository((IScopeAccessor) provider, out _); + var repository = CreateRepository((IScopeAccessor)provider, out _); var content = repository.Get(NodeDto.NodeIdSeed + 2); content.Name = "About 2"; - repository.Save(content); - + repository.Save(content); + var updatedContent = repository.Get(NodeDto.NodeIdSeed + 2); Assert.AreEqual(content.Id, updatedContent.Id); @@ -538,8 +538,8 @@ namespace Umbraco.Tests.Persistence.Repositories Assert.AreEqual(content.GetValue("title"), "Welcome to our Home page"); content.SetValue("title", "toot"); - repository.Save(content); - + repository.Save(content); + updatedContent = repository.Get(NodeDto.NodeIdSeed + 2); Assert.AreEqual("toot", updatedContent.GetValue("title")); @@ -553,12 +553,12 @@ namespace Umbraco.Tests.Persistence.Repositories var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var repository = CreateRepository((IScopeAccessor) provider, out _); + var repository = CreateRepository((IScopeAccessor)provider, out _); var content = repository.Get(NodeDto.NodeIdSeed + 2); content.Template = null; - repository.Save(content); - + repository.Save(content); + var updatedContent = repository.Get(NodeDto.NodeIdSeed + 2); Assert.IsNull(updatedContent.Template); @@ -572,19 +572,19 @@ namespace Umbraco.Tests.Persistence.Repositories var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var repository = CreateRepository((IScopeAccessor) provider, out var contentTypeRepository); + var repository = CreateRepository((IScopeAccessor)provider, out var contentTypeRepository); var contentType = contentTypeRepository.Get(NodeDto.NodeIdSeed + 1); var content = new Content("Textpage 2 Child Node", NodeDto.NodeIdSeed + 4, contentType); content.CreatorId = 0; content.WriterId = 0; - repository.Save(content); - + repository.Save(content); + var id = content.Id; - repository.Delete(content); - - + repository.Delete(content); + + var content1 = repository.Get(id); Assert.IsNull(content1); } @@ -596,7 +596,7 @@ namespace Umbraco.Tests.Persistence.Repositories var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var repository = CreateRepository((IScopeAccessor) provider, out _); + var repository = CreateRepository((IScopeAccessor)provider, out _); var content = repository.Get(NodeDto.NodeIdSeed + 4); Assert.AreEqual(NodeDto.NodeIdSeed + 4, content.Id); @@ -617,7 +617,7 @@ namespace Umbraco.Tests.Persistence.Repositories var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var repository = CreateRepository((IScopeAccessor) provider, out _); + var repository = CreateRepository((IScopeAccessor)provider, out _); var query = scope.SqlContext.Query().Where(x => x.Level == 2); var result = repository.Get(query); @@ -634,7 +634,7 @@ namespace Umbraco.Tests.Persistence.Repositories var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var repository = CreateRepository((IScopeAccessor) provider, out _); + var repository = CreateRepository((IScopeAccessor)provider, out _); result = repository.GetMany().ToArray(); // save them all @@ -642,24 +642,24 @@ namespace Umbraco.Tests.Persistence.Repositories { content.SetValue("title", content.GetValue("title") + "x"); repository.Save(content); - } - - - // publish them all + } + + + // publish them all foreach (var content in result) { content.TryPublishValues(); repository.Save(content); - } - - + } + + scope.Complete(); } // get them all again using (var scope = provider.CreateScope()) { - var repository = CreateRepository((IScopeAccessor) provider, out _); + var repository = CreateRepository((IScopeAccessor)provider, out _); var result2 = repository.GetMany().ToArray(); Assert.AreEqual(result.Length, result2.Length); @@ -679,6 +679,100 @@ namespace Umbraco.Tests.Persistence.Repositories Assert.AreEqual("[table].[column2]", matches[1].Groups[1].Value); Assert.AreEqual("[alias2]", matches[1].Groups[2].Value); } + + [Test] + public void GetPagedResultsByQuery_With_Variant_Names() + { + //2x content types, one invariant, one variant + + var invariantCT = MockedContentTypes.CreateSimpleContentType("umbInvariantTextpage", "Invariant Textpage"); + invariantCT.Variations = ContentVariation.InvariantNeutral; + foreach (var p in invariantCT.PropertyTypes) p.Variations = ContentVariation.InvariantNeutral; + ServiceContext.FileService.SaveTemplate(invariantCT.DefaultTemplate); // else, FK violation on contentType! + ServiceContext.ContentTypeService.Save(invariantCT); + + var variantCT = MockedContentTypes.CreateSimpleContentType("umbVariantTextpage", "Variant Textpage"); + variantCT.Variations = ContentVariation.CultureNeutral; + var propTypes = variantCT.PropertyTypes.ToList(); + for (int i = 0; i < propTypes.Count; i++) + { + var p = propTypes[i]; + //every 2nd one is variant + p.Variations = i % 2 == 0 ? ContentVariation.CultureNeutral : ContentVariation.InvariantNeutral; + } + ServiceContext.FileService.SaveTemplate(variantCT.DefaultTemplate); // else, FK violation on contentType! + ServiceContext.ContentTypeService.Save(variantCT); + + invariantCT.AllowedContentTypes = new[] { new ContentTypeSort(invariantCT.Id, 0), new ContentTypeSort(variantCT.Id, 1) }; + ServiceContext.ContentTypeService.Save(invariantCT); + + //create content + + var root = MockedContent.CreateSimpleContent(invariantCT); + ServiceContext.ContentService.Save(root); + + for (int i = 0; i < 25; i++) + { + var isInvariant = i % 2 == 0; + var name = (isInvariant ? "INV" : "VAR") + "_" + Guid.NewGuid().ToString(); + var culture = isInvariant ? null : "en-US"; + + var child = MockedContent.CreateSimpleContent( + isInvariant ? invariantCT : variantCT, + name, root, + culture, + setPropertyValues: isInvariant); + + if (!isInvariant) + { + //manually set the property values since we have mixed variant/invariant property types + child.SetValue("title", name + " Subpage", culture: culture); + child.SetValue("bodyText", "This is a subpage", culture: null); //this one is invariant + child.SetValue("author", "John Doe", culture: culture); + } + + ServiceContext.ContentService.Save(child); + } + + var provider = TestObjects.GetScopeProvider(Logger); + using (var scope = provider.CreateScope()) + { + var repository = CreateRepository((IScopeAccessor)provider, out _); + + var query = scope.SqlContext.Query().Where(x => x.ParentId == root.Id); + + try + { + scope.Database.AsUmbracoDatabase().EnableSqlTrace = true; + scope.Database.AsUmbracoDatabase().EnableSqlCount = true; + + var result = repository.GetPage(query, 0, 20, out var totalRecords, "UpdateDate", Direction.Ascending, true); + + Assert.AreEqual(25, totalRecords); + foreach (var r in result) + { + var isInvariant = r.ContentType.Alias == "umbInvariantTextpage"; + var name = isInvariant ? r.Name : r.Names["en-US"]; + var namePrefix = (isInvariant ? "INV" : "VAR"); + + //ensure the correct name (invariant vs variant) is in the result + Assert.IsTrue(name.StartsWith(namePrefix)); + + foreach (var p in r.Properties) + { + //ensure there is a value for the correct variant/invariant property + var value = p.GetValue(p.PropertyType.Variations.Has(ContentVariation.InvariantNeutral) ? null : "en-US"); + Assert.IsNotNull(value); + } + } + } + finally + { + scope.Database.AsUmbracoDatabase().EnableSqlTrace = false; + scope.Database.AsUmbracoDatabase().EnableSqlCount = false; + } + } + } [Test] public void GetPagedResultsByQuery_CustomPropertySort() @@ -686,7 +780,7 @@ namespace Umbraco.Tests.Persistence.Repositories var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var repository = CreateRepository((IScopeAccessor) provider, out _); + var repository = CreateRepository((IScopeAccessor)provider, out _); var query = scope.SqlContext.Query().Where(x => x.Name.Contains("Text")); @@ -718,7 +812,7 @@ namespace Umbraco.Tests.Persistence.Repositories var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var repository = CreateRepository((IScopeAccessor) provider, out _); + var repository = CreateRepository((IScopeAccessor)provider, out _); var query = scope.SqlContext.Query().Where(x => x.Level == 2); @@ -747,7 +841,7 @@ namespace Umbraco.Tests.Persistence.Repositories var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var repository = CreateRepository((IScopeAccessor) provider, out _); + var repository = CreateRepository((IScopeAccessor)provider, out _); var query = scope.SqlContext.Query().Where(x => x.Level == 2); var result = repository.GetPage(query, 1, 1, out var totalRecords, "Name", Direction.Ascending, true); @@ -764,7 +858,7 @@ namespace Umbraco.Tests.Persistence.Repositories var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var repository = CreateRepository((IScopeAccessor) provider, out _); + var repository = CreateRepository((IScopeAccessor)provider, out _); var query = scope.SqlContext.Query().Where(x => x.Level == 2); var result = repository.GetPage(query, 0, 2, out var totalRecords, "Name", Direction.Ascending, true); @@ -781,7 +875,7 @@ namespace Umbraco.Tests.Persistence.Repositories var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var repository = CreateRepository((IScopeAccessor) provider, out _); + var repository = CreateRepository((IScopeAccessor)provider, out _); var query = scope.SqlContext.Query().Where(x => x.Level == 2); var result = repository.GetPage(query, 0, 1, out var totalRecords, "Name", Direction.Descending, true); @@ -798,7 +892,7 @@ namespace Umbraco.Tests.Persistence.Repositories var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var repository = CreateRepository((IScopeAccessor) provider, out _); + var repository = CreateRepository((IScopeAccessor)provider, out _); var query = scope.SqlContext.Query().Where(x => x.Level == 2); @@ -817,7 +911,7 @@ namespace Umbraco.Tests.Persistence.Repositories var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var repository = CreateRepository((IScopeAccessor) provider, out _); + var repository = CreateRepository((IScopeAccessor)provider, out _); var query = scope.SqlContext.Query().Where(x => x.Level == 2); @@ -836,7 +930,7 @@ namespace Umbraco.Tests.Persistence.Repositories var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var repository = CreateRepository((IScopeAccessor) provider, out _); + var repository = CreateRepository((IScopeAccessor)provider, out _); var contents = repository.GetMany(NodeDto.NodeIdSeed + 2, NodeDto.NodeIdSeed + 3); @@ -853,7 +947,7 @@ namespace Umbraco.Tests.Persistence.Repositories var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var repository = CreateRepository((IScopeAccessor) provider, out _); + var repository = CreateRepository((IScopeAccessor)provider, out _); var contents = repository.GetMany(); @@ -879,7 +973,7 @@ namespace Umbraco.Tests.Persistence.Repositories var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var repository = CreateRepository((IScopeAccessor) provider, out _); + var repository = CreateRepository((IScopeAccessor)provider, out _); var exists = repository.Exists(NodeDto.NodeIdSeed + 2); @@ -893,7 +987,7 @@ namespace Umbraco.Tests.Persistence.Repositories var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var repository = CreateRepository((IScopeAccessor) provider, out _); + var repository = CreateRepository((IScopeAccessor)provider, out _); var query = scope.SqlContext.Query().Where(x => x.Level == 2); var result = repository.Count(query); @@ -908,7 +1002,7 @@ namespace Umbraco.Tests.Persistence.Repositories var provider = TestObjects.GetScopeProvider(Logger); using (var scope = provider.CreateScope()) { - var repository = CreateRepository((IScopeAccessor) provider, out _); + var repository = CreateRepository((IScopeAccessor)provider, out _); var query = scope.SqlContext.Query().Where(x => x.Key == new Guid("B58B3AD4-62C2-4E27-B1BE-837BD7C533E0")); var content = repository.Get(query).SingleOrDefault(); diff --git a/src/Umbraco.Tests/TestHelpers/Entities/MockedContent.cs b/src/Umbraco.Tests/TestHelpers/Entities/MockedContent.cs index 5e69eff83a..14d914be1d 100644 --- a/src/Umbraco.Tests/TestHelpers/Entities/MockedContent.cs +++ b/src/Umbraco.Tests/TestHelpers/Entities/MockedContent.cs @@ -35,7 +35,7 @@ namespace Umbraco.Tests.TestHelpers.Entities return content; } - public static Content CreateSimpleContent(IContentType contentType, string name, int parentId = -1) + public static Content CreateSimpleContent(IContentType contentType, string name, int parentId = -1, string culture = null, string segment = null) { var content = new Content(name, parentId, contentType) { CreatorId = 0, WriterId = 0 }; object obj = @@ -46,25 +46,29 @@ namespace Umbraco.Tests.TestHelpers.Entities author = "John Doe" }; - content.PropertyValues(obj); + content.PropertyValues(obj, culture, segment); content.ResetDirtyProperties(false); return content; } - public static Content CreateSimpleContent(IContentType contentType, string name, IContent parent) + public static Content CreateSimpleContent(IContentType contentType, string name, IContent parent, string culture = null, string segment = null, bool setPropertyValues = true) { - var content = new Content(name, parent, contentType) { CreatorId = 0, WriterId = 0 }; - object obj = + var content = new Content(name, parent, contentType, culture) { CreatorId = 0, WriterId = 0 }; + + if (setPropertyValues) + { + object obj = new { title = name + " Subpage", bodyText = "This is a subpage", author = "John Doe" - }; - - content.PropertyValues(obj); + }; + + content.PropertyValues(obj, culture, segment); + } content.ResetDirtyProperties(false); diff --git a/src/Umbraco.Tests/Testing/ContentBaseExtensions.cs b/src/Umbraco.Tests/Testing/ContentBaseExtensions.cs index 1a94b8770a..58d4dfbd7f 100644 --- a/src/Umbraco.Tests/Testing/ContentBaseExtensions.cs +++ b/src/Umbraco.Tests/Testing/ContentBaseExtensions.cs @@ -10,7 +10,7 @@ namespace Umbraco.Tests.Testing /// Set property values by alias with an annonymous object. /// /// Does not support variants. - public static void PropertyValues(this IContentBase content, object value) + public static void PropertyValues(this IContentBase content, object value, string culture = null, string segment = null) { if (value == null) throw new Exception("No properties has been passed in"); @@ -27,7 +27,7 @@ namespace Umbraco.Tests.Testing var item = content.Properties.FirstOrDefault(x => x.Alias == propertyInfo.Name); if (item != null) { - item.SetValue(propertyInfo.GetValue(value, null)); + item.SetValue(propertyInfo.GetValue(value, null), culture, segment); //Update item with newly added value content.Properties.Add(item); } @@ -35,7 +35,7 @@ namespace Umbraco.Tests.Testing { //Create new Property to add to collection var property = propertyType.CreateProperty(); - property.SetValue(propertyInfo.GetValue(value, null)); + property.SetValue(propertyInfo.GetValue(value, null), culture, segment); content.Properties.Add(property); } }