Browse Source

Fix for resolved assets.

pull/460/head
Sebastian 6 years ago
parent
commit
48df661294
  1. 92
      backend/src/Squidex.Domain.Apps.Core.Operations/ConvertContent/FieldConverters.cs
  2. 186
      backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/ConvertContent/FieldConvertersTests.cs

92
backend/src/Squidex.Domain.Apps.Core.Operations/ConvertContent/FieldConverters.cs

@ -23,14 +23,32 @@ namespace Squidex.Domain.Apps.Core.ConvertContent
public static class FieldConverters
{
private static readonly Func<IField, string> KeyNameResolver = f => f.Name;
private static readonly Func<IField, string> KeyIdResolver = f => f.Id.ToString();
private delegate string FieldKeyResolver(IField field);
private static readonly Func<IArrayField, string, IField?> FieldByIdResolver =
(f, k) => long.TryParse(k, out var id) ? f.FieldsById.GetOrDefault(id) : null;
private static readonly FieldKeyResolver KeyNameResolver = f => f.Name;
private static readonly FieldKeyResolver KeyIdResolver = f => f.Id.ToString();
private static readonly Func<IArrayField, string, IField?> FieldByNameResolver =
(f, k) => f.FieldsByName.GetOrDefault(k);
private delegate IField? FieldResolver(IArrayField field, string key);
private static IField? FieldByIdResolver(IArrayField array, string key)
{
if (key != null && long.TryParse(key, out var id))
{
return array.FieldsById.GetOrDefault(id);
}
return null;
}
private static IField? FieldByNameResolver(IArrayField array, string key)
{
if (key != null)
{
return array.FieldsByName.GetOrDefault(key);
}
return null;
}
public static FieldConverter ExcludeHidden()
{
@ -69,15 +87,31 @@ namespace Squidex.Domain.Apps.Core.ConvertContent
return (data, field) => data;
}
var isAll = fields.First() == "*";
bool ShouldHandle(IField field, IField? parent = null)
{
if (field is IField<AssetsFieldProperties>)
{
if (fields.Contains("*"))
{
return true;
}
return (data, field) =>
if (parent == null)
{
if (field is IField<AssetsFieldProperties> && (isAll || fields.Contains(field.Name)))
return fields.Contains(field.Name);
}
else
{
foreach (var partition in data)
return fields.Contains($"{parent.Name}.{field.Name}");
}
}
return false;
}
void Resolve(IJsonValue value)
{
if (partition.Value is JsonArray array)
if (value is JsonArray array)
{
for (var i = 0; i < array.Count; i++)
{
@ -87,6 +121,37 @@ namespace Squidex.Domain.Apps.Core.ConvertContent
}
}
}
return (data, field) =>
{
if (ShouldHandle(field))
{
foreach (var partition in data)
{
Resolve(partition.Value);
}
}
else if (field is IArrayField arrayField)
{
foreach (var partition in data)
{
if (partition.Value is JsonArray array)
{
for (var i = 0; i < array.Count; i++)
{
if (array[i] is JsonObject arrayItem)
{
foreach (var kvp in arrayItem)
{
if (arrayField.FieldsByName.TryGetValue(kvp.Key, out var nestedField) && ShouldHandle(nestedField, field))
{
Resolve(kvp.Value);
}
}
}
}
}
}
}
return data;
@ -259,10 +324,7 @@ namespace Squidex.Domain.Apps.Core.ConvertContent
return ForNested(FieldByIdResolver, KeyIdResolver, converters);
}
private static FieldConverter ForNested(
Func<IArrayField, string, IField?> fieldResolver,
Func<IField, string> keyResolver,
params ValueConverter[] converters)
private static FieldConverter ForNested(FieldResolver fieldResolver, FieldKeyResolver keyResolver, params ValueConverter[] converters)
{
return (data, field) =>
{

186
backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/ConvertContent/FieldConvertersTests.cs

@ -22,14 +22,6 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
{
private readonly IAssetUrlGenerator assetUrlGenerator = A.Fake<IAssetUrlGenerator>();
private readonly LanguagesConfig languagesConfig = LanguagesConfig.Build(Language.EN, Language.DE);
private readonly RootField<JsonFieldProperties> jsonField = Fields.Json(1, "1", Partitioning.Invariant);
private readonly RootField<StringFieldProperties> stringLanguageField = Fields.String(1, "1", Partitioning.Language);
private readonly RootField<StringFieldProperties> stringInvariantField = Fields.String(1, "1", Partitioning.Invariant);
private readonly RootField<NumberFieldProperties> numberField = Fields.Number(1, "1", Partitioning.Invariant);
private readonly RootField<AssetsFieldProperties> assetsField = Fields.Assets(1, "1", Partitioning.Invariant);
private readonly RootField<ArrayFieldProperties> arrayField = Fields.Array(1, "1", Partitioning.Invariant,
Fields.Number(1, "field1"),
Fields.Number(2, "field2").Hide());
public FieldConvertersTests()
{
@ -40,11 +32,13 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
[Fact]
public void Should_filter_for_value_conversion()
{
var field = Fields.String(1, "string", Partitioning.Invariant);
var input =
new ContentFieldData()
.AddValue("iv", JsonValue.Object());
var actual = FieldConverters.ForValues((f, i) => Value.Unset)(input, stringInvariantField);
var actual = FieldConverters.ForValues((f, i) => Value.Unset)(input, field);
var expected = new ContentFieldData();
@ -54,11 +48,13 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
[Fact]
public void Should_convert_for_value_conversion()
{
var field = Fields.Json(1, "json", Partitioning.Invariant);
var input =
new ContentFieldData()
.AddValue("iv", JsonValue.Object());
var actual = FieldConverters.ForValues(ValueConverters.EncodeJson(TestUtils.DefaultSerializer))(input, jsonField);
var actual = FieldConverters.ForValues(ValueConverters.EncodeJson(TestUtils.DefaultSerializer))(input, field);
var expected =
new ContentFieldData()
@ -70,6 +66,11 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
[Fact]
public void Should_convert_name_to_id()
{
var field =
Fields.Array(1, "1", Partitioning.Invariant,
Fields.Number(1, "field1"),
Fields.Number(2, "field2").Hide());
var input =
new ContentFieldData()
.AddValue("iv",
@ -79,7 +80,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
.Add("field2", 200)
.Add("invalid", 300)));
var actual = FieldConverters.ForNestedName2Id(ValueConverters.ExcludeHidden())(input, arrayField);
var actual = FieldConverters.ForNestedName2Id(ValueConverters.ExcludeHidden())(input, field);
var expected =
new ContentFieldData()
@ -94,6 +95,11 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
[Fact]
public void Should_convert_name_to_name()
{
var field =
Fields.Array(1, "1", Partitioning.Invariant,
Fields.Number(1, "field1"),
Fields.Number(2, "field2").Hide());
var input =
new ContentFieldData()
.AddValue("iv",
@ -103,7 +109,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
.Add("field2", 200)
.Add("invalid", 300)));
var actual = FieldConverters.ForNestedName2Name(ValueConverters.ExcludeHidden())(input, arrayField);
var actual = FieldConverters.ForNestedName2Name(ValueConverters.ExcludeHidden())(input, field);
var expected =
new ContentFieldData()
@ -118,6 +124,11 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
[Fact]
public void Should_convert_id_to_id()
{
var field =
Fields.Array(1, "1", Partitioning.Invariant,
Fields.Number(1, "field1"),
Fields.Number(2, "field2").Hide());
var input =
new ContentFieldData()
.AddValue("iv",
@ -127,7 +138,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
.Add("2", 200)
.Add("99", 300)));
var actual = FieldConverters.ForNestedId2Id(ValueConverters.ExcludeHidden())(input, arrayField);
var actual = FieldConverters.ForNestedId2Id(ValueConverters.ExcludeHidden())(input, field);
var expected =
new ContentFieldData()
@ -142,6 +153,11 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
[Fact]
public void Should_convert_id_to_name()
{
var field =
Fields.Array(1, "1", Partitioning.Invariant,
Fields.Number(1, "field1"),
Fields.Number(2, "field2").Hide());
var input =
new ContentFieldData()
.AddValue("iv",
@ -151,7 +167,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
.Add("2", 200)
.Add("99", 300)));
var actual = FieldConverters.ForNestedId2Name(ValueConverters.ExcludeHidden())(input, arrayField);
var actual = FieldConverters.ForNestedId2Name(ValueConverters.ExcludeHidden())(input, field);
var expected =
new ContentFieldData()
@ -164,27 +180,31 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
}
[Fact]
public void Should_return_same_values_if_all_values_are_valid()
public void Should_return_same_values_when_excluding_changed_types_if_all_values_are_valid()
{
var field = Fields.Number(1, "number", Partitioning.Invariant);
var source =
new ContentFieldData()
.AddValue("en", null)
.AddValue("de", 1);
var result = FieldConverters.ExcludeChangedTypes()(source, numberField);
var result = FieldConverters.ExcludeChangedTypes()(source, field);
Assert.Same(source, result);
}
[Fact]
public void Should_return_null_values_any_value_is_invalid()
public void Should_return_null_when_excluding_changed_types_if_any_value_is_invalid()
{
var field = Fields.Number(1, "number", Partitioning.Invariant);
var source =
new ContentFieldData()
.AddValue("en", "EN")
.AddValue("de", 0);
var result = FieldConverters.ExcludeChangedTypes()(source, numberField);
var result = FieldConverters.ExcludeChangedTypes()(source, field);
Assert.Null(result);
}
@ -192,9 +212,11 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
[Fact]
public void Should_return_same_values_if_field_not_hidden()
{
var field = Fields.String(1, "string", Partitioning.Language);
var source = new ContentFieldData();
var result = FieldConverters.ExcludeHidden()(source, stringLanguageField);
var result = FieldConverters.ExcludeHidden()(source, field);
Assert.Same(source, result);
}
@ -202,9 +224,11 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
[Fact]
public void Should_return_null_values_if_field_hidden()
{
var field = Fields.String(1, "string", Partitioning.Language);
var source = new ContentFieldData();
var result = FieldConverters.ExcludeHidden()(source, stringLanguageField.Hide());
var result = FieldConverters.ExcludeHidden()(source, field.Hide());
Assert.Null(result);
}
@ -212,6 +236,8 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
[Fact]
public void Should_resolve_languages_and_cleanup_old_languages()
{
var field = Fields.String(1, "string", Partitioning.Language);
var source =
new ContentFieldData()
.AddValue("en", "EN")
@ -221,7 +247,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
new ContentFieldData()
.AddValue("en", "EN");
var result = FieldConverters.ResolveLanguages(languagesConfig)(source, stringLanguageField);
var result = FieldConverters.ResolveLanguages(languagesConfig)(source, field);
Assert.Equal(expected, result);
}
@ -229,6 +255,8 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
[Fact]
public void Should_resolve_languages_and_resolve_master_language_from_invariant()
{
var field = Fields.String(1, "string", Partitioning.Language);
var source =
new ContentFieldData()
.AddValue("iv", "A")
@ -238,7 +266,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
new ContentFieldData()
.AddValue("en", "A");
var result = FieldConverters.ResolveLanguages(languagesConfig)(source, stringLanguageField);
var result = FieldConverters.ResolveLanguages(languagesConfig)(source, field);
Assert.Equal(expected, result);
}
@ -246,9 +274,11 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
[Fact]
public void Should_return_same_values_if_resolving_languages_from_invariant_field()
{
var field = Fields.String(1, "string", Partitioning.Invariant);
var source = new ContentFieldData();
var result = FieldConverters.ResolveLanguages(languagesConfig)(source, stringInvariantField);
var result = FieldConverters.ResolveLanguages(languagesConfig)(source, field);
Assert.Same(source, result);
}
@ -256,6 +286,8 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
[Fact]
public void Should_resolve_invariant_and_use_direct_value()
{
var field = Fields.String(1, "string", Partitioning.Invariant);
var source =
new ContentFieldData()
.AddValue("iv", "A")
@ -265,7 +297,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
new ContentFieldData()
.AddValue("iv", "A");
var result = FieldConverters.ResolveInvariant(languagesConfig)(source, stringInvariantField);
var result = FieldConverters.ResolveInvariant(languagesConfig)(source, field);
Assert.Equal(expected, result);
}
@ -273,6 +305,8 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
[Fact]
public void Should_resolve_invariant_and_resolve_invariant_from_master_language()
{
var field = Fields.String(1, "string", Partitioning.Invariant);
var source =
new ContentFieldData()
.AddValue("de", "DE")
@ -282,7 +316,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
new ContentFieldData()
.AddValue("iv", "EN");
var result = FieldConverters.ResolveInvariant(languagesConfig)(source, stringInvariantField);
var result = FieldConverters.ResolveInvariant(languagesConfig)(source, field);
Assert.Equal(expected, result);
}
@ -290,6 +324,8 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
[Fact]
public void Should_resolve_invariant_and_resolve_invariant_from_first_language()
{
var field = Fields.String(1, "string", Partitioning.Invariant);
var source =
new ContentFieldData()
.AddValue("de", "DE")
@ -299,7 +335,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
new ContentFieldData()
.AddValue("iv", "DE");
var result = FieldConverters.ResolveInvariant(languagesConfig)(source, stringInvariantField);
var result = FieldConverters.ResolveInvariant(languagesConfig)(source, field);
Assert.Equal(expected, result);
}
@ -307,9 +343,11 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
[Fact]
public void Should_return_same_values_if_resolving_invariant_from_language_field()
{
var field = Fields.String(1, "string", Partitioning.Language);
var source = new ContentFieldData();
var result = FieldConverters.ResolveInvariant(languagesConfig)(source, stringLanguageField);
var result = FieldConverters.ResolveInvariant(languagesConfig)(source, field);
Assert.Same(source, result);
}
@ -317,6 +355,8 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
[Fact]
public void Should_return_language_from_fallback_if_found()
{
var field = Fields.String(1, "string", Partitioning.Language);
var config_1 = languagesConfig.Set(new LanguageConfig(Language.IT));
var config_2 = config_1.Set(new LanguageConfig(Language.ES, false, Language.IT));
@ -332,7 +372,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
.AddValue("it", "IT")
.AddValue("es", "IT");
var result = FieldConverters.ResolveFallbackLanguages(config_2)(source, stringLanguageField);
var result = FieldConverters.ResolveFallbackLanguages(config_2)(source, field);
Assert.Equal(expected, result);
}
@ -340,6 +380,8 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
[Fact]
public void Should_not_return_value_if_master_is_missing()
{
var field = Fields.String(1, "string", Partitioning.Language);
var source =
new ContentFieldData()
.AddValue("de", "DE");
@ -348,7 +390,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
new ContentFieldData()
.AddValue("de", "DE");
var result = FieldConverters.ResolveFallbackLanguages(languagesConfig)(source, stringLanguageField);
var result = FieldConverters.ResolveFallbackLanguages(languagesConfig)(source, field);
Assert.Equal(expected, result);
}
@ -356,6 +398,8 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
[Fact]
public void Should_filter_languages()
{
var field = Fields.String(1, "string", Partitioning.Language);
var source =
new ContentFieldData()
.AddValue("en", "EN")
@ -365,7 +409,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
new ContentFieldData()
.AddValue("de", "DE");
var result = FieldConverters.FilterLanguages(languagesConfig, new[] { Language.DE })(source, stringLanguageField);
var result = FieldConverters.FilterLanguages(languagesConfig, new[] { Language.DE })(source, field);
Assert.Equal(expected, result);
}
@ -373,6 +417,8 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
[Fact]
public void Should_return_master_language_if_languages_to_filter_are_invalid()
{
var field = Fields.String(1, "string", Partitioning.Language);
var source =
new ContentFieldData()
.AddValue("en", "EN")
@ -382,7 +428,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
new ContentFieldData()
.AddValue("en", "EN");
var result = FieldConverters.FilterLanguages(languagesConfig, new[] { Language.CA })(source, stringLanguageField);
var result = FieldConverters.FilterLanguages(languagesConfig, new[] { Language.CA })(source, field);
Assert.Equal(expected, result);
}
@ -390,9 +436,11 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
[Fact]
public void Should_return_same_values_if_resolving_fallback_languages_from_invariant_field()
{
var field = Fields.String(1, "string", Partitioning.Invariant);
var source = new ContentFieldData();
var result = FieldConverters.ResolveFallbackLanguages(languagesConfig)(source, stringInvariantField);
var result = FieldConverters.ResolveFallbackLanguages(languagesConfig)(source, field);
Assert.Same(source, result);
}
@ -400,9 +448,11 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
[Fact]
public void Should_return_same_values_if_filtered_languages_is_empty()
{
var field = Fields.String(1, "string", Partitioning.Language);
var source = new ContentFieldData();
var result = FieldConverters.FilterLanguages(languagesConfig, Enumerable.Empty<Language>())(source, stringLanguageField);
var result = FieldConverters.FilterLanguages(languagesConfig, Enumerable.Empty<Language>())(source, field);
Assert.Same(source, result);
}
@ -410,9 +460,11 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
[Fact]
public void Should_return_same_values_if_filtering_languages_from_invariant_field()
{
var field = Fields.String(1, "string", Partitioning.Invariant);
var source = new ContentFieldData();
var result = FieldConverters.FilterLanguages(languagesConfig, null)(source, stringInvariantField);
var result = FieldConverters.FilterLanguages(languagesConfig, null)(source, field);
Assert.Same(source, result);
}
@ -420,6 +472,8 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
[Fact]
public void Should_convert_asset_ids_to_urls()
{
var field = Fields.Assets(1, "assets", Partitioning.Invariant);
var source =
new ContentFieldData()
.AddValue("iv", JsonValue.Array("1", "2"));
@ -428,7 +482,31 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
new ContentFieldData()
.AddValue("iv", JsonValue.Array("url/to/1", "url/to/2"));
var result = FieldConverters.ResolveAssetUrls(new HashSet<string>(new[] { "1" }), assetUrlGenerator)(source, assetsField);
var result = FieldConverters.ResolveAssetUrls(new HashSet<string>(new[] { "assets" }), assetUrlGenerator)(source, field);
Assert.Equal(expected, result);
}
[Fact]
public void Should_convert_nested_asset_ids_to_urls()
{
var field =
Fields.Array(1, "array", Partitioning.Invariant,
Fields.Assets(1, "assets"));
var source =
new ContentFieldData()
.AddValue("iv", JsonValue.Array(
JsonValue.Object()
.Add("assets", JsonValue.Array("1", "2"))));
var expected =
new ContentFieldData()
.AddValue("iv", JsonValue.Array(
JsonValue.Object()
.Add("assets", JsonValue.Array("url/to/1", "url/to/2"))));
var result = FieldConverters.ResolveAssetUrls(new HashSet<string>(new[] { "array.assets" }), assetUrlGenerator)(source, field);
Assert.Equal(expected, result);
}
@ -436,6 +514,8 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
[Fact]
public void Should_convert_asset_ids_to_urls_for_wildcard_fields()
{
var field = Fields.Assets(1, "assets", Partitioning.Invariant);
var source =
new ContentFieldData()
.AddValue("iv", JsonValue.Array("1", "2"));
@ -444,7 +524,31 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
new ContentFieldData()
.AddValue("iv", JsonValue.Array("url/to/1", "url/to/2"));
var result = FieldConverters.ResolveAssetUrls(new HashSet<string>(new[] { "*" }), assetUrlGenerator)(source, assetsField);
var result = FieldConverters.ResolveAssetUrls(new HashSet<string>(new[] { "*" }), assetUrlGenerator)(source, field);
Assert.Equal(expected, result);
}
[Fact]
public void Should_convert_nested_asset_ids_to_urls_for_wildcard_fields()
{
var field =
Fields.Array(1, "array", Partitioning.Invariant,
Fields.Assets(1, "assets"));
var source =
new ContentFieldData()
.AddValue("iv", JsonValue.Array(
JsonValue.Object()
.Add("assets", JsonValue.Array("1", "2"))));
var expected =
new ContentFieldData()
.AddValue("iv", JsonValue.Array(
JsonValue.Object()
.Add("assets", JsonValue.Array("url/to/1", "url/to/2"))));
var result = FieldConverters.ResolveAssetUrls(new HashSet<string>(new[] { "*" }), assetUrlGenerator)(source, field);
Assert.Equal(expected, result);
}
@ -452,6 +556,8 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
[Fact]
public void Should_not_convert_asset_ids_to_urls_when_field_does_not_match()
{
var field = Fields.Assets(1, "assets", Partitioning.Invariant);
var source =
new ContentFieldData()
.AddValue("iv", JsonValue.Array("1", "2"));
@ -460,14 +566,16 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
new ContentFieldData()
.AddValue("iv", JsonValue.Array("1", "2"));
var result = FieldConverters.ResolveAssetUrls(new HashSet<string>(new[] { "2" }), assetUrlGenerator)(source, assetsField);
var result = FieldConverters.ResolveAssetUrls(new HashSet<string>(new[] { "other" }), assetUrlGenerator)(source, field);
Assert.Equal(expected, result);
}
[Fact]
public void Should_not_convert_asset_ids_to_urls_when_field_is_specified()
public void Should_not_convert_asset_ids_to_urls_when_fields_is_null()
{
var field = Fields.Assets(1, "assets", Partitioning.Invariant);
var source =
new ContentFieldData()
.AddValue("iv", JsonValue.Array("1", "2"));
@ -476,7 +584,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ConvertContent
new ContentFieldData()
.AddValue("iv", JsonValue.Array("1", "2"));
var result = FieldConverters.ResolveAssetUrls(null, assetUrlGenerator)(source, assetsField);
var result = FieldConverters.ResolveAssetUrls(null, assetUrlGenerator)(source, field);
Assert.Equal(expected, result);
}

Loading…
Cancel
Save