Shorter JSON property names for nucache (#8204)

This commit is contained in:
Chad
2020-06-02 21:35:19 +12:00
committed by GitHub
parent 717bbf1e2e
commit a4274ba767
4 changed files with 94 additions and 45 deletions

View File

@@ -88,8 +88,8 @@ namespace Umbraco.Tests.Services
private void AssertJsonStartsWith(int id, string expected) private void AssertJsonStartsWith(int id, string expected)
{ {
var json = GetJson(id).Replace('"', '\''); var json = GetJson(id).Replace('"', '\'');
var pos = json.IndexOf("'cultureData':", StringComparison.InvariantCultureIgnoreCase); var pos = json.IndexOf("'cd':", StringComparison.InvariantCultureIgnoreCase);
json = json.Substring(0, pos + "'cultureData':".Length); json = json.Substring(0, pos + "'cd':".Length);
Assert.AreEqual(expected, json); Assert.AreEqual(expected, json);
} }
@@ -595,7 +595,7 @@ namespace Umbraco.Tests.Services
Console.WriteLine(GetJson(document.Id)); Console.WriteLine(GetJson(document.Id));
AssertJsonStartsWith(document.Id, AssertJsonStartsWith(document.Id,
"{'properties':{'value1':[{'culture':'en','seg':'','val':'v1en'},{'culture':'fr','seg':'','val':'v1fr'}],'value2':[{'culture':'','seg':'','val':'v2'}]},'cultureData':"); "{'pd':{'value1':[{'c':'en','v':'v1en'},{'c':'fr','v':'v1fr'}],'value2':[{'v':'v2'}]},'cd':");
// switch content type to Nothing // switch content type to Nothing
contentType.Variations = ContentVariation.Nothing; contentType.Variations = ContentVariation.Nothing;
@@ -612,7 +612,7 @@ namespace Umbraco.Tests.Services
Console.WriteLine(GetJson(document.Id)); Console.WriteLine(GetJson(document.Id));
AssertJsonStartsWith(document.Id, AssertJsonStartsWith(document.Id,
"{'properties':{'value1':[{'culture':'','seg':'','val':'v1en'}],'value2':[{'culture':'','seg':'','val':'v2'}]},'cultureData':"); "{'pd':{'value1':[{'v':'v1en'}],'value2':[{'v':'v2'}]},'cd':");
// switch content back to Culture // switch content back to Culture
contentType.Variations = ContentVariation.Culture; contentType.Variations = ContentVariation.Culture;
@@ -629,7 +629,7 @@ namespace Umbraco.Tests.Services
Console.WriteLine(GetJson(document.Id)); Console.WriteLine(GetJson(document.Id));
AssertJsonStartsWith(document.Id, AssertJsonStartsWith(document.Id,
"{'properties':{'value1':[{'culture':'','seg':'','val':'v1en'}],'value2':[{'culture':'','seg':'','val':'v2'}]},'cultureData':"); "{'pd':{'value1':[{'v':'v1en'}],'value2':[{'v':'v2'}]},'cd':");
// switch property back to Culture // switch property back to Culture
contentType.PropertyTypes.First(x => x.Alias == "value1").Variations = ContentVariation.Culture; contentType.PropertyTypes.First(x => x.Alias == "value1").Variations = ContentVariation.Culture;
@@ -645,7 +645,7 @@ namespace Umbraco.Tests.Services
Console.WriteLine(GetJson(document.Id)); Console.WriteLine(GetJson(document.Id));
AssertJsonStartsWith(document.Id, AssertJsonStartsWith(document.Id,
"{'properties':{'value1':[{'culture':'en','seg':'','val':'v1en'},{'culture':'fr','seg':'','val':'v1fr'}],'value2':[{'culture':'','seg':'','val':'v2'}]},'cultureData':"); "{'pd':{'value1':[{'c':'en','v':'v1en'},{'c':'fr','v':'v1fr'}],'value2':[{'v':'v2'}]},'cd':");
} }
[Test] [Test]
@@ -686,7 +686,7 @@ namespace Umbraco.Tests.Services
Console.WriteLine(GetJson(document.Id)); Console.WriteLine(GetJson(document.Id));
AssertJsonStartsWith(document.Id, AssertJsonStartsWith(document.Id,
"{'properties':{'value1':[{'culture':'','seg':'','val':'v1'}],'value2':[{'culture':'','seg':'','val':'v2'}]},'cultureData':"); "{'pd':{'value1':[{'v':'v1'}],'value2':[{'v':'v2'}]},'cd':");
// switch content type to Culture // switch content type to Culture
contentType.Variations = ContentVariation.Culture; contentType.Variations = ContentVariation.Culture;
@@ -702,7 +702,7 @@ namespace Umbraco.Tests.Services
Console.WriteLine(GetJson(document.Id)); Console.WriteLine(GetJson(document.Id));
AssertJsonStartsWith(document.Id, AssertJsonStartsWith(document.Id,
"{'properties':{'value1':[{'culture':'','seg':'','val':'v1'}],'value2':[{'culture':'','seg':'','val':'v2'}]},'cultureData':"); "{'pd':{'value1':[{'v':'v1'}],'value2':[{'v':'v2'}]},'cd':");
// switch property to Culture // switch property to Culture
contentType.PropertyTypes.First(x => x.Alias == "value1").Variations = ContentVariation.Culture; contentType.PropertyTypes.First(x => x.Alias == "value1").Variations = ContentVariation.Culture;
@@ -717,7 +717,7 @@ namespace Umbraco.Tests.Services
Console.WriteLine(GetJson(document.Id)); Console.WriteLine(GetJson(document.Id));
AssertJsonStartsWith(document.Id, AssertJsonStartsWith(document.Id,
"{'properties':{'value1':[{'culture':'en','seg':'','val':'v1'}],'value2':[{'culture':'','seg':'','val':'v2'}]},'cultureData':"); "{'pd':{'value1':[{'c':'en','v':'v1'}],'value2':[{'v':'v2'}]},'cd':");
// switch content back to Nothing // switch content back to Nothing
contentType.Variations = ContentVariation.Nothing; contentType.Variations = ContentVariation.Nothing;
@@ -734,7 +734,7 @@ namespace Umbraco.Tests.Services
Console.WriteLine(GetJson(document.Id)); Console.WriteLine(GetJson(document.Id));
AssertJsonStartsWith(document.Id, AssertJsonStartsWith(document.Id,
"{'properties':{'value1':[{'culture':'','seg':'','val':'v1'}],'value2':[{'culture':'','seg':'','val':'v2'}]},'cultureData':"); "{'pd':{'value1':[{'v':'v1'}],'value2':[{'v':'v2'}]},'cd':");
} }
[Test] [Test]
@@ -772,7 +772,7 @@ namespace Umbraco.Tests.Services
Console.WriteLine(GetJson(document.Id)); Console.WriteLine(GetJson(document.Id));
AssertJsonStartsWith(document.Id, AssertJsonStartsWith(document.Id,
"{'properties':{'value1':[{'culture':'en','seg':'','val':'v1en'},{'culture':'fr','seg':'','val':'v1fr'}],'value2':[{'culture':'','seg':'','val':'v2'}]},'cultureData':"); "{'pd':{'value1':[{'c':'en','v':'v1en'},{'c':'fr','v':'v1fr'}],'value2':[{'v':'v2'}]},'cd':");
// switch property type to Nothing // switch property type to Nothing
contentType.PropertyTypes.First(x => x.Alias == "value1").Variations = ContentVariation.Nothing; contentType.PropertyTypes.First(x => x.Alias == "value1").Variations = ContentVariation.Nothing;
@@ -789,7 +789,7 @@ namespace Umbraco.Tests.Services
Console.WriteLine(GetJson(document.Id)); Console.WriteLine(GetJson(document.Id));
AssertJsonStartsWith(document.Id, AssertJsonStartsWith(document.Id,
"{'properties':{'value1':[{'culture':'','seg':'','val':'v1en'}],'value2':[{'culture':'','seg':'','val':'v2'}]},'cultureData':"); "{'pd':{'value1':[{'v':'v1en'}],'value2':[{'v':'v2'}]},'cd':");
// switch property back to Culture // switch property back to Culture
contentType.PropertyTypes.First(x => x.Alias == "value1").Variations = ContentVariation.Culture; contentType.PropertyTypes.First(x => x.Alias == "value1").Variations = ContentVariation.Culture;
@@ -805,7 +805,7 @@ namespace Umbraco.Tests.Services
Console.WriteLine(GetJson(document.Id)); Console.WriteLine(GetJson(document.Id));
AssertJsonStartsWith(document.Id, AssertJsonStartsWith(document.Id,
"{'properties':{'value1':[{'culture':'en','seg':'','val':'v1en'},{'culture':'fr','seg':'','val':'v1fr'}],'value2':[{'culture':'','seg':'','val':'v2'}]},'cultureData':"); "{'pd':{'value1':[{'c':'en','v':'v1en'},{'c':'fr','v':'v1fr'}],'value2':[{'v':'v2'}]},'cd':");
// switch other property to Culture // switch other property to Culture
contentType.PropertyTypes.First(x => x.Alias == "value2").Variations = ContentVariation.Culture; contentType.PropertyTypes.First(x => x.Alias == "value2").Variations = ContentVariation.Culture;
@@ -823,7 +823,7 @@ namespace Umbraco.Tests.Services
Console.WriteLine(GetJson(document.Id)); Console.WriteLine(GetJson(document.Id));
AssertJsonStartsWith(document.Id, AssertJsonStartsWith(document.Id,
"{'properties':{'value1':[{'culture':'en','seg':'','val':'v1en'},{'culture':'fr','seg':'','val':'v1fr'}],'value2':[{'culture':'en','seg':'','val':'v2'}]},'cultureData':"); "{'pd':{'value1':[{'c':'en','v':'v1en'},{'c':'fr','v':'v1fr'}],'value2':[{'c':'en','v':'v2'}]},'cd':");
} }
[TestCase(ContentVariation.Culture, ContentVariation.Nothing)] [TestCase(ContentVariation.Culture, ContentVariation.Nothing)]
@@ -1054,7 +1054,7 @@ namespace Umbraco.Tests.Services
// both value11 and value21 are variant // both value11 and value21 are variant
Console.WriteLine(GetJson(document.Id)); Console.WriteLine(GetJson(document.Id));
AssertJsonStartsWith(document.Id, AssertJsonStartsWith(document.Id,
"{'properties':{'value11':[{'culture':'en','seg':'','val':'v11en'},{'culture':'fr','seg':'','val':'v11fr'}],'value12':[{'culture':'','seg':'','val':'v12'}],'value21':[{'culture':'en','seg':'','val':'v21en'},{'culture':'fr','seg':'','val':'v21fr'}],'value22':[{'culture':'','seg':'','val':'v22'}]},'cultureData':"); "{'pd':{'value11':[{'c':'en','v':'v11en'},{'c':'fr','v':'v11fr'}],'value12':[{'v':'v12'}],'value21':[{'c':'en','v':'v21en'},{'c':'fr','v':'v21fr'}],'value22':[{'v':'v22'}]},'cd':");
composed.Variations = ContentVariation.Nothing; composed.Variations = ContentVariation.Nothing;
ServiceContext.ContentTypeService.Save(composed); ServiceContext.ContentTypeService.Save(composed);
@@ -1062,7 +1062,7 @@ namespace Umbraco.Tests.Services
// both value11 and value21 are invariant // both value11 and value21 are invariant
Console.WriteLine(GetJson(document.Id)); Console.WriteLine(GetJson(document.Id));
AssertJsonStartsWith(document.Id, AssertJsonStartsWith(document.Id,
"{'properties':{'value11':[{'culture':'','seg':'','val':'v11en'}],'value12':[{'culture':'','seg':'','val':'v12'}],'value21':[{'culture':'','seg':'','val':'v21en'}],'value22':[{'culture':'','seg':'','val':'v22'}]},'cultureData':"); "{'pd':{'value11':[{'v':'v11en'}],'value12':[{'v':'v12'}],'value21':[{'v':'v21en'}],'value22':[{'v':'v22'}]},'cd':");
composed.Variations = ContentVariation.Culture; composed.Variations = ContentVariation.Culture;
ServiceContext.ContentTypeService.Save(composed); ServiceContext.ContentTypeService.Save(composed);
@@ -1070,7 +1070,7 @@ namespace Umbraco.Tests.Services
// value11 is variant again, but value21 is still invariant // value11 is variant again, but value21 is still invariant
Console.WriteLine(GetJson(document.Id)); Console.WriteLine(GetJson(document.Id));
AssertJsonStartsWith(document.Id, AssertJsonStartsWith(document.Id,
"{'properties':{'value11':[{'culture':'en','seg':'','val':'v11en'},{'culture':'fr','seg':'','val':'v11fr'}],'value12':[{'culture':'','seg':'','val':'v12'}],'value21':[{'culture':'','seg':'','val':'v21en'}],'value22':[{'culture':'','seg':'','val':'v22'}]},'cultureData':"); "{'pd':{'value11':[{'c':'en','v':'v11en'},{'c':'fr','v':'v11fr'}],'value12':[{'v':'v12'}],'value21':[{'v':'v21en'}],'value22':[{'v':'v22'}]},'cd':");
composed.PropertyTypes.First(x => x.Alias == "value21").Variations = ContentVariation.Culture; composed.PropertyTypes.First(x => x.Alias == "value21").Variations = ContentVariation.Culture;
ServiceContext.ContentTypeService.Save(composed); ServiceContext.ContentTypeService.Save(composed);
@@ -1078,7 +1078,7 @@ namespace Umbraco.Tests.Services
// we can make it variant again // we can make it variant again
Console.WriteLine(GetJson(document.Id)); Console.WriteLine(GetJson(document.Id));
AssertJsonStartsWith(document.Id, AssertJsonStartsWith(document.Id,
"{'properties':{'value11':[{'culture':'en','seg':'','val':'v11en'},{'culture':'fr','seg':'','val':'v11fr'}],'value12':[{'culture':'','seg':'','val':'v12'}],'value21':[{'culture':'en','seg':'','val':'v21en'},{'culture':'fr','seg':'','val':'v21fr'}],'value22':[{'culture':'','seg':'','val':'v22'}]},'cultureData':"); "{'pd':{'value11':[{'c':'en','v':'v11en'},{'c':'fr','v':'v11fr'}],'value12':[{'v':'v12'}],'value21':[{'c':'en','v':'v21en'},{'c':'fr','v':'v21fr'}],'value22':[{'v':'v22'}]},'cd':");
composing.Variations = ContentVariation.Nothing; composing.Variations = ContentVariation.Nothing;
ServiceContext.ContentTypeService.Save(composing); ServiceContext.ContentTypeService.Save(composing);
@@ -1086,7 +1086,7 @@ namespace Umbraco.Tests.Services
// value11 is invariant // value11 is invariant
Console.WriteLine(GetJson(document.Id)); Console.WriteLine(GetJson(document.Id));
AssertJsonStartsWith(document.Id, AssertJsonStartsWith(document.Id,
"{'properties':{'value11':[{'culture':'','seg':'','val':'v11en'}],'value12':[{'culture':'','seg':'','val':'v12'}],'value21':[{'culture':'en','seg':'','val':'v21en'},{'culture':'fr','seg':'','val':'v21fr'}],'value22':[{'culture':'','seg':'','val':'v22'}]},'cultureData':"); "{'pd':{'value11':[{'v':'v11en'}],'value12':[{'v':'v12'}],'value21':[{'c':'en','v':'v21en'},{'c':'fr','v':'v21fr'}],'value22':[{'v':'v22'}]},'cd':");
composing.Variations = ContentVariation.Culture; composing.Variations = ContentVariation.Culture;
ServiceContext.ContentTypeService.Save(composing); ServiceContext.ContentTypeService.Save(composing);
@@ -1094,7 +1094,7 @@ namespace Umbraco.Tests.Services
// value11 is still invariant // value11 is still invariant
Console.WriteLine(GetJson(document.Id)); Console.WriteLine(GetJson(document.Id));
AssertJsonStartsWith(document.Id, AssertJsonStartsWith(document.Id,
"{'properties':{'value11':[{'culture':'','seg':'','val':'v11en'}],'value12':[{'culture':'','seg':'','val':'v12'}],'value21':[{'culture':'en','seg':'','val':'v21en'},{'culture':'fr','seg':'','val':'v21fr'}],'value22':[{'culture':'','seg':'','val':'v22'}]},'cultureData':"); "{'pd':{'value11':[{'v':'v11en'}],'value12':[{'v':'v12'}],'value21':[{'c':'en','v':'v21en'},{'c':'fr','v':'v21fr'}],'value22':[{'v':'v22'}]},'cd':");
composing.PropertyTypes.First(x => x.Alias == "value11").Variations = ContentVariation.Culture; composing.PropertyTypes.First(x => x.Alias == "value11").Variations = ContentVariation.Culture;
ServiceContext.ContentTypeService.Save(composing); ServiceContext.ContentTypeService.Save(composing);
@@ -1102,7 +1102,7 @@ namespace Umbraco.Tests.Services
// we can make it variant again // we can make it variant again
Console.WriteLine(GetJson(document.Id)); Console.WriteLine(GetJson(document.Id));
AssertJsonStartsWith(document.Id, AssertJsonStartsWith(document.Id,
"{'properties':{'value11':[{'culture':'en','seg':'','val':'v11en'},{'culture':'fr','seg':'','val':'v11fr'}],'value12':[{'culture':'','seg':'','val':'v12'}],'value21':[{'culture':'en','seg':'','val':'v21en'},{'culture':'fr','seg':'','val':'v21fr'}],'value22':[{'culture':'','seg':'','val':'v22'}]},'cultureData':"); "{'pd':{'value11':[{'c':'en','v':'v11en'},{'c':'fr','v':'v11fr'}],'value12':[{'v':'v12'}],'value21':[{'c':'en','v':'v21en'},{'c':'fr','v':'v21fr'}],'value22':[{'v':'v22'}]},'cd':");
} }
[Test] [Test]
@@ -1167,11 +1167,11 @@ namespace Umbraco.Tests.Services
// both value11 and value21 are variant // both value11 and value21 are variant
Console.WriteLine(GetJson(document1.Id)); Console.WriteLine(GetJson(document1.Id));
AssertJsonStartsWith(document1.Id, AssertJsonStartsWith(document1.Id,
"{'properties':{'value11':[{'culture':'en','seg':'','val':'v11en'},{'culture':'fr','seg':'','val':'v11fr'}],'value12':[{'culture':'','seg':'','val':'v12'}],'value21':[{'culture':'en','seg':'','val':'v21en'},{'culture':'fr','seg':'','val':'v21fr'}],'value22':[{'culture':'','seg':'','val':'v22'}]},'cultureData':"); "{'pd':{'value11':[{'c':'en','v':'v11en'},{'c':'fr','v':'v11fr'}],'value12':[{'v':'v12'}],'value21':[{'c':'en','v':'v21en'},{'c':'fr','v':'v21fr'}],'value22':[{'v':'v22'}]},'cd':");
Console.WriteLine(GetJson(document2.Id)); Console.WriteLine(GetJson(document2.Id));
AssertJsonStartsWith(document2.Id, AssertJsonStartsWith(document2.Id,
"{'properties':{'value11':[{'culture':'','seg':'','val':'v11'}],'value12':[{'culture':'','seg':'','val':'v12'}],'value31':[{'culture':'','seg':'','val':'v31'}],'value32':[{'culture':'','seg':'','val':'v32'}]},'cultureData':"); "{'pd':{'value11':[{'v':'v11'}],'value12':[{'v':'v12'}],'value31':[{'v':'v31'}],'value32':[{'v':'v32'}]},'cd':");
composed1.Variations = ContentVariation.Nothing; composed1.Variations = ContentVariation.Nothing;
ServiceContext.ContentTypeService.Save(composed1); ServiceContext.ContentTypeService.Save(composed1);
@@ -1179,11 +1179,11 @@ namespace Umbraco.Tests.Services
// both value11 and value21 are invariant // both value11 and value21 are invariant
Console.WriteLine(GetJson(document1.Id)); Console.WriteLine(GetJson(document1.Id));
AssertJsonStartsWith(document1.Id, AssertJsonStartsWith(document1.Id,
"{'properties':{'value11':[{'culture':'','seg':'','val':'v11en'}],'value12':[{'culture':'','seg':'','val':'v12'}],'value21':[{'culture':'','seg':'','val':'v21en'}],'value22':[{'culture':'','seg':'','val':'v22'}]},'cultureData':"); "{'pd':{'value11':[{'v':'v11en'}],'value12':[{'v':'v12'}],'value21':[{'v':'v21en'}],'value22':[{'v':'v22'}]},'cd':");
Console.WriteLine(GetJson(document2.Id)); Console.WriteLine(GetJson(document2.Id));
AssertJsonStartsWith(document2.Id, AssertJsonStartsWith(document2.Id,
"{'properties':{'value11':[{'culture':'','seg':'','val':'v11'}],'value12':[{'culture':'','seg':'','val':'v12'}],'value31':[{'culture':'','seg':'','val':'v31'}],'value32':[{'culture':'','seg':'','val':'v32'}]},'cultureData':"); "{'pd':{'value11':[{'v':'v11'}],'value12':[{'v':'v12'}],'value31':[{'v':'v31'}],'value32':[{'v':'v32'}]},'cd':");
composed1.Variations = ContentVariation.Culture; composed1.Variations = ContentVariation.Culture;
ServiceContext.ContentTypeService.Save(composed1); ServiceContext.ContentTypeService.Save(composed1);
@@ -1191,11 +1191,11 @@ namespace Umbraco.Tests.Services
// value11 is variant again, but value21 is still invariant // value11 is variant again, but value21 is still invariant
Console.WriteLine(GetJson(document1.Id)); Console.WriteLine(GetJson(document1.Id));
AssertJsonStartsWith(document1.Id, AssertJsonStartsWith(document1.Id,
"{'properties':{'value11':[{'culture':'en','seg':'','val':'v11en'},{'culture':'fr','seg':'','val':'v11fr'}],'value12':[{'culture':'','seg':'','val':'v12'}],'value21':[{'culture':'','seg':'','val':'v21en'}],'value22':[{'culture':'','seg':'','val':'v22'}]},'cultureData':"); "{'pd':{'value11':[{'c':'en','v':'v11en'},{'c':'fr','v':'v11fr'}],'value12':[{'v':'v12'}],'value21':[{'v':'v21en'}],'value22':[{'v':'v22'}]},'cd':");
Console.WriteLine(GetJson(document2.Id)); Console.WriteLine(GetJson(document2.Id));
AssertJsonStartsWith(document2.Id, AssertJsonStartsWith(document2.Id,
"{'properties':{'value11':[{'culture':'','seg':'','val':'v11'}],'value12':[{'culture':'','seg':'','val':'v12'}],'value31':[{'culture':'','seg':'','val':'v31'}],'value32':[{'culture':'','seg':'','val':'v32'}]},'cultureData':"); "{'pd':{'value11':[{'v':'v11'}],'value12':[{'v':'v12'}],'value31':[{'v':'v31'}],'value32':[{'v':'v32'}]},'cd':");
composed1.PropertyTypes.First(x => x.Alias == "value21").Variations = ContentVariation.Culture; composed1.PropertyTypes.First(x => x.Alias == "value21").Variations = ContentVariation.Culture;
ServiceContext.ContentTypeService.Save(composed1); ServiceContext.ContentTypeService.Save(composed1);
@@ -1203,11 +1203,11 @@ namespace Umbraco.Tests.Services
// we can make it variant again // we can make it variant again
Console.WriteLine(GetJson(document1.Id)); Console.WriteLine(GetJson(document1.Id));
AssertJsonStartsWith(document1.Id, AssertJsonStartsWith(document1.Id,
"{'properties':{'value11':[{'culture':'en','seg':'','val':'v11en'},{'culture':'fr','seg':'','val':'v11fr'}],'value12':[{'culture':'','seg':'','val':'v12'}],'value21':[{'culture':'en','seg':'','val':'v21en'},{'culture':'fr','seg':'','val':'v21fr'}],'value22':[{'culture':'','seg':'','val':'v22'}]},'cultureData':"); "{'pd':{'value11':[{'c':'en','v':'v11en'},{'c':'fr','v':'v11fr'}],'value12':[{'v':'v12'}],'value21':[{'c':'en','v':'v21en'},{'c':'fr','v':'v21fr'}],'value22':[{'v':'v22'}]},'cd':");
Console.WriteLine(GetJson(document2.Id)); Console.WriteLine(GetJson(document2.Id));
AssertJsonStartsWith(document2.Id, AssertJsonStartsWith(document2.Id,
"{'properties':{'value11':[{'culture':'','seg':'','val':'v11'}],'value12':[{'culture':'','seg':'','val':'v12'}],'value31':[{'culture':'','seg':'','val':'v31'}],'value32':[{'culture':'','seg':'','val':'v32'}]},'cultureData':"); "{'pd':{'value11':[{'v':'v11'}],'value12':[{'v':'v12'}],'value31':[{'v':'v31'}],'value32':[{'v':'v32'}]},'cd':");
composing.Variations = ContentVariation.Nothing; composing.Variations = ContentVariation.Nothing;
ServiceContext.ContentTypeService.Save(composing); ServiceContext.ContentTypeService.Save(composing);
@@ -1215,11 +1215,11 @@ namespace Umbraco.Tests.Services
// value11 is invariant // value11 is invariant
Console.WriteLine(GetJson(document1.Id)); Console.WriteLine(GetJson(document1.Id));
AssertJsonStartsWith(document1.Id, AssertJsonStartsWith(document1.Id,
"{'properties':{'value11':[{'culture':'','seg':'','val':'v11en'}],'value12':[{'culture':'','seg':'','val':'v12'}],'value21':[{'culture':'en','seg':'','val':'v21en'},{'culture':'fr','seg':'','val':'v21fr'}],'value22':[{'culture':'','seg':'','val':'v22'}]},'cultureData':"); "{'pd':{'value11':[{'v':'v11en'}],'value12':[{'v':'v12'}],'value21':[{'c':'en','v':'v21en'},{'c':'fr','v':'v21fr'}],'value22':[{'v':'v22'}]},'cd':");
Console.WriteLine(GetJson(document2.Id)); Console.WriteLine(GetJson(document2.Id));
AssertJsonStartsWith(document2.Id, AssertJsonStartsWith(document2.Id,
"{'properties':{'value11':[{'culture':'','seg':'','val':'v11'}],'value12':[{'culture':'','seg':'','val':'v12'}],'value31':[{'culture':'','seg':'','val':'v31'}],'value32':[{'culture':'','seg':'','val':'v32'}]},'cultureData':"); "{'pd':{'value11':[{'v':'v11'}],'value12':[{'v':'v12'}],'value31':[{'v':'v31'}],'value32':[{'v':'v32'}]},'cd':");
composing.Variations = ContentVariation.Culture; composing.Variations = ContentVariation.Culture;
ServiceContext.ContentTypeService.Save(composing); ServiceContext.ContentTypeService.Save(composing);
@@ -1227,11 +1227,11 @@ namespace Umbraco.Tests.Services
// value11 is still invariant // value11 is still invariant
Console.WriteLine(GetJson(document1.Id)); Console.WriteLine(GetJson(document1.Id));
AssertJsonStartsWith(document1.Id, AssertJsonStartsWith(document1.Id,
"{'properties':{'value11':[{'culture':'','seg':'','val':'v11en'}],'value12':[{'culture':'','seg':'','val':'v12'}],'value21':[{'culture':'en','seg':'','val':'v21en'},{'culture':'fr','seg':'','val':'v21fr'}],'value22':[{'culture':'','seg':'','val':'v22'}]},'cultureData':"); "{'pd':{'value11':[{'v':'v11en'}],'value12':[{'v':'v12'}],'value21':[{'c':'en','v':'v21en'},{'c':'fr','v':'v21fr'}],'value22':[{'v':'v22'}]},'cd':");
Console.WriteLine(GetJson(document2.Id)); Console.WriteLine(GetJson(document2.Id));
AssertJsonStartsWith(document2.Id, AssertJsonStartsWith(document2.Id,
"{'properties':{'value11':[{'culture':'','seg':'','val':'v11'}],'value12':[{'culture':'','seg':'','val':'v12'}],'value31':[{'culture':'','seg':'','val':'v31'}],'value32':[{'culture':'','seg':'','val':'v32'}]},'cultureData':"); "{'pd':{'value11':[{'v':'v11'}],'value12':[{'v':'v12'}],'value31':[{'v':'v31'}],'value32':[{'v':'v32'}]},'cd':");
composing.PropertyTypes.First(x => x.Alias == "value11").Variations = ContentVariation.Culture; composing.PropertyTypes.First(x => x.Alias == "value11").Variations = ContentVariation.Culture;
ServiceContext.ContentTypeService.Save(composing); ServiceContext.ContentTypeService.Save(composing);
@@ -1239,11 +1239,11 @@ namespace Umbraco.Tests.Services
// we can make it variant again // we can make it variant again
Console.WriteLine(GetJson(document1.Id)); Console.WriteLine(GetJson(document1.Id));
AssertJsonStartsWith(document1.Id, AssertJsonStartsWith(document1.Id,
"{'properties':{'value11':[{'culture':'en','seg':'','val':'v11en'},{'culture':'fr','seg':'','val':'v11fr'}],'value12':[{'culture':'','seg':'','val':'v12'}],'value21':[{'culture':'en','seg':'','val':'v21en'},{'culture':'fr','seg':'','val':'v21fr'}],'value22':[{'culture':'','seg':'','val':'v22'}]},'cultureData':"); "{'pd':{'value11':[{'c':'en','v':'v11en'},{'c':'fr','v':'v11fr'}],'value12':[{'v':'v12'}],'value21':[{'c':'en','v':'v21en'},{'c':'fr','v':'v21fr'}],'value22':[{'v':'v22'}]},'cd':");
Console.WriteLine(GetJson(document2.Id)); Console.WriteLine(GetJson(document2.Id));
AssertJsonStartsWith(document2.Id, AssertJsonStartsWith(document2.Id,
"{'properties':{'value11':[{'culture':'','seg':'','val':'v11'}],'value12':[{'culture':'','seg':'','val':'v12'}],'value31':[{'culture':'','seg':'','val':'v31'}],'value32':[{'culture':'','seg':'','val':'v32'}]},'cultureData':"); "{'pd':{'value11':[{'v':'v11'}],'value12':[{'v':'v12'}],'value31':[{'v':'v31'}],'value32':[{'v':'v32'}]},'cd':");
} }
private void CreateFrenchAndEnglishLangs() private void CreateFrenchAndEnglishLangs()

View File

@@ -9,15 +9,28 @@ namespace Umbraco.Web.PublishedCache.NuCache.DataSource
/// </summary> /// </summary>
internal class ContentNestedData internal class ContentNestedData
{ {
[JsonProperty("properties")] //dont serialize empty properties
[JsonProperty("pd")]
[JsonConverter(typeof(CaseInsensitiveDictionaryConverter<PropertyData[]>))] [JsonConverter(typeof(CaseInsensitiveDictionaryConverter<PropertyData[]>))]
public Dictionary<string, PropertyData[]> PropertyData { get; set; } public Dictionary<string, PropertyData[]> PropertyData { get; set; }
[JsonProperty("cultureData")] [JsonProperty("cd")]
[JsonConverter(typeof(CaseInsensitiveDictionaryConverter<CultureVariation>))] [JsonConverter(typeof(CaseInsensitiveDictionaryConverter<CultureVariation>))]
public Dictionary<string, CultureVariation> CultureData { get; set; } public Dictionary<string, CultureVariation> CultureData { get; set; }
[JsonProperty("urlSegment")] [JsonProperty("us")]
public string UrlSegment { get; set; } public string UrlSegment { get; set; }
//Legacy properties used to deserialize existing nucache db entries
[JsonProperty("properties")]
[JsonConverter(typeof(CaseInsensitiveDictionaryConverter<PropertyData[]>))]
private Dictionary<string, PropertyData[]> LegacyPropertyData { set { PropertyData = value; } }
[JsonProperty("cultureData")]
[JsonConverter(typeof(CaseInsensitiveDictionaryConverter<CultureVariation>))]
private Dictionary<string, CultureVariation> LegacyCultureData { set { CultureData = value; } }
[JsonProperty("urlSegment")]
private string LegacyUrlSegment { set { UrlSegment = value; } }
} }
} }

View File

@@ -8,16 +8,29 @@ namespace Umbraco.Web.PublishedCache.NuCache.DataSource
/// </summary> /// </summary>
internal class CultureVariation internal class CultureVariation
{ {
[JsonProperty("name")] [JsonProperty("nm")]
public string Name { get; set; } public string Name { get; set; }
[JsonProperty("urlSegment")] [JsonProperty("us")]
public string UrlSegment { get; set; } public string UrlSegment { get; set; }
[JsonProperty("date")] [JsonProperty("dt")]
public DateTime Date { get; set; } public DateTime Date { get; set; }
[JsonProperty("isDraft")] [JsonProperty("isd")]
public bool IsDraft { get; set; } public bool IsDraft { get; set; }
//Legacy properties used to deserialize existing nucache db entries
[JsonProperty("name")]
private string LegacyName { set { Name = value; } }
[JsonProperty("urlSegment")]
private string LegacyUrlSegment { set { UrlSegment = value; } }
[JsonProperty("date")]
private DateTime LegacyDate { set { Date = value; } }
[JsonProperty("isDraft")]
private bool LegacyIsDraft { set { IsDraft = value; } }
} }
} }

View File

@@ -1,4 +1,5 @@
using System; using System;
using System.ComponentModel;
using Newtonsoft.Json; using Newtonsoft.Json;
namespace Umbraco.Web.PublishedCache.NuCache.DataSource namespace Umbraco.Web.PublishedCache.NuCache.DataSource
@@ -8,21 +9,43 @@ namespace Umbraco.Web.PublishedCache.NuCache.DataSource
private string _culture; private string _culture;
private string _segment; private string _segment;
[JsonProperty("culture")] [DefaultValue("")]
[JsonProperty(DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate, PropertyName = "c")]
public string Culture public string Culture
{ {
get => _culture; get => _culture;
set => _culture = value ?? throw new ArgumentNullException(nameof(value)); // TODO: or fallback to string.Empty? CANNOT be null set => _culture = value ?? throw new ArgumentNullException(nameof(value)); // TODO: or fallback to string.Empty? CANNOT be null
} }
[JsonProperty("seg")] [DefaultValue("")]
[JsonProperty(DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate, PropertyName = "s")]
public string Segment public string Segment
{ {
get => _segment; get => _segment;
set => _segment = value ?? throw new ArgumentNullException(nameof(value)); // TODO: or fallback to string.Empty? CANNOT be null set => _segment = value ?? throw new ArgumentNullException(nameof(value)); // TODO: or fallback to string.Empty? CANNOT be null
} }
[JsonProperty("val")] [JsonProperty("v")]
public object Value { get; set; } public object Value { get; set; }
//Legacy properties used to deserialize existing nucache db entries
[JsonProperty("culture")]
private string LegacyCulture
{
set => Culture = value;
}
[JsonProperty("seg")]
private string LegacySegment
{
set => Segment = value;
}
[JsonProperty("val")]
private object LegacyValue
{
set => Value = value;
}
} }
} }