-
Notifications
You must be signed in to change notification settings - Fork 2.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fixes comparing content fields in Liquid (#16053)
--------- Co-authored-by: Hisham Bin Ateya <[email protected]> Co-authored-by: Mike Alhayek <[email protected]>
- Loading branch information
1 parent
59f2e1d
commit f216c62
Showing
2 changed files
with
123 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
122 changes: 122 additions & 0 deletions
122
test/OrchardCore.Tests/DisplayManagement/LiquidTests.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,122 @@ | ||
using System.Text.Json; | ||
using Fluid; | ||
using OrchardCore.ContentFields.Fields; | ||
using OrchardCore.ContentManagement; | ||
using OrchardCore.Liquid; | ||
using OrchardCore.Tests.Apis.Context; | ||
|
||
namespace OrchardCore.Tests.DisplayManagement; | ||
|
||
public class LiquidTests | ||
{ | ||
[Fact] | ||
public async Task ComparingTextField_ReturnsCorrectValue() | ||
{ | ||
var context = new SiteContext(); | ||
await context.InitializeAsync(); | ||
await context.UsingTenantScopeAsync(async scope => | ||
{ | ||
var template = """ | ||
{% if Model.ContentItem.Content.MyPart.myField.Text == "Some test value" %}true{% else %}false{% endif %} | ||
"""; | ||
|
||
var contentItem = new ContentItem(); | ||
contentItem.GetOrCreate<MyPart>(); | ||
contentItem.Alter<MyPart>(x => x.Text = "Some text"); | ||
contentItem.Alter<MyPart>(x => | ||
{ | ||
x.GetOrCreate<TextField>("myField"); | ||
x.Alter<TextField>("myField", f => f.Text = "Some test value"); | ||
}); | ||
|
||
var json = JConvert.SerializeObject(contentItem); | ||
|
||
var testModel = JConvert.DeserializeObject<ContentItem>(json); | ||
|
||
var liquidTemplateManager = scope.ServiceProvider.GetRequiredService<ILiquidTemplateManager>(); | ||
var result = await liquidTemplateManager.RenderStringAsync(template, | ||
NullEncoder.Default, | ||
testModel); | ||
|
||
Assert.Equal("true", result); | ||
}); | ||
} | ||
|
||
[Fact] | ||
public async Task ComparingDateTimeField_ReturnsCorrectValue() | ||
{ | ||
var context = new SiteContext(); | ||
await context.InitializeAsync(); | ||
await context.UsingTenantScopeAsync(async scope => | ||
{ | ||
var template = """ | ||
{% assign myDate = "2024-05-14 08:00:00Z" | date %} | ||
{% assign myDateField = Model.ContentItem.Content.MyPart.myField.Value | date %} | ||
{% if myDateField == myDate %}true{% else %}false{% endif %} | ||
"""; | ||
|
||
var contentItem = new ContentItem(); | ||
contentItem.GetOrCreate<MyPart>(); | ||
contentItem.Alter<MyPart>(x => x.Text = "Some text"); | ||
contentItem.Alter<MyPart>(x => | ||
{ | ||
x.GetOrCreate<DateTimeField>("myField"); | ||
x.Alter<DateTimeField>("myField", f => f.Value = new DateTime(2024, 5, 14, 8, 0, 0, DateTimeKind.Utc)); | ||
}); | ||
|
||
var json = JConvert.SerializeObject(contentItem); | ||
|
||
var testModel = JConvert.DeserializeObject<ContentItem>(json); | ||
|
||
var liquidTemplateManager = scope.ServiceProvider.GetRequiredService<ILiquidTemplateManager>(); | ||
var result = await liquidTemplateManager.RenderStringAsync(template, | ||
NullEncoder.Default, | ||
testModel); | ||
|
||
Assert.Contains("true", result); | ||
}); | ||
} | ||
|
||
[Fact] | ||
public async Task ComparingNumericField_ReturnsCorrectValue() | ||
{ | ||
var context = new SiteContext(); | ||
await context.InitializeAsync(); | ||
await context.UsingTenantScopeAsync(async scope => | ||
{ | ||
var template = """ | ||
{% if Model.ContentItem.Content.MyPart.myField.Value == 123 %}true{% else %}false{% endif %} | ||
"""; | ||
|
||
var contentItem = new ContentItem(); | ||
contentItem.GetOrCreate<MyPart>(); | ||
contentItem.Alter<MyPart>(x => x.Text = "Some text"); | ||
contentItem.Alter<MyPart>(x => | ||
{ | ||
x.GetOrCreate<MyField>("myField"); | ||
x.Alter<MyField>("myField", f => f.Value = 123); | ||
}); | ||
|
||
var json = JConvert.SerializeObject(contentItem); | ||
|
||
var testModel = JConvert.DeserializeObject<ContentItem>(json); | ||
|
||
var liquidTemplateManager = scope.ServiceProvider.GetRequiredService<ILiquidTemplateManager>(); | ||
var result = await liquidTemplateManager.RenderStringAsync(template, | ||
NullEncoder.Default, | ||
testModel); | ||
|
||
Assert.Equal("true", result); | ||
}); | ||
} | ||
|
||
public class MyPart : ContentPart | ||
{ | ||
public string Text { get; set; } | ||
} | ||
|
||
public class MyField : ContentField | ||
{ | ||
public int Value { get; set; } | ||
} | ||
} |