2018-07-28 08:11:48 +02:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
2018-07-11 22:15:58 +01:00
|
|
|
|
using System.Collections.ObjectModel;
|
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
using Moq;
|
|
|
|
|
|
using NUnit.Framework;
|
|
|
|
|
|
using Umbraco.Core.Models;
|
|
|
|
|
|
using Umbraco.Core.Models.PublishedContent;
|
|
|
|
|
|
using Umbraco.Core.Services;
|
|
|
|
|
|
using Umbraco.Tests.Testing;
|
|
|
|
|
|
using Umbraco.Web;
|
2019-02-14 09:49:45 +01:00
|
|
|
|
using Current = Umbraco.Web.Composing.Current;
|
2018-07-11 22:15:58 +01:00
|
|
|
|
|
|
|
|
|
|
namespace Umbraco.Tests.PublishedContent
|
|
|
|
|
|
{
|
|
|
|
|
|
[TestFixture]
|
2018-11-28 11:05:41 +01:00
|
|
|
|
[UmbracoTest(TypeLoader = UmbracoTestOptions.TypeLoader.PerFixture)]
|
2018-07-18 12:27:14 +02:00
|
|
|
|
public class PublishedContentLanguageVariantTests : PublishedContentSnapshotTestBase
|
2018-07-11 22:15:58 +01:00
|
|
|
|
{
|
|
|
|
|
|
protected override void Compose()
|
|
|
|
|
|
{
|
|
|
|
|
|
base.Compose();
|
|
|
|
|
|
|
2018-11-29 10:35:16 +01:00
|
|
|
|
Composition.RegisterUnique(_ => GetServiceContext());
|
2018-07-11 22:15:58 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
protected ServiceContext GetServiceContext()
|
|
|
|
|
|
{
|
2018-11-28 12:59:40 +01:00
|
|
|
|
var serviceContext = TestObjects.GetServiceContextMock(Factory);
|
2018-07-11 22:15:58 +01:00
|
|
|
|
MockLocalizationService(serviceContext);
|
|
|
|
|
|
return serviceContext;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private static void MockLocalizationService(ServiceContext serviceContext)
|
|
|
|
|
|
{
|
|
|
|
|
|
// Set up languages.
|
|
|
|
|
|
// Spanish falls back to English and Italian to Spanish (and then to English).
|
|
|
|
|
|
// French has no fall back.
|
2018-07-21 09:41:07 +02:00
|
|
|
|
// Danish, Swedish and Norweigan create an invalid loop.
|
2018-07-11 22:15:58 +01:00
|
|
|
|
var languages = new List<Language>
|
|
|
|
|
|
{
|
2018-07-18 12:27:14 +02:00
|
|
|
|
new Language("en-US") { Id = 1, CultureName = "English", IsDefault = true },
|
2018-07-11 22:15:58 +01:00
|
|
|
|
new Language("fr") { Id = 2, CultureName = "French" },
|
2018-07-12 20:52:02 +01:00
|
|
|
|
new Language("es") { Id = 3, CultureName = "Spanish", FallbackLanguageId = 1 },
|
|
|
|
|
|
new Language("it") { Id = 4, CultureName = "Italian", FallbackLanguageId = 3 },
|
2018-07-21 09:41:07 +02:00
|
|
|
|
new Language("de") { Id = 5, CultureName = "German" },
|
|
|
|
|
|
new Language("da") { Id = 6, CultureName = "Danish", FallbackLanguageId = 8 },
|
|
|
|
|
|
new Language("sv") { Id = 7, CultureName = "Swedish", FallbackLanguageId = 6 },
|
2018-07-21 15:58:49 +02:00
|
|
|
|
new Language("no") { Id = 8, CultureName = "Norweigan", FallbackLanguageId = 7 },
|
|
|
|
|
|
new Language("nl") { Id = 9, CultureName = "Dutch", FallbackLanguageId = 1 }
|
2018-07-11 22:15:58 +01:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
var localizationService = Mock.Get(serviceContext.LocalizationService);
|
|
|
|
|
|
localizationService.Setup(x => x.GetAllLanguages()).Returns(languages);
|
2018-07-12 20:52:02 +01:00
|
|
|
|
localizationService.Setup(x => x.GetLanguageById(It.IsAny<int>()))
|
|
|
|
|
|
.Returns((int id) => languages.SingleOrDefault(y => y.Id == id));
|
2018-07-11 22:15:58 +01:00
|
|
|
|
localizationService.Setup(x => x.GetLanguageByIsoCode(It.IsAny<string>()))
|
|
|
|
|
|
.Returns((string c) => languages.SingleOrDefault(y => y.IsoCode == c));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
internal override void PopulateCache(PublishedContentTypeFactory factory, SolidPublishedContentCache cache)
|
|
|
|
|
|
{
|
2019-01-11 14:21:03 +01:00
|
|
|
|
var prop1Type = factory.CreatePropertyType("prop1", 1, variations: ContentVariation.Culture);
|
|
|
|
|
|
var welcomeType = factory.CreatePropertyType("welcomeText", 1, variations: ContentVariation.Culture);
|
|
|
|
|
|
var welcome2Type = factory.CreatePropertyType("welcomeText2", 1, variations: ContentVariation.Culture);
|
2019-01-21 17:36:25 +01:00
|
|
|
|
var nopropType = factory.CreatePropertyType("noprop", 1, variations: ContentVariation.Culture);
|
|
|
|
|
|
|
2018-07-11 22:15:58 +01:00
|
|
|
|
var props = new[]
|
|
|
|
|
|
{
|
2018-10-09 23:02:22 +02:00
|
|
|
|
prop1Type,
|
|
|
|
|
|
welcomeType,
|
|
|
|
|
|
welcome2Type,
|
2019-01-21 17:36:25 +01:00
|
|
|
|
nopropType
|
2018-07-11 22:15:58 +01:00
|
|
|
|
};
|
|
|
|
|
|
var contentType1 = factory.CreateContentType(1, "ContentType1", Enumerable.Empty<string>(), props);
|
|
|
|
|
|
|
2019-01-21 17:36:25 +01:00
|
|
|
|
var prop3Type = factory.CreatePropertyType("prop3", 1, variations: ContentVariation.Culture);
|
|
|
|
|
|
var contentType2 = factory.CreateContentType(2, "contentType2", Enumerable.Empty<string>(), new[] { prop3Type });
|
|
|
|
|
|
|
2018-07-11 22:15:58 +01:00
|
|
|
|
var prop1 = new SolidPublishedPropertyWithLanguageVariants
|
2018-07-28 08:11:48 +02:00
|
|
|
|
{
|
|
|
|
|
|
Alias = "welcomeText",
|
2018-10-09 23:02:22 +02:00
|
|
|
|
PropertyType = welcomeType
|
2018-07-28 08:11:48 +02:00
|
|
|
|
};
|
2018-07-21 15:58:49 +02:00
|
|
|
|
prop1.SetSourceValue("en-US", "Welcome", true);
|
|
|
|
|
|
prop1.SetValue("en-US", "Welcome", true);
|
2018-07-11 22:15:58 +01:00
|
|
|
|
prop1.SetSourceValue("de", "Willkommen");
|
|
|
|
|
|
prop1.SetValue("de", "Willkommen");
|
2018-07-21 15:58:49 +02:00
|
|
|
|
prop1.SetSourceValue("nl", "Welkom");
|
|
|
|
|
|
prop1.SetValue("nl", "Welkom");
|
2018-07-11 22:15:58 +01:00
|
|
|
|
|
2018-07-21 15:58:49 +02:00
|
|
|
|
var prop2 = new SolidPublishedPropertyWithLanguageVariants
|
2018-07-28 08:11:48 +02:00
|
|
|
|
{
|
|
|
|
|
|
Alias = "welcomeText2",
|
2018-10-09 23:02:22 +02:00
|
|
|
|
PropertyType = welcome2Type
|
2018-07-28 08:11:48 +02:00
|
|
|
|
};
|
2018-07-21 15:58:49 +02:00
|
|
|
|
prop2.SetSourceValue("en-US", "Welcome", true);
|
|
|
|
|
|
prop2.SetValue("en-US", "Welcome", true);
|
|
|
|
|
|
|
|
|
|
|
|
var prop3 = new SolidPublishedPropertyWithLanguageVariants
|
2018-07-28 08:11:48 +02:00
|
|
|
|
{
|
|
|
|
|
|
Alias = "welcomeText",
|
2018-10-09 23:02:22 +02:00
|
|
|
|
PropertyType = welcomeType
|
2018-07-28 08:11:48 +02:00
|
|
|
|
};
|
2018-07-21 15:58:49 +02:00
|
|
|
|
prop3.SetSourceValue("en-US", "Welcome", true);
|
|
|
|
|
|
prop3.SetValue("en-US", "Welcome", true);
|
|
|
|
|
|
|
2019-01-21 17:36:25 +01:00
|
|
|
|
var noprop = new SolidPublishedProperty
|
|
|
|
|
|
{
|
|
|
|
|
|
Alias = "noprop",
|
|
|
|
|
|
PropertyType = nopropType
|
|
|
|
|
|
};
|
|
|
|
|
|
noprop.SolidHasValue = false; // has no value
|
|
|
|
|
|
noprop.SolidValue = "xxx"; // but returns something
|
|
|
|
|
|
|
2018-07-21 15:58:49 +02:00
|
|
|
|
var item1 = new SolidPublishedContent(contentType1)
|
2018-07-11 22:15:58 +01:00
|
|
|
|
{
|
|
|
|
|
|
Id = 1,
|
|
|
|
|
|
SortOrder = 0,
|
|
|
|
|
|
Name = "Content 1",
|
|
|
|
|
|
UrlSegment = "content-1",
|
|
|
|
|
|
Path = "/1",
|
|
|
|
|
|
Level = 1,
|
|
|
|
|
|
Url = "/content-1",
|
|
|
|
|
|
ParentId = -1,
|
2018-07-21 15:58:49 +02:00
|
|
|
|
ChildIds = new[] { 2 },
|
|
|
|
|
|
Properties = new Collection<IPublishedProperty>
|
|
|
|
|
|
{
|
2019-01-21 17:36:25 +01:00
|
|
|
|
prop1, prop2, noprop
|
2018-07-21 15:58:49 +02:00
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
var item2 = new SolidPublishedContent(contentType1)
|
|
|
|
|
|
{
|
|
|
|
|
|
Id = 2,
|
|
|
|
|
|
SortOrder = 0,
|
|
|
|
|
|
Name = "Content 2",
|
|
|
|
|
|
UrlSegment = "content-2",
|
|
|
|
|
|
Path = "/1/2",
|
|
|
|
|
|
Level = 2,
|
|
|
|
|
|
Url = "/content-1/content-2",
|
|
|
|
|
|
ParentId = 1,
|
2019-01-21 17:36:25 +01:00
|
|
|
|
ChildIds = new int[] { 3 },
|
2018-07-11 22:15:58 +01:00
|
|
|
|
Properties = new Collection<IPublishedProperty>
|
|
|
|
|
|
{
|
2018-07-21 15:58:49 +02:00
|
|
|
|
prop3
|
2018-07-11 22:15:58 +01:00
|
|
|
|
}
|
2018-07-21 15:58:49 +02:00
|
|
|
|
};
|
|
|
|
|
|
|
2019-01-21 17:36:25 +01:00
|
|
|
|
var prop4 = new SolidPublishedPropertyWithLanguageVariants
|
|
|
|
|
|
{
|
|
|
|
|
|
Alias = "prop3",
|
|
|
|
|
|
PropertyType = prop3Type
|
|
|
|
|
|
};
|
|
|
|
|
|
prop4.SetSourceValue("en-US", "Oxxo", true);
|
|
|
|
|
|
prop4.SetValue("en-US", "Oxxo", true);
|
|
|
|
|
|
|
|
|
|
|
|
var item3 = new SolidPublishedContent(contentType2)
|
|
|
|
|
|
{
|
|
|
|
|
|
Id = 3,
|
|
|
|
|
|
SortOrder = 0,
|
|
|
|
|
|
Name = "Content 3",
|
|
|
|
|
|
UrlSegment = "content-3",
|
|
|
|
|
|
Path = "/1/2/3",
|
|
|
|
|
|
Level = 3,
|
|
|
|
|
|
Url = "/content-1/content-2/content-3",
|
|
|
|
|
|
ParentId = 2,
|
|
|
|
|
|
ChildIds = new int[] { },
|
|
|
|
|
|
Properties = new Collection<IPublishedProperty>
|
|
|
|
|
|
{
|
|
|
|
|
|
prop4
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
2018-07-21 15:58:49 +02:00
|
|
|
|
item1.Children = new List<IPublishedContent> { item2 };
|
|
|
|
|
|
item2.Parent = item1;
|
|
|
|
|
|
|
2019-01-21 17:36:25 +01:00
|
|
|
|
item2.Children = new List<IPublishedContent> { item3 };
|
|
|
|
|
|
item3.Parent = item2;
|
|
|
|
|
|
|
2018-07-21 15:58:49 +02:00
|
|
|
|
cache.Add(item1);
|
|
|
|
|
|
cache.Add(item2);
|
2019-01-21 17:36:25 +01:00
|
|
|
|
cache.Add(item3);
|
2018-07-11 22:15:58 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Can_Get_Content_For_Populated_Requested_Language()
|
|
|
|
|
|
{
|
2019-02-14 09:49:45 +01:00
|
|
|
|
var content = Current.UmbracoContext.ContentCache.GetAtRoot().First();
|
2018-07-11 22:15:58 +01:00
|
|
|
|
var value = content.Value("welcomeText", "en-US");
|
|
|
|
|
|
Assert.AreEqual("Welcome", value);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Can_Get_Content_For_Populated_Requested_Non_Default_Language()
|
|
|
|
|
|
{
|
2019-02-14 09:49:45 +01:00
|
|
|
|
var content = Current.UmbracoContext.ContentCache.GetAtRoot().First();
|
2018-07-11 22:15:58 +01:00
|
|
|
|
var value = content.Value("welcomeText", "de");
|
|
|
|
|
|
Assert.AreEqual("Willkommen", value);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Do_Not_Get_Content_For_Unpopulated_Requested_Language_Without_Fallback()
|
|
|
|
|
|
{
|
2019-02-14 09:49:45 +01:00
|
|
|
|
var content = Current.UmbracoContext.ContentCache.GetAtRoot().First();
|
2018-07-11 22:15:58 +01:00
|
|
|
|
var value = content.Value("welcomeText", "fr");
|
|
|
|
|
|
Assert.IsNull(value);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
2018-07-21 15:58:49 +02:00
|
|
|
|
public void Do_Not_Get_Content_For_Unpopulated_Requested_Language_With_Fallback_Unless_Requested()
|
2018-07-11 22:15:58 +01:00
|
|
|
|
{
|
2019-02-14 09:49:45 +01:00
|
|
|
|
var content = Current.UmbracoContext.ContentCache.GetAtRoot().First();
|
2018-07-11 22:15:58 +01:00
|
|
|
|
var value = content.Value("welcomeText", "es");
|
2018-07-21 15:58:49 +02:00
|
|
|
|
Assert.IsNull(value);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Can_Get_Content_For_Unpopulated_Requested_Language_With_Fallback()
|
|
|
|
|
|
{
|
2019-02-14 09:49:45 +01:00
|
|
|
|
var content = Current.UmbracoContext.ContentCache.GetAtRoot().First();
|
2018-10-03 10:31:35 +02:00
|
|
|
|
var value = content.Value("welcomeText", "es", fallback: Fallback.ToLanguage);
|
2018-07-11 22:15:58 +01:00
|
|
|
|
Assert.AreEqual("Welcome", value);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Can_Get_Content_For_Unpopulated_Requested_Language_With_Fallback_Over_Two_Levels()
|
|
|
|
|
|
{
|
2019-02-14 09:49:45 +01:00
|
|
|
|
var content = Current.UmbracoContext.ContentCache.GetAtRoot().First();
|
2018-10-03 10:31:35 +02:00
|
|
|
|
var value = content.Value("welcomeText", "it", fallback: Fallback.To(Fallback.Language, Fallback.Ancestors));
|
2018-07-11 22:15:58 +01:00
|
|
|
|
Assert.AreEqual("Welcome", value);
|
|
|
|
|
|
}
|
2018-07-21 09:41:07 +02:00
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Do_Not_GetContent_For_Unpopulated_Requested_Language_With_Fallback_Over_That_Loops()
|
|
|
|
|
|
{
|
2019-02-14 09:49:45 +01:00
|
|
|
|
var content = Current.UmbracoContext.ContentCache.GetAtRoot().First();
|
2018-10-03 10:31:35 +02:00
|
|
|
|
var value = content.Value("welcomeText", "no", fallback: Fallback.ToLanguage);
|
2018-07-21 15:58:49 +02:00
|
|
|
|
Assert.IsNull(value);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Do_Not_Get_Content_Recursively_Unless_Requested()
|
|
|
|
|
|
{
|
2019-02-14 09:49:45 +01:00
|
|
|
|
var content = Current.UmbracoContext.ContentCache.GetAtRoot().First().Children.First();
|
2018-07-21 15:58:49 +02:00
|
|
|
|
var value = content.Value("welcomeText2");
|
2018-07-21 09:41:07 +02:00
|
|
|
|
Assert.IsNull(value);
|
|
|
|
|
|
}
|
2018-07-21 15:58:49 +02:00
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Can_Get_Content_Recursively()
|
|
|
|
|
|
{
|
2019-02-14 09:49:45 +01:00
|
|
|
|
var content = Current.UmbracoContext.ContentCache.GetAtRoot().First().Children.First();
|
2018-10-03 10:31:35 +02:00
|
|
|
|
var value = content.Value("welcomeText2", fallback: Fallback.ToAncestors);
|
2018-07-11 22:15:58 +01:00
|
|
|
|
Assert.AreEqual("Welcome", value);
|
|
|
|
|
|
}
|
2018-07-28 08:11:48 +02:00
|
|
|
|
|
2019-01-21 17:36:25 +01:00
|
|
|
|
[Test]
|
|
|
|
|
|
public void Do_Not_Get_Content_Recursively_Unless_Requested2()
|
|
|
|
|
|
{
|
2019-02-14 09:49:45 +01:00
|
|
|
|
var content = Current.UmbracoContext.ContentCache.GetAtRoot().First().Children.First().Children().First();
|
2019-01-21 17:36:25 +01:00
|
|
|
|
Assert.IsNull(content.GetProperty("welcomeText2"));
|
|
|
|
|
|
var value = content.Value("welcomeText2");
|
|
|
|
|
|
Assert.IsNull(value);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Can_Get_Content_Recursively2()
|
|
|
|
|
|
{
|
2019-02-14 09:49:45 +01:00
|
|
|
|
var content = Current.UmbracoContext.ContentCache.GetAtRoot().First().Children.First().Children().First();
|
2019-01-21 17:36:25 +01:00
|
|
|
|
Assert.IsNull(content.GetProperty("welcomeText2"));
|
|
|
|
|
|
var value = content.Value("welcomeText2", fallback: Fallback.ToAncestors);
|
|
|
|
|
|
Assert.AreEqual("Welcome", value);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Can_Get_Content_Recursively3()
|
|
|
|
|
|
{
|
2019-02-14 09:49:45 +01:00
|
|
|
|
var content = Current.UmbracoContext.ContentCache.GetAtRoot().First().Children.First().Children().First();
|
2019-01-21 17:36:25 +01:00
|
|
|
|
Assert.IsNull(content.GetProperty("noprop"));
|
|
|
|
|
|
var value = content.Value("noprop", fallback: Fallback.ToAncestors);
|
|
|
|
|
|
// property has no value but we still get the value (ie, the converter would do something)
|
|
|
|
|
|
Assert.AreEqual("xxx", value);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2018-07-28 08:11:48 +02:00
|
|
|
|
[Test]
|
|
|
|
|
|
public void Can_Get_Content_With_Recursive_Priority()
|
|
|
|
|
|
{
|
2019-01-11 14:21:03 +01:00
|
|
|
|
Current.VariationContextAccessor.VariationContext = new VariationContext("nl");
|
2019-02-14 09:49:45 +01:00
|
|
|
|
var content = Current.UmbracoContext.ContentCache.GetAtRoot().First().Children.First();
|
2019-01-11 14:21:03 +01:00
|
|
|
|
|
2018-10-03 10:31:35 +02:00
|
|
|
|
var value = content.Value("welcomeText", "nl", fallback: Fallback.To(Fallback.Ancestors, Fallback.Language));
|
2018-07-28 08:11:48 +02:00
|
|
|
|
|
|
|
|
|
|
// No Dutch value is directly assigned. Check has fallen back to Dutch value from parent.
|
|
|
|
|
|
Assert.AreEqual("Welkom", value);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Can_Get_Content_With_Fallback_Language_Priority()
|
|
|
|
|
|
{
|
2019-02-14 09:49:45 +01:00
|
|
|
|
var content = Current.UmbracoContext.ContentCache.GetAtRoot().First().Children.First();
|
2018-10-03 10:31:35 +02:00
|
|
|
|
var value = content.Value("welcomeText", "nl", fallback: Fallback.ToLanguage);
|
2018-07-28 08:11:48 +02:00
|
|
|
|
|
|
|
|
|
|
// No Dutch value is directly assigned. Check has fallen back to English value from language variant.
|
|
|
|
|
|
Assert.AreEqual("Welcome", value);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Throws_For_Non_Supported_Fallback()
|
|
|
|
|
|
{
|
2019-02-14 09:49:45 +01:00
|
|
|
|
var content = Current.UmbracoContext.ContentCache.GetAtRoot().First().Children.First();
|
2018-10-03 10:31:35 +02:00
|
|
|
|
Assert.Throws<NotSupportedException>(() => content.Value("welcomeText", "nl", fallback: Fallback.To(999)));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Can_Fallback_To_Default_Value()
|
|
|
|
|
|
{
|
2019-02-14 09:49:45 +01:00
|
|
|
|
var content = Current.UmbracoContext.ContentCache.GetAtRoot().First().Children.First();
|
2018-10-03 10:31:35 +02:00
|
|
|
|
|
|
|
|
|
|
// no Dutch value is assigned, so getting null
|
|
|
|
|
|
var value = content.Value("welcomeText", "nl");
|
|
|
|
|
|
Assert.IsNull(value);
|
|
|
|
|
|
|
|
|
|
|
|
// even if we 'just' provide a default value
|
|
|
|
|
|
value = content.Value("welcomeText", "nl", defaultValue: "woop");
|
|
|
|
|
|
Assert.IsNull(value);
|
|
|
|
|
|
|
|
|
|
|
|
// but it works with proper fallback settings
|
|
|
|
|
|
value = content.Value("welcomeText", "nl", fallback: Fallback.ToDefaultValue, defaultValue: "woop");
|
|
|
|
|
|
Assert.AreEqual("woop", value);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
|
|
public void Can_Have_Custom_Default_Value()
|
|
|
|
|
|
{
|
2019-02-14 09:49:45 +01:00
|
|
|
|
var content = Current.UmbracoContext.ContentCache.GetAtRoot().First().Children.First();
|
2018-10-03 10:31:35 +02:00
|
|
|
|
|
2019-01-27 01:17:32 -05:00
|
|
|
|
// HACK: the value, pretend the converter would return something
|
2018-10-03 10:31:35 +02:00
|
|
|
|
var prop = content.GetProperty("welcomeText") as SolidPublishedPropertyWithLanguageVariants;
|
|
|
|
|
|
Assert.IsNotNull(prop);
|
|
|
|
|
|
prop.SetValue("nl", "nope"); // HasValue false but getting value returns this
|
|
|
|
|
|
|
|
|
|
|
|
// there is an EN value
|
|
|
|
|
|
var value = content.Value("welcomeText", "en-US");
|
|
|
|
|
|
Assert.AreEqual("Welcome", value);
|
|
|
|
|
|
|
|
|
|
|
|
// there is no NL value and we get the 'converted' value
|
|
|
|
|
|
value = content.Value("welcomeText", "nl");
|
|
|
|
|
|
Assert.AreEqual("nope", value);
|
|
|
|
|
|
|
|
|
|
|
|
// but it works with proper fallback settings
|
|
|
|
|
|
value = content.Value("welcomeText", "nl", fallback: Fallback.ToDefaultValue, defaultValue: "woop");
|
|
|
|
|
|
Assert.AreEqual("woop", value);
|
2018-07-28 08:11:48 +02:00
|
|
|
|
}
|
2018-07-11 22:15:58 +01:00
|
|
|
|
}
|
|
|
|
|
|
}
|