From 495ca0740e0851e4f366ce07b94fb617dee980ff Mon Sep 17 00:00:00 2001 From: Alexey Zimarev Date: Mon, 27 Oct 2025 14:58:29 +0100 Subject: [PATCH 1/4] Upgrade TUnit and fix breaking changes. Also upgrade OTel --- Directory.Packages.props | 20 +++---- .../TopicAndQueueSourceAttribute.cs | 18 +++---- .../Store/Append.cs | 9 ++-- .../Store/Read.cs | 6 ++- .../Store/TieredStoreTests.cs | 3 +- .../test/Eventuous.Tests/StreamNameTests.cs | 1 - ...PublishAndSubscribeManyPartitionedTests.cs | 1 + .../PublishAndSubscribeManyTests.cs | 1 + .../PublishAndSubscribeOneTests.cs | 1 + ...mPersistentPublishAndSubscribeManyTests.cs | 1 + .../StreamSubscriptionWithLinksTests.cs | 1 + .../SubscriptionIgnoredMessagesTests.cs | 1 + .../AggregateFactoryRegistrationTests.cs | 2 + .../DiscoveredCommandsTests.cs | 6 ++- .../PubSubTests.cs | 4 +- .../ContextConversions.cs | 2 +- .../Metrics/MetricsTests.cs | 1 - .../test/Eventuous.Tests.Redis/Store/Read.cs | 4 +- .../Subscriptions/SubscribeToAll.cs | 1 + .../Subscriptions/SubscribeToStream.cs | 1 + .../Subscriptions/ConnectionStringTests.cs | 1 - .../Eventuous.TestHelpers.TUnit/Assertions.cs | 54 ------------------- .../IntToTimespan.cs | 10 ++++ 23 files changed, 55 insertions(+), 94 deletions(-) delete mode 100644 test/Eventuous.TestHelpers.TUnit/Assertions.cs create mode 100644 test/Eventuous.TestHelpers.TUnit/IntToTimespan.cs diff --git a/Directory.Packages.props b/Directory.Packages.props index 664aeee1..c66345b6 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -13,7 +13,7 @@ 9.0.3 - 0.25.21 + 0.77.3 @@ -33,7 +33,7 @@ - + @@ -84,8 +84,8 @@ - - + + @@ -93,12 +93,12 @@ - - - - - - + + + + + + diff --git a/src/Azure/test/Eventuous.Tests.Azure.ServiceBus/TopicAndQueueSourceAttribute.cs b/src/Azure/test/Eventuous.Tests.Azure.ServiceBus/TopicAndQueueSourceAttribute.cs index ddcdf923..945373b0 100644 --- a/src/Azure/test/Eventuous.Tests.Azure.ServiceBus/TopicAndQueueSourceAttribute.cs +++ b/src/Azure/test/Eventuous.Tests.Azure.ServiceBus/TopicAndQueueSourceAttribute.cs @@ -7,19 +7,15 @@ public class TopicAndQueueSourceAttribute : DataSourceGeneratorAttribute - /// This is strange. The 'subscription.1' in the emulator has a content type filter. We populate - /// the content type, but it still gets filtered out. So we use 'subscription.3,' which has no filters. - /// + // This is strange. The 'subscription.1' in the emulator has a content type filter. We populate + // the content type, but it still gets filtered out. So we use 'subscription.3,' which has no filters. const string SubscriptionName = "subscription.3"; - readonly ClassDataSourceAttribute _fixtureDataSource = new() { - Shared = SharedType.PerTestSession - }; + static readonly Lazy FixtureInstance = new(() => new()); - public override IEnumerable> GenerateDataSources(DataGeneratorMetadata dataGeneratorMetadata) { + protected override IEnumerable> GenerateDataSources(DataGeneratorMetadata dataGeneratorMetadata) { yield return () => { - var f = _fixtureDataSource.GenerateDataSources(dataGeneratorMetadata).First()(); + var f = FixtureInstance.Value; return ( f, @@ -34,7 +30,7 @@ public class TopicAndQueueSourceAttribute : DataSourceGeneratorAttribute { - var f = _fixtureDataSource.GenerateDataSources(dataGeneratorMetadata).First()(); + var f = FixtureInstance.Value; return ( f, @@ -49,7 +45,7 @@ public class TopicAndQueueSourceAttribute : DataSourceGeneratorAttribute { - var f = _fixtureDataSource.GenerateDataSources(dataGeneratorMetadata).First()(); + var f = FixtureInstance.Value; return ( f, diff --git a/src/Core/test/Eventuous.Tests.Persistence.Base/Store/Append.cs b/src/Core/test/Eventuous.Tests.Persistence.Base/Store/Append.cs index e12916e5..3c796e36 100644 --- a/src/Core/test/Eventuous.Tests.Persistence.Base/Store/Append.cs +++ b/src/Core/test/Eventuous.Tests.Persistence.Base/Store/Append.cs @@ -1,6 +1,5 @@ using Eventuous.Sut.Domain; using Eventuous.Tests.Persistence.Base.Fixtures; -using TUnit.Assertions.AssertConditions.Throws; namespace Eventuous.Tests.Persistence.Base.Store; @@ -48,7 +47,7 @@ public async Task ShouldFailOnWrongVersionNoStream() { evt = Helpers.CreateEvent(); - await Assert.That(() => _fixture.AppendEvent(stream, evt, ExpectedStreamVersion.NoStream)).Throws(); + await Assert.That(() => _fixture.AppendEvent(stream, evt, ExpectedStreamVersion.NoStream)!).Throws(); } [Test] @@ -61,9 +60,9 @@ public async Task ShouldFailOnWrongVersion() { evt = Helpers.CreateEvent(); - await Assert.That(() => _fixture.AppendEvent(stream, evt, new(3))).Throws(); + await Assert.That(() => _fixture.AppendEvent(stream, evt, new(3))!).Throws(); } - + [Test] [Category("Store")] @@ -75,6 +74,6 @@ public async Task ShouldFailOnWrongVersionWithOptimisticConcurrencyException() { evt = Helpers.CreateEvent(); - await Assert.That(() => _fixture.StoreChanges(stream, evt, new(3))).Throws(); + await Assert.That(() => _fixture.StoreChanges(stream, evt, new(3))!).Throws(); } } diff --git a/src/Core/test/Eventuous.Tests.Persistence.Base/Store/Read.cs b/src/Core/test/Eventuous.Tests.Persistence.Base/Store/Read.cs index bb29cfc2..dbc02c69 100644 --- a/src/Core/test/Eventuous.Tests.Persistence.Base/Store/Read.cs +++ b/src/Core/test/Eventuous.Tests.Persistence.Base/Store/Read.cs @@ -34,7 +34,8 @@ public async Task ShouldReadMany(CancellationToken cancellationToken) { await _fixture.AppendEvents(streamName, events, ExpectedStreamVersion.NoStream); var result = await _fixture.EventStore.ReadEvents(streamName, StreamReadPosition.Start, 100, true, cancellationToken); - var actual = result.Select(x => x.Payload); + + IEnumerable actual = result.Select(x => x.Payload)!; await Assert.That(actual).IsEquivalentTo(events); } @@ -79,6 +80,7 @@ public async Task ShouldReadMetadata(CancellationToken cancellationToken) { await Assert.That(result[0].Payload).IsEquivalentTo(evt); await Assert.That(result[0].Metadata.ToDictionary(m => m.Key, m => ((JsonElement)m.Value!).GetString())) - .ContainsKey("Key1").And.ContainsKey("Key2"); + .ContainsKey("Key1") + .And.ContainsKey("Key2"); } } diff --git a/src/Core/test/Eventuous.Tests.Persistence.Base/Store/TieredStoreTests.cs b/src/Core/test/Eventuous.Tests.Persistence.Base/Store/TieredStoreTests.cs index 467f1edf..a155e82d 100644 --- a/src/Core/test/Eventuous.Tests.Persistence.Base/Store/TieredStoreTests.cs +++ b/src/Core/test/Eventuous.Tests.Persistence.Base/Store/TieredStoreTests.cs @@ -1,6 +1,5 @@ using Bogus; using DotNet.Testcontainers.Containers; -using Eventuous.TestHelpers.TUnit; using Eventuous.Tests.Persistence.Base.Fixtures; using JetBrains.Annotations; @@ -23,7 +22,7 @@ protected async Task Should_load_hot_and_archive() { var loaded = (await combined.ReadStream(stream, StreamReadPosition.Start)).ToArray(); var actual = loaded.Select(x => (TestEventForTiers)x.Payload!); - await Assert.That(actual).CollectionEquivalentTo(testEvents); + await Assert.That(actual).IsEquivalentTo(testEvents); await Assert.That(loaded.Take(50).Select(x => x.FromArchive)).DoesNotContain(false); await Assert.That(loaded.Skip(50).Select(x => x.FromArchive)).DoesNotContain(true); diff --git a/src/Core/test/Eventuous.Tests/StreamNameTests.cs b/src/Core/test/Eventuous.Tests/StreamNameTests.cs index ef813472..596ee8ca 100644 --- a/src/Core/test/Eventuous.Tests/StreamNameTests.cs +++ b/src/Core/test/Eventuous.Tests/StreamNameTests.cs @@ -1,5 +1,4 @@ using Eventuous.Sut.Domain; -using TUnit.Assertions.AssertConditions.Throws; namespace Eventuous.Tests; diff --git a/src/EventStore/test/Eventuous.Tests.EventStore/Subscriptions/PublishAndSubscribeManyPartitionedTests.cs b/src/EventStore/test/Eventuous.Tests.EventStore/Subscriptions/PublishAndSubscribeManyPartitionedTests.cs index 74888dd1..58a31fe9 100644 --- a/src/EventStore/test/Eventuous.Tests.EventStore/Subscriptions/PublishAndSubscribeManyPartitionedTests.cs +++ b/src/EventStore/test/Eventuous.Tests.EventStore/Subscriptions/PublishAndSubscribeManyPartitionedTests.cs @@ -1,4 +1,5 @@ using Eventuous.Producers; +using Eventuous.TestHelpers.TUnit; using Eventuous.Tests.EventStore.Subscriptions.Fixtures; using Eventuous.Tests.Subscriptions.Base; using Shouldly; diff --git a/src/EventStore/test/Eventuous.Tests.EventStore/Subscriptions/PublishAndSubscribeManyTests.cs b/src/EventStore/test/Eventuous.Tests.EventStore/Subscriptions/PublishAndSubscribeManyTests.cs index c4ae87b7..92947d9a 100644 --- a/src/EventStore/test/Eventuous.Tests.EventStore/Subscriptions/PublishAndSubscribeManyTests.cs +++ b/src/EventStore/test/Eventuous.Tests.EventStore/Subscriptions/PublishAndSubscribeManyTests.cs @@ -1,4 +1,5 @@ using Eventuous.Producers; +using Eventuous.TestHelpers.TUnit; using Eventuous.Tests.EventStore.Subscriptions.Fixtures; using Eventuous.Tests.Subscriptions.Base; using Shouldly; diff --git a/src/EventStore/test/Eventuous.Tests.EventStore/Subscriptions/PublishAndSubscribeOneTests.cs b/src/EventStore/test/Eventuous.Tests.EventStore/Subscriptions/PublishAndSubscribeOneTests.cs index 6830ceda..0e3b5d48 100644 --- a/src/EventStore/test/Eventuous.Tests.EventStore/Subscriptions/PublishAndSubscribeOneTests.cs +++ b/src/EventStore/test/Eventuous.Tests.EventStore/Subscriptions/PublishAndSubscribeOneTests.cs @@ -1,4 +1,5 @@ using Eventuous.Producers; +using Eventuous.TestHelpers.TUnit; using Eventuous.Tests.EventStore.Subscriptions.Fixtures; using Eventuous.Tests.Subscriptions.Base; using Shouldly; diff --git a/src/EventStore/test/Eventuous.Tests.EventStore/Subscriptions/StreamPersistentPublishAndSubscribeManyTests.cs b/src/EventStore/test/Eventuous.Tests.EventStore/Subscriptions/StreamPersistentPublishAndSubscribeManyTests.cs index 67836c4c..cd0c09ba 100644 --- a/src/EventStore/test/Eventuous.Tests.EventStore/Subscriptions/StreamPersistentPublishAndSubscribeManyTests.cs +++ b/src/EventStore/test/Eventuous.Tests.EventStore/Subscriptions/StreamPersistentPublishAndSubscribeManyTests.cs @@ -2,6 +2,7 @@ using Eventuous.EventStore.Subscriptions; using Eventuous.Producers; using Eventuous.Subscriptions.Filters; +using Eventuous.TestHelpers.TUnit; using Eventuous.Tests.EventStore.Subscriptions.Fixtures; using Eventuous.Tests.Subscriptions.Base; diff --git a/src/EventStore/test/Eventuous.Tests.EventStore/Subscriptions/StreamSubscriptionWithLinksTests.cs b/src/EventStore/test/Eventuous.Tests.EventStore/Subscriptions/StreamSubscriptionWithLinksTests.cs index 68a5e943..99067fe4 100644 --- a/src/EventStore/test/Eventuous.Tests.EventStore/Subscriptions/StreamSubscriptionWithLinksTests.cs +++ b/src/EventStore/test/Eventuous.Tests.EventStore/Subscriptions/StreamSubscriptionWithLinksTests.cs @@ -3,6 +3,7 @@ using Eventuous.EventStore.Subscriptions; using Eventuous.Producers; using Eventuous.Subscriptions.Context; +using Eventuous.TestHelpers.TUnit; using Eventuous.Tests.Subscriptions.Base; using Microsoft.Extensions.DependencyInjection; using StreamSubscription = Eventuous.EventStore.Subscriptions.StreamSubscription; diff --git a/src/EventStore/test/Eventuous.Tests.EventStore/Subscriptions/SubscriptionIgnoredMessagesTests.cs b/src/EventStore/test/Eventuous.Tests.EventStore/Subscriptions/SubscriptionIgnoredMessagesTests.cs index 5db3bf44..948d2ac0 100644 --- a/src/EventStore/test/Eventuous.Tests.EventStore/Subscriptions/SubscriptionIgnoredMessagesTests.cs +++ b/src/EventStore/test/Eventuous.Tests.EventStore/Subscriptions/SubscriptionIgnoredMessagesTests.cs @@ -2,6 +2,7 @@ using Eventuous.EventStore.Subscriptions; using Eventuous.Producers; using Eventuous.Subscriptions.Registrations; +using Eventuous.TestHelpers.TUnit; using Eventuous.Tests.Subscriptions.Base; using Microsoft.Extensions.DependencyInjection; using Shouldly; diff --git a/src/Extensions/test/Eventuous.Tests.DependencyInjection/AggregateFactoryRegistrationTests.cs b/src/Extensions/test/Eventuous.Tests.DependencyInjection/AggregateFactoryRegistrationTests.cs index ff7ee4b1..8f5181b3 100644 --- a/src/Extensions/test/Eventuous.Tests.DependencyInjection/AggregateFactoryRegistrationTests.cs +++ b/src/Extensions/test/Eventuous.Tests.DependencyInjection/AggregateFactoryRegistrationTests.cs @@ -2,6 +2,8 @@ using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; using Shouldly; +using TestDependency = Eventuous.Tests.DependencyInjection.Sut.TestDependency; +using TestState = Eventuous.Tests.DependencyInjection.Sut.TestState; namespace Eventuous.Tests.DependencyInjection; diff --git a/src/Extensions/test/Eventuous.Tests.Extensions.AspNetCore/DiscoveredCommandsTests.cs b/src/Extensions/test/Eventuous.Tests.Extensions.AspNetCore/DiscoveredCommandsTests.cs index 15715d55..f1814875 100644 --- a/src/Extensions/test/Eventuous.Tests.Extensions.AspNetCore/DiscoveredCommandsTests.cs +++ b/src/Extensions/test/Eventuous.Tests.Extensions.AspNetCore/DiscoveredCommandsTests.cs @@ -16,7 +16,8 @@ public async Task RegisterStateCommands() { var b = app.MapDiscoveredCommands(); - var actual = b.DataSources.First().Endpoints.Select(x => x.DisplayName).Order().ToList(); + IEnumerable actual = b.DataSources.First().Endpoints.Select(x => x.DisplayName).Order().ToList()!; + var expected = new[] { "HTTP: POST nested-book", "HTTP: POST import2" }; await Assert.That(actual).IsEquivalentTo(expected.Order()); @@ -30,7 +31,8 @@ public async Task RegisterStatesCommands() { var b = app.MapDiscoveredCommands(typeof(TestCommands.DuplicateCommand)); - var actual = b.DataSources.First().Endpoints.Select(x => x.DisplayName).Order().ToList(); + IEnumerable actual = b.DataSources.First().Endpoints.Select(x => x.DisplayName).Order().ToList()!; + var expected = new[] { "HTTP: POST nested-book", "HTTP: POST import2", "HTTP: POST import-wrong" }; await Assert.That(actual).IsEquivalentTo(expected.Order()); diff --git a/src/GooglePubSub/test/Eventuous.Tests.GooglePubSub/PubSubTests.cs b/src/GooglePubSub/test/Eventuous.Tests.GooglePubSub/PubSubTests.cs index bc3b0eb3..873bc224 100644 --- a/src/GooglePubSub/test/Eventuous.Tests.GooglePubSub/PubSubTests.cs +++ b/src/GooglePubSub/test/Eventuous.Tests.GooglePubSub/PubSubTests.cs @@ -52,7 +52,7 @@ public async Task SubscribeAndProduce(CancellationToken cancellationToken) { await _producer.Produce(_pubsubTopic, testEvent, null, cancellationToken: cancellationToken); - await _handler.AssertThat().Timebox(10.Seconds()).Any().Match(x => x as TestEvent == testEvent).Validate(cancellationToken); + await _handler.AssertThat().Timebox(TimeSpan.FromSeconds(10)).Any().Match(x => x as TestEvent == testEvent).Validate(cancellationToken); } [Test] @@ -63,7 +63,7 @@ public async Task SubscribeAndProduceMany(CancellationToken cancellationToken) { var testEvents = TestEvent.CreateMany(count); await _producer.Produce(_pubsubTopic, testEvents, null, cancellationToken: cancellationToken); - await _handler.AssertCollection(40.Seconds(), [..testEvents]).Validate(cancellationToken); + await _handler.AssertCollection(TimeSpan.FromSeconds(40), [..testEvents]).Validate(cancellationToken); } [Before(Test)] diff --git a/src/Mongo/test/Eventuous.Tests.Projections.MongoDB/ContextConversions.cs b/src/Mongo/test/Eventuous.Tests.Projections.MongoDB/ContextConversions.cs index 7c1edb82..606c8e6a 100644 --- a/src/Mongo/test/Eventuous.Tests.Projections.MongoDB/ContextConversions.cs +++ b/src/Mongo/test/Eventuous.Tests.Projections.MongoDB/ContextConversions.cs @@ -27,7 +27,7 @@ public async Task TestContextConversion(IMessageConsumeContext context, Type exp var typed = MessageConsumeContextConverter.RegisteredConverters[0].Invoke(context); await Assert.That(typed).IsNotNull(); - await Assert.That(typed).IsAssignableTo(expectedType); + await Assert.That(typed).IsOfType(expectedType); } [Test] diff --git a/src/Postgres/test/Eventuous.Tests.Postgres/Metrics/MetricsTests.cs b/src/Postgres/test/Eventuous.Tests.Postgres/Metrics/MetricsTests.cs index 2dddc4ae..66391d2b 100644 --- a/src/Postgres/test/Eventuous.Tests.Postgres/Metrics/MetricsTests.cs +++ b/src/Postgres/test/Eventuous.Tests.Postgres/Metrics/MetricsTests.cs @@ -11,4 +11,3 @@ public async Task ShouldMeasureSubscriptionGapCountBase_Postgres() { await ShouldMeasureSubscriptionGapCountBase(); } } - diff --git a/src/Redis/test/Eventuous.Tests.Redis/Store/Read.cs b/src/Redis/test/Eventuous.Tests.Redis/Store/Read.cs index 2db2fa77..8a764922 100644 --- a/src/Redis/test/Eventuous.Tests.Redis/Store/Read.cs +++ b/src/Redis/test/Eventuous.Tests.Redis/Store/Read.cs @@ -27,7 +27,7 @@ public async Task ShouldReadMany(CancellationToken cancellationToken) { var result = await fixture.EventReader.ReadEvents(streamName, StreamReadPosition.Start, 100, true, cancellationToken); - var actual = result.Select(x => x.Payload); + IEnumerable actual = result.Select(x => x.Payload)!; await Assert.That(actual).IsEquivalentTo(events); } @@ -45,7 +45,7 @@ public async Task ShouldReadTail(CancellationToken cancellationToken) { var result = await fixture.EventReader.ReadEvents(streamName, new((long)position), 100, true, cancellationToken); - var actual = result.Select(x => x.Payload); + IEnumerable actual = result.Select(x => x.Payload)!; await Assert.That(actual).IsEquivalentTo(events2); } diff --git a/src/Redis/test/Eventuous.Tests.Redis/Subscriptions/SubscribeToAll.cs b/src/Redis/test/Eventuous.Tests.Redis/Subscriptions/SubscribeToAll.cs index d8f0f0cf..604354d4 100644 --- a/src/Redis/test/Eventuous.Tests.Redis/Subscriptions/SubscribeToAll.cs +++ b/src/Redis/test/Eventuous.Tests.Redis/Subscriptions/SubscribeToAll.cs @@ -1,4 +1,5 @@ using Eventuous.Subscriptions.Logging; +using Eventuous.TestHelpers.TUnit; using Eventuous.Tests.Redis.Fixtures; using Eventuous.Tests.Subscriptions.Base; using Shouldly; diff --git a/src/Redis/test/Eventuous.Tests.Redis/Subscriptions/SubscribeToStream.cs b/src/Redis/test/Eventuous.Tests.Redis/Subscriptions/SubscribeToStream.cs index 1bd7270b..8f44d270 100644 --- a/src/Redis/test/Eventuous.Tests.Redis/Subscriptions/SubscribeToStream.cs +++ b/src/Redis/test/Eventuous.Tests.Redis/Subscriptions/SubscribeToStream.cs @@ -1,4 +1,5 @@ using Eventuous.Subscriptions.Logging; +using Eventuous.TestHelpers.TUnit; using Eventuous.Tests.Redis.Fixtures; using Eventuous.Tests.Subscriptions.Base; using Shouldly; diff --git a/src/SqlServer/test/Eventuous.Tests.SqlServer/Subscriptions/ConnectionStringTests.cs b/src/SqlServer/test/Eventuous.Tests.SqlServer/Subscriptions/ConnectionStringTests.cs index e89162bd..e28fae8a 100644 --- a/src/SqlServer/test/Eventuous.Tests.SqlServer/Subscriptions/ConnectionStringTests.cs +++ b/src/SqlServer/test/Eventuous.Tests.SqlServer/Subscriptions/ConnectionStringTests.cs @@ -5,7 +5,6 @@ using Eventuous.Subscriptions.Filters; using Microsoft.Data.SqlClient; using System.Data; -using TUnit.Assertions.AssertConditions.Throws; namespace Eventuous.Tests.SqlServer.Subscriptions; diff --git a/test/Eventuous.TestHelpers.TUnit/Assertions.cs b/test/Eventuous.TestHelpers.TUnit/Assertions.cs deleted file mode 100644 index 9f47377b..00000000 --- a/test/Eventuous.TestHelpers.TUnit/Assertions.cs +++ /dev/null @@ -1,54 +0,0 @@ -using System.Diagnostics.CodeAnalysis; -using System.Runtime.CompilerServices; -using TUnit.Assertions.AssertConditions.Interfaces; -using TUnit.Assertions.AssertionBuilders; -using TUnit.Assertions.Enums; - -namespace Eventuous.TestHelpers.TUnit; - -[SuppressMessage("Usage", "TUnitAssertions0003:Compiler argument populated")] -public static class Assertions { - public static InvokableValueAssertionBuilder CollectionEquivalentTo - <[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] TActual, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] TInner>( - this IValueSource valueSource, - IEnumerable expected, - [CallerArgumentExpression(nameof(expected))] string doNotPopulateThisValue = "" - ) - where TActual : IEnumerable { - return valueSource.IsEquivalentTo(expected, doNotPopulateThisValue); - } - - public static InvokableValueAssertionBuilder CollectionIsEquivalentTo - <[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] TActual, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] TInner>( - this IValueSource valueSource, - IEnumerable expected, - IEqualityComparer comparer, - [CallerArgumentExpression(nameof(expected))] string doNotPopulateThisValue = "" - ) - where TActual : IEnumerable { - return valueSource.IsEquivalentTo(expected, comparer, doNotPopulateThisValue); - } - - public static InvokableValueAssertionBuilder CollectionEquivalentTo - <[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] TActual, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] TInner>( - this IValueSource valueSource, - IEnumerable expected, - CollectionOrdering collectionOrdering, - [CallerArgumentExpression(nameof(expected))] string doNotPopulateThisValue = "" - ) - where TActual : IEnumerable { - return valueSource.IsEquivalentTo(expected, collectionOrdering, doNotPopulateThisValue); - } - - public static InvokableValueAssertionBuilder CollectionEquivalentTo - <[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] TActual, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] TInner>( - this IValueSource valueSource, - IEnumerable expected, - IEqualityComparer comparer, - CollectionOrdering collectionOrdering, - [CallerArgumentExpression(nameof(expected))] string doNotPopulateThisValue = "" - ) - where TActual : IEnumerable { - return valueSource.IsEquivalentTo(expected, comparer, collectionOrdering, doNotPopulateThisValue); - } -} diff --git a/test/Eventuous.TestHelpers.TUnit/IntToTimespan.cs b/test/Eventuous.TestHelpers.TUnit/IntToTimespan.cs new file mode 100644 index 00000000..cc168353 --- /dev/null +++ b/test/Eventuous.TestHelpers.TUnit/IntToTimespan.cs @@ -0,0 +1,10 @@ +// Copyright (C) Eventuous HQ OÜ. All rights reserved +// Licensed under the Apache License, Version 2.0. + +namespace Eventuous.TestHelpers.TUnit; + +public static class IntToTimespan { + public static TimeSpan Seconds(this int value) => TimeSpan.FromSeconds(value); + + public static TimeSpan Milliseconds(this int value) => TimeSpan.FromMilliseconds(value); +} From e6fbbb144366a823ffcd9441f90a8f4c79298199 Mon Sep 17 00:00:00 2001 From: Tom Longhurst <30480171+thomhurst@users.noreply.github.com> Date: Mon, 27 Oct 2025 17:47:38 +0000 Subject: [PATCH 2/4] Fix disposable leak (#454) --- .../Eventuous.Tests.Extensions.AspNetCore/ControllerTests.cs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/Extensions/test/Eventuous.Tests.Extensions.AspNetCore/ControllerTests.cs b/src/Extensions/test/Eventuous.Tests.Extensions.AspNetCore/ControllerTests.cs index 54902928..11831a0d 100644 --- a/src/Extensions/test/Eventuous.Tests.Extensions.AspNetCore/ControllerTests.cs +++ b/src/Extensions/test/Eventuous.Tests.Extensions.AspNetCore/ControllerTests.cs @@ -30,8 +30,6 @@ public ControllerTests(WebApplicationFactory factory) { app.MapCommands().MapCommand(); } ); - - listener = new(); } [Test] @@ -55,9 +53,7 @@ public async Task RecordPaymentUsingMappedCommand(CancellationToken cancellation last.Payload.ShouldBeEquivalentTo(expected); } -#pragma warning disable TUnit0023 static TestEventListener? listener; -#pragma warning restore TUnit0023 [After(Class)] public static void Dispose() => listener?.Dispose(); From bcf352de7f88922bfe0f509f0a6922f771b61d79 Mon Sep 17 00:00:00 2001 From: Alexey Zimarev Date: Mon, 27 Oct 2025 18:56:19 +0100 Subject: [PATCH 3/4] Fix IsAssignableTo --- .../Eventuous.Tests.Projections.MongoDB/ContextConversions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mongo/test/Eventuous.Tests.Projections.MongoDB/ContextConversions.cs b/src/Mongo/test/Eventuous.Tests.Projections.MongoDB/ContextConversions.cs index 606c8e6a..01a52dc9 100644 --- a/src/Mongo/test/Eventuous.Tests.Projections.MongoDB/ContextConversions.cs +++ b/src/Mongo/test/Eventuous.Tests.Projections.MongoDB/ContextConversions.cs @@ -27,7 +27,7 @@ public async Task TestContextConversion(IMessageConsumeContext context, Type exp var typed = MessageConsumeContextConverter.RegisteredConverters[0].Invoke(context); await Assert.That(typed).IsNotNull(); - await Assert.That(typed).IsOfType(expectedType); + await Assert.That(typed.GetType().IsAssignableTo(expectedType)).IsTrue(); } [Test] From e34062b5abe9873619cb919846ff7c673e3f82ca Mon Sep 17 00:00:00 2001 From: Alexey Zimarev Date: Mon, 27 Oct 2025 19:18:07 +0100 Subject: [PATCH 4/4] Add source gen reference --- .../Eventuous.Tests.EventStore/Eventuous.Tests.EventStore.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/src/EventStore/test/Eventuous.Tests.EventStore/Eventuous.Tests.EventStore.csproj b/src/EventStore/test/Eventuous.Tests.EventStore/Eventuous.Tests.EventStore.csproj index 601eb020..b10fed8b 100644 --- a/src/EventStore/test/Eventuous.Tests.EventStore/Eventuous.Tests.EventStore.csproj +++ b/src/EventStore/test/Eventuous.Tests.EventStore/Eventuous.Tests.EventStore.csproj @@ -10,6 +10,7 @@ +