Add parameterized tokens tests

This commit is contained in:
Thierry Fleury
2015-09-07 15:14:20 +02:00
parent 67e7d1074e
commit 371238a882
2 changed files with 40 additions and 0 deletions

View File

@@ -1,4 +1,5 @@
using System;
using System.Linq;
using Orchard.ContentManagement;
using Orchard.Localization;
using Orchard.Security;
@@ -24,6 +25,9 @@ namespace Orchard.Tokens.Tests {
context.For("Date")
.Token("Now", T("Now"), T("Current system date in short date format. You can chain a .NET DateTime format string to customize."));
context.For("Users")
.Token("Users[*:]", T("Users"), T("A user by its username"), "User");
}
public void Evaluate(EvaluateContext context) {
@@ -36,6 +40,7 @@ namespace Orchard.Tokens.Tests {
context.For<IUser>("User", () => new TestUser { UserName = "CurrentUser" })
.Token("Name", u => u.UserName)
.Token("Email", u => u.Email)
.Token("Birthdate", u => "Nov 15")
.Chain("Birthdate", "DateTime", u => new DateTime(1978, 11, 15));
@@ -45,6 +50,29 @@ namespace Orchard.Tokens.Tests {
context.For<DateTime>("DateTime")
.Token((token, value) => value.ToString(token));
context.For<TestUser[]>("Users", () => new TestUser[] {
new TestUser { UserName = "User1", Email = "user1@test.com" },
new TestUser { UserName = "User2", Email = "user2@test.com" },
new TestUser { UserName = "User3", Email = "user3@test.com" }
})
.Token(
(token) => token.StartsWith("User:", StringComparison.OrdinalIgnoreCase) ? token.Substring("User:".Length) : null,
(userName, users) => users.Where(u => u.UserName == userName).Select(u => u.UserName).FirstOrDefault()
)
.Chain(
(token) => {
int tokenLength = "User:".Length;
int chainIndex = token.IndexOf('.');
if (token.StartsWith("User:", StringComparison.OrdinalIgnoreCase) && chainIndex > tokenLength)
return new Tuple<string, string>(token.Substring(tokenLength, chainIndex - tokenLength), token.Substring(chainIndex + 1));
else
return null;
},
"User",
(userName, users) => users.Where(u => u.UserName == userName).FirstOrDefault()
);
}
}

View File

@@ -40,6 +40,18 @@ namespace Orchard.Tokens.Tests {
Assert.That(_tokenizer.Replace("{Site.CurrentUser.Birthdate.yyyy}", null), Is.EqualTo("1978"));
}
[Test]
public void TestParameterizedTokens() {
Assert.That(_tokenizer.Replace("{Users.User:User2}", null), Is.EqualTo("User2"));
Assert.That(_tokenizer.Replace("{Users.User:FakeUser}", null), Is.EqualTo(""));
}
[Test]
public void TestParameterizedChainedTokens() {
Assert.That(_tokenizer.Replace("{Users.User:User2.Email}", null), Is.EqualTo("user2@test.com"));
Assert.That(_tokenizer.Replace("{Users.User:FakeUser.Email}", null), Is.EqualTo(""));
}
[Test]
public void TestMissingTokens() {
Assert.That(_tokenizer.Replace("[{Site.NotAToken}]", null), Is.EqualTo("[]"));