Skip to content

Commit 715dbeb

Browse files
committed
Add support for versioned events with SomethingHappenedEvent2 and corresponding aggregate update logic
1 parent 3efc90d commit 715dbeb

3 files changed

Lines changed: 41 additions & 1 deletion

File tree

tests/Memoria.EventSourcing.Store.Tests/Features/UpdateAggregateTests.cs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,5 +68,33 @@ public async Task GivenEventsHandledByTheAggregateAreStoredSeparately_WhenAggreg
6868
updatedAggregateResult.Value.Description.Should().Be("Updated Description");
6969
}
7070
}
71+
72+
[Fact]
73+
public async Task GivenEventWithNewVersion_WhenAggregateIsUpdated_ThenNewEventVersionIsApplied()
74+
{
75+
var id = Guid.NewGuid().ToString();
76+
var streamId = new TestStreamId(id);
77+
var aggregateId = new TestAggregate1Id(id);
78+
var aggregate = new TestAggregate1(id, "Test Name", "Test Description");
79+
80+
await DomainService.SaveAggregate(streamId, aggregateId, aggregate, expectedEventSequence: 0);
81+
await DomainService.SaveEvents(streamId, [new SomethingHappenedEvent2("Something 2")], expectedEventSequence: 1);
82+
var updatedAggregateResult = await DomainService.UpdateAggregate(streamId, aggregateId);
83+
84+
using (new AssertionScope())
85+
{
86+
updatedAggregateResult.IsSuccess.Should().BeTrue();
87+
88+
updatedAggregateResult.Value.Should().NotBeNull();
89+
90+
updatedAggregateResult.Value.StreamId.Should().Be(streamId.Id);
91+
updatedAggregateResult.Value.AggregateId.Should().Be(aggregateId.ToStoreId());
92+
updatedAggregateResult.Value.Version.Should().Be(2);
93+
94+
updatedAggregateResult.Value.Id.Should().Be(id);
95+
updatedAggregateResult.Value.Name.Should().Be("Something 2");
96+
updatedAggregateResult.Value.Description.Should().Be("Test Description");
97+
}
98+
}
7199
}
72100

tests/Memoria.EventSourcing.Store.Tests/Models/Aggregates/TestAggregate1.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ public class TestAggregate1 : AggregateRoot
1010
[
1111
typeof(TestAggregateCreatedEvent),
1212
typeof(TestAggregateUpdatedEvent),
13-
typeof(SomethingHappenedEvent)
13+
typeof(SomethingHappenedEvent),
14+
typeof(SomethingHappenedEvent2)
1415
];
1516

1617
public string Id { get; set; } = null!;
@@ -37,6 +38,7 @@ protected override bool Apply<T>(T @event)
3738
{
3839
TestAggregateCreatedEvent testAggregateCreated => Apply(testAggregateCreated),
3940
TestAggregateUpdatedEvent testAggregateUpdated => Apply(testAggregateUpdated),
41+
SomethingHappenedEvent2 somethingHappened2 => Apply(somethingHappened2),
4042
_ => false
4143
};
4244
}
@@ -57,4 +59,11 @@ private bool Apply(TestAggregateUpdatedEvent @event)
5759

5860
return true;
5961
}
62+
63+
private bool Apply(SomethingHappenedEvent2 @event)
64+
{
65+
Name = @event.Something2;
66+
67+
return true;
68+
}
6069
}

tests/Memoria.EventSourcing.Store.Tests/Models/Events/SomethingHappenedEvent.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,6 @@ namespace Memoria.EventSourcing.Store.Tests.Models.Events;
44

55
[EventType("SomethingHappened")]
66
public record SomethingHappenedEvent(string Something) : IEvent;
7+
8+
[EventType("SomethingHappened", version: 2)]
9+
public record SomethingHappenedEvent2(string Something2) : IEvent;

0 commit comments

Comments
 (0)