mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
Add parameterized tokens tests
This commit is contained in:
@@ -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()
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -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("[]"));
|
||||
|
Reference in New Issue
Block a user