Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions src/Papst.EventStore/Aggregation/EventAggregatorBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,20 @@ protected void Update<TProperty>(TProperty? value, Action<TProperty> setter) whe
}
}

/// <summary>
/// Executes the <paramref name="setter"/> action when <paramref name="value"/>.HasValue is true
/// </summary>
/// <typeparam name="TProperty"></typeparam>
/// <param name="value"></param>
/// <param name="setter"></param>
protected void Update<TProperty>(TProperty? value, Action<TProperty?> setter) where TProperty : struct
{
if (value.HasValue)
{
setter.Invoke(value);
}
}

/// <summary>
/// Executes the <paramref name="setter"/> action when <paramref name="value"/> is not null
/// </summary>
Expand Down Expand Up @@ -71,6 +85,21 @@ protected void SetIfNotNull<TProperty>(Action<TProperty> setter, TProperty? valu
}
}

/// <summary>
/// This overload is for nullable value types.
/// Executes the <paramref name="setter"/> action when <paramref name="value"/>.HasValue is true.
/// </summary>
/// <param name="setter"></param>
/// <param name="value"></param>
/// <typeparam name="TProperty"></typeparam>
protected void SetIfNotNull<TProperty>(Action<TProperty?> setter, TProperty? value) where TProperty : struct
{
if (value.HasValue)
{
setter(value);
}
}

/// <summary>
/// Returns the given Entity wrapped in a Task
/// </summary>
Expand Down
166 changes: 153 additions & 13 deletions tests/Papst.EventStore.Tests/EventAggregatorBaseTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public void SetIfNotNull_ShouldInvokeSetter_WhenNullableStructHasValue()
int result = 0;
int? value = 42;

_sut.CallSetIfNotNull<int>(v => result = v, value);
_sut.CallSetIfNotNull(v => result = v, value);

result.Should().Be(42);
}
Expand All @@ -28,7 +28,7 @@ public void SetIfNotNull_ShouldNotInvokeSetter_WhenNullableStructIsNull()
int result = 0;
int? value = null;

_sut.CallSetIfNotNull<int>(v => result = v, value);
_sut.CallSetIfNotNull(v => result = v, value);

result.Should().Be(0);
}
Expand All @@ -39,7 +39,7 @@ public void SetIfNotNull_ShouldInvokeSetter_WhenNullableDateTimeHasValue()
DateTime result = default;
DateTime? value = new DateTime(2025, 1, 1, 0, 0, 0, DateTimeKind.Utc);

_sut.CallSetIfNotNull<DateTime>(v => result = v, value);
_sut.CallSetIfNotNull(v => result = v, value);

result.Should().Be(new DateTime(2025, 1, 1, 0, 0, 0, DateTimeKind.Utc));
}
Expand All @@ -50,7 +50,7 @@ public void SetIfNotNull_ShouldNotInvokeSetter_WhenNullableDateTimeIsNull()
DateTime result = default;
DateTime? value = null;

_sut.CallSetIfNotNull<DateTime>(v => result = v, value);
_sut.CallSetIfNotNull(v => result = v, value);

result.Should().Be(default(DateTime));
}
Expand All @@ -62,7 +62,7 @@ public void SetIfNotNull_ShouldInvokeSetter_WhenNullableGuidHasValue()
Guid expected = Guid.NewGuid();
Guid? value = expected;

_sut.CallSetIfNotNull<Guid>(v => result = v, value);
_sut.CallSetIfNotNull(v => result = v, value);

result.Should().Be(expected);
}
Expand All @@ -73,7 +73,74 @@ public void SetIfNotNull_ShouldNotInvokeSetter_WhenNullableGuidIsNull()
Guid result = Guid.Empty;
Guid? value = null;

_sut.CallSetIfNotNull<Guid>(v => result = v, value);
_sut.CallSetIfNotNull(v => result = v, value);

result.Should().Be(Guid.Empty);
}

[Fact]
public void SetIfNotNull_ShouldInvokeSetterForNullable_WhenNullableStructHasValue()
{
int? result = 0;
int? value = 42;

_sut.CallSetIfNotNull((Action<int?>)(v => result = v), value);

result.Should().Be(42);
}

[Fact]
public void SetIfNotNull_ShouldNotInvokeSetterForNullable_WhenNullableStructIsNull()
{
int? result = 0;
int? value = null;

_sut.CallSetIfNotNull((Action<int?>)(v => result = v), value);

result.Should().Be(0);
}

[Fact]
public void SetIfNotNull_ShouldInvokeSetterForNullable_WhenNullableDateTimeHasValue()
{
DateTime? result = null;
DateTime? value = new DateTime(2025, 1, 1, 0, 0, 0, DateTimeKind.Utc);

_sut.CallSetIfNotNull((Action<DateTime?>)(v => result = v), value);

result.Should().Be(new DateTime(2025, 1, 1, 0, 0, 0, DateTimeKind.Utc));
}

[Fact]
public void SetIfNotNull_ShouldNotInvokeSetterForNullable_WhenNullableDateTimeIsNull()
{
DateTime? result = default(DateTime);
DateTime? value = null;

_sut.CallSetIfNotNull((Action<DateTime?>)(v => result = v), value);

result.Should().Be(default(DateTime));
}

[Fact]
public void SetIfNotNull_ShouldInvokeSetterForNullable_WhenNullableGuidHasValue()
{
Guid? result = Guid.Empty;
Guid expected = new Guid();
Guid? value = expected;

_sut.CallSetIfNotNull((Action<Guid?>)(v => result = v), value);

result.Should().Be(expected);
}

[Fact]
public void SetIfNotNull_ShouldNotInvokeSetterForNullable_WhenNullableGuidIsNull()
{
Guid? result = Guid.Empty;
Guid? value = null;

_sut.CallSetIfNotNull((Action<Guid?>)(v => result = v), value);

result.Should().Be(Guid.Empty);
}
Expand All @@ -84,7 +151,7 @@ public void Update_ShouldInvokeSetter_WhenNullableStructHasValue()
int result = 0;
int? value = 42;

_sut.CallUpdate<int>(value, v => result = v);
_sut.CallUpdate(value, v => result = v);

result.Should().Be(42);
}
Expand All @@ -95,7 +162,7 @@ public void Update_ShouldNotInvokeSetter_WhenNullableStructIsNull()
int result = 0;
int? value = null;

_sut.CallUpdate<int>(value, v => result = v);
_sut.CallUpdate(value, v => result = v);

result.Should().Be(0);
}
Expand All @@ -106,7 +173,7 @@ public void Update_ShouldInvokeSetter_WhenNullableDateTimeHasValue()
DateTime result = default;
DateTime? value = new DateTime(2025, 1, 1, 0, 0, 0, DateTimeKind.Utc);

_sut.CallUpdate<DateTime>(value, v => result = v);
_sut.CallUpdate(value, v => result = v);

result.Should().Be(new DateTime(2025, 1, 1, 0, 0, 0, DateTimeKind.Utc));
}
Expand All @@ -117,7 +184,7 @@ public void Update_ShouldNotInvokeSetter_WhenNullableDateTimeIsNull()
DateTime result = default;
DateTime? value = null;

_sut.CallUpdate<DateTime>(value, v => result = v);
_sut.CallUpdate(value, v => result = v);

result.Should().Be(default(DateTime));
}
Expand All @@ -129,7 +196,7 @@ public void Update_ShouldInvokeSetter_WhenNullableGuidHasValue()
Guid expected = Guid.NewGuid();
Guid? value = expected;

_sut.CallUpdate<Guid>(value, v => result = v);
_sut.CallUpdate(value, v => result = v);

result.Should().Be(expected);
}
Expand All @@ -140,7 +207,74 @@ public void Update_ShouldNotInvokeSetter_WhenNullableGuidIsNull()
Guid result = Guid.Empty;
Guid? value = null;

_sut.CallUpdate<Guid>(value, v => result = v);
_sut.CallUpdate(value, v => result = v);

result.Should().Be(Guid.Empty);
}

[Fact]
public void Update_ShouldInvokeSetterForNullable_WhenNullableStructHasValue()
{
int? result = 0;
int? value = 42;

_sut.CallUpdate(value,(Action<int?>)(v => result = v));

result.Should().Be(42);
}

[Fact]
public void Update_ShouldNotInvokeSetterForNullable_WhenNullableStructIsNull()
{
int? result = 0;
int? value = null;

_sut.CallUpdate(value, (Action<int?>)(v => result = v));

result.Should().Be(0);
}

[Fact]
public void Update_ShouldInvokeSetterForNullable_WhenNullableDateTimeHasValue()
{
DateTime? result = null;
DateTime? value = new DateTime(2025, 1, 1, 0, 0, 0, DateTimeKind.Utc);

_sut.CallUpdate(value, (Action<DateTime?>)(v => result = v));

result.Should().Be(new DateTime(2025, 1, 1, 0, 0, 0, DateTimeKind.Utc));
}

[Fact]
public void Update_ShouldNotInvokeSetterForNullable_WhenNullableDateTimeIsNull()
{
DateTime? result = default(DateTime);
DateTime? value = null;

_sut.CallUpdate(value, (Action<DateTime?>)(v => result = v));

result.Should().Be(default(DateTime));
}

[Fact]
public void Update_ShouldInvokeSetterForNullable_WhenNullableGuidHasValue()
{
Guid? result = Guid.Empty;
Guid expected = Guid.NewGuid();
Guid? value = expected;

_sut.CallUpdate(value, (Action<Guid?>)(v => result = v));

result.Should().Be(expected);
}

[Fact]
public void Update_ShouldNotInvokeSetterForNullable_WhenNullableGuidIsNull()
{
Guid? result = Guid.Empty;
Guid? value = null;

_sut.CallUpdate(value, (Action<Guid?>)(v => result = v));

result.Should().Be(Guid.Empty);
}
Expand All @@ -159,8 +293,14 @@ private class TestAggregator : EventAggregatorBase<TestEntity, TestEvent>

public void CallSetIfNotNull<T>(Action<T> setter, T? value) where T : struct
=> SetIfNotNull(setter, value);


public void CallSetIfNotNull<T>(Action<T?> setter, T? value) where T : struct
=> SetIfNotNull(setter, value);

public void CallUpdate<T>(T? value, Action<T> setter) where T : struct
=> Update(value, setter);

public void CallUpdate<T>(T? value, Action<T?> setter) where T : struct
=> Update(value, setter);
}
}
Loading