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);
}
}