diff --git a/Directory.Packages.props b/Directory.Packages.props index fdeff9446..b1a258b46 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -23,9 +23,9 @@ - + - + @@ -41,50 +41,50 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - + + - - - + + + - + - - - - + + + + @@ -92,22 +92,21 @@ - + - + - - - - - + + + + - - + + @@ -124,20 +123,20 @@ - - + + - - + + - - + + @@ -155,9 +154,9 @@ - + - + diff --git a/src/Analyzers.roslyn4.6/Rocket.Surgery.LaunchPad.Analyzers.roslyn4.6.csproj b/src/Analyzers.roslyn4.6/Rocket.Surgery.LaunchPad.Analyzers.roslyn4.6.csproj index 41ea76edc..bd2b9103e 100644 --- a/src/Analyzers.roslyn4.6/Rocket.Surgery.LaunchPad.Analyzers.roslyn4.6.csproj +++ b/src/Analyzers.roslyn4.6/Rocket.Surgery.LaunchPad.Analyzers.roslyn4.6.csproj @@ -12,8 +12,7 @@ - + diff --git a/src/AspNetCore.NewtonsoftJson/Conventions/NewtonsoftJsonConvention.cs b/src/AspNetCore.NewtonsoftJson/Conventions/NewtonsoftJsonConvention.cs index e54b1eb45..5bfd0f4e7 100644 --- a/src/AspNetCore.NewtonsoftJson/Conventions/NewtonsoftJsonConvention.cs +++ b/src/AspNetCore.NewtonsoftJson/Conventions/NewtonsoftJsonConvention.cs @@ -16,6 +16,7 @@ namespace Rocket.Surgery.LaunchPad.AspNetCore.Conventions; /// [PublicAPI] [ExportConvention] +[ConventionCategory(ConventionCategory.Application)] public class NewtonsoftJsonConvention : IServiceConvention { private readonly FoundationOptions _options; @@ -54,4 +55,4 @@ public void Register(IConventionContext context, IConfiguration configuration, I ) ); } -} \ No newline at end of file +} diff --git a/src/AspNetCore.Spatial/Conventions/AspNetCoreSpatialConvention.cs b/src/AspNetCore.Spatial/Conventions/AspNetCoreSpatialConvention.cs index 8cee33ac6..54158f607 100644 --- a/src/AspNetCore.Spatial/Conventions/AspNetCoreSpatialConvention.cs +++ b/src/AspNetCore.Spatial/Conventions/AspNetCoreSpatialConvention.cs @@ -12,6 +12,7 @@ namespace Rocket.Surgery.LaunchPad.AspNetCore.Conventions; /// [PublicAPI] [ExportConvention] +[ConventionCategory(ConventionCategory.Application)] public class AspNetCoreSpatialConvention : IServiceConvention { /// diff --git a/src/AspNetCore/Conventions/AspNetCoreConvention.cs b/src/AspNetCore/Conventions/AspNetCoreConvention.cs index c739bcfd5..16163ebdc 100644 --- a/src/AspNetCore/Conventions/AspNetCoreConvention.cs +++ b/src/AspNetCore/Conventions/AspNetCoreConvention.cs @@ -15,6 +15,7 @@ namespace Rocket.Surgery.LaunchPad.AspNetCore.Conventions; /// [PublicAPI] [ExportConvention] +[ConventionCategory(ConventionCategory.Application)] public class AspNetCoreConvention : IServiceConvention { internal static void PopulateDefaultParts( @@ -123,4 +124,4 @@ public void Register(IConventionContext context, IConfiguration configuration, I } ); } -} \ No newline at end of file +} diff --git a/src/AspNetCore/Conventions/AspNetCoreConventionInstrumentationConvention.cs b/src/AspNetCore/Conventions/AspNetCoreConventionInstrumentationConvention.cs index a15a0e056..e69973eb9 100644 --- a/src/AspNetCore/Conventions/AspNetCoreConventionInstrumentationConvention.cs +++ b/src/AspNetCore/Conventions/AspNetCoreConventionInstrumentationConvention.cs @@ -16,6 +16,7 @@ namespace Rocket.Surgery.LaunchPad.AspNetCore.Conventions; [PublicAPI] [ExportConvention] [AfterConvention(typeof(AspNetCoreConvention))] +[ConventionCategory(ConventionCategory.Application)] public class AspNetCoreConventionInstrumentationConvention : IOpenTelemetryConvention { /// @@ -24,4 +25,4 @@ public void Register(IConventionContext context, IConfiguration configuration, I builder.WithTracing(b => b.AddAspNetCoreInstrumentation(options => options.RecordException = true)); builder.WithMetrics(b => b.AddAspNetCoreInstrumentation()); } -} \ No newline at end of file +} diff --git a/src/AspNetCore/Conventions/AspNetCoreValidationBehaviorConvention.cs b/src/AspNetCore/Conventions/AspNetCoreValidationBehaviorConvention.cs index ba798704a..731aa07f1 100644 --- a/src/AspNetCore/Conventions/AspNetCoreValidationBehaviorConvention.cs +++ b/src/AspNetCore/Conventions/AspNetCoreValidationBehaviorConvention.cs @@ -13,6 +13,7 @@ namespace Rocket.Surgery.LaunchPad.AspNetCore.Conventions; [PublicAPI] [ExportConvention] [BeforeConvention(typeof(Foundation.Conventions.FluentValidationConvention))] +[ConventionCategory(ConventionCategory.Application)] public class AspNetCoreValidationBehaviorConvention : ISetupConvention { /// diff --git a/src/AspNetCore/Conventions/FluentValidationConvention.cs b/src/AspNetCore/Conventions/FluentValidationConvention.cs index 545708aa2..2b8f1a4f9 100644 --- a/src/AspNetCore/Conventions/FluentValidationConvention.cs +++ b/src/AspNetCore/Conventions/FluentValidationConvention.cs @@ -26,6 +26,7 @@ namespace Rocket.Surgery.LaunchPad.AspNetCore.Conventions; [PublicAPI] [ExportConvention] [AfterConvention(typeof(AspNetCoreConvention))] +[ConventionCategory(ConventionCategory.Application)] public partial class FluentValidationConvention : IServiceConvention { private static void AddFluentValidationRules(IServiceCollection services) @@ -133,4 +134,4 @@ public void Register(IConventionContext context, IConfiguration configuration, I // AddFluentValidationRules(services); } -} \ No newline at end of file +} diff --git a/src/AspNetCore/Conventions/ProblemDetailsConvention.cs b/src/AspNetCore/Conventions/ProblemDetailsConvention.cs index 2873135a0..b94437753 100644 --- a/src/AspNetCore/Conventions/ProblemDetailsConvention.cs +++ b/src/AspNetCore/Conventions/ProblemDetailsConvention.cs @@ -24,6 +24,7 @@ namespace Rocket.Surgery.LaunchPad.AspNetCore.Conventions; [PublicAPI] [ExportConvention] [AfterConvention(typeof(AspNetCoreConvention))] +[ConventionCategory(ConventionCategory.Application)] public class ProblemDetailsConvention : IServiceConvention { /// @@ -82,4 +83,4 @@ out var clientErrorData } ); } -} \ No newline at end of file +} diff --git a/src/AspNetCore/Conventions/RestfulConvention.cs b/src/AspNetCore/Conventions/RestfulConvention.cs index 4b067ea47..48aec863d 100644 --- a/src/AspNetCore/Conventions/RestfulConvention.cs +++ b/src/AspNetCore/Conventions/RestfulConvention.cs @@ -17,6 +17,7 @@ namespace Rocket.Surgery.LaunchPad.AspNetCore.Conventions; [PublicAPI] [ExportConvention] [AfterConvention(typeof(AspNetCoreConvention))] +[ConventionCategory(ConventionCategory.Application)] public class RestfulConvention : IServiceConvention { /// diff --git a/src/AspNetCore/Conventions/SwashbuckleConvention.cs b/src/AspNetCore/Conventions/SwashbuckleConvention.cs index 0e6779959..22319a353 100644 --- a/src/AspNetCore/Conventions/SwashbuckleConvention.cs +++ b/src/AspNetCore/Conventions/SwashbuckleConvention.cs @@ -24,6 +24,7 @@ namespace Rocket.Surgery.LaunchPad.AspNetCore.Conventions; [PublicAPI] [ExportConvention] [AfterConvention(typeof(AspNetCoreConvention))] +[ConventionCategory(ConventionCategory.Application)] public partial class SwashbuckleConvention : IServiceConvention { [LoggerMessage( @@ -139,4 +140,4 @@ string schemaIdSelector(Type type) } ); } -} \ No newline at end of file +} diff --git a/src/AspNetCore/Conventions/SystemJsonTextConvention.cs b/src/AspNetCore/Conventions/SystemJsonTextConvention.cs index b296fb314..6bbbf4490 100644 --- a/src/AspNetCore/Conventions/SystemJsonTextConvention.cs +++ b/src/AspNetCore/Conventions/SystemJsonTextConvention.cs @@ -18,6 +18,7 @@ namespace Rocket.Surgery.LaunchPad.AspNetCore.Conventions; [PublicAPI] [ExportConvention] [AfterConvention(typeof(AspNetCoreConvention))] +[ConventionCategory(ConventionCategory.Application)] public class SystemJsonTextConvention : IServiceConvention { private readonly FoundationOptions _options; @@ -56,4 +57,4 @@ public void Register(IConventionContext context, IConfiguration configuration, I .Create(nameof(HttpJsonOptions)) ); } -} \ No newline at end of file +} diff --git a/src/Foundation.NewtonsoftJson/Conventions/NewtonsoftJsonConvention.cs b/src/Foundation.NewtonsoftJson/Conventions/NewtonsoftJsonConvention.cs index 40a0825bc..530ae2373 100644 --- a/src/Foundation.NewtonsoftJson/Conventions/NewtonsoftJsonConvention.cs +++ b/src/Foundation.NewtonsoftJson/Conventions/NewtonsoftJsonConvention.cs @@ -17,6 +17,7 @@ namespace Rocket.Surgery.LaunchPad.Foundation.Conventions; /// [PublicAPI] [ExportConvention] +[ConventionCategory(ConventionCategory.Core)] public class NewtonsoftJsonConvention : IServiceConvention, ISerilogConvention { /// @@ -44,4 +45,4 @@ public void Register(IConventionContext context, IConfiguration configuration, I ) ); } -} \ No newline at end of file +} diff --git a/src/Foundation/Conventions/DefaultConvention.cs b/src/Foundation/Conventions/DefaultConvention.cs index 9a49800f0..76a0422b3 100644 --- a/src/Foundation/Conventions/DefaultConvention.cs +++ b/src/Foundation/Conventions/DefaultConvention.cs @@ -12,6 +12,7 @@ namespace Rocket.Surgery.LaunchPad.Foundation.Conventions; /// [PublicAPI] [ExportConvention] +[ConventionCategory(ConventionCategory.Core)] public class DefaultConvention : IServiceConvention { /// diff --git a/src/Foundation/Conventions/FluentValidationConvention.cs b/src/Foundation/Conventions/FluentValidationConvention.cs index 1a4405174..b8d1d4e9e 100644 --- a/src/Foundation/Conventions/FluentValidationConvention.cs +++ b/src/Foundation/Conventions/FluentValidationConvention.cs @@ -23,6 +23,7 @@ namespace Rocket.Surgery.LaunchPad.Foundation.Conventions; [ExportConvention] [AfterConvention(typeof(MediatRConvention))] [AfterConvention(typeof(HealthChecksConvention))] +[ConventionCategory(ConventionCategory.Core)] public class FluentValidationConvention : IServiceConvention { private readonly FoundationOptions _options; @@ -90,4 +91,4 @@ public void Register(IConventionContext context, IConfiguration configuration, I ServiceDescriptor.Describe(typeof(IStreamPipelineBehavior<,>), typeof(ValidationStreamPipelineBehavior<,>), _options.MediatorLifetime) ); } -} \ No newline at end of file +} diff --git a/src/Foundation/Conventions/HealthChecksConvention.cs b/src/Foundation/Conventions/HealthChecksConvention.cs index c3550c2bf..6b014159a 100644 --- a/src/Foundation/Conventions/HealthChecksConvention.cs +++ b/src/Foundation/Conventions/HealthChecksConvention.cs @@ -13,6 +13,7 @@ namespace Rocket.Surgery.LaunchPad.Foundation.Conventions; /// [PublicAPI] [ExportConvention] +[ConventionCategory(ConventionCategory.Core)] public class HealthChecksConvention : IServiceConvention { /// diff --git a/src/Foundation/Conventions/InstrumentationConvention.cs b/src/Foundation/Conventions/InstrumentationConvention.cs index 5ef29f59e..568fc5574 100644 --- a/src/Foundation/Conventions/InstrumentationConvention.cs +++ b/src/Foundation/Conventions/InstrumentationConvention.cs @@ -14,6 +14,7 @@ namespace Rocket.Surgery.LaunchPad.Foundation.Conventions; /// [PublicAPI] [ExportConvention] +[ConventionCategory(ConventionCategory.Core)] public class InstrumentationConvention : IOpenTelemetryConvention { /// @@ -22,4 +23,4 @@ public void Register(IConventionContext context, IConfiguration configuration, I builder.WithTracing(b => b.AddHttpClientInstrumentation(x => x.RecordException = true)); builder.WithMetrics(b => b.AddRuntimeInstrumentation().AddHttpClientInstrumentation()); } -} \ No newline at end of file +} diff --git a/src/Foundation/Conventions/MediatRConvention.cs b/src/Foundation/Conventions/MediatRConvention.cs index cf649e1b1..1e550e367 100644 --- a/src/Foundation/Conventions/MediatRConvention.cs +++ b/src/Foundation/Conventions/MediatRConvention.cs @@ -13,6 +13,7 @@ namespace Rocket.Surgery.LaunchPad.Foundation.Conventions; /// [PublicAPI] [ExportConvention] +[ConventionCategory(ConventionCategory.Core)] public class MediatRConvention : IServiceConvention { private readonly FoundationOptions _options; @@ -52,4 +53,4 @@ public void Register(IConventionContext context, IConfiguration configuration, I } ); } -} \ No newline at end of file +} diff --git a/src/Foundation/Conventions/OptionsConvention.cs b/src/Foundation/Conventions/OptionsConvention.cs index 40d0326bc..8bcbb05fe 100644 --- a/src/Foundation/Conventions/OptionsConvention.cs +++ b/src/Foundation/Conventions/OptionsConvention.cs @@ -10,6 +10,7 @@ namespace Rocket.Surgery.LaunchPad.Foundation.Conventions; /// A convention that registers any options POCOs that are found with the /// [ExportConvention] +[ConventionCategory(ConventionCategory.Core)] public class OptionsConvention : IServiceConvention { private readonly MethodInfo _configureMethod; @@ -37,4 +38,4 @@ public void Register(IConventionContext context, IConfiguration configuration, I _configureMethod.MakeGenericMethod(options).Invoke(null, [services, attribute.OptionsName, configuration.GetSection(attribute.ConfigurationKey),]); } } -} \ No newline at end of file +} diff --git a/src/Foundation/Conventions/ServiceDiscoveryConvention.cs b/src/Foundation/Conventions/ServiceDiscoveryConvention.cs index 13866f843..3a4d16bbe 100644 --- a/src/Foundation/Conventions/ServiceDiscoveryConvention.cs +++ b/src/Foundation/Conventions/ServiceDiscoveryConvention.cs @@ -10,19 +10,28 @@ namespace Rocket.Surgery.LaunchPad.Foundation.Conventions; /// [PublicAPI] [ExportConvention] -public class ServiceDiscoveryConvention : IServiceConvention +[ConventionCategory(ConventionCategory.Core)] +public class ServiceDiscoveryCoreConvention : IServiceConvention { /// public void Register(IConventionContext context, IConfiguration configuration, IServiceCollection services) { services.AddServiceDiscovery(); + services.ConfigureHttpClientDefaults(http => http.AddServiceDiscovery()); + } +} - services.ConfigureHttpClientDefaults( - http => - { - http.AddStandardResilienceHandler(); - http.AddServiceDiscovery(); - } - ); +/// +/// Service conventions using service discovery +/// +[PublicAPI] +[ExportConvention] +[ConventionCategory(ConventionCategory.Application)] +public class ServiceDiscoveryConvention : IServiceConvention +{ + /// + public void Register(IConventionContext context, IConfiguration configuration, IServiceCollection services) + { + services.ConfigureHttpClientDefaults(http => http.AddStandardResilienceHandler()); } -} \ No newline at end of file +} diff --git a/src/Foundation/Conventions/SystemTextJsonConvention.cs b/src/Foundation/Conventions/SystemTextJsonConvention.cs index b7acf4c61..4e1a76ced 100644 --- a/src/Foundation/Conventions/SystemTextJsonConvention.cs +++ b/src/Foundation/Conventions/SystemTextJsonConvention.cs @@ -18,6 +18,7 @@ namespace Rocket.Surgery.LaunchPad.Foundation.Conventions; /// [PublicAPI] [ExportConvention] +[ConventionCategory(ConventionCategory.Core)] public class SystemTextJsonConvention : IServiceConvention, ISerilogConvention { /// @@ -49,4 +50,4 @@ public void Register(IConventionContext context, IConfiguration configuration, I ) ); } -} \ No newline at end of file +} diff --git a/src/Foundation/Conventions/NodaTimeConvention.cs b/src/Foundation/Conventions/TimeConvention.cs similarity index 87% rename from src/Foundation/Conventions/NodaTimeConvention.cs rename to src/Foundation/Conventions/TimeConvention.cs index 9492879aa..bb59a8d1a 100644 --- a/src/Foundation/Conventions/NodaTimeConvention.cs +++ b/src/Foundation/Conventions/TimeConvention.cs @@ -16,7 +16,8 @@ namespace Rocket.Surgery.LaunchPad.Foundation.Conventions; /// [PublicAPI] [ExportConvention] -public class NodaTimeConvention : IServiceConvention, ISerilogConvention +[ConventionCategory(ConventionCategory.Core)] +public class TimeConvention : IServiceConvention, ISerilogConvention { private readonly FoundationOptions _options; @@ -24,7 +25,7 @@ public class NodaTimeConvention : IServiceConvention, ISerilogConvention /// Create the NodaTime convention /// /// - public NodaTimeConvention(FoundationOptions? options = null) + public TimeConvention(FoundationOptions? options = null) { _options = options ?? new FoundationOptions(); } @@ -45,7 +46,8 @@ public void Register(IConventionContext context, IConfiguration configuration, I { ArgumentNullException.ThrowIfNull(context); + services.TryAddSingleton(TimeProvider.System); services.TryAddSingleton(SystemClock.Instance); services.TryAddSingleton(new DateTimeZoneCache(_options.DateTimeZoneSource)); } -} \ No newline at end of file +} diff --git a/src/Grpc/Conventions/GrpcConvention.cs b/src/Grpc/Conventions/GrpcConvention.cs index 171cf8cd7..4b2cfa4dd 100644 --- a/src/Grpc/Conventions/GrpcConvention.cs +++ b/src/Grpc/Conventions/GrpcConvention.cs @@ -14,6 +14,7 @@ namespace Rocket.Surgery.LaunchPad.Grpc.Conventions; /// [PublicAPI] [ExportConvention] +[ConventionCategory(ConventionCategory.Application)] public class GrpcConvention : IServiceConvention { /// diff --git a/src/Hosting/Conventions/DefaultTelemetryConvention.cs b/src/Hosting/Conventions/DefaultTelemetryConvention.cs new file mode 100644 index 000000000..1fb13ee50 --- /dev/null +++ b/src/Hosting/Conventions/DefaultTelemetryConvention.cs @@ -0,0 +1,29 @@ +using System.Reflection; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Hosting; +using OpenTelemetry; +using OpenTelemetry.Resources; +using Rocket.Surgery.Conventions; +using Rocket.Surgery.LaunchPad.Telemetry; + +namespace Rocket.Surgery.LaunchPad.Hosting.Conventions; + +[ExportConvention] +[AfterConvention] +[ConventionCategory(ConventionCategory.Core)] +internal class DefaultTelemetryConvention : IOpenTelemetryConvention +{ + public void Register(IConventionContext context, IConfiguration configuration, IOpenTelemetryBuilder builder) + { + builder.ConfigureResource( + z => z + .AddTelemetrySdk() + .AddService( + configuration["OTEL_SERVICE_NAME"] ?? context.Get()?.ApplicationName ?? "unknown", + "Syndicates", + Assembly.GetExecutingAssembly().GetCustomAttribute()?.InformationalVersion, + serviceInstanceId: configuration["WEBSITE_SITE_NAME"] + ) + ); + } +} diff --git a/src/Hosting/Conventions/EnvironmentLoggingConvention.cs b/src/Hosting/Conventions/EnvironmentLoggingConvention.cs index 79382afcd..064a1d3f2 100644 --- a/src/Hosting/Conventions/EnvironmentLoggingConvention.cs +++ b/src/Hosting/Conventions/EnvironmentLoggingConvention.cs @@ -13,6 +13,7 @@ namespace Rocket.Surgery.LaunchPad.Hosting.Conventions; /// [PublicAPI] [ExportConvention] +[ConventionCategory(ConventionCategory.Core)] public class EnvironmentLoggingConvention : ISerilogConvention { /// @@ -34,4 +35,4 @@ LoggerConfiguration loggerConfiguration loggerConfiguration.Enrich.WithProperty(nameof(environment.EnvironmentName), environment.EnvironmentName); loggerConfiguration.Enrich.WithProperty(nameof(environment.ApplicationName), environment.ApplicationName); } -} \ No newline at end of file +} diff --git a/src/Hosting/Conventions/HostingConvention.cs b/src/Hosting/Conventions/HostingConvention.cs index ee3fd31b9..d5a0f45d9 100644 --- a/src/Hosting/Conventions/HostingConvention.cs +++ b/src/Hosting/Conventions/HostingConvention.cs @@ -1,35 +1,17 @@ -using System.Reflection; -using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; -using OpenTelemetry; -using OpenTelemetry.Resources; using Rocket.Surgery.Conventions; using Rocket.Surgery.Conventions.DependencyInjection; -using Rocket.Surgery.LaunchPad.Telemetry; namespace Rocket.Surgery.LaunchPad.Hosting.Conventions; [ExportConvention] [AfterConvention] -internal class HostingConvention : IServiceConvention, IOpenTelemetryConvention +[ConventionCategory(ConventionCategory.Application)] +internal class HostingConvention : IServiceConvention { - public void Register(IConventionContext context, IConfiguration configuration, IOpenTelemetryBuilder builder) - { - builder.ConfigureResource( - z => z - .AddTelemetrySdk() - .AddService( - configuration["OTEL_SERVICE_NAME"] ?? context.Get()?.ApplicationName ?? "unknown", - "Syndicates", - Assembly.GetExecutingAssembly().GetCustomAttribute()?.InformationalVersion, - serviceInstanceId: configuration["WEBSITE_SITE_NAME"] - ) - ); - } - public void Register(IConventionContext context, IConfiguration configuration, IServiceCollection services) { services.AddHostedService(); } -} \ No newline at end of file +} diff --git a/src/Hosting/Conventions/OpenTelemetryConvention.cs b/src/Hosting/Conventions/OpenTelemetryConvention.cs index 1bac4b438..13bc657b5 100644 --- a/src/Hosting/Conventions/OpenTelemetryConvention.cs +++ b/src/Hosting/Conventions/OpenTelemetryConvention.cs @@ -13,6 +13,7 @@ namespace Rocket.Surgery.LaunchPad.Hosting.Conventions; /// [PublicAPI] [ExportConvention] +[ConventionCategory(ConventionCategory.Core)] public class OpenTelemetryConvention : IServiceAsyncConvention { /// @@ -28,4 +29,4 @@ await services .ApplyConventionsAsync(context, cancellationToken) .ConfigureAwait(false); } -} \ No newline at end of file +} diff --git a/src/Hosting/Conventions/SerilogConsoleLoggingConvention.cs b/src/Hosting/Conventions/SerilogConsoleLoggingConvention.cs index ba3c376b5..24e7c5b12 100644 --- a/src/Hosting/Conventions/SerilogConsoleLoggingConvention.cs +++ b/src/Hosting/Conventions/SerilogConsoleLoggingConvention.cs @@ -16,6 +16,7 @@ namespace Rocket.Surgery.LaunchPad.Hosting.Conventions; [PublicAPI] [ExportConvention] [AfterConvention] +[ConventionCategory(ConventionCategory.Core)] public sealed class SerilogConsoleLoggingConvention : ISerilogConvention { private readonly LaunchPadLoggingOptions _options; @@ -50,4 +51,4 @@ LoggerConfiguration loggerConfiguration ) ); } -} \ No newline at end of file +} diff --git a/src/Hosting/Conventions/SerilogDebugLoggingConvention.cs b/src/Hosting/Conventions/SerilogDebugLoggingConvention.cs index 795ec6809..be4d47770 100644 --- a/src/Hosting/Conventions/SerilogDebugLoggingConvention.cs +++ b/src/Hosting/Conventions/SerilogDebugLoggingConvention.cs @@ -15,6 +15,7 @@ namespace Rocket.Surgery.LaunchPad.Hosting.Conventions; [PublicAPI] [ExportConvention] [AfterConvention] +[ConventionCategory(ConventionCategory.Core)] public sealed class SerilogDebugLoggingConvention : ISerilogConvention { private readonly LaunchPadLoggingOptions _options; @@ -48,4 +49,4 @@ LoggerConfiguration loggerConfiguration ) ); } -} \ No newline at end of file +} diff --git a/src/Hosting/Conventions/SerilogHostingConvention.cs b/src/Hosting/Conventions/SerilogHostingConvention.cs index b92598fa5..d1b50dd30 100644 --- a/src/Hosting/Conventions/SerilogHostingConvention.cs +++ b/src/Hosting/Conventions/SerilogHostingConvention.cs @@ -21,6 +21,7 @@ namespace Rocket.Surgery.LaunchPad.Hosting.Conventions; /// [PublicAPI] [ExportConvention] +[ConventionCategory(ConventionCategory.Core)] public class SerilogHostingConvention : IHostApplicationConvention, IHostCreatedConvention { private void CustomAddSerilog( @@ -109,4 +110,4 @@ private class NullEnricher : ILogEventEnricher { public void Enrich(LogEvent logEvent, ILogEventPropertyFactory propertyFactory) { } } -} \ No newline at end of file +} diff --git a/src/HotChocolate/Conventions/GraphqlConvention.cs b/src/HotChocolate/Conventions/GraphqlConvention.cs index e797d5ba8..f30fe0233 100644 --- a/src/HotChocolate/Conventions/GraphqlConvention.cs +++ b/src/HotChocolate/Conventions/GraphqlConvention.cs @@ -17,6 +17,7 @@ namespace Rocket.Surgery.LaunchPad.HotChocolate.Conventions; [PublicAPI] [ExportConvention] [BeforeConvention(typeof(HotChocolateConvention))] +[ConventionCategory(ConventionCategory.Application)] public class GraphqlConvention : IServiceConvention { private readonly FoundationOptions _foundationOptions; diff --git a/src/HotChocolate/Conventions/HotChocolateConvention.cs b/src/HotChocolate/Conventions/HotChocolateConvention.cs index 91aafec82..bb9061501 100644 --- a/src/HotChocolate/Conventions/HotChocolateConvention.cs +++ b/src/HotChocolate/Conventions/HotChocolateConvention.cs @@ -17,7 +17,8 @@ namespace Rocket.Surgery.LaunchPad.HotChocolate.Conventions; /// [PublicAPI] [ExportConvention] -[AfterConvention(typeof(NodaTimeConvention))] +[AfterConvention(typeof(TimeConvention))] +[ConventionCategory(ConventionCategory.Application)] public class HotChocolateConvention : IServiceConvention { /// diff --git a/src/HotChocolate/Conventions/InstrumentationConvention.cs b/src/HotChocolate/Conventions/InstrumentationConvention.cs index fa5bbd62a..4ce7d5905 100644 --- a/src/HotChocolate/Conventions/InstrumentationConvention.cs +++ b/src/HotChocolate/Conventions/InstrumentationConvention.cs @@ -14,6 +14,7 @@ namespace Rocket.Surgery.LaunchPad.HotChocolate.Conventions; /// [PublicAPI] [ExportConvention] +[ConventionCategory(ConventionCategory.Application)] public class InstrumentationConvention : IOpenTelemetryConvention { /// @@ -21,4 +22,4 @@ public void Register(IConventionContext context, IConfiguration configuration, I { builder.WithTracing(b => b.AddHotChocolateInstrumentation()); } -} \ No newline at end of file +} diff --git a/src/Serilog/Conventions/ConfigureOptionsLoggingConvention.cs b/src/Serilog/Conventions/ConfigureOptionsLoggingConvention.cs index 29b1badcf..d279928a7 100644 --- a/src/Serilog/Conventions/ConfigureOptionsLoggingConvention.cs +++ b/src/Serilog/Conventions/ConfigureOptionsLoggingConvention.cs @@ -13,6 +13,7 @@ namespace Rocket.Surgery.LaunchPad.Serilog.Conventions; /// [PublicAPI] [ExportConvention] +[ConventionCategory(ConventionCategory.Core)] public class ConfigureOptionsLoggingConvention : ISerilogConvention { /// @@ -44,4 +45,4 @@ LoggerConfiguration loggerConfiguration post.PostConfigure(Options.DefaultName, loggerConfiguration); } } -} \ No newline at end of file +} diff --git a/src/Serilog/Conventions/SerilogEnrichEnvironmentLoggingConvention.cs b/src/Serilog/Conventions/SerilogEnrichEnvironmentLoggingConvention.cs index 0de02e072..52646b31a 100644 --- a/src/Serilog/Conventions/SerilogEnrichEnvironmentLoggingConvention.cs +++ b/src/Serilog/Conventions/SerilogEnrichEnvironmentLoggingConvention.cs @@ -11,6 +11,7 @@ namespace Rocket.Surgery.LaunchPad.Serilog.Conventions; /// [PublicAPI] [ExportConvention] +[ConventionCategory(ConventionCategory.Core)] public class SerilogEnrichEnvironmentLoggingConvention : ISerilogConvention { /// @@ -36,4 +37,4 @@ LoggerConfiguration loggerConfiguration .Enrich.WithProcessName() .Enrich.WithThreadId(); } -} \ No newline at end of file +} diff --git a/src/Serilog/Conventions/SerilogEnrichLoggingConvention.cs b/src/Serilog/Conventions/SerilogEnrichLoggingConvention.cs index 42d706f9a..fa7779077 100644 --- a/src/Serilog/Conventions/SerilogEnrichLoggingConvention.cs +++ b/src/Serilog/Conventions/SerilogEnrichLoggingConvention.cs @@ -12,6 +12,7 @@ namespace Rocket.Surgery.LaunchPad.Serilog.Conventions; /// [PublicAPI] [ExportConvention] +[ConventionCategory(ConventionCategory.Core)] public class SerilogEnrichLoggingConvention : ISerilogConvention { /// @@ -34,4 +35,4 @@ LoggerConfiguration loggerConfiguration .Enrich.FromLogContext() .Enrich.WithExceptionDetails(); } -} \ No newline at end of file +} diff --git a/src/Serilog/Conventions/SerilogEnrichSpansConvention.cs b/src/Serilog/Conventions/SerilogEnrichSpansConvention.cs index 550d17c4b..d550be922 100644 --- a/src/Serilog/Conventions/SerilogEnrichSpansConvention.cs +++ b/src/Serilog/Conventions/SerilogEnrichSpansConvention.cs @@ -12,6 +12,7 @@ namespace Rocket.Surgery.LaunchPad.Serilog.Conventions; /// [PublicAPI] [ExportConvention] +[ConventionCategory(ConventionCategory.Core)] public class SerilogEnrichSpansConvention : ISerilogConvention { /// @@ -40,4 +41,4 @@ LoggerConfiguration loggerConfiguration } ); } -} \ No newline at end of file +} diff --git a/src/Serilog/Conventions/SerilogReadFromConfigurationConvention.cs b/src/Serilog/Conventions/SerilogReadFromConfigurationConvention.cs index 0909a443a..5bd7fca62 100644 --- a/src/Serilog/Conventions/SerilogReadFromConfigurationConvention.cs +++ b/src/Serilog/Conventions/SerilogReadFromConfigurationConvention.cs @@ -15,6 +15,7 @@ namespace Rocket.Surgery.LaunchPad.Serilog.Conventions; [PublicAPI] [LiveConvention] [ExportConvention] +[ConventionCategory(ConventionCategory.Core)] public class SerilogReadFromConfigurationConvention : ISerilogConvention, IConfigurationConvention { /// @@ -57,4 +58,4 @@ LoggerConfiguration loggerConfiguration loggerConfiguration.ReadFrom.Configuration(configuration); } -} \ No newline at end of file +} diff --git a/src/Serilog/SerilogAbstractionsHostBuilderExtensions.cs b/src/Serilog/SerilogAbstractionsHostBuilderExtensions.cs index d29ba6418..1009342a1 100644 --- a/src/Serilog/SerilogAbstractionsHostBuilderExtensions.cs +++ b/src/Serilog/SerilogAbstractionsHostBuilderExtensions.cs @@ -18,10 +18,17 @@ public static class SerilogAbstractionsHostBuilderExtensions /// /// The container. /// The delegate. + /// + /// /// IConventionHostBuilder. - public static ConventionContextBuilder ConfigureSerilog(this ConventionContextBuilder container, Action @delegate) + public static ConventionContextBuilder ConfigureSerilog( + this ConventionContextBuilder container, + Action @delegate, + int priority = 0, + ConventionCategory? category = null + ) { - return ConfigureSerilog(container, (_, _, _, logger) => @delegate(logger)); + return ConfigureSerilog(container, (_, _, _, logger) => @delegate(logger), priority, category); } /// @@ -29,13 +36,17 @@ public static ConventionContextBuilder ConfigureSerilog(this ConventionContextBu /// /// The container. /// The delegate. + /// + /// /// IConventionHostBuilder. public static ConventionContextBuilder ConfigureSerilog( this ConventionContextBuilder container, - Action @delegate + Action @delegate, + int priority = 0, + ConventionCategory? category = null ) { - return ConfigureSerilog(container, (_, configuration, services, logger) => @delegate(configuration, services, logger)); + return ConfigureSerilog(container, (_, configuration, services, logger) => @delegate(configuration, services, logger), priority, category); } /// @@ -43,13 +54,17 @@ Action @delegate /// /// The container. /// The delegate. + /// + /// /// IConventionHostBuilder. public static ConventionContextBuilder ConfigureSerilog( this ConventionContextBuilder container, - Action @delegate + Action @delegate, + int priority = 0, + ConventionCategory? category = null ) { - return ConfigureSerilog(container, (_, _, services, logger) => @delegate(services, logger)); + return ConfigureSerilog(container, (_, _, services, logger) => @delegate(services, logger), priority, category); } /// @@ -57,13 +72,20 @@ Action @delegate /// /// The container. /// The delegate. + /// + /// /// IConventionHostBuilder. - public static ConventionContextBuilder ConfigureSerilog(this ConventionContextBuilder container, SerilogConvention @delegate) + public static ConventionContextBuilder ConfigureSerilog( + this ConventionContextBuilder container, + SerilogConvention @delegate, + int priority = 0, + ConventionCategory? category = null + ) { ArgumentNullException.ThrowIfNull(container); ArgumentNullException.ThrowIfNull(@delegate); - container.AppendDelegate(@delegate); + container.AppendDelegate(@delegate, priority, category); return container; } -} \ No newline at end of file +} diff --git a/src/Spatial.NewtonsoftJson/Conventions/SpactialNewtonsoftJsonConvention.cs b/src/Spatial.NewtonsoftJson/Conventions/SpactialNewtonsoftJsonConvention.cs index 46c8c586e..b017de4a5 100644 --- a/src/Spatial.NewtonsoftJson/Conventions/SpactialNewtonsoftJsonConvention.cs +++ b/src/Spatial.NewtonsoftJson/Conventions/SpactialNewtonsoftJsonConvention.cs @@ -14,6 +14,7 @@ namespace Rocket.Surgery.LaunchPad.Spatial.Conventions; /// [PublicAPI] [ExportConvention] +[ConventionCategory(ConventionCategory.Core)] public class SpatialNewtonsoftJsonConvention : IServiceConvention { /// diff --git a/src/Spatial/Conventions/SpatialConvention.cs b/src/Spatial/Conventions/SpatialConvention.cs index df35018e3..311fedb08 100644 --- a/src/Spatial/Conventions/SpatialConvention.cs +++ b/src/Spatial/Conventions/SpatialConvention.cs @@ -16,6 +16,7 @@ namespace Rocket.Surgery.LaunchPad.Spatial.Conventions; /// [PublicAPI] [ExportConvention] +[ConventionCategory(ConventionCategory.Core)] public class SpatialConvention : IServiceConvention, ISerilogConvention { /// @@ -35,4 +36,4 @@ public void Register(IConventionContext context, IConfiguration configuration, I (options, factory) => options.ConfigureGeoJsonForLaunchPad(factory) ); } -} \ No newline at end of file +} diff --git a/src/StrawberryShake.Spatial/Conventions/StrawberryShakeSpatialConvention.cs b/src/StrawberryShake.Spatial/Conventions/StrawberryShakeSpatialConvention.cs index 599156d42..a251cfe47 100644 --- a/src/StrawberryShake.Spatial/Conventions/StrawberryShakeSpatialConvention.cs +++ b/src/StrawberryShake.Spatial/Conventions/StrawberryShakeSpatialConvention.cs @@ -11,6 +11,7 @@ namespace Rocket.Surgery.LaunchPad.StrawberryShake.Spatial.Conventions; /// [PublicAPI] [ExportConvention] +[ConventionCategory(ConventionCategory.Core)] public class StrawberryShakeSpatialConvention : IServiceConvention { /// @@ -19,4 +20,4 @@ public void Register(IConventionContext context, IConfiguration configuration, I services.AddSingleton(); // services.AddSerializer(); } -} \ No newline at end of file +} diff --git a/src/StrawberryShake/Conventions/StrawberryShakeConvention.cs b/src/StrawberryShake/Conventions/StrawberryShakeConvention.cs index 14e861fc5..062463688 100644 --- a/src/StrawberryShake/Conventions/StrawberryShakeConvention.cs +++ b/src/StrawberryShake/Conventions/StrawberryShakeConvention.cs @@ -11,6 +11,7 @@ namespace Rocket.Surgery.LaunchPad.StrawberryShake.Conventions; /// [PublicAPI] [ExportConvention] +[ConventionCategory(ConventionCategory.Core)] public class StrawberryShakeConvention : IServiceConvention { /// @@ -28,4 +29,4 @@ public void Register(IConventionContext context, IConfiguration configuration, I services.AddSingleton(); services.AddSingleton(); } -} \ No newline at end of file +} diff --git a/src/Telemetry/RocketSurgeryOpenTelemetryExtensions.cs b/src/Telemetry/RocketSurgeryOpenTelemetryExtensions.cs index 6f64f0cb2..5b55a7555 100644 --- a/src/Telemetry/RocketSurgeryOpenTelemetryExtensions.cs +++ b/src/Telemetry/RocketSurgeryOpenTelemetryExtensions.cs @@ -56,13 +56,18 @@ public static async ValueTask ApplyConventionsAsync( /// The container. /// The delegate. /// IConventionHostBuilder. - public static ConventionContextBuilder ConfigureOpenTelemetry(this ConventionContextBuilder container, OpenTelemetryConvention @delegate) + public static ConventionContextBuilder ConfigureOpenTelemetry( + this ConventionContextBuilder container, + OpenTelemetryConvention @delegate, + int priority = 0, + ConventionCategory? category = null + ) { ArgumentNullException.ThrowIfNull(container); ArgumentNullException.ThrowIfNull(@delegate); - container.AppendDelegate(@delegate); + container.AppendDelegate(@delegate, priority, category); return container; } @@ -73,13 +78,18 @@ public static ConventionContextBuilder ConfigureOpenTelemetry(this ConventionCon /// The container. /// The delegate. /// IConventionHostBuilder. - public static ConventionContextBuilder ConfigureOpenTelemetry(this ConventionContextBuilder container, Action @delegate) + public static ConventionContextBuilder ConfigureOpenTelemetry( + this ConventionContextBuilder container, + Action @delegate, + int priority = 0, + ConventionCategory? category = null + ) { ArgumentNullException.ThrowIfNull(container); ArgumentNullException.ThrowIfNull(@delegate); - container.AppendDelegate(@delegate); + container.AppendDelegate(@delegate, priority, category); return container; } @@ -89,13 +99,18 @@ public static ConventionContextBuilder ConfigureOpenTelemetry(this ConventionCon /// The container. /// The delegate. /// IConventionHostBuilder. - public static ConventionContextBuilder ConfigureOpenTelemetry(this ConventionContextBuilder container, OpenTelemetryAsyncConvention @delegate) + public static ConventionContextBuilder ConfigureOpenTelemetry( + this ConventionContextBuilder container, + OpenTelemetryAsyncConvention @delegate, + int priority = 0, + ConventionCategory? category = null + ) { ArgumentNullException.ThrowIfNull(container); ArgumentNullException.ThrowIfNull(@delegate); - container.AppendDelegate(@delegate); + container.AppendDelegate(@delegate, priority, category); return container; } @@ -105,13 +120,18 @@ public static ConventionContextBuilder ConfigureOpenTelemetry(this ConventionCon /// The container. /// The delegate. /// IConventionHostBuilder. - public static ConventionContextBuilder ConfigureOpenTelemetry(this ConventionContextBuilder container, Func @delegate) + public static ConventionContextBuilder ConfigureOpenTelemetry( + this ConventionContextBuilder container, + Func @delegate, + int priority = 0, + ConventionCategory? category = null + ) { ArgumentNullException.ThrowIfNull(container); ArgumentNullException.ThrowIfNull(@delegate); - container.AppendDelegate(new OpenTelemetryAsyncConvention((_, _, builder, _) => @delegate(builder))); + container.AppendDelegate(new OpenTelemetryAsyncConvention((_, _, builder, _) => @delegate(builder)), priority, category); return container; } @@ -123,14 +143,16 @@ public static ConventionContextBuilder ConfigureOpenTelemetry(this ConventionCon /// IConventionHostBuilder. public static ConventionContextBuilder ConfigureOpenTelemetry( this ConventionContextBuilder container, - Func @delegate + Func @delegate, + int priority = 0, + ConventionCategory? category = null ) { ArgumentNullException.ThrowIfNull(container); ArgumentNullException.ThrowIfNull(@delegate); - container.AppendDelegate(new OpenTelemetryAsyncConvention((_, _, builder, token) => @delegate(builder, token))); + container.AppendDelegate(new OpenTelemetryAsyncConvention((_, _, builder, token) => @delegate(builder, token)), priority, category); return container; } -} \ No newline at end of file +} diff --git a/src/Testing/FakeClockConvention.cs b/src/Testing/FakeTimeConvention.cs similarity index 56% rename from src/Testing/FakeClockConvention.cs rename to src/Testing/FakeTimeConvention.cs index df77a64fc..97fd26d5b 100644 --- a/src/Testing/FakeClockConvention.cs +++ b/src/Testing/FakeTimeConvention.cs @@ -1,7 +1,9 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; +using Microsoft.Extensions.Time.Testing; using NodaTime; -using NodaTime.Testing; +using NodaTime.Extensions; using Rocket.Surgery.Conventions; using Rocket.Surgery.Conventions.DependencyInjection; using Rocket.Surgery.LaunchPad.Foundation.Conventions; @@ -14,8 +16,9 @@ namespace Rocket.Surgery.LaunchPad.Testing; [PublicAPI] [UnitTestConvention] [ExportConvention] -[BeforeConvention(typeof(NodaTimeConvention))] -public class FakeClockConvention : IServiceConvention +[BeforeConvention(typeof(TimeConvention))] +[ConventionCategory(ConventionCategory.Core)] +public class FakeTimeConvention : IServiceConvention { private readonly int _unixTimeSeconds; private readonly Duration _advanceBy; @@ -25,7 +28,7 @@ public class FakeClockConvention : IServiceConvention /// /// /// - public FakeClockConvention(int? unixTimeSeconds = null, Duration? advanceBy = null) + public FakeTimeConvention(int? unixTimeSeconds = null, Duration? advanceBy = null) { _unixTimeSeconds = unixTimeSeconds ?? 1577836800; _advanceBy = advanceBy ?? Duration.FromSeconds(1); @@ -34,7 +37,9 @@ public FakeClockConvention(int? unixTimeSeconds = null, Duration? advanceBy = nu /// public void Register(IConventionContext context, IConfiguration configuration, IServiceCollection services) { - services.AddSingleton(new FakeClock(Instant.FromUnixTimeSeconds(_unixTimeSeconds), _advanceBy)); - services.AddSingleton(provider => provider.GetRequiredService()); + services.RemoveAll(); + services.AddSingleton(new FakeTimeProvider(DateTimeOffset.FromUnixTimeSeconds(_unixTimeSeconds)) { AutoAdvanceAmount = _advanceBy.ToTimeSpan(), }); + services.AddSingleton(sp => sp.GetRequiredService()); + services.AddSingleton(s => s.GetRequiredService().ToClock()); } -} \ No newline at end of file +} diff --git a/src/Testing/Rocket.Surgery.LaunchPad.Testing.csproj b/src/Testing/Rocket.Surgery.LaunchPad.Testing.csproj index e26f21450..5690eceef 100644 --- a/src/Testing/Rocket.Surgery.LaunchPad.Testing.csproj +++ b/src/Testing/Rocket.Surgery.LaunchPad.Testing.csproj @@ -5,6 +5,7 @@ $(PackageTags) + diff --git a/test/Analyzers.Tests/Analyzers.Tests.csproj b/test/Analyzers.Tests/Analyzers.Tests.csproj index 3ccd3663e..940637c69 100644 --- a/test/Analyzers.Tests/Analyzers.Tests.csproj +++ b/test/Analyzers.Tests/Analyzers.Tests.csproj @@ -4,7 +4,6 @@ $(DefineConstants);ROSLYN_CURRENT;ROSLYN4_8 - diff --git a/test/Analyzers.Tests/snapshots/ControllerActionBodyGeneratorTests.Should_Error_If_Controller_Is_Not_Partial.verified.txt b/test/Analyzers.Tests/snapshots/ControllerActionBodyGeneratorTests.Should_Error_If_Controller_Is_Not_Partial.verified.txt index c30160459..dadb5e41c 100644 --- a/test/Analyzers.Tests/snapshots/ControllerActionBodyGeneratorTests.Should_Error_If_Controller_Is_Not_Partial.verified.txt +++ b/test/Analyzers.Tests/snapshots/ControllerActionBodyGeneratorTests.Should_Error_If_Controller_Is_Not_Partial.verified.txt @@ -7,8 +7,8 @@ WarningLevel: 0, Location: Input2.cs: (11,64)-(11,75), HelpLink: https://msdn.microsoft.com/query/roslyn.query?appId=roslyn&k=k(CS0751), - MessageFormat: A partial method must be declared within a partial type, - Message: A partial method must be declared within a partial type, + MessageFormat: A partial member must be declared within a partial type, + Message: A partial member must be declared within a partial type, Category: Compiler, CustomTags: [ Compiler, @@ -39,8 +39,8 @@ WarningLevel: 0, Location: Input2.cs: (14,51)-(14,60), HelpLink: https://msdn.microsoft.com/query/roslyn.query?appId=roslyn&k=k(CS0751), - MessageFormat: A partial method must be declared within a partial type, - Message: A partial method must be declared within a partial type, + MessageFormat: A partial member must be declared within a partial type, + Message: A partial member must be declared within a partial type, Category: Compiler, CustomTags: [ Compiler, diff --git a/test/Analyzers.Tests/snapshots/GraphqlMutationActionBodyGeneratorTests.Should_Error_If_Class_Is_Not_Partial.verified.txt b/test/Analyzers.Tests/snapshots/GraphqlMutationActionBodyGeneratorTests.Should_Error_If_Class_Is_Not_Partial.verified.txt index ea02b7e03..58c266473 100644 --- a/test/Analyzers.Tests/snapshots/GraphqlMutationActionBodyGeneratorTests.Should_Error_If_Class_Is_Not_Partial.verified.txt +++ b/test/Analyzers.Tests/snapshots/GraphqlMutationActionBodyGeneratorTests.Should_Error_If_Class_Is_Not_Partial.verified.txt @@ -7,8 +7,8 @@ WarningLevel: 0, Location: Input1.cs: (8,50)-(8,61), HelpLink: https://msdn.microsoft.com/query/roslyn.query?appId=roslyn&k=k(CS0751), - MessageFormat: A partial method must be declared within a partial type, - Message: A partial method must be declared within a partial type, + MessageFormat: A partial member must be declared within a partial type, + Message: A partial member must be declared within a partial type, Category: Compiler, CustomTags: [ Compiler, diff --git a/test/Extensions.Tests/FakeClockConventionTests.cs b/test/Extensions.Tests/FakeTimeConventionTests.cs similarity index 84% rename from test/Extensions.Tests/FakeClockConventionTests.cs rename to test/Extensions.Tests/FakeTimeConventionTests.cs index 1f3fc286b..8cfd3c16b 100644 --- a/test/Extensions.Tests/FakeClockConventionTests.cs +++ b/test/Extensions.Tests/FakeTimeConventionTests.cs @@ -2,21 +2,20 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using NodaTime; -using NodaTime.Testing; using Rocket.Surgery.Conventions; using Rocket.Surgery.LaunchPad.Foundation; using Rocket.Surgery.LaunchPad.Testing; namespace Extensions.Tests; -public class FakeClockConventionTests(ITestOutputHelper testOutputHelper) : ConventionFakeTest(testOutputHelper) +public class FakeTimeConventionTests(ITestOutputHelper testOutputHelper) : ConventionFakeTest(testOutputHelper) { [Fact] public async Task Clock_Convention_Default() { await Init(x => { x.Set(HostType.UnitTest); }); var clock = Container.GetRequiredService(); - clock.Should().BeOfType(); + clock.Should().BeAssignableTo(); clock.GetCurrentInstant().Should().Be(Instant.FromUnixTimeSeconds(1577836800)); clock.GetCurrentInstant().Should().Be(Instant.FromUnixTimeSeconds(1577836800) + Duration.FromSeconds(1)); } @@ -24,10 +23,10 @@ public async Task Clock_Convention_Default() [Fact] public async Task Clock_Convention_Override() { - await Init(x => { x.AppendConvention(new FakeClockConvention(0, Duration.FromMinutes(1))); }); + await Init(x => { x.AppendConvention(new FakeTimeConvention(0, Duration.FromMinutes(1))); }); var clock = ServiceProvider.GetRequiredService(); - clock.Should().BeOfType(); + clock.Should().BeAssignableTo(); clock.GetCurrentInstant().Should().Be(Instant.FromUnixTimeSeconds(0)); clock.GetCurrentInstant().Should().Be(Instant.FromUnixTimeSeconds(0) + Duration.FromMinutes(1)); } @@ -56,4 +55,4 @@ private class OptionsB { public required string B { get; set; } } -} \ No newline at end of file +} diff --git a/test/Extensions.Tests/Mapping/DurationTests.cs b/test/Extensions.Tests/Mapping/DurationTests.cs index ae53823e4..e7d5687dc 100644 --- a/test/Extensions.Tests/Mapping/DurationTests.cs +++ b/test/Extensions.Tests/Mapping/DurationTests.cs @@ -13,7 +13,8 @@ public partial class DurationTests(ITestOutputHelper testOutputHelper) : MapperT public Task Maps_All_Methods(MethodResult result) { return VerifyMethod(result, new Mapper(), TimeSpan.FromHours(1), Duration.FromMinutes(44)) - .UseHashedParameters(result.ToString()); + .UseParameters(result.ToString()) + .HashParameters(); } [Mapper] @@ -57,4 +58,4 @@ private class Foo4 { public TimeSpan? Bar { get; set; } } -} \ No newline at end of file +} diff --git a/test/Extensions.Tests/Mapping/Helpers/MapperTestBase.cs b/test/Extensions.Tests/Mapping/Helpers/MapperTestBase.cs index 0795b6cef..411ebc0a0 100644 --- a/test/Extensions.Tests/Mapping/Helpers/MapperTestBase.cs +++ b/test/Extensions.Tests/Mapping/Helpers/MapperTestBase.cs @@ -6,11 +6,11 @@ public abstract class MapperTestBase(ITestOutputHelper testOutputHelper) : AutoF { protected SettingsTask VerifyMethod(MethodResult result, object mapper, params object[] instances) { - return Verify(result.Map(mapper, instances)).UseHashedParameters(result.ToString()); + return Verify(result.Map(mapper, instances)).UseParameters(result.ToString()).HashParameters(); } protected SettingsTask VerifyEachMethod(MethodResult result, object mapper, params object[] instances) { - return Verify(result.MapEach(mapper, instances)).UseHashedParameters(result.ToString()); + return Verify(result.MapEach(mapper, instances)).UseParameters(result.ToString()).HashParameters(); } -} \ No newline at end of file +} diff --git a/test/Extensions.Tests/Mapping/InstantTests.cs b/test/Extensions.Tests/Mapping/InstantTests.cs index fc110e9c0..ae1bffb99 100644 --- a/test/Extensions.Tests/Mapping/InstantTests.cs +++ b/test/Extensions.Tests/Mapping/InstantTests.cs @@ -15,13 +15,14 @@ public partial class InstantTests(ITestOutputHelper testOutputHelper) : MapperTe public Task Maps_All_Methods(MethodResult result) { return VerifyMethod( - result, - new Mapper(), - _fakeTimeProvider.GetUtcNow(), - _fakeTimeProvider.GetUtcNow().UtcDateTime, - Instant.FromDateTimeOffset(_fakeTimeProvider.GetUtcNow()) - ) - .UseHashedParameters(result.ToString()); + result, + new Mapper(), + _fakeTimeProvider.GetUtcNow(), + _fakeTimeProvider.GetUtcNow().UtcDateTime, + Instant.FromDateTimeOffset(_fakeTimeProvider.GetUtcNow()) + ) + .UseParameters(result.ToString()) + .HashParameters(); } [Mapper] @@ -97,4 +98,4 @@ private class Foo6 { public DateTimeOffset? Bar { get; set; } } -} \ No newline at end of file +} diff --git a/test/Extensions.Tests/Mapping/JsonElementConverterTests.cs b/test/Extensions.Tests/Mapping/JsonElementConverterTests.cs index 9aa3909cf..d31681257 100644 --- a/test/Extensions.Tests/Mapping/JsonElementConverterTests.cs +++ b/test/Extensions.Tests/Mapping/JsonElementConverterTests.cs @@ -20,33 +20,34 @@ public Task Maps_All_Methods(MethodResult result) var stub = A.Fake>(); A.CallTo(() => stub.CurrentValue).Returns(new()); return VerifyEachMethod( - result, - new Mapper(stub), - string.Empty, - "null", - "[]", - "{}", - "\"1234\"", - "1234", - "[1234,5678]", - "{\"a\":1234}", - ""u8.ToArray(), - "null"u8.ToArray(), - "[]"u8.ToArray(), - "{}"u8.ToArray(), - "\"1234\""u8.ToArray(), - "1234"u8.ToArray(), - "[1234,5678]"u8.ToArray(), - "{\"a\":1234}"u8.ToArray(), - JsonDocument.Parse("null").RootElement, - JsonDocument.Parse("[]").RootElement, - JsonDocument.Parse("{}").RootElement, - JsonDocument.Parse("\"1234\"").RootElement, - JsonDocument.Parse("1234").RootElement, - JsonDocument.Parse("[1234,5678]").RootElement, - JsonDocument.Parse("{\"a\":1234}").RootElement - ) - .UseHashedParameters(result.ToString()); + result, + new Mapper(stub), + string.Empty, + "null", + "[]", + "{}", + "\"1234\"", + "1234", + "[1234,5678]", + "{\"a\":1234}", + ""u8.ToArray(), + "null"u8.ToArray(), + "[]"u8.ToArray(), + "{}"u8.ToArray(), + "\"1234\""u8.ToArray(), + "1234"u8.ToArray(), + "[1234,5678]"u8.ToArray(), + "{\"a\":1234}"u8.ToArray(), + JsonDocument.Parse("null").RootElement, + JsonDocument.Parse("[]").RootElement, + JsonDocument.Parse("{}").RootElement, + JsonDocument.Parse("\"1234\"").RootElement, + JsonDocument.Parse("1234").RootElement, + JsonDocument.Parse("[1234,5678]").RootElement, + JsonDocument.Parse("{\"a\":1234}").RootElement + ) + .UseParameters(result.ToString()) + .HashParameters(); } [Mapper] @@ -83,4 +84,4 @@ private class JsonElementA { public JsonElement Bar { get; set; } } -} \ No newline at end of file +} diff --git a/test/Extensions.Tests/Mapping/LocalDateTests.cs b/test/Extensions.Tests/Mapping/LocalDateTests.cs index 21cdc853e..297e7b6ab 100644 --- a/test/Extensions.Tests/Mapping/LocalDateTests.cs +++ b/test/Extensions.Tests/Mapping/LocalDateTests.cs @@ -14,13 +14,14 @@ public partial class LocalDateTests(ITestOutputHelper testOutputHelper) : Mapper public Task Maps_All_Methods(MethodResult result) { return VerifyMethod( - result, - new Mapper(), - _fakeTimeProvider.GetLocalNow().DateTime, - DateOnly.FromDateTime(_fakeTimeProvider.GetLocalNow().DateTime), - LocalDate.FromDateTime(_fakeTimeProvider.GetLocalNow().DateTime) - ) - .UseHashedParameters(result.ToString()); + result, + new Mapper(), + _fakeTimeProvider.GetLocalNow().DateTime, + DateOnly.FromDateTime(_fakeTimeProvider.GetLocalNow().DateTime), + LocalDate.FromDateTime(_fakeTimeProvider.GetLocalNow().DateTime) + ) + .UseParameters(result.ToString()) + .HashParameters(); } [Mapper] @@ -63,4 +64,4 @@ private class Foo6 { public DateOnly? Bar { get; set; } } -} \ No newline at end of file +} diff --git a/test/Extensions.Tests/Mapping/LocalDateTimeTests.cs b/test/Extensions.Tests/Mapping/LocalDateTimeTests.cs index f1c350229..377ec242d 100644 --- a/test/Extensions.Tests/Mapping/LocalDateTimeTests.cs +++ b/test/Extensions.Tests/Mapping/LocalDateTimeTests.cs @@ -17,12 +17,13 @@ public partial class LocalDateTimeTests(ITestOutputHelper testOutputHelper) : Ma public Task Maps_All_Methods(MethodResult result) { return VerifyMethod( - result, - new Mapper(), - _fakeTimeProvider.GetLocalNow().DateTime, - LocalDateTime.FromDateTime(_fakeTimeProvider.GetLocalNow().DateTime) - ) - .UseHashedParameters(result.ToString()); + result, + new Mapper(), + _fakeTimeProvider.GetLocalNow().DateTime, + LocalDateTime.FromDateTime(_fakeTimeProvider.GetLocalNow().DateTime) + ) + .UseParameters(result.ToString()) + .HashParameters(); } [Mapper] @@ -66,4 +67,4 @@ private class Foo4 { public DateTime? Bar { get; set; } } -} \ No newline at end of file +} diff --git a/test/Extensions.Tests/Mapping/LocalTimeTests.cs b/test/Extensions.Tests/Mapping/LocalTimeTests.cs index 91ed0e984..b9bac23f0 100644 --- a/test/Extensions.Tests/Mapping/LocalTimeTests.cs +++ b/test/Extensions.Tests/Mapping/LocalTimeTests.cs @@ -14,13 +14,14 @@ public partial class LocalTimeTests(ITestOutputHelper testOutputHelper) : Mapper public Task Maps_All_Methods(MethodResult result) { return VerifyMethod( - result, - new Mapper(), - _fakeTimeProvider.GetLocalNow().DateTime, - TimeOnly.FromDateTime(_fakeTimeProvider.GetLocalNow().DateTime), - LocalTime.FromTimeOnly(TimeOnly.FromDateTime(_fakeTimeProvider.GetLocalNow().DateTime)) - ) - .UseHashedParameters(result.ToString()); + result, + new Mapper(), + _fakeTimeProvider.GetLocalNow().DateTime, + TimeOnly.FromDateTime(_fakeTimeProvider.GetLocalNow().DateTime), + LocalTime.FromTimeOnly(TimeOnly.FromDateTime(_fakeTimeProvider.GetLocalNow().DateTime)) + ) + .UseParameters(result.ToString()) + .HashParameters(); } [Mapper] @@ -63,4 +64,4 @@ private class Foo6 { public TimeOnly? Bar { get; set; } } -} \ No newline at end of file +} diff --git a/test/Extensions.Tests/Mapping/OffsetDateTimeTests.cs b/test/Extensions.Tests/Mapping/OffsetDateTimeTests.cs index d8db5dd22..c5cbda3cc 100644 --- a/test/Extensions.Tests/Mapping/OffsetDateTimeTests.cs +++ b/test/Extensions.Tests/Mapping/OffsetDateTimeTests.cs @@ -15,12 +15,13 @@ public partial class OffsetDateTimeTests(ITestOutputHelper testOutputHelper) : M public Task Maps_All_Methods(MethodResult result) { return VerifyMethod( - result, - new Mapper(), - _fakeTimeProvider.GetLocalNow(), - OffsetDateTime.FromDateTimeOffset(_fakeTimeProvider.GetLocalNow()) - ) - .UseHashedParameters(result.ToString()); + result, + new Mapper(), + _fakeTimeProvider.GetLocalNow(), + OffsetDateTime.FromDateTimeOffset(_fakeTimeProvider.GetLocalNow()) + ) + .UseParameters(result.ToString()) + .HashParameters(); } [Mapper] @@ -64,4 +65,4 @@ private class Foo4 { public DateTimeOffset? Bar { get; set; } } -} \ No newline at end of file +} diff --git a/test/Extensions.Tests/Mapping/OffsetTests.cs b/test/Extensions.Tests/Mapping/OffsetTests.cs index 41da220d4..c4dc01709 100644 --- a/test/Extensions.Tests/Mapping/OffsetTests.cs +++ b/test/Extensions.Tests/Mapping/OffsetTests.cs @@ -15,12 +15,13 @@ public partial class OffsetTests(ITestOutputHelper testOutputHelper) : MapperTes public Task Maps_All_Methods(MethodResult result) { return VerifyMethod( - result, - new Mapper(), - Offset.FromHours(11), - TimeSpan.FromHours(10) - ) - .UseHashedParameters(result.ToString()); + result, + new Mapper(), + Offset.FromHours(11), + TimeSpan.FromHours(10) + ) + .UseParameters(result.ToString()) + .HashParameters(); } [Mapper] @@ -64,4 +65,4 @@ private class Foo4 { public TimeSpan? Bar { get; set; } } -} \ No newline at end of file +} diff --git a/test/Extensions.Tests/Mapping/PeriodTests.cs b/test/Extensions.Tests/Mapping/PeriodTests.cs index f0cb16e3f..83beb24fc 100644 --- a/test/Extensions.Tests/Mapping/PeriodTests.cs +++ b/test/Extensions.Tests/Mapping/PeriodTests.cs @@ -15,12 +15,13 @@ public partial class PeriodTests(ITestOutputHelper testOutputHelper) : MapperTes public Task Maps_All_Methods(MethodResult result) { return VerifyMethod( - result, - new Mapper(), - Period.FromMonths(10), - "P5M" - ) - .UseHashedParameters(result.ToString()); + result, + new Mapper(), + Period.FromMonths(10), + "P5M" + ) + .UseParameters(result.ToString()) + .HashParameters(); } [Mapper] @@ -41,4 +42,4 @@ private class Foo3 { public string? Bar { get; set; } } -} \ No newline at end of file +} diff --git a/test/Extensions.Tests/MediatRTests.cs b/test/Extensions.Tests/MediatRTests.cs index 34f3190ed..987814902 100644 --- a/test/Extensions.Tests/MediatRTests.cs +++ b/test/Extensions.Tests/MediatRTests.cs @@ -16,7 +16,7 @@ public class MediatRTests(ITestOutputHelper outputHelper) : AutoFakeTest(outputH public async Task Test1() { #pragma warning disable CS8620 // Argument cannot be used for parameter due to differences in the nullability of reference types. - var builder = new ConventionContextBuilder(new Dictionary()) + var builder = new ConventionContextBuilder(new Dictionary(), []) #pragma warning restore CS8620 // Argument cannot be used for parameter due to differences in the nullability of reference types. .UseConventionFactory(Imports.Instance); var context = await ConventionContext.FromAsync(builder); @@ -43,7 +43,7 @@ public async Task Test1() public async Task Test2() { #pragma warning disable CS8620 // Argument cannot be used for parameter due to differences in the nullability of reference types. - var builder = new ConventionContextBuilder(new Dictionary()) + var builder = new ConventionContextBuilder(new Dictionary(), []) #pragma warning restore CS8620 // Argument cannot be used for parameter due to differences in the nullability of reference types. .UseConventionFactory(Imports.Instance); var context = await ConventionContext.FromAsync(builder); diff --git a/test/Sample.Graphql.Tests/ModuleInitializer.cs b/test/Sample.Graphql.Tests/ModuleInitializer.cs index 568dfd1fa..578d94a38 100644 --- a/test/Sample.Graphql.Tests/ModuleInitializer.cs +++ b/test/Sample.Graphql.Tests/ModuleInitializer.cs @@ -1,9 +1,7 @@ using System.Runtime.CompilerServices; -using Argon.NodaTime; using DiffEngine; using NetTopologySuite.Geometries; using NetTopologySuite.IO; -using NodaTime; using Path = System.IO.Path; namespace Sample.Graphql.Tests; @@ -15,7 +13,7 @@ public static void Init() { DiffRunner.Disabled = true; VerifierSettings.DontScrubDateTimes(); - VerifierSettings.AddExtraSettings(settings => settings.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb)); +// VerifierSettings.AddExtraSettings(settings => settings.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb)); VerifierSettings.AddExtraSettings(settings => settings.Converters.Add(new GeometryConverter())); VerifierSettings.DisableRequireUniquePrefix(); @@ -54,4 +52,4 @@ public override void Write(VerifyJsonWriter writer, object value) writer.WriteValue(_writer.Write((Geometry)value)); } } -} \ No newline at end of file +} diff --git a/test/Sample.Graphql.Tests/Rockets/UpdateRocketTests.cs b/test/Sample.Graphql.Tests/Rockets/UpdateRocketTests.cs index c216a3769..afc8d71f6 100644 --- a/test/Sample.Graphql.Tests/Rockets/UpdateRocketTests.cs +++ b/test/Sample.Graphql.Tests/Rockets/UpdateRocketTests.cs @@ -154,7 +154,7 @@ public async Task Should_Validate_Required_Fields(EditRocketRequest request, str var response = await client.UpdateRocket.ExecuteAsync(request); response.IsErrorResult().Should().BeTrue(); - await Verify(response).UseHashedParameters(request, propertyName); + await Verify(response).UseParameters(request, propertyName).HashParameters(); } private class ShouldValidateUsersRequiredFieldData : TheoryData @@ -201,4 +201,4 @@ public ShouldValidateUsersRequiredFieldData() ); } } -} \ No newline at end of file +} diff --git a/test/Sample.Graphql.Tests/snapshots/StrawberryShakeSerializerTests.Should_Roundtrip_Duration.verified.txt b/test/Sample.Graphql.Tests/snapshots/StrawberryShakeSerializerTests.Should_Roundtrip_Duration.verified.txt index 9c82f8cb5..16d5859c5 100644 --- a/test/Sample.Graphql.Tests/snapshots/StrawberryShakeSerializerTests.Should_Roundtrip_Duration.verified.txt +++ b/test/Sample.Graphql.Tests/snapshots/StrawberryShakeSerializerTests.Should_Roundtrip_Duration.verified.txt @@ -1,13 +1,13 @@ { Data: { NodaTimeTest: { - Duration: 1:00:00 + Duration: 0:01:00:00 } }, DataInfo: { NodaTimeTest: { __typename: NodaTimeOutputs, - Duration: 1:00:00 + Duration: 0:01:00:00 }, Version: 1 },