From c206cd6ef7de13421786da563857427c347d9fe0 Mon Sep 17 00:00:00 2001 From: "Dylan R. E. Moonfire" Date: Sat, 9 Jul 2022 20:48:12 -0500 Subject: [PATCH] fix: FilterOutFutureInstant should not filter out all non-Instant components --- .../FilterOutFutureInstant.cs | 10 ++++--- .../FilterOutFutureInstantTests.cs | 29 +++++++++++++++++++ 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/src/Nitride.Temporal/FilterOutFutureInstant.cs b/src/Nitride.Temporal/FilterOutFutureInstant.cs index a84688d..b1ce6b1 100644 --- a/src/Nitride.Temporal/FilterOutFutureInstant.cs +++ b/src/Nitride.Temporal/FilterOutFutureInstant.cs @@ -25,9 +25,11 @@ public partial class FilterOutFutureInstant : OperationBase { Instant now = this.Timekeeper.Clock.GetCurrentInstant(); - return input.WhereEntity( - ( - _, - instant) => instant.CompareTo(now) <= 0); + return input + .SelectEntity( + ( + entity, + instant) => + instant.CompareTo(now) <= 0 ? entity : null); } } diff --git a/tests/Nitride.Temporal.Tests/FilterOutFutureInstantTests.cs b/tests/Nitride.Temporal.Tests/FilterOutFutureInstantTests.cs index d446cd3..48c0f27 100644 --- a/tests/Nitride.Temporal.Tests/FilterOutFutureInstantTests.cs +++ b/tests/Nitride.Temporal.Tests/FilterOutFutureInstantTests.cs @@ -46,4 +46,33 @@ public class FilterOutFutureInstantTests : TemporalTestBase Entity entity = Assert.Single(output); Assert.Equal("past", entity.Get()); } + + [Fact] + public void KeepsNonInstant() + { + // Create the context and set the timestamp to a constant value. + using TemporalTestContext context = this.CreateContext(); + Timekeeper timekeeper = context.Resolve(); + var now = Instant.FromUtc(2000, 6, 1, 0, 0); + + timekeeper.Clock = new FakeClock(now); + + // Create the entities. + List input = new() + { + new Entity() + .Add("neither"), + new Entity() + .Add("future") + .Add(Instant.FromUtc(2020, 6, 1, 0, 0)), + }; + + // Create the operation and run it. + FilterOutFutureInstant op = context.Resolve(); + IEnumerable output = input.Run(op); + + // Verify the values. + Entity entity = Assert.Single(output); + Assert.Equal("neither", entity.Get()); + } }