Skip to content
Merged
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: 14 additions & 15 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@
</PropertyGroup>
<PropertyGroup>
<NpgsqlVersion>9.0.3</NpgsqlVersion>
<TUnitVersion>0.5.18</TUnitVersion>
<TUnitVersion>0.25.21</TUnitVersion>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="BenchmarkDotNet" Version="0.14.0" />
<PackageVersion Include="FluentValidation" Version="11.11.0" />
<PackageVersion Include="FluentValidation" Version="12.0.0" />
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="9.0.0" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="9.0.0" />
<PackageVersion Include="Microsoft.Extensions.Diagnostics.HealthChecks" Version="9.0.6" />
Expand All @@ -30,10 +30,10 @@
<PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="9.0.6" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
<PackageVersion Include="Shouldly" Version="4.2.1" />
<PackageVersion Include="System.Diagnostics.DiagnosticSource" Version="9.0.0" />
<PackageVersion Include="System.Diagnostics.DiagnosticSource" Version="9.0.6" />
<PackageVersion Include="System.Reactive" Version="6.0.1" />
<PackageVersion Include="System.Linq.Async" Version="6.0.1" />
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.10.0" />
<PackageVersion Include="System.Linq.Async" Version="6.0.3" />
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.12.0" />
<PackageVersion Include="EventStore.Client.Grpc.PersistentSubscriptions" Version="23.3.9" />
<PackageVersion Include="EventStore.Client.Grpc.Streams" Version="23.3.9" />
<PackageVersion Include="MongoDB.Driver" Version="3.4.0" />
Expand All @@ -42,7 +42,7 @@
<PackageVersion Include="Npgsql" Version="$(NpgsqlVersion)" />
<PackageVersion Include="Npgsql.DependencyInjection" Version="$(NpgsqlVersion)" />
<PackageVersion Include="RabbitMQ.Client" Version="6.8.1" />
<PackageVersion Include="Microsoft.Data.SqlClient" Version="5.2.2" />
<PackageVersion Include="Microsoft.Data.SqlClient" Version="6.0.2" />
<PackageVersion Include="NEST" Version="7.17.5" />
<PackageVersion Include="Polly" Version="8.5.0" />
<PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
Expand All @@ -66,38 +66,37 @@
<ItemGroup Label="References for test projects">
<PackageVersion Include="Bogus" Version="35.6.1" />
<PackageVersion Include="Fare" Version="2.2.1" />
<PackageVersion Include="FluentAssertions" Version="7.0.0" />
<PackageVersion Include="coverlet.collector" Version="6.0.4" PrivateAssets="All" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="$(MicrosoftTestHostVer)" />
<PackageVersion Include="Microsoft.AspNetCore.TestHost" Version="$(MicrosoftTestHostVer)" />
<PackageVersion Include="RestSharp" Version="112.1.0" />
<PackageVersion Include="Hypothesist" Version="3.0.97" />
<PackageVersion Include="NodaTime" Version="3.2.0" />
<PackageVersion Include="NodaTime" Version="3.2.2" />
<PackageVersion Include="NodaTime.Serialization.SystemTextJson" Version="1.2.0" />
<PackageVersion Include="MongoDb.Bson.NodaTime" Version="3.1.0" />
<PackageVersion Include="Verify.DiffPlex" Version="3.1.2" />
<PackageVersion Include="TUnit" Version="$(TUnitVersion)" />
<PackageVersion Include="TUnit.Core" Version="$(TUnitVersion)" />
<PackageVersion Include="TUnit.Assertions" Version="$(TUnitVersion)" />
<PackageVersion Include="Microsoft.Testing.Extensions.TrxReport" Version="1.4.1" />
<PackageVersion Include="Verify.TUnit" Version="28.1.3" />
<PackageVersion Include="Microsoft.Testing.Extensions.TrxReport" Version="1.7.3" />
<PackageVersion Include="Verify.TUnit" Version="30.4.0" />
<PackageVersion Include="NodaTime.Bogus" Version="3.0.2" />
<PackageVersion Include="System.Text.Json" Version="9.0.0" />
<PackageVersion Include="System.Text.Json" Version="9.0.6" />
</ItemGroup>
<ItemGroup Label="Packages for samples">
<PackageVersion Include="MongoDB.Driver.Core.Extensions.DiagnosticSources" Version="2.1.0" />
<PackageVersion Include="MongoDB.Driver.Core" Version="2.30.0" />
<PackageVersion Include="Npgsql.OpenTelemetry" Version="$(NpgsqlVersion)" />
<PackageVersion Include="OpenTelemetry" Version="1.9.0" />
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.10.0" />
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.12.0" />
<PackageVersion Include="OpenTelemetry.Exporter.Prometheus.AspNetCore" Version="1.10.0-beta.1" />
<PackageVersion Include="OpenTelemetry.Exporter.Zipkin" Version="1.10.0" />
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.10.1" />
<PackageVersion Include="OpenTelemetry.Exporter.Zipkin" Version="1.12.0" />
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.12.0" />
<PackageVersion Include="OpenTelemetry.Instrumentation.GrpcNetClient" Version="1.9.0-beta.1" />
<PackageVersion Include="Serilog.AspNetCore" Version="9.0.0" />
<PackageVersion Include="Serilog.Extensions.Hosting" Version="9.0.0" />
<PackageVersion Include="Serilog.Sinks.Console" Version="6.0.0" />
<PackageVersion Include="Serilog.Sinks.Seq" Version="9.0.0" />
<PackageVersion Include="Swashbuckle.AspNetCore" Version="6.9.0" />
<PackageVersion Include="Swashbuckle.AspNetCore" Version="9.0.1" />
</ItemGroup>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public async Task Should_amend_event_from_command(CancellationToken cancellation
await service.Handle(cmd, cancellationToken);

var stream = await Store.ReadStream(StreamName.For<Booking>(cmd.BookingId), StreamReadPosition.Start, cancellationToken: cancellationToken);
stream[0].Metadata["userId"].Should().Be(cmd.ImportedBy);
await Assert.That(stream[0].Metadata["userId"]).IsEqualTo(cmd.ImportedBy);
}

[Test]
Expand All @@ -23,7 +23,7 @@ await CommandServiceFixture
.ForService(() => CreateService(amendAll: AddMeta), Store)
.Given(cmd.BookingId)
.When(cmd)
.Then(x => x.StreamIs(e => e[0].Metadata["foo"].Should().Be("bar")));
.ThenAsync(async x => await x.StreamIsAsync(async e => await Assert.That(e[0].Metadata["foo"]).IsEqualTo("bar")));
}

[Test]
Expand All @@ -34,8 +34,8 @@ public async Task Should_combine_amendments(CancellationToken cancellationToken)
await service.Handle(cmd, cancellationToken);

var stream = await Store.ReadStream(StreamName.For<Booking>(cmd.BookingId), StreamReadPosition.Start, cancellationToken: cancellationToken);
stream[0].Metadata["userId"].Should().Be(cmd.ImportedBy);
stream[0].Metadata["foo"].Should().Be("bar");
await Assert.That(stream[0].Metadata["userId"]).IsEqualTo(cmd.ImportedBy);
await Assert.That(stream[0].Metadata["foo"]).IsEqualTo("bar");
}

static NewStreamEvent AmendEvent(NewStreamEvent evt, ImportBooking cmd) => evt with { Metadata = evt.Metadata.With("userId", cmd.ImportedBy) };
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
using Eventuous.Sut.App;
using Eventuous.Testing;
using Shouldly;

namespace Eventuous.Tests.Application;

Expand All @@ -21,6 +20,10 @@ await CommandServiceFixture
.ForService(() => CreateService(), Store)
.Given(cmd.BookingId)
.When(cmd)
.Then(result => result.ResultIsOk(x => x.Changes.Should().HaveCount(1)).StreamIs(x => x.Length.ShouldBe(1)));
.ThenAsync(async result => {
await result.ResultIsOkAsync(async x => await Assert.That(x.Changes).HasCount(1));
await result.StreamIsAsync(async x => await Assert.That(x).HasCount(1));
}
);
}
}
16 changes: 12 additions & 4 deletions src/Core/test/Eventuous.Tests.Application/ServiceTestBase.OnNew.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,16 @@ await CommandServiceFixture
.ForService(() => CreateService(), Store)
.Given(cmd.BookingId)
.When(cmd)
.Then(result => result.ResultIsOk(x => x.Changes.Should().HaveCount(1)).FullStreamEventsAre(expected));
.ThenAsync(async result => {
await result.ResultIsOkAsync(async x => await Assert.That(x.Changes).HasCount(1));
result.FullStreamEventsAre(expected);
}
);
}

[Test]
public async Task Should_fail_on_new_stream_exists() {
var cmd = Helpers.GetBookRoom();
var cmd = Helpers.GetBookRoom();
var seed = new BookingEvents.RoomBooked(cmd.RoomId, cmd.CheckIn, cmd.CheckOut, cmd.Price);

await CommandServiceFixture
Expand All @@ -39,6 +43,10 @@ await CommandServiceFixture
.ForService(() => CreateService(), Store)
.Given(seedCmd.BookingId, seed)
.When(cmd)
.Then(result => result.ResultIsOk(x => x.Changes.Should().HaveCount(1)).FullStreamEventsAre(seed, new BookingEvents.Executed()));
.ThenAsync(async result => {
await result.ResultIsOkAsync(async x => await Assert.That(x.Changes).HasCount(1));
result.FullStreamEventsAre(seed, new BookingEvents.Executed());
}
);
}
}
4 changes: 2 additions & 2 deletions src/Core/test/Eventuous.Tests.Application/ServiceTestBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ public async Task Ensure_builder_is_thread_safe(CancellationToken cancellationTo
foreach (var task in tasks) {
var result = await task;

result.TryGet(out var ok).Should().BeTrue();
ok!.Changes.Should().HaveCount(1);
await Assert.That(result.TryGet(out var ok)).IsTrue();
await Assert.That(ok!.Changes).HasCount(1);
}
}

Expand Down
8 changes: 4 additions & 4 deletions src/Core/test/Eventuous.Tests.Application/StateWithIdTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,13 @@ public async Task ShouldGetIdForNew(CancellationToken cancellationToken) {
var bookingId = new BookingId(id);

// Ensure that the id was set when the aggregate was created
result.TryGet(out var ok).Should().BeTrue();
ok!.State.Id.Should().Be(bookingId);
await Assert.That(result.TryGet(out var ok)).IsTrue();
await Assert.That(ok!.State.Id).IsEqualTo(bookingId);

var instance = await _store.LoadAggregate<Booking, BookingState, BookingId>(bookingId, map, true, cancellationToken: cancellationToken);
var instance = await _store.LoadAggregate<Booking, BookingState, BookingId>(bookingId, map, cancellationToken: cancellationToken);

// Ensure that the id was set when the aggregate was loaded
instance.State.Id.Should().Be(bookingId);
await Assert.That(instance.State.Id).IsEqualTo(bookingId);
}

async Task<Result<BookingState>> Seed(string id) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ public static Task<AppendEventsResult> AppendEvent(
return fixture.EventStore.AppendEvents(stream, version, [streamEvent], default);
}


public static Task<AppendEventsResult> StoreChanges(
this StoreFixtureBase fixture,
StreamName stream,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using Eventuous.Sut.Domain;
using Eventuous.Tests.Persistence.Base.Fixtures;
using TUnit.Assertions.AssertConditions.Throws;

namespace Eventuous.Tests.Persistence.Base.Store;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public async Task ShouldCallHandlers() {

await pipe.Send(ctx);

handler.Called.Should().Be(1);
await Assert.That(handler.Called).IsEqualTo(1);
}

const string Key = "test-baggage";
Expand All @@ -30,9 +30,9 @@ public async Task ShouldAddContextBaggage() {

await pipe.Send(ctx);

handler.Called.Should().Be(1);
handler.Received.Should().NotBeNull();
handler.Received!.Items.GetItem<string>(Key).Should().Be(baggage);
await Assert.That(handler.Called).IsEqualTo(1);
await Assert.That(handler.Received).IsNotNull();
await Assert.That(handler.Received!.Items.GetItem<string>(Key)).IsEqualTo(baggage);
}

class TestFilter(string key, string payload) : ConsumeFilter<IMessageConsumeContext> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,7 @@
<ProjectReference Include="$(ExtRoot)\Eventuous.Extensions.DependencyInjection\Eventuous.Extensions.DependencyInjection.csproj"/>
<ProjectReference Include="$(RepoRoot)\test\Eventuous.TestHelpers.TUnit\Eventuous.TestHelpers.TUnit.csproj"/>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Shouldly" />
</ItemGroup>
</Project>
41 changes: 21 additions & 20 deletions src/Core/test/Eventuous.Tests.Subscriptions/HandlingStatusTests.cs
Original file line number Diff line number Diff line change
@@ -1,48 +1,49 @@
using Eventuous.Subscriptions;
using Eventuous.Subscriptions.Context;
using Shouldly;

namespace Eventuous.Tests.Subscriptions;

public class HandlingStatusTests {
[Test]
public void AckAndNackShouldNack() {
const EventHandlingStatus actual = EventHandlingStatus.Success | EventHandlingStatus.Failure;
(actual & EventHandlingStatus.Handled).Should().Be(EventHandlingStatus.Failure);
(actual & EventHandlingStatus.Handled).ShouldBe(EventHandlingStatus.Failure);
}

[Test]
public void AckAndIgnoreShouldAck() {
const EventHandlingStatus actual = EventHandlingStatus.Success | EventHandlingStatus.Ignored;
(actual & EventHandlingStatus.Handled).Should().Be(EventHandlingStatus.Success);
(actual & EventHandlingStatus.Handled).ShouldBe(EventHandlingStatus.Success);
}

[Test]
public void NackAndIgnoreShouldNack() {
const EventHandlingStatus actual = EventHandlingStatus.Failure | EventHandlingStatus.Ignored;
(actual & EventHandlingStatus.Handled).Should().Be(EventHandlingStatus.Failure);
(actual & EventHandlingStatus.Handled).ShouldBe(EventHandlingStatus.Failure);
}

[Test]
public void PendingShouldBeHandled() {
const EventHandlingStatus actual = EventHandlingStatus.Pending;
(actual & EventHandlingStatus.Handled).Should().NotBe(EventHandlingStatus.Failure);
(actual & EventHandlingStatus.Handled).Should().NotBe(EventHandlingStatus.Ignored);
(actual & EventHandlingStatus.Handled).ShouldNotBe(EventHandlingStatus.Failure);
(actual & EventHandlingStatus.Handled).ShouldNotBe(EventHandlingStatus.Ignored);
}

[Test]
public void IgnoredShouldBeIgnored() {
const EventHandlingStatus actual = EventHandlingStatus.Ignored;
(actual & EventHandlingStatus.Handled).Should().Be(0);
((int)(actual & EventHandlingStatus.Handled)).ShouldBe(0);
}

[Test]
public void NackAndIgnoreShouldFail() {
var context = TestContext.CreateContext();
context.Nack<object>(new());
context.Ignore("test");
context.HasFailed().Should().BeTrue();
context.WasIgnored().Should().BeFalse();
context.HandlingResults.IsPending().Should().BeFalse();
context.HasFailed().ShouldBeTrue();
context.WasIgnored().ShouldBeFalse();
context.HandlingResults.IsPending().ShouldBeFalse();
}

[Test]
Expand All @@ -51,35 +52,35 @@ public void NackAckAndIgnoreShouldFail() {
context.Nack<object>(new());
context.Ack<int>();
context.Ignore<long>();
context.HasFailed().Should().BeTrue();
context.WasIgnored().Should().BeFalse();
context.HandlingResults.IsPending().Should().BeFalse();
context.HasFailed().ShouldBeTrue();
context.WasIgnored().ShouldBeFalse();
context.HandlingResults.IsPending().ShouldBeFalse();
}

[Test]
public void AckAndIgnoreShouldSucceed() {
var context = TestContext.CreateContext();
context.Ack<object>();
context.Ignore<int>();
context.HasFailed().Should().BeFalse();
context.WasIgnored().Should().BeFalse();
context.HandlingResults.IsPending().Should().BeFalse();
context.HasFailed().ShouldBeFalse();
context.WasIgnored().ShouldBeFalse();
context.HandlingResults.IsPending().ShouldBeFalse();
}

[Test]
public void IgnoreAndIgnoreShouldIgnore() {
var context = TestContext.CreateContext();
context.Ignore<object>();
context.Ignore<int>();
context.WasIgnored().Should().BeTrue();
context.HandlingResults.IsPending().Should().BeFalse();
context.WasIgnored().ShouldBeTrue();
context.HandlingResults.IsPending().ShouldBeFalse();
}

[Test]
public void PendingShouldBePending() {
var context = TestContext.CreateContext();
context.WasIgnored().Should().BeFalse();
context.HasFailed().Should().BeFalse();
context.HandlingResults.IsPending().Should().BeTrue();
context.WasIgnored().ShouldBeFalse();
context.HasFailed().ShouldBeFalse();
context.HandlingResults.IsPending().ShouldBeTrue();
}
}
Loading
Loading