Skip to content

Commit

Permalink
Fixes comparing content fields in Liquid (#16053)
Browse files Browse the repository at this point in the history
---------

Co-authored-by: Hisham Bin Ateya <hishamco_2007@yahoo.com>
Co-authored-by: Mike Alhayek <mike@crestapps.com>
  • Loading branch information
3 people committed May 14, 2024
1 parent 59f2e1d commit f216c62
Show file tree
Hide file tree
Showing 2 changed files with 123 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/OrchardCore.Modules/OrchardCore.Liquid/Startup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ public override void ConfigureServices(IServiceCollection services)
{
JsonObject o => new ObjectValue(o),
JsonDynamicObject o => new ObjectValue((JsonObject)o),
JsonValue o => o.GetObjectValue(),
DateTime d => new ObjectValue(d),
_ => null
};
Expand Down
122 changes: 122 additions & 0 deletions test/OrchardCore.Tests/DisplayManagement/LiquidTests.cs
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; }
}
}

0 comments on commit f216c62

Please sign in to comment.