diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index bde2d00c7..3899d0143 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -178,7 +178,7 @@ jobs: if: ${{ success() || steps.report.conclusion == 'failure' }} run: cat code-coverage-results.md >> $GITHUB_STEP_SUMMARY - name: Create code coverage report - uses: danielpalme/ReportGenerator-GitHub-Action@5.3.11 + uses: danielpalme/ReportGenerator-GitHub-Action@5.4.1 if: ${{ success() || steps.report.conclusion == 'failure' }} with: reports: "./src/HomeInventory/coverage.cobertura.xml" # REQUIRED # The coverage reports that should be parsed (separated by semicolon). Globbing is supported. @@ -293,7 +293,7 @@ jobs: - name: Install Living Documentation Tool run: dotnet tool install --global SpecFlow.Plus.LivingDoc.CLI - name: Generate Living Documentation Specification - run: livingdoc test-assembly "HomeInventory.Tests.Acceptance/bin/Release/net8/HomeInventory.Tests.Acceptance.dll" -t "HomeInventory.Tests.Acceptance/bin/Release/net8/TestExecution.json" -o "./Acceptance/AcceptanceTestResults.html" + run: livingdoc test-assembly "HomeInventory.Tests.Acceptance/bin/Release/net9/HomeInventory.Tests.Acceptance.dll" -t "HomeInventory.Tests.Acceptance/bin/Release/net9/TestExecution.json" -o "./Acceptance/AcceptanceTestResults.html" working-directory: ./src/HomeInventory - name: Publish Specflow Test Results if: success() || failure() diff --git a/.gitignore b/.gitignore index 3e895aa13..d0709c8d6 100644 --- a/.gitignore +++ b/.gitignore @@ -350,3 +350,17 @@ MigrationBackup/ .ionide/ *.feature.cs src/HomeInventory/coverage + +# Default ignored files for Idea +/shelf/ +/workspace.xml +# Rider ignored files +/projectSettingsUpdater.xml +/.idea.HomeInventory.iml +/contentModel.xml +/modules.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 000000000..8f5aaa3f6 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,13 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Rider ignored files +/.idea.HomeInventory.iml +/projectSettingsUpdater.xml +/modules.xml +/contentModel.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/indexLayout.xml b/.idea/indexLayout.xml new file mode 100644 index 000000000..7b08163ce --- /dev/null +++ b/.idea/indexLayout.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 000000000..35eb1ddfb --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/HomeInventory/.editorconfig b/src/HomeInventory/.editorconfig index 3dd0c3bb6..a8aa075ca 100644 --- a/src/HomeInventory/.editorconfig +++ b/src/HomeInventory/.editorconfig @@ -4,7 +4,7 @@ dotnet_diagnostic.CA2016.severity = warning # IDE0008: Use explicit type -csharp_style_var_elsewhere = true +csharp_style_var_elsewhere = true:suggestion [*.cs] #### Naming styles #### @@ -30,21 +30,30 @@ dotnet_naming_style.begin_with__.capitalization = camel_case csharp_indent_labels = one_less_than_current csharp_using_directive_placement = outside_namespace:silent csharp_prefer_simple_using_statement = true:suggestion -csharp_prefer_braces = true:silent +csharp_prefer_braces = true:suggestion csharp_style_namespace_declarations = file_scoped:suggestion csharp_style_prefer_method_group_conversion = true:silent csharp_style_prefer_top_level_statements = true:silent -csharp_style_expression_bodied_methods = false:silent -csharp_style_expression_bodied_constructors = false:silent -csharp_style_expression_bodied_operators = false:silent -csharp_style_expression_bodied_properties = true:silent -csharp_style_expression_bodied_indexers = true:silent -csharp_style_expression_bodied_accessors = true:silent -csharp_style_expression_bodied_lambdas = true:silent -csharp_style_expression_bodied_local_functions = false:silent +csharp_style_expression_bodied_methods = true:suggestion +csharp_style_expression_bodied_constructors = true:suggestion +csharp_style_expression_bodied_operators = true:suggestion +csharp_style_expression_bodied_properties = true:suggestion +csharp_style_expression_bodied_indexers = true:suggestion +csharp_style_expression_bodied_accessors = true:suggestion +csharp_style_expression_bodied_lambdas = true:suggestion +csharp_style_expression_bodied_local_functions = true:suggestion csharp_style_throw_expression = true:suggestion csharp_style_prefer_null_check_over_type_check = true:suggestion +# CS1591: Missing XML comment for publicly visible type or member +dotnet_diagnostic.CS1591.severity = none + +# IDE0058: Expression value is never used +dotnet_diagnostic.IDE0058.severity = suggestion + +# CA1515: Consider making public types internal +dotnet_diagnostic.CA1515.severity = suggestion + [*.{cs,vb}] #### Naming styles #### @@ -121,3 +130,50 @@ spelling_exclusion_path = .\exclusion.dic spelling_use_default_exclusion_dictionary = true csharp_style_prefer_primary_constructors = true:suggestion dotnet_style_prefer_collection_expression = when_types_loosely_match:suggestion +csharp_space_around_binary_operators = before_and_after +csharp_prefer_system_threading_lock = true:suggestion +csharp_prefer_simple_default_expression = true:suggestion +csharp_style_prefer_local_over_anonymous_function = true:suggestion +csharp_style_prefer_index_operator = true:suggestion +csharp_style_prefer_range_operator = true:suggestion +csharp_style_implicit_object_creation_when_type_is_apparent = true:suggestion +csharp_style_prefer_tuple_swap = true:suggestion +csharp_style_prefer_utf8_string_literals = true:suggestion +csharp_style_inlined_variable_declaration = true:suggestion +csharp_style_deconstructed_variable_declaration = true:suggestion +csharp_style_unused_value_assignment_preference = unused_local_variable:silent +csharp_style_unused_value_expression_statement_preference = unused_local_variable:suggestion +dotnet_style_readonly_field = true:suggestion +dotnet_style_predefined_type_for_member_access = true:silent +dotnet_style_predefined_type_for_locals_parameters_members = true:silent +dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent +csharp_prefer_static_anonymous_function = true:suggestion +csharp_prefer_static_local_function = true:suggestion +csharp_style_prefer_readonly_struct_member = true:suggestion +csharp_style_prefer_readonly_struct = true:suggestion +dotnet_style_allow_multiple_blank_lines_experimental = false:suggestion +dotnet_style_allow_statement_immediately_after_block_experimental = false:suggestion +csharp_style_allow_embedded_statements_on_same_line_experimental = false:suggestion +csharp_style_allow_blank_lines_between_consecutive_braces_experimental = false:suggestion +csharp_style_allow_blank_line_after_colon_in_constructor_initializer_experimental = false:suggestion +csharp_style_allow_blank_line_after_token_in_conditional_expression_experimental = false:suggestion +csharp_style_allow_blank_line_after_token_in_arrow_expression_clause_experimental = true:suggestion +csharp_style_conditional_delegate_call = true:suggestion +dotnet_code_quality_unused_parameters = non_public:suggestion +dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent +dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent +csharp_style_var_for_built_in_types = true:suggestion +csharp_style_var_when_type_is_apparent = true:suggestion +dotnet_style_qualification_for_event = false:silent +dotnet_style_qualification_for_method = false:silent +dotnet_style_qualification_for_property = false:silent +dotnet_style_qualification_for_field = false:silent +dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent +dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent +csharp_style_prefer_extended_property_pattern = true:suggestion +csharp_style_prefer_not_pattern = true:suggestion +csharp_style_pattern_matching_over_as_with_null_check = true:suggestion +csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion +csharp_style_prefer_pattern_matching = true:suggestion +csharp_style_prefer_switch_expression = true:suggestion +dotnet_diagnostic.xUnit2001.severity = suggestion diff --git a/src/HomeInventory/.idea/.idea.HomeInventory/.idea/workspace.xml b/src/HomeInventory/.idea/.idea.HomeInventory/.idea/workspace.xml new file mode 100644 index 000000000..d0792d880 --- /dev/null +++ b/src/HomeInventory/.idea/.idea.HomeInventory/.idea/workspace.xml @@ -0,0 +1,71 @@ + + + + HomeInventory.Api/HomeInventory.Api.csproj + + + + + + + + + + + + + + + + + + + + + + + + + + + 1731499300524 + + + + + + \ No newline at end of file diff --git a/src/HomeInventory/Directory.Build.props b/src/HomeInventory/Directory.Build.props index 437392fff..699184928 100644 --- a/src/HomeInventory/Directory.Build.props +++ b/src/HomeInventory/Directory.Build.props @@ -1,7 +1,7 @@ - net8 + net9 enable enable latest @@ -12,13 +12,15 @@ True 9999 false - CA1062;CA2007;CA1716;VISLIB0001 + $(NoWarn);CA1062;CA2007;CA1716 + True + diff --git a/src/HomeInventory/Directory.Packages.props b/src/HomeInventory/Directory.Packages.props index 3627d5711..8c1c501bb 100644 --- a/src/HomeInventory/Directory.Packages.props +++ b/src/HomeInventory/Directory.Packages.props @@ -2,8 +2,7 @@ true - - + @@ -16,9 +15,9 @@ - + - + @@ -28,13 +27,9 @@ - - - - - + @@ -45,34 +40,40 @@ - - - + - - + + + - + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - + @@ -80,28 +81,27 @@ - - + + - + - + - - - + - - + + + \ No newline at end of file diff --git a/src/HomeInventory/Dockerfile b/src/HomeInventory/Dockerfile index 7be5506d0..75c1c8865 100644 --- a/src/HomeInventory/Dockerfile +++ b/src/HomeInventory/Dockerfile @@ -6,7 +6,7 @@ WORKDIR /app EXPOSE 80 EXPOSE 443 -FROM mcr.microsoft.com/dotnet/sdk:8.0.403 AS build +FROM mcr.microsoft.com/dotnet/sdk:9.0.100 AS build WORKDIR /src COPY ["Directory.Packages.props", "."] COPY ["Directory.Build.props", "."] diff --git a/src/HomeInventory/HomeInventory.Api/HomeInventory.Api.csproj b/src/HomeInventory/HomeInventory.Api/HomeInventory.Api.csproj index 176033893..169eff49b 100644 --- a/src/HomeInventory/HomeInventory.Api/HomeInventory.Api.csproj +++ b/src/HomeInventory/HomeInventory.Api/HomeInventory.Api.csproj @@ -24,6 +24,8 @@ + + diff --git a/src/HomeInventory/HomeInventory.Application.Framework/HomeInventory.Application.Framework.csproj b/src/HomeInventory/HomeInventory.Application.Framework/HomeInventory.Application.Framework.csproj index 86c7ec251..1c87742a7 100644 --- a/src/HomeInventory/HomeInventory.Application.Framework/HomeInventory.Application.Framework.csproj +++ b/src/HomeInventory/HomeInventory.Application.Framework/HomeInventory.Application.Framework.csproj @@ -2,6 +2,7 @@ + diff --git a/src/HomeInventory/HomeInventory.Application.UserManagement.Interfaces/HomeInventory.Application.UserManagement.Interfaces.csproj b/src/HomeInventory/HomeInventory.Application.UserManagement.Interfaces/HomeInventory.Application.UserManagement.Interfaces.csproj index ab9fbce6a..3bcfd5459 100644 --- a/src/HomeInventory/HomeInventory.Application.UserManagement.Interfaces/HomeInventory.Application.UserManagement.Interfaces.csproj +++ b/src/HomeInventory/HomeInventory.Application.UserManagement.Interfaces/HomeInventory.Application.UserManagement.Interfaces.csproj @@ -1,4 +1,7 @@ + + + diff --git a/src/HomeInventory/HomeInventory.Application.UserManagement/HomeInventory.Application.UserManagement.csproj b/src/HomeInventory/HomeInventory.Application.UserManagement/HomeInventory.Application.UserManagement.csproj index 6a513b08f..f2dce19ad 100644 --- a/src/HomeInventory/HomeInventory.Application.UserManagement/HomeInventory.Application.UserManagement.csproj +++ b/src/HomeInventory/HomeInventory.Application.UserManagement/HomeInventory.Application.UserManagement.csproj @@ -1,4 +1,7 @@ + + + diff --git a/src/HomeInventory/HomeInventory.Application/HomeInventory.Application.csproj b/src/HomeInventory/HomeInventory.Application/HomeInventory.Application.csproj index 3adeea544..e85a7461f 100644 --- a/src/HomeInventory/HomeInventory.Application/HomeInventory.Application.csproj +++ b/src/HomeInventory/HomeInventory.Application/HomeInventory.Application.csproj @@ -2,6 +2,7 @@ + diff --git a/src/HomeInventory/HomeInventory.Contracts.UserManagement.Validators/PasswordCharacterSets.cs b/src/HomeInventory/HomeInventory.Contracts.UserManagement.Validators/PasswordCharacterSets.cs index 879e803b1..007f8d92c 100644 --- a/src/HomeInventory/HomeInventory.Contracts.UserManagement.Validators/PasswordCharacterSets.cs +++ b/src/HomeInventory/HomeInventory.Contracts.UserManagement.Validators/PasswordCharacterSets.cs @@ -8,5 +8,5 @@ internal static class PasswordCharacterSets public static IPasswordCharacterSet Lowercase { get; } = new PasswordCharacterSet(char.IsLower, "lowercase"); - public static IPasswordCharacterSet NonAlphanumeric { get; } = new PasswordCharacterSet(c => !char.IsLetterOrDigit(c), "non-alphanumeric"); + public static IPasswordCharacterSet NonAlphanumeric { get; } = new PasswordCharacterSet(static c => !char.IsLetterOrDigit(c), "non-alphanumeric"); } diff --git a/src/HomeInventory/HomeInventory.Contracts.UserManagement.Validators/RegisterRequestValidator.cs b/src/HomeInventory/HomeInventory.Contracts.UserManagement.Validators/RegisterRequestValidator.cs index 8d8c13373..878436208 100644 --- a/src/HomeInventory/HomeInventory.Contracts.UserManagement.Validators/RegisterRequestValidator.cs +++ b/src/HomeInventory/HomeInventory.Contracts.UserManagement.Validators/RegisterRequestValidator.cs @@ -6,11 +6,11 @@ public class RegisterRequestValidator : AbstractValidator { public RegisterRequestValidator() { - RuleFor(x => x.Email).NotEmpty(); - RuleFor(x => x.Email).EmailAddress(); + RuleFor(static x => x.Email).NotEmpty(); + RuleFor(static x => x.Email).EmailAddress(); - RuleFor(x => x.Password).NotEmpty(); - RuleFor(x => x.Password).MinimumLength(8); - RuleFor(x => x.Password).Password(); + RuleFor(static x => x.Password).NotEmpty(); + RuleFor(static x => x.Password).MinimumLength(8); + RuleFor(static x => x.Password).Password(); } } diff --git a/src/HomeInventory/HomeInventory.Contracts.Validations/LoginRequestValidator.cs b/src/HomeInventory/HomeInventory.Contracts.Validations/LoginRequestValidator.cs index 1c6f086dc..e79c84996 100644 --- a/src/HomeInventory/HomeInventory.Contracts.Validations/LoginRequestValidator.cs +++ b/src/HomeInventory/HomeInventory.Contracts.Validations/LoginRequestValidator.cs @@ -6,9 +6,9 @@ internal sealed class LoginRequestValidator : AbstractValidator { public LoginRequestValidator() { - RuleFor(x => x.Email).NotEmpty(); - RuleFor(x => x.Email).EmailAddress(); + RuleFor(static x => x.Email).NotEmpty(); + RuleFor(static x => x.Email).EmailAddress(); - RuleFor(x => x.Password).NotEmpty(); + RuleFor(static x => x.Password).NotEmpty(); } } diff --git a/src/HomeInventory/HomeInventory.Core/ScopeAccessorExtensions.cs b/src/HomeInventory/HomeInventory.Core/ScopeAccessorExtensions.cs index 7f84280f9..8133b4383 100644 --- a/src/HomeInventory/HomeInventory.Core/ScopeAccessorExtensions.cs +++ b/src/HomeInventory/HomeInventory.Core/ScopeAccessorExtensions.cs @@ -7,5 +7,5 @@ public static TContext GetRequiredContext(this IScopeAccessor scopeAcc scopeAccessor .GetScope() .Get() - .ThrowIfNone(() => new InvalidOperationException($"Required context of type {typeof(TContext).FullName} not found")); + .ThrowIfNone(static () => new InvalidOperationException($"Required context of type {typeof(TContext).FullName} not found")); } diff --git a/src/HomeInventory/HomeInventory.Core/TypeExtensions.cs b/src/HomeInventory/HomeInventory.Core/TypeExtensions.cs index af077e7f9..ce0541bb2 100644 --- a/src/HomeInventory/HomeInventory.Core/TypeExtensions.cs +++ b/src/HomeInventory/HomeInventory.Core/TypeExtensions.cs @@ -30,7 +30,6 @@ public static string GetFormattedName(this Type type) => _ => type.Name, }; - private static string FormatGenericType(Type type) { var args = type.GenericTypeArguments; diff --git a/src/HomeInventory/HomeInventory.Domain.Primitives/IRepository.cs b/src/HomeInventory/HomeInventory.Domain.Primitives/IRepository.cs index 7dfc4db05..98f7ba32f 100644 --- a/src/HomeInventory/HomeInventory.Domain.Primitives/IRepository.cs +++ b/src/HomeInventory/HomeInventory.Domain.Primitives/IRepository.cs @@ -7,6 +7,7 @@ public interface IRepository : IReadOnlyRepository /// The entity to add. + /// /// /// A task that represents the asynchronous operation. /// The task result contains the . @@ -20,7 +21,6 @@ public interface IRepository : IReadOnlyRepository /// /// A task that represents the asynchronous operation. - /// The task result contains the . /// Task AddRangeAsync(IEnumerable entities, CancellationToken cancellationToken = default); @@ -28,6 +28,7 @@ public interface IRepository : IReadOnlyRepository /// The entity to update. + /// /// A task that represents the asynchronous operation. Task UpdateAsync(TAggregateRoot entity, CancellationToken cancellationToken = default); @@ -43,6 +44,7 @@ public interface IRepository : IReadOnlyRepository /// The entity to delete. + /// /// A task that represents the asynchronous operation. Task DeleteAsync(TAggregateRoot entity, CancellationToken cancellationToken = default); @@ -50,6 +52,7 @@ public interface IRepository : IReadOnlyRepository /// The entities to remove. + /// /// A task that represents the asynchronous operation. Task DeleteRangeAsync(IEnumerable entities, CancellationToken cancellationToken = default); } diff --git a/src/HomeInventory/HomeInventory.Domain/ValueObjects/AmountFactory.cs b/src/HomeInventory/HomeInventory.Domain/ValueObjects/AmountFactory.cs index 054955f27..3c3689a53 100644 --- a/src/HomeInventory/HomeInventory.Domain/ValueObjects/AmountFactory.cs +++ b/src/HomeInventory/HomeInventory.Domain/ValueObjects/AmountFactory.cs @@ -5,7 +5,7 @@ internal sealed class AmountFactory : IAmountFactory public Validation Create(decimal value, AmountUnit unit) => new UnitValidator(unit) .Validate(value) - .Bind(t => new Amount(t.Value, t.Unit)); + .Bind(static t => new Amount(t.Value, t.Unit)); private readonly ref struct UnitValidator(AmountUnit unit) { diff --git a/src/HomeInventory/HomeInventory.Infrastructure.Framework/InfrastructureFrameworkServiceCollectionExtensions.cs b/src/HomeInventory/HomeInventory.Infrastructure.Framework/InfrastructureFrameworkServiceCollectionExtensions.cs index c086b9b63..67aefd6a6 100644 --- a/src/HomeInventory/HomeInventory.Infrastructure.Framework/InfrastructureFrameworkServiceCollectionExtensions.cs +++ b/src/HomeInventory/HomeInventory.Infrastructure.Framework/InfrastructureFrameworkServiceCollectionExtensions.cs @@ -11,6 +11,6 @@ public static IServiceCollection AddRepository services .AddScoped() - .AddScoped>(sp => sp.GetRequiredService()) - .AddScoped>(sp => sp.GetRequiredService>()); + .AddScoped>(static sp => sp.GetRequiredService()) + .AddScoped>(static sp => sp.GetRequiredService>()); } diff --git a/src/HomeInventory/HomeInventory.Infrastructure.Framework/Repository.cs b/src/HomeInventory/HomeInventory.Infrastructure.Framework/Repository.cs index 88a862bb8..fd96b693f 100644 --- a/src/HomeInventory/HomeInventory.Infrastructure.Framework/Repository.cs +++ b/src/HomeInventory/HomeInventory.Infrastructure.Framework/Repository.cs @@ -101,7 +101,9 @@ public async Task HasAsync(ISpecification specification, Cancellat /// Filters the entities of , to those that match the encapsulated query logic of the /// . /// + /// /// The encapsulated query logic. + /// /// The filtered entities as an . protected virtual IQueryable ApplySpecification(IQueryable inputQuery, ISpecification specification, bool evaluateCriteriaOnly = false) => _evaluator.GetQuery(inputQuery, specification, evaluateCriteriaOnly); @@ -114,16 +116,17 @@ protected virtual IQueryable ApplySpecification(IQueryable input /// /// /// The type of the value returned by the projection. + /// /// The encapsulated query logic. /// The filtered projected entities as an . protected virtual IQueryable ApplySpecification(IQueryable inputQuery, ISpecification specification) => _evaluator.GetQuery(inputQuery, specification); - private async Task> InternalAddAsync(DbSet set, TAggregateRoot entity, CancellationToken cancellationToken) => await InternalModifyAsync(set, entity, (s, m) => s.Add(m), cancellationToken); + private async Task> InternalAddAsync(DbSet set, TAggregateRoot entity, CancellationToken cancellationToken) => await InternalModifyAsync(set, entity, static (s, m) => s.Add(m), cancellationToken); - private async Task> InternalUpdateAsync(DbSet set, TAggregateRoot entity, CancellationToken cancellationToken) => await InternalModifyAsync(set, entity, (s, m) => s.Update(m), cancellationToken); + private async Task> InternalUpdateAsync(DbSet set, TAggregateRoot entity, CancellationToken cancellationToken) => await InternalModifyAsync(set, entity, static (s, m) => s.Update(m), cancellationToken); - private async Task> InternalDeleteAsync(DbSet set, TAggregateRoot entity, CancellationToken cancellationToken) => await InternalModifyAsync(set, entity, (s, m) => s.Remove(m), cancellationToken); + private async Task> InternalDeleteAsync(DbSet set, TAggregateRoot entity, CancellationToken cancellationToken) => await InternalModifyAsync(set, entity, static (s, m) => s.Remove(m), cancellationToken); private async Task> InternalModifyAsync(DbSet set, TAggregateRoot entity, Func, TModel, EntityEntry> modifyAction, CancellationToken cancellationToken) { diff --git a/src/HomeInventory/HomeInventory.Infrastructure.UserManagement/Models/Configurations/DomainEventJsonTypeInfo.cs b/src/HomeInventory/HomeInventory.Infrastructure.UserManagement/Models/Configurations/DomainEventJsonTypeInfo.cs index 257f32997..88627a9f9 100644 --- a/src/HomeInventory/HomeInventory.Infrastructure.UserManagement/Models/Configurations/DomainEventJsonTypeInfo.cs +++ b/src/HomeInventory/HomeInventory.Infrastructure.UserManagement/Models/Configurations/DomainEventJsonTypeInfo.cs @@ -7,5 +7,5 @@ internal sealed class DomainEventJsonTypeInfo(params Type[] types) : IJsonDerive { private readonly Type[] _types = types; - public IEnumerable DerivedTypes => _types.Select(t => new JsonDerivedType(t, t.FullName ?? t.Name)); + public IEnumerable DerivedTypes => _types.Select(static t => new JsonDerivedType(t, t.FullName ?? t.Name)); } diff --git a/src/HomeInventory/HomeInventory.Infrastructure.UserManagement/Models/Configurations/UserModelConfiguration.cs b/src/HomeInventory/HomeInventory.Infrastructure.UserManagement/Models/Configurations/UserModelConfiguration.cs index ceedeec24..14db3ac29 100644 --- a/src/HomeInventory/HomeInventory.Infrastructure.UserManagement/Models/Configurations/UserModelConfiguration.cs +++ b/src/HomeInventory/HomeInventory.Infrastructure.UserManagement/Models/Configurations/UserModelConfiguration.cs @@ -8,14 +8,14 @@ internal sealed class UserModelConfiguration : IEntityTypeConfiguration builder) { - builder.HasKey(x => x.Id); - builder.Property(x => x.Id) + builder.HasKey(static x => x.Id); + builder.Property(static x => x.Id) .HasIdConversion(); - builder.Property(x => x.Email) + builder.Property(static x => x.Email) .IsRequired(); - builder.Property(x => x.Password) + builder.Property(static x => x.Password) .IsRequired(); } } diff --git a/src/HomeInventory/HomeInventory.Infrastructure.UserManagement/UserRepository.cs b/src/HomeInventory/HomeInventory.Infrastructure.UserManagement/UserRepository.cs index 5d9df765c..d6311e116 100644 --- a/src/HomeInventory/HomeInventory.Infrastructure.UserManagement/UserRepository.cs +++ b/src/HomeInventory/HomeInventory.Infrastructure.UserManagement/UserRepository.cs @@ -22,7 +22,7 @@ public async Task> FindFirstByEmailUserOptionalAsync(Email email, C public async Task HasPermissionAsync(UserId userId, string permission, CancellationToken cancellationToken = default) { var userResult = await FindFirstOptionAsync(new ByIdFilterSpecification(userId), cancellationToken) - .Convert(_ => true); + .Convert(static _ => true); #pragma warning disable CA1849 // Call async methods when in an async method return userResult.IfNone(false); #pragma warning restore CA1849 // Call async methods when in an async method diff --git a/src/HomeInventory/HomeInventory.Infrastructure/HomeInventory.Infrastructure.csproj b/src/HomeInventory/HomeInventory.Infrastructure/HomeInventory.Infrastructure.csproj index 6f07bba79..b2a2f591e 100644 --- a/src/HomeInventory/HomeInventory.Infrastructure/HomeInventory.Infrastructure.csproj +++ b/src/HomeInventory/HomeInventory.Infrastructure/HomeInventory.Infrastructure.csproj @@ -4,6 +4,7 @@ + @@ -13,6 +14,7 @@ + diff --git a/src/HomeInventory/HomeInventory.Infrastructure/Persistence/DatabaseContext.cs b/src/HomeInventory/HomeInventory.Infrastructure/Persistence/DatabaseContext.cs index b795d41f1..2dcceed1c 100644 --- a/src/HomeInventory/HomeInventory.Infrastructure/Persistence/DatabaseContext.cs +++ b/src/HomeInventory/HomeInventory.Infrastructure/Persistence/DatabaseContext.cs @@ -24,7 +24,7 @@ public Option FindTracked(Func condition) where TEntity : class => ChangeTracker .Entries() - .Select(e => e.Entity) + .Select(static e => e.Entity) .Where(condition) .HeadOrNone(); @@ -49,8 +49,8 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) private void UpdateAuditableEntities(DateTimeOffset now) { - UpdateTimeAuditEntities(now, EntityState.Added, x => x.CreatedOn); - UpdateTimeAuditEntities(now, EntityState.Modified, x => x.ModifiedOn); + UpdateTimeAuditEntities(now, EntityState.Added, static x => x.CreatedOn); + UpdateTimeAuditEntities(now, EntityState.Modified, static x => x.ModifiedOn); } private void UpdateTimeAuditEntities(DateTimeOffset now, EntityState state, Expression> propertyExpression) diff --git a/src/HomeInventory/HomeInventory.Infrastructure/Persistence/Mapping/ModelMappings.cs b/src/HomeInventory/HomeInventory.Infrastructure/Persistence/Mapping/ModelMappings.cs index 58656a683..7de8dd30c 100644 --- a/src/HomeInventory/HomeInventory.Infrastructure/Persistence/Mapping/ModelMappings.cs +++ b/src/HomeInventory/HomeInventory.Infrastructure/Persistence/Mapping/ModelMappings.cs @@ -8,7 +8,7 @@ internal sealed class ModelMappings : BaseMappingsProfile { public ModelMappings() { - CreateMap().Using(x => x.Value, ProductId.Converter); - CreateMap().Using(obj => new() { Value = obj.Value, UnitName = obj.Unit.Name }); + CreateMap().Using(static x => x.Value, ProductId.Converter); + CreateMap().Using(static obj => new() { Value = obj.Value, UnitName = obj.Unit.Name }); } } diff --git a/src/HomeInventory/HomeInventory.Infrastructure/Persistence/Models/Configurations/PolymorphicDomainEventTypeResolver.cs b/src/HomeInventory/HomeInventory.Infrastructure/Persistence/Models/Configurations/PolymorphicDomainEventTypeResolver.cs index 374a1b733..c70359d1f 100644 --- a/src/HomeInventory/HomeInventory.Infrastructure/Persistence/Models/Configurations/PolymorphicDomainEventTypeResolver.cs +++ b/src/HomeInventory/HomeInventory.Infrastructure/Persistence/Models/Configurations/PolymorphicDomainEventTypeResolver.cs @@ -8,7 +8,7 @@ namespace HomeInventory.Infrastructure.Persistence.Models.Configurations; internal sealed class PolymorphicDomainEventTypeResolver(IEnumerable eventTypeInfoProviders) : DefaultJsonTypeInfoResolver { - private readonly IReadOnlyCollection _derivedTypes = eventTypeInfoProviders.SelectMany(p => p.DerivedTypes).ToArray(); + private readonly IReadOnlyCollection _derivedTypes = eventTypeInfoProviders.SelectMany(static p => p.DerivedTypes).ToArray(); public override JsonTypeInfo GetTypeInfo(Type type, JsonSerializerOptions options) { diff --git a/src/HomeInventory/HomeInventory.Infrastructure/Persistence/Models/Interceptors/PublishDomainEventsInterceptor.cs b/src/HomeInventory/HomeInventory.Infrastructure/Persistence/Models/Interceptors/PublishDomainEventsInterceptor.cs index c593c6796..30fa8c958 100644 --- a/src/HomeInventory/HomeInventory.Infrastructure/Persistence/Models/Interceptors/PublishDomainEventsInterceptor.cs +++ b/src/HomeInventory/HomeInventory.Infrastructure/Persistence/Models/Interceptors/PublishDomainEventsInterceptor.cs @@ -23,7 +23,7 @@ private async ValueTask PublishEventsAsync(DbContext context, CancellationToken { var domainEvents = context.ChangeTracker .Entries() - .Select(e => e.Entity.Content); + .Select(static e => e.Entity.Content); foreach (var domainEvent in domainEvents) { diff --git a/src/HomeInventory/HomeInventory.Tests.Acceptance/Drivers/HomeInventoryAPIDriver.cs b/src/HomeInventory/HomeInventory.Tests.Acceptance/Drivers/HomeInventoryAPIDriver.cs index 81b8116fa..c543e8464 100644 --- a/src/HomeInventory/HomeInventory.Tests.Acceptance/Drivers/HomeInventoryAPIDriver.cs +++ b/src/HomeInventory/HomeInventory.Tests.Acceptance/Drivers/HomeInventoryAPIDriver.cs @@ -7,7 +7,7 @@ namespace HomeInventory.Tests.Acceptance.Drivers; -internal sealed class HomeInventoryApiDriver : WebApplicationFactory, IHomeInventoryApiDriver +internal sealed class HomeInventoryApiDriver : WebApplicationFactory, IHomeInventoryApiDriver { private readonly ITestingConfiguration _configuration; private readonly Lazy _lazyUserManagement; diff --git a/src/HomeInventory/HomeInventory.Tests.Framework/Assertions/ObjectExtensions.cs b/src/HomeInventory/HomeInventory.Tests.Framework/Assertions/ObjectExtensions.cs index d8c822c5c..5955f0288 100644 --- a/src/HomeInventory/HomeInventory.Tests.Framework/Assertions/ObjectExtensions.cs +++ b/src/HomeInventory/HomeInventory.Tests.Framework/Assertions/ObjectExtensions.cs @@ -8,7 +8,7 @@ internal static class ObjectExtensions { if (typeof(T) == typeof(object)) { - return (actual, expected) => + return static (actual, expected) => { if (actual is null && expected is null) { diff --git a/src/HomeInventory/HomeInventory.Tests.Framework/BaseTest.cs b/src/HomeInventory/HomeInventory.Tests.Framework/BaseTest.cs index 7ccbdae80..c0180e772 100644 --- a/src/HomeInventory/HomeInventory.Tests.Framework/BaseTest.cs +++ b/src/HomeInventory/HomeInventory.Tests.Framework/BaseTest.cs @@ -7,9 +7,9 @@ namespace HomeInventory.Tests.Framework; public abstract class BaseTest : IAsyncLifetime { private readonly List _asyncDisposables = []; - private readonly Lazy _lazyCancellation = new(() => new()); - private readonly Lazy _lazyFixture = new(() => new Fixture()); - private readonly Lazy _lazyDateTime = new(() => new FixedTimeProvider(TimeProvider.System)); + private readonly Lazy _lazyCancellation = new(static () => new()); + private readonly Lazy _lazyFixture = new(static () => new Fixture()); + private readonly Lazy _lazyDateTime = new(static () => new FixedTimeProvider(TimeProvider.System)); protected BaseTest() { diff --git a/src/HomeInventory/HomeInventory.Tests.Framework/Customizations/ApiBehaviorOptionsCustomization.cs b/src/HomeInventory/HomeInventory.Tests.Framework/Customizations/ApiBehaviorOptionsCustomization.cs index 0b5e55600..1280bddbc 100644 --- a/src/HomeInventory/HomeInventory.Tests.Framework/Customizations/ApiBehaviorOptionsCustomization.cs +++ b/src/HomeInventory/HomeInventory.Tests.Framework/Customizations/ApiBehaviorOptionsCustomization.cs @@ -6,7 +6,7 @@ internal class ApiBehaviorOptionsCustomization : ICustomization { public void Customize(IFixture fixture) { - fixture.Customize(c => c - .Without(x => x.InvalidModelStateResponseFactory)); + fixture.Customize(static c => c + .Without(static x => x.InvalidModelStateResponseFactory)); } } diff --git a/src/HomeInventory/HomeInventory.Tests.Framework/Customizations/FixtureExtensions.cs b/src/HomeInventory/HomeInventory.Tests.Framework/Customizations/FixtureExtensions.cs index 96ec53780..8c1bfa88c 100644 --- a/src/HomeInventory/HomeInventory.Tests.Framework/Customizations/FixtureExtensions.cs +++ b/src/HomeInventory/HomeInventory.Tests.Framework/Customizations/FixtureExtensions.cs @@ -9,7 +9,7 @@ public static IFixture CustomizeId(this IFixture fixture) where TId : class, IUlidBuildable, IUlidIdentifierObject, IValuableIdentifierObject => fixture .CustomizeUlid() - .CustomizeFromFactory>(s => (TId)TId.CreateBuilder().WithValue(s.Supply()).Build()); + .CustomizeFromFactory>(static s => (TId)TId.CreateBuilder().WithValue(s.Supply()).Build()); public static IFixture CustomizeId(this IFixture fixture, DateTimeOffset timeStamp, Random? random = null) where TId : class, IUlidBuildable, IUlidIdentifierObject, IValuableIdentifierObject => @@ -20,12 +20,12 @@ public static IFixture CustomizeId(this IFixture fixture, DateTimeOffset ti public static IFixture CustomizeEmail(this IFixture fixture) => fixture .CustomizeUlid() - .CustomizeFromFactory>(s => new(s.Supply().ToString() + "@email.com")); + .CustomizeFromFactory>(static s => new(s.Supply().ToString() + "@email.com")); public static IFixture CustomizeEmail(this IFixture fixture, DateTimeOffset timeStamp, Random? random = null) => fixture .CustomizeUlid(timeStamp, random) - .CustomizeFromFactory>(s => new(s.Supply().ToString() + "@email.com")); + .CustomizeFromFactory>(static s => new(s.Supply().ToString() + "@email.com")); public static IFixture CustomizeFromFactory(this IFixture fixture, Func createFunc) { diff --git a/src/HomeInventory/HomeInventory.Tests.Framework/GivenContext.cs b/src/HomeInventory/HomeInventory.Tests.Framework/GivenContext.cs index 1834c273a..2c1823a9a 100644 --- a/src/HomeInventory/HomeInventory.Tests.Framework/GivenContext.cs +++ b/src/HomeInventory/HomeInventory.Tests.Framework/GivenContext.cs @@ -23,7 +23,7 @@ public TContext New(out IVariable variable, Func create, int count = 1, New(out variable, _ => create(), count, name); public TContext EmptyHashCode(out IVariable emptyHash) => - New(out emptyHash, () => new()); + New(out emptyHash, static () => new()); public TContext SubstituteFor(out IVariable variable, IVariable arg1, IVariable arg2, Action setup, [CallerArgumentExpression(nameof(variable))] string? name = null) where T : class diff --git a/src/HomeInventory/HomeInventory.Tests.Framework/HomeInventory.Tests.Framework.csproj b/src/HomeInventory/HomeInventory.Tests.Framework/HomeInventory.Tests.Framework.csproj index 74c276670..80a9fbddb 100644 --- a/src/HomeInventory/HomeInventory.Tests.Framework/HomeInventory.Tests.Framework.csproj +++ b/src/HomeInventory/HomeInventory.Tests.Framework/HomeInventory.Tests.Framework.csproj @@ -13,6 +13,10 @@ + + + + diff --git a/src/HomeInventory/HomeInventory.Tests.Framework/VariableValues.cs b/src/HomeInventory/HomeInventory.Tests.Framework/VariableValues.cs index 4d7d0ad1c..15237eca4 100644 --- a/src/HomeInventory/HomeInventory.Tests.Framework/VariableValues.cs +++ b/src/HomeInventory/HomeInventory.Tests.Framework/VariableValues.cs @@ -26,7 +26,7 @@ public Option> TryGetOrAdd(int index, Func createValueFunc) ? OptionNone.Default : GetOrAdd(index, createValueFunc); - public IEnumerable GetAll() => _values.Select(x => x.Value); + public IEnumerable GetAll() => _values.Select(static x => x.Value); private PropertyValue GetOrAdd(int index, Func createValueFunc) => index == _values.Count @@ -51,8 +51,11 @@ public async ValueTask DisposeAsync() case IDisposable disposable: disposable.Dispose(); break; + default: + break; } } + _values.Clear(); } } diff --git a/src/HomeInventory/HomeInventory.Tests.Integration/BaseIntegrationTest.cs b/src/HomeInventory/HomeInventory.Tests.Integration/BaseIntegrationTest.cs index 48df6a75b..27df4931c 100644 --- a/src/HomeInventory/HomeInventory.Tests.Integration/BaseIntegrationTest.cs +++ b/src/HomeInventory/HomeInventory.Tests.Integration/BaseIntegrationTest.cs @@ -11,7 +11,7 @@ namespace HomeInventory.Tests.Integration; [System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1001:Types that own disposable fields should be disposable", Justification = "See InitializeDisposables")] public abstract class BaseIntegrationTest : BaseTest { - private readonly WebApplicationFactory _appFactory = new(); + private readonly WebApplicationFactory _appFactory = new(); private readonly HttpClient _client; private readonly ITestOutputHelper _testOutputHelper; @@ -28,7 +28,7 @@ protected IEnumerable GetEndpoints() => _appFactory .Services .GetServices() - .SelectMany(s => s.Endpoints) + .SelectMany(static s => s.Endpoints) .OfType(); protected async Task PostAsync(string route, JsonContent content) diff --git a/src/HomeInventory/HomeInventory.Tests.Integration/HomeInventory.Tests.Integration.csproj b/src/HomeInventory/HomeInventory.Tests.Integration/HomeInventory.Tests.Integration.csproj index a5bf9b1ab..b1e7644e4 100644 --- a/src/HomeInventory/HomeInventory.Tests.Integration/HomeInventory.Tests.Integration.csproj +++ b/src/HomeInventory/HomeInventory.Tests.Integration/HomeInventory.Tests.Integration.csproj @@ -1,4 +1,4 @@ - + CA1707 diff --git a/src/HomeInventory/HomeInventory.Tests.Integration/UserManagementApiTests.cs b/src/HomeInventory/HomeInventory.Tests.Integration/UserManagementApiTests.cs index 1db1ef50d..7afc0eca8 100644 --- a/src/HomeInventory/HomeInventory.Tests.Integration/UserManagementApiTests.cs +++ b/src/HomeInventory/HomeInventory.Tests.Integration/UserManagementApiTests.cs @@ -33,7 +33,7 @@ public void VerifyEndpoints() using var scope = new AssertionScope(); endpoints.Should().ContainEndpoint(_registerRoute, HttpMethods.Post) - .Which.Metadata.Should().ContainSingle(x => x is AllowAnonymousAttribute); + .Which.Metadata.Should().ContainSingle(static x => x is AllowAnonymousAttribute); } [Fact] @@ -74,7 +74,7 @@ public async Task RegisterSameTwice_ReturnsFailure() #pragma warning disable CA1308 // Normalize strings to uppercase body.Extensions.Should().ContainKey("errors") .WhoseValue.Should().BeJsonElement() - .Which.Should().BeArray(e => e.Should().HaveProperty(nameof(DuplicateEmailError.Message).ToLowerInvariant()) + .Which.Should().BeArray(static e => e.Should().HaveProperty(nameof(DuplicateEmailError.Message).ToLowerInvariant()) .Which.Should().HaveValue(DuplicateEmailError.DefaultMessage)); #pragma warning restore CA1308 // Normalize strings to uppercase } diff --git a/src/HomeInventory/HomeInventory.Tests/Application/FeatureFlagGivenTestContext.cs b/src/HomeInventory/HomeInventory.Tests/Application/FeatureFlagGivenTestContext.cs new file mode 100644 index 000000000..322d0e861 --- /dev/null +++ b/src/HomeInventory/HomeInventory.Tests/Application/FeatureFlagGivenTestContext.cs @@ -0,0 +1,22 @@ +using HomeInventory.Application.Framework; + +namespace HomeInventory.Tests.Application; + +public sealed class FeatureFlagGivenTestContext(BaseTest test) : GivenContext(test) +{ + private static readonly Variable _sut = new(nameof(_sut)); + private static readonly Variable> _sutContext = new(nameof(_sutContext)); + + internal FeatureFlagGivenTestContext Sut(out IVariable sut, IVariable nameVariable) => + New(out sut, () => Create(nameVariable)); + + internal FeatureFlagGivenTestContext Sut(out IVariable> sut, IVariable nameVariable, IVariable contextVariable) => + New(out sut, () => Create(nameVariable, contextVariable)); + + private IFeatureFlag Create(IVariable nameVariable) => + FeatureFlag.Create(GetValue(nameVariable)); + + private IFeatureFlag Create(IVariable nameVariable, IVariable contextVariable) + where TContext : notnull => + FeatureFlag.Create(GetValue(nameVariable), GetValue(contextVariable)); +} diff --git a/src/HomeInventory/HomeInventory.Tests/Application/FeatureFlagTests.cs b/src/HomeInventory/HomeInventory.Tests/Application/FeatureFlagTests.cs index 8aed94ef1..0fa43be7d 100644 --- a/src/HomeInventory/HomeInventory.Tests/Application/FeatureFlagTests.cs +++ b/src/HomeInventory/HomeInventory.Tests/Application/FeatureFlagTests.cs @@ -5,7 +5,7 @@ namespace HomeInventory.Tests.Application; [UnitTest] -public sealed class FeatureFlagTests() : BaseTest(t => new(t)) +public sealed class FeatureFlagTests() : BaseTest(static t => new(t)) { [Fact] public void ConstructorShouldPreserveName() @@ -15,10 +15,10 @@ public void ConstructorShouldPreserveName() .Sut(out var sutVar, nameVar); var then = When - .Invoked(sutVar, sut => sut.Name); + .Invoked(sutVar, static sut => sut.Name); then - .Result(nameVar, (actual, expected) => actual.Should().Be(expected)); + .Result(nameVar, static (actual, expected) => actual.Should().Be(expected)); } [Fact] @@ -31,8 +31,8 @@ public void CreateShouldPreserveName() .Invoked(nameVar, FeatureFlag.Create); then - .Result(flag => flag.Should().NotBeNull()) - .Result(nameVar, (actual, expected) => actual.Name.Should().Be(expected)); + .Result(static flag => flag.Should().NotBeNull()) + .Result(nameVar, static (actual, expected) => actual.Name.Should().Be(expected)); } [Fact] @@ -46,9 +46,9 @@ public void CreateWithContextShouldPreserveName() .Invoked(nameVar, contextVar, FeatureFlag.Create); then - .Result(flag => flag.Should().NotBeNull()) - .Result(nameVar, (actual, expected) => actual.Name.Should().Be(expected)) - .Result(contextVar, (actual, expected) => actual.Context.Should().Be(expected)); + .Result(static flag => flag.Should().NotBeNull()) + .Result(nameVar, static (actual, expected) => actual.Name.Should().Be(expected)) + .Result(contextVar, static (actual, expected) => actual.Context.Should().Be(expected)); } [Theory] @@ -78,12 +78,12 @@ public void WithContextShouldReturn() .Sut(out var sutVar, nameVar); var then = When - .Invoked(sutVar, contextVar, (sut, context) => sut.WithContext(context)); + .Invoked(sutVar, contextVar, static (sut, context) => sut.WithContext(context)); then - .Result(flag => flag.Should().NotBeNull()) - .Result(nameVar, (actual, expected) => actual.Name.Should().Be(expected)) - .Result(contextVar, (actual, expected) => actual.Context.Should().Be(expected)); + .Result(static flag => flag.Should().NotBeNull()) + .Result(nameVar, static (actual, expected) => actual.Name.Should().Be(expected)) + .Result(contextVar, static (actual, expected) => actual.Context.Should().Be(expected)); } [Theory] @@ -104,22 +104,4 @@ public async Task IsEnabledContextShouldReturnManagerValue(bool expectedValue) then .Result(flag => flag.Should().Be(expectedValue)); } - -#pragma warning disable CA1034 // Nested types should not be visible - public sealed class GivenTestContext(BaseTest test) : GivenContext(test) -#pragma warning restore CA1034 // Nested types should not be visible - { - internal GivenTestContext Sut(out IVariable sut, IVariable nameVariable) => - New(out sut, () => Create(nameVariable)); - - internal GivenTestContext Sut(out IVariable> sut, IVariable nameVariable, IVariable contextVariable) => - New(out sut, () => Create(nameVariable, contextVariable)); - - private IFeatureFlag Create(IVariable nameVariable) => - FeatureFlag.Create(GetValue(nameVariable)); - - private IFeatureFlag Create(IVariable nameVariable, IVariable contextVariable) - where TContext : notnull => - FeatureFlag.Create(GetValue(nameVariable), GetValue(contextVariable)); - } } diff --git a/src/HomeInventory/HomeInventory.Tests/Core/InternalTestSubject.cs b/src/HomeInventory/HomeInventory.Tests/Core/InternalTestSubject.cs index 81a35e7b6..a188beec0 100644 --- a/src/HomeInventory/HomeInventory.Tests/Core/InternalTestSubject.cs +++ b/src/HomeInventory/HomeInventory.Tests/Core/InternalTestSubject.cs @@ -1,13 +1,10 @@ namespace HomeInventory.Tests.Core; -public sealed class InternalTestSubject +internal sealed class InternalTestSubject { internal InternalTestSubject() { } - internal InternalTestSubject(object arg) - { - _ = arg; - } + internal InternalTestSubject(object arg) => _ = arg; } diff --git a/src/HomeInventory/HomeInventory.Tests/DependencyInjection/TestAppBuilder.cs b/src/HomeInventory/HomeInventory.Tests/DependencyInjection/TestAppBuilder.cs index 0de4c4392..bdbcd2bf1 100644 --- a/src/HomeInventory/HomeInventory.Tests/DependencyInjection/TestAppBuilder.cs +++ b/src/HomeInventory/HomeInventory.Tests/DependencyInjection/TestAppBuilder.cs @@ -22,7 +22,7 @@ public TestAppBuilder(IServiceCollection collection) public IServiceProvider ServiceProvider { get; } public ICollection DataSources { get; } = []; - public RequestDelegate Build() => _ => Task.CompletedTask; + public RequestDelegate Build() => static _ => Task.CompletedTask; public IApplicationBuilder CreateApplicationBuilder() => this; diff --git a/src/HomeInventory/HomeInventory.Tests/Domain/EntityTests.cs b/src/HomeInventory/HomeInventory.Tests/Domain/EntityTests.cs index 3aae42abb..73db60fe8 100644 --- a/src/HomeInventory/HomeInventory.Tests/Domain/EntityTests.cs +++ b/src/HomeInventory/HomeInventory.Tests/Domain/EntityTests.cs @@ -4,7 +4,7 @@ namespace HomeInventory.Tests.Domain; [UnitTest] -public sealed class EntityTests() : BaseTest(t => new(t)) +public sealed class EntityTests() : BaseTest(static t => new(t)) { [Fact] public void EqualsTEntity_Should_ReturnTrueWhenSameReference() @@ -14,8 +14,8 @@ public void EqualsTEntity_Should_ReturnTrueWhenSameReference() .Sut(out var sutVar, idVar); When - .Invoked(sutVar, sut => sut.Equals(sut)) - .Result(actual => actual.Should().BeTrue()); + .Invoked(sutVar, static sut => sut.Equals(sut)) + .Result(static actual => actual.Should().BeTrue()); } [Fact] @@ -27,8 +27,8 @@ public void EqualsTEntity_Should_ReturnTrueWhenOtherHasSameId() .Sut(out var sutVar, idVar); When - .Invoked(sutVar, otherVar, (sut, other) => sut.Equals(other)) - .Result(actual => actual.Should().BeTrue()); + .Invoked(sutVar, otherVar, static (sut, other) => sut.Equals(other)) + .Result(static actual => actual.Should().BeTrue()); } [Fact] @@ -39,8 +39,8 @@ public void EqualsTEntity_Should_ReturnFalseWhenOtherIsNull() .Sut(out var sutVar, idVar); When - .Invoked(sutVar, sut => sut.Equals(default)) - .Result(actual => actual.Should().BeFalse()); + .Invoked(sutVar, static sut => sut.Equals(default)) + .Result(static actual => actual.Should().BeFalse()); } [Fact] @@ -52,8 +52,8 @@ public void EqualsTEntity_Should_ReturnFalseWhenOtherHasDifferentId() .Sut(out var sutVar, idVar[1]); When - .Invoked(sutVar, otherVar, (sut, other) => sut.Equals(other)) - .Result(actual => actual.Should().BeFalse()); + .Invoked(sutVar, otherVar, static (sut, other) => sut.Equals(other)) + .Result(static actual => actual.Should().BeFalse()); } [Fact] @@ -65,8 +65,8 @@ public void EqualsObject_Should_ReturnFalseWhenOtherHasDifferentType() .Sut(out var sutVar, idVar); When - .Invoked(sutVar, otherVar, (sut, other) => sut.Equals(other)) - .Result(actual => actual.Should().BeFalse()); + .Invoked(sutVar, otherVar, static (sut, other) => sut.Equals(other)) + .Result(static actual => actual.Should().BeFalse()); } [Fact] @@ -77,8 +77,8 @@ public void EqualsObject_Should_ReturnTrueWhenSameReference() .Sut(out var sutVar, idVar); When - .Invoked(sutVar, sut => sut.Equals((object)sut)) - .Result(actual => actual.Should().BeTrue()); + .Invoked(sutVar, static sut => sut.Equals((object)sut)) + .Result(static actual => actual.Should().BeTrue()); } [Fact] @@ -90,8 +90,8 @@ public void EqualsObject_Should_ReturnTrueWhenOtherHasSameId() .Sut(out var sutVar, idVar); When - .Invoked(sutVar, otherVar, (sut, other) => sut.Equals((object)other)) - .Result(actual => actual.Should().BeTrue()); + .Invoked(sutVar, otherVar, static (sut, other) => sut.Equals((object)other)) + .Result(static actual => actual.Should().BeTrue()); } [Fact] @@ -102,8 +102,8 @@ public void EqualsObject_Should_ReturnFalseWhenOtherIsNull() .Sut(out var sutVar, idVar); When - .Invoked(sutVar, sut => sut.Equals(default(object?))) - .Result(actual => actual.Should().BeFalse()); + .Invoked(sutVar, static sut => sut.Equals(default(object?))) + .Result(static actual => actual.Should().BeFalse()); } [Fact] @@ -115,8 +115,8 @@ public void EqualsObject_Should_ReturnFalseWhenOtherHasDifferentId() .Sut(out var sutVar, idVar[1]); When - .Invoked(sutVar, otherVar, (sut, other) => sut.Equals((object)other)) - .Result(actual => actual.Should().BeFalse()); + .Invoked(sutVar, otherVar, static (sut, other) => sut.Equals((object)other)) + .Result(static actual => actual.Should().BeFalse()); } [Fact] @@ -128,8 +128,8 @@ public void GetHashCode_Should_ReturnGetHashCodeFromId() .Sut(out var sutVar, idVar); When - .Invoked(sutVar, sut => sut.GetHashCode()) - .Result(hashVar, (actual, hash) => actual.Should().Be(hash.ToHashCode())); + .Invoked(sutVar, static sut => sut.GetHashCode()) + .Result(hashVar, static (actual, hash) => actual.Should().Be(hash.ToHashCode())); } [Fact] @@ -141,8 +141,8 @@ public void OpEquals_Should_ReturnTrueWhenOtherHasSameId() .Sut(out var sutVar, idVar); When - .Invoked(sutVar, otherVar, (sut, other) => sut == other) - .Result(actual => actual.Should().BeTrue()); + .Invoked(sutVar, otherVar, static (sut, other) => sut == other) + .Result(static actual => actual.Should().BeTrue()); } [Fact] @@ -154,8 +154,8 @@ public void OpEquals_Should_ReturnFalseWhenOtherHasDifferentId() .Sut(out var sutVar, idVar[1]); When - .Invoked(sutVar, otherVar, (sut, other) => sut == other) - .Result(actual => actual.Should().BeFalse()); + .Invoked(sutVar, otherVar, static (sut, other) => sut == other) + .Result(static actual => actual.Should().BeFalse()); } [Fact] @@ -167,8 +167,8 @@ public void OpNotEquals_Should_ReturnFalseWhenOtherHasSameId() .Sut(out var sutVar, idVar); When - .Invoked(sutVar, otherVar, (sut, other) => sut != other) - .Result(actual => actual.Should().BeFalse()); + .Invoked(sutVar, otherVar, static (sut, other) => sut != other) + .Result(static actual => actual.Should().BeFalse()); } [Fact] @@ -180,8 +180,8 @@ public void OpNotEquals_Should_ReturnTrueWhenOtherHasDifferentId() .Sut(out var sutVar, idVar[1]); When - .Invoked(sutVar, otherVar, (sut, other) => sut != other) - .Result(actual => actual.Should().BeTrue()); + .Invoked(sutVar, otherVar, static (sut, other) => sut != other) + .Result(static actual => actual.Should().BeTrue()); } } diff --git a/src/HomeInventory/HomeInventory.Tests/Domain/EquatableComponentTests.cs b/src/HomeInventory/HomeInventory.Tests/Domain/EquatableComponentTests.cs index 62279e527..3a2f23c9f 100644 --- a/src/HomeInventory/HomeInventory.Tests/Domain/EquatableComponentTests.cs +++ b/src/HomeInventory/HomeInventory.Tests/Domain/EquatableComponentTests.cs @@ -4,7 +4,7 @@ namespace HomeInventory.Tests.Domain; [UnitTest] -public class EquatableComponentTests() : BaseTest(t => new(t)) +public class EquatableComponentTests() : BaseTest(static t => new(t)) { [Fact] public void GetHashCode_ShouldReturnZero_WhenNoComponents() @@ -14,8 +14,8 @@ public void GetHashCode_ShouldReturnZero_WhenNoComponents() .EmptyHashCode(out var hashVar); When - .Invoked(sutVar, sut => sut.GetHashCode()) - .Result(hashVar, (actual, hash) => actual.Should().Be(hash.ToHashCode())); + .Invoked(sutVar, static sut => sut.GetHashCode()) + .Result(hashVar, static (actual, hash) => actual.Should().Be(hash.ToHashCode())); } [Theory] @@ -30,8 +30,8 @@ public void GetHashCode_ShouldReturnCombinedComponentsHash_WhenManyComponents(in .Sut(out var sutVar, componentVar); When - .Invoked(sutVar, sut => sut.GetHashCode()) - .Result(hashVar, (actual, hash) => actual.Should().Be(hash.ToHashCode())); + .Invoked(sutVar, static sut => sut.GetHashCode()) + .Result(hashVar, static (actual, hash) => actual.Should().Be(hash.ToHashCode())); } [Fact] @@ -41,8 +41,8 @@ public void Equals_ShouldBeEqualToEmpty_WhenNoComponents() .Sut(out var sutVar, 2); When - .Invoked(sutVar[0], sutVar[1], (sut, other) => sut.Equals(other)) - .Result(actual => actual.Should().BeTrue()); + .Invoked(sutVar[0], sutVar[1], static (sut, other) => sut.Equals(other)) + .Result(static actual => actual.Should().BeTrue()); } [Theory] @@ -57,8 +57,8 @@ public void Equals_ShouldNotBeEqualToEmpty_WhenManyComponents(int count) .Sut(out var sutVar2); When - .Invoked(sutVar1, sutVar2, (sut, other) => sut.Equals(other)) - .Result(actual => actual.Should().BeFalse()); + .Invoked(sutVar1, sutVar2, static (sut, other) => sut.Equals(other)) + .Result(static actual => actual.Should().BeFalse()); } [Theory] @@ -72,8 +72,8 @@ public void Equals_ShouldBeEqualToComponentWithSameItems_WhenManyComponents(int .Sut(out var sutVar, componentVar, 2); When - .Invoked(sutVar[0], sutVar[1], (sut, other) => sut.Equals(other)) - .Result(actual => actual.Should().BeTrue()); + .Invoked(sutVar[0], sutVar[1], static (sut, other) => sut.Equals(other)) + .Result(static actual => actual.Should().BeTrue()); } [Theory] @@ -87,8 +87,8 @@ public void Equals_ShouldNotBeEqualToComponentWithDifferentItems_WhenManyCompone .Sut(out var sutVar, componentVar, ..count, count..); When - .Invoked(sutVar[0], sutVar[1], (sut, other) => sut.Equals(other)) - .Result(actual => actual.Should().BeFalse()); + .Invoked(sutVar[0], sutVar[1], static (sut, other) => sut.Equals(other)) + .Result(static actual => actual.Should().BeFalse()); } } @@ -113,7 +113,7 @@ public EquatableComponentTestsGivenContext Sut(out IVariable> sut, IVariable variable, string name, params Range[] ranges) => New(out sut, i => CreateSut(variable, ranges[i]), ranges.Length, name); - private EquatableComponent CreateSut(IVariable variable, Range range) => new(Array.ConvertAll(Variables.GetMany(variable, range).ToArray(), x => (object)x)); + private EquatableComponent CreateSut(IVariable variable, Range range) => new(Array.ConvertAll(Variables.GetMany(variable, range).ToArray(), static x => (object)x)); protected override EquatableComponent CreateSut(Ulid arg) => throw new NotImplementedException(); } diff --git a/src/HomeInventory/HomeInventory.Tests/Domain/ValueObjects/AmountUnitTests.cs b/src/HomeInventory/HomeInventory.Tests/Domain/ValueObjects/AmountUnitTests.cs index 5c022d2f5..1f1881a07 100644 --- a/src/HomeInventory/HomeInventory.Tests/Domain/ValueObjects/AmountUnitTests.cs +++ b/src/HomeInventory/HomeInventory.Tests/Domain/ValueObjects/AmountUnitTests.cs @@ -57,14 +57,14 @@ public void FieldsShoulHaveMatchedName() var fields = typeof(AmountUnit).GetFieldsOfType().ToArray(); fields.Should().NotBeEmpty() - .And.AllSatisfy(t => t.Value!.Name.Should().Be(t.Field.Name)); + .And.AllSatisfy(static t => t.Value!.Name.Should().Be(t.Field.Name)); } [Fact] public void CanBeUsedAsDictionaryKey() { - var dictionary = _items.ToDictionary(x => x, x => x.Name); + var dictionary = _items.ToDictionary(static x => x, static x => x.Name); var values = typeof(AmountUnit).GetFieldValuesOfType().ToArray(); dictionary.Should().ContainKeys(values); diff --git a/src/HomeInventory/HomeInventory.Tests/Domain/ValueObjects/MeasurementTypeTests.cs b/src/HomeInventory/HomeInventory.Tests/Domain/ValueObjects/MeasurementTypeTests.cs index 47a24baac..72c3b98ae 100644 --- a/src/HomeInventory/HomeInventory.Tests/Domain/ValueObjects/MeasurementTypeTests.cs +++ b/src/HomeInventory/HomeInventory.Tests/Domain/ValueObjects/MeasurementTypeTests.cs @@ -40,13 +40,13 @@ public void FieldsShoulHaveMatchedName() var fields = typeof(MeasurementType).GetFieldsOfType().ToArray(); fields.Should().NotBeEmpty() - .And.AllSatisfy(t => t.Value!.Name.Should().Be(t.Field.Name)); + .And.AllSatisfy(static t => t.Value!.Name.Should().Be(t.Field.Name)); } [Fact] public void CanBeUsedAsDictionaryKey() { - var dictionary = _items.ToDictionary(x => x, x => x.Name); + var dictionary = _items.ToDictionary(static x => x, static x => x.Name); var values = typeof(MeasurementType).GetFieldValuesOfType().ToArray(); dictionary.Should().ContainKeys(values); diff --git a/src/HomeInventory/HomeInventory.Tests/Framework/Assertions/ServiceDescriptorExtensionsTests.cs b/src/HomeInventory/HomeInventory.Tests/Framework/Assertions/ServiceDescriptorExtensionsTests.cs index f43ebde9b..0da5cbdd6 100644 --- a/src/HomeInventory/HomeInventory.Tests/Framework/Assertions/ServiceDescriptorExtensionsTests.cs +++ b/src/HomeInventory/HomeInventory.Tests/Framework/Assertions/ServiceDescriptorExtensionsTests.cs @@ -35,7 +35,9 @@ public void GetInstance_ShouldReturnFromImplementationFactory() public void GetInstance_ShouldReturnFromImplementationType() { var expectedType = typeof(object); +#pragma warning disable CA2263 // Prefer generic overload when type is known var descriptor = ServiceDescriptor.Singleton(typeof(object), expectedType); +#pragma warning restore CA2263 // Prefer generic overload when type is known var actual = ServiceDescriptorExtensions.GetInstance(descriptor, _serviceProvider); diff --git a/src/HomeInventory/HomeInventory.Tests/HomeInventory.Tests.csproj b/src/HomeInventory/HomeInventory.Tests/HomeInventory.Tests.csproj index 3de83dfa1..9e88e5657 100644 --- a/src/HomeInventory/HomeInventory.Tests/HomeInventory.Tests.csproj +++ b/src/HomeInventory/HomeInventory.Tests/HomeInventory.Tests.csproj @@ -1,4 +1,4 @@ - + $(NoWarn);CA1707;AD0001 @@ -9,10 +9,11 @@ - + + diff --git a/src/HomeInventory/HomeInventory.Tests/Middlewares/CorrelationIdMiddlewareTests.cs b/src/HomeInventory/HomeInventory.Tests/Middlewares/CorrelationIdMiddlewareTests.cs index 2c5c653ec..859bb52f9 100644 --- a/src/HomeInventory/HomeInventory.Tests/Middlewares/CorrelationIdMiddlewareTests.cs +++ b/src/HomeInventory/HomeInventory.Tests/Middlewares/CorrelationIdMiddlewareTests.cs @@ -95,8 +95,8 @@ public async Task InvokeAsync_Should_CreateCorrelationId_When_HeaderIsNotSet() public async Task InvokeAsync_Should_AddCorrelationIdToResponse() { _httpResponseFeature - .When(f => f.OnStarting(Arg.Any>(), Arg.Any())) - .Do(ci => + .When(static f => f.OnStarting(Arg.Any>(), Arg.Any())) + .Do(static ci => { var func = ci.Arg>(); var state = ci.Arg(); diff --git a/src/HomeInventory/HomeInventory.Tests/Presentation/Web/SectionPathTests.cs b/src/HomeInventory/HomeInventory.Tests/Presentation/Web/SectionPathTests.cs index 3986c799f..aa26a60a1 100644 --- a/src/HomeInventory/HomeInventory.Tests/Presentation/Web/SectionPathTests.cs +++ b/src/HomeInventory/HomeInventory.Tests/Presentation/Web/SectionPathTests.cs @@ -3,7 +3,7 @@ namespace HomeInventory.Tests.Presentation.Web; [UnitTest] -public sealed class SectionPathTests() : BaseTest(t => new(t)) +public sealed class SectionPathTests() : BaseTest(static t => new(t)) { [Fact] public void ToString_Should_ReturnPath() @@ -13,10 +13,10 @@ public void ToString_Should_ReturnPath() .Sut(out var sutVar, pathVar); var then = When - .Invoked(sutVar, sut => sut.ToString()); + .Invoked(sutVar, static sut => sut.ToString()); then - .Result(pathVar, (actual, expected) => actual.Should().Be(expected)); + .Result(pathVar, static (actual, expected) => actual.Should().Be(expected)); } [Fact] @@ -28,10 +28,10 @@ public void Divide_Should_ReturnCombinedPath() .Sut(out var sutVar, pathVar); var then = When - .Invoked(sutVar, subPathVar, (sut, subPath) => SectionPath.Divide(sut, subPath).ToString()); + .Invoked(sutVar, subPathVar, static (sut, subPath) => SectionPath.Divide(sut, subPath).ToString()); then - .Result(pathVar, subPathVar, (actual, path, subPath) => actual.Should().Be($"{path}:{subPath}")); + .Result(pathVar, subPathVar, static (actual, path, subPath) => actual.Should().Be($"{path}:{subPath}")); } } diff --git a/src/HomeInventory/HomeInventory.Tests/Systems/Authentication/BCryptPasswordHasherTests.cs b/src/HomeInventory/HomeInventory.Tests/Systems/Authentication/BCryptPasswordHasherTests.cs index 2522adace..124dd7c4e 100644 --- a/src/HomeInventory/HomeInventory.Tests/Systems/Authentication/BCryptPasswordHasherTests.cs +++ b/src/HomeInventory/HomeInventory.Tests/Systems/Authentication/BCryptPasswordHasherTests.cs @@ -4,7 +4,7 @@ namespace HomeInventory.Tests.Systems.Authentication; [UnitTest] -public class BCryptPasswordHasherTests() : BaseTest(t => new(t)) +public class BCryptPasswordHasherTests() : BaseTest(static t => new(t)) { [Fact] public async Task HashAsync_ShouldReturnSomethingDifferentFromInput() @@ -14,10 +14,10 @@ public async Task HashAsync_ShouldReturnSomethingDifferentFromInput() .Sut(out var sutVar); var then = await When - .InvokedAsync(sutVar, passwordVar, async (sut, password, ct) => await sut.HashAsync(password, ct)); + .InvokedAsync(sutVar, passwordVar, static async (sut, password, ct) => await sut.HashAsync(password, ct)); then - .Result(passwordVar, (actual, password) => + .Result(passwordVar, static (actual, password) => actual.Should().NotBe(password)); } @@ -29,13 +29,13 @@ public async Task HashAsync_ShouldReturnDifferentHashesForDifferentInputs() .Sut(out var sutVar); var then = await When - .InvokedAsync(sutVar, passwordVar[0], passwordVar[1], async (sut, password1, password2, ct) => + .InvokedAsync(sutVar, passwordVar[0], passwordVar[1], static async (sut, password1, password2, ct) => { return new[] { await sut.HashAsync(password1, ct), await sut.HashAsync(password2, ct) }; }); then - .Result(actual => + .Result(static actual => actual[0].Should().NotBe(actual[1])); } @@ -47,14 +47,14 @@ public async Task VerifyAsync_ShouldConfirmHashed() .Sut(out var sutVar); var then = await When - .InvokedAsync(sutVar, passwordVar, async (sut, password, ct) => + .InvokedAsync(sutVar, passwordVar, static async (sut, password, ct) => { var hash = await sut.HashAsync(password, ct); return await sut.VarifyHashAsync(password, hash, ct); }); then - .Result(actual => + .Result(static actual => actual.Should().BeTrue()); } } diff --git a/src/HomeInventory/HomeInventory.Tests/Systems/Authentication/JwtTokenGeneratorTests.cs b/src/HomeInventory/HomeInventory.Tests/Systems/Authentication/JwtTokenGeneratorTests.cs index cf8294873..14e96b500 100644 --- a/src/HomeInventory/HomeInventory.Tests/Systems/Authentication/JwtTokenGeneratorTests.cs +++ b/src/HomeInventory/HomeInventory.Tests/Systems/Authentication/JwtTokenGeneratorTests.cs @@ -22,8 +22,8 @@ public JwtTokenGeneratorTests() Fixture.CustomizeId(); Fixture.CustomizeEmail(); _options = Fixture.Build() - .With(x => x.Expiry, TimeSpan.FromSeconds(Fixture.Create())) - .With(x => x.Algorithm, SecurityAlgorithms.HmacSha256) + .With(static x => x.Expiry, TimeSpan.FromSeconds(Fixture.Create())) + .With(static x => x.Algorithm, SecurityAlgorithms.HmacSha256) .Create(); _expectedHeader = new(new SigningCredentials(_options.SecurityKey, _options.Algorithm)); _user = Fixture.Create(); diff --git a/src/HomeInventory/HomeInventory.Tests/Systems/Handlers/RegisterCommandHandlerTests.cs b/src/HomeInventory/HomeInventory.Tests/Systems/Handlers/RegisterCommandHandlerTests.cs index 9a5db79f3..815bb5423 100644 --- a/src/HomeInventory/HomeInventory.Tests/Systems/Handlers/RegisterCommandHandlerTests.cs +++ b/src/HomeInventory/HomeInventory.Tests/Systems/Handlers/RegisterCommandHandlerTests.cs @@ -21,7 +21,7 @@ public RegisterCommandHandlerTests() { Fixture.CustomizeId(); Fixture.CustomizeEmail(); - Fixture.CustomizeFromFactory>((e, s) => new(e, s.Supply().ToString())); + Fixture.CustomizeFromFactory>(static (e, s) => new(e, s.Supply().ToString())); } private RegisterCommandHandler CreateSut() => new(_scopeAccessor, DateTime, _hasher, IdSuppliers.Ulid); @@ -62,7 +62,7 @@ public async Task Handle_OnFailure_ReturnsError() // Then using var scope = new AssertionScope(); - result.Should().BeSome(error => error.Should().BeOfType()); + result.Should().BeSome(static error => error.Should().BeOfType()); await _userRepository.DidNotReceiveWithAnyArgs().AddAsync(Arg.Any(), Cancellation.Token); } } \ No newline at end of file diff --git a/src/HomeInventory/HomeInventory.Tests/Systems/Mapping/BaseMappingsTests.cs b/src/HomeInventory/HomeInventory.Tests/Systems/Mapping/BaseMappingsTests.cs index a7963a82e..7f282273b 100644 --- a/src/HomeInventory/HomeInventory.Tests/Systems/Mapping/BaseMappingsTests.cs +++ b/src/HomeInventory/HomeInventory.Tests/Systems/Mapping/BaseMappingsTests.cs @@ -18,7 +18,7 @@ protected BaseMappingsTests() protected virtual IMapper CreateSut() where TMapper : Profile, new() { - var config = new MapperConfiguration(x => + var config = new MapperConfiguration(static x => { x.AddProfile(); }); @@ -31,7 +31,7 @@ protected IMapper CreateSut() where TMapper1 : Profile, new() where TMapper2 : Profile, new() { - var config = new MapperConfiguration(x => + var config = new MapperConfiguration(static x => { x.AddProfile(); x.AddProfile(); diff --git a/src/HomeInventory/HomeInventory.Tests/Systems/Mapping/UlidIdConverterTests.cs b/src/HomeInventory/HomeInventory.Tests/Systems/Mapping/UlidIdConverterTests.cs index b92c82333..589101854 100644 --- a/src/HomeInventory/HomeInventory.Tests/Systems/Mapping/UlidIdConverterTests.cs +++ b/src/HomeInventory/HomeInventory.Tests/Systems/Mapping/UlidIdConverterTests.cs @@ -3,7 +3,7 @@ namespace HomeInventory.Tests.Systems.Mapping; [UnitTest] -public class UlidIdConverterTests() : BaseTest(t => new(t)) +public class UlidIdConverterTests() : BaseTest(static t => new(t)) { [Fact] public void TryConvert_Should_ReturnValue_When_IdIsNotEmpty() @@ -27,10 +27,10 @@ public void TryConvert_Should_ReturnError_When_IdIsEmpty() .Empty(out var idVar); var then = When - .Invoked(sutVar, idVar, (sut, id) => sut.TryConvert(id)); + .Invoked(sutVar, idVar, static (sut, id) => sut.TryConvert(id)); then - .Result(validation => validation + .Result(static validation => validation .Should().BeFail() .Which.Head.Should().BeOfType() .Which.Value.Should().BeOfType() @@ -45,8 +45,8 @@ public void Convert_Should_Throw_When_IdIsEmpty() .Empty(out var idVar); When - .Catched(sutVar, idVar, (sut, id) => sut.Convert(id)) - .Exception(ex => ex.Which.Value.Should().Be(Ulid.Empty)); + .Catched(sutVar, idVar, static (sut, id) => sut.Convert(id)) + .Exception(static ex => ex.Which.Value.Should().Be(Ulid.Empty)); } } @@ -59,7 +59,7 @@ public UlidIdConverterTestsGivenContext(BaseTest test) } internal UlidIdConverterTestsGivenContext Empty(out IVariable empty) => - New(out empty, () => Ulid.Empty); + New(out empty, static () => Ulid.Empty); protected override UlidIdConverter CreateSut() => new(); } diff --git a/src/HomeInventory/HomeInventory.Tests/Systems/Modules/AuthenticationModuleTests.cs b/src/HomeInventory/HomeInventory.Tests/Systems/Modules/AuthenticationModuleTests.cs index 0c0751624..805ba8db3 100644 --- a/src/HomeInventory/HomeInventory.Tests/Systems/Modules/AuthenticationModuleTests.cs +++ b/src/HomeInventory/HomeInventory.Tests/Systems/Modules/AuthenticationModuleTests.cs @@ -8,7 +8,7 @@ namespace HomeInventory.Tests.Systems.Modules; [UnitTest] -public class AuthenticationModuleTests() : BaseApiModuleTests(t => new(t)) +public class AuthenticationModuleTests() : BaseApiModuleTests(static t => new(t)) { [Fact] public async Task AddRoutes_ShouldRegister() @@ -20,10 +20,10 @@ await Given .InitializeHostAsync(); var then = When - .Invoked(sutVar, routeBuilderVar, (sut, routeBuilder) => sut.AddRoutes(routeBuilder)); + .Invoked(sutVar, routeBuilderVar, static (sut, routeBuilder) => sut.AddRoutes(routeBuilder)); then - .Ensure(sutVar, dataSourcesVar, (module, dataSources) => + .Ensure(sutVar, dataSourcesVar, static (module, dataSources) => dataSources.Should().ContainSingle() .Which.Endpoints.OfType().Should().ContainSingle() .Which.Should().HaveRoutePattern(module.GroupPrefix, RoutePatternFactory.Parse("login")) @@ -45,10 +45,10 @@ await Given var then = await When - .InvokedAsync(sutVar, loginRequestVar, contextVar, (sut, body, context, ct) => sut.LoginAsync(body, context, ct)); + .InvokedAsync(sutVar, loginRequestVar, contextVar, static (sut, body, context, ct) => sut.LoginAsync(body, context, ct)); then - .Result(loginResponseVar, (actual, expected) => + .Result(loginResponseVar, static (actual, expected) => actual.Result.Should().BeOfType>() .Which.Should().HaveValue(expected)); } diff --git a/src/HomeInventory/HomeInventory.Tests/Systems/Modules/BaseApiModuleGivenTestContext.cs b/src/HomeInventory/HomeInventory.Tests/Systems/Modules/BaseApiModuleGivenTestContext.cs index f14173596..17a0d204f 100644 --- a/src/HomeInventory/HomeInventory.Tests/Systems/Modules/BaseApiModuleGivenTestContext.cs +++ b/src/HomeInventory/HomeInventory.Tests/Systems/Modules/BaseApiModuleGivenTestContext.cs @@ -62,7 +62,7 @@ public TGiven HttpContext(out IVariable context) => New(out context, CreateHttpContext); public TGiven DataSources(out IVariable> dataSources) => - New(out dataSources, () => []); + New(out dataSources, static () => []); public TGiven RouteBuilder(out IVariable routeBuilder, IVariable> dataSources) => SubstituteFor(out routeBuilder, dataSources, (b, s) => diff --git a/src/HomeInventory/HomeInventory.Tests/Systems/Modules/ErrorMappingTests.cs b/src/HomeInventory/HomeInventory.Tests/Systems/Modules/ErrorMappingTests.cs index 915d40393..b49f2f0bf 100644 --- a/src/HomeInventory/HomeInventory.Tests/Systems/Modules/ErrorMappingTests.cs +++ b/src/HomeInventory/HomeInventory.Tests/Systems/Modules/ErrorMappingTests.cs @@ -4,7 +4,7 @@ namespace HomeInventory.Tests.Systems.Modules; [UnitTest] -public class ErrorMappingTests() : BaseTest(t => new(t)) +public class ErrorMappingTests() : BaseTest(static t => new(t)) { [Fact] public void GetDefaultError_Should_Return500() @@ -13,8 +13,8 @@ public void GetDefaultError_Should_Return500() .Sut(out var sutVar); When - .Invoked(sutVar, sut => sut.GetDefaultError()) - .Result(actual => actual.Should().Be(HttpStatusCode.InternalServerError)); + .Invoked(sutVar, static sut => sut.GetDefaultError()) + .Result(static actual => actual.Should().Be(HttpStatusCode.InternalServerError)); } [Theory] diff --git a/src/HomeInventory/HomeInventory.Tests/Systems/Modules/JsonOpenApiValueConverterTests.cs b/src/HomeInventory/HomeInventory.Tests/Systems/Modules/JsonOpenApiValueConverterTests.cs index b734f87a4..e969c9f46 100644 --- a/src/HomeInventory/HomeInventory.Tests/Systems/Modules/JsonOpenApiValueConverterTests.cs +++ b/src/HomeInventory/HomeInventory.Tests/Systems/Modules/JsonOpenApiValueConverterTests.cs @@ -3,7 +3,7 @@ namespace HomeInventory.Tests.Systems.Modules; [UnitTest] -public sealed class JsonOpenApiValueConverterTests() : BaseTest(t => new(t)) +public sealed class JsonOpenApiValueConverterTests() : BaseTest(static t => new(t)) { [Fact] public void Convert_ShouldReturnNull_WhenValueIsNull() @@ -13,10 +13,10 @@ public void Convert_ShouldReturnNull_WhenValueIsNull() .Sut(out var sutVar); var then = When - .Invoked(sutVar, valueVar, (sut, value) => sut.Convert(value, typeof(object))); + .Invoked(sutVar, valueVar, static (sut, value) => sut.Convert(value, typeof(object))); then - .Result(any => any.Should().BeOfType()); + .Result(static any => any.Should().BeOfType()); } [Fact] @@ -27,10 +27,10 @@ public void Convert_ShouldReturnOpenApiNull_WhenValueIsDbNull() .Sut(out var sutVar); var then = When - .Invoked(sutVar, valueVar, (sut, value) => sut.Convert(value, value.GetType())); + .Invoked(sutVar, valueVar, static (sut, value) => sut.Convert(value, value.GetType())); then - .Result(any => any.Should().BeOfType()); + .Result(static any => any.Should().BeOfType()); } [Theory] diff --git a/src/HomeInventory/HomeInventory.Tests/Systems/Modules/UserManagementModuleTests.cs b/src/HomeInventory/HomeInventory.Tests/Systems/Modules/UserManagementModuleTests.cs index 5838ac282..de02eef2d 100644 --- a/src/HomeInventory/HomeInventory.Tests/Systems/Modules/UserManagementModuleTests.cs +++ b/src/HomeInventory/HomeInventory.Tests/Systems/Modules/UserManagementModuleTests.cs @@ -9,7 +9,7 @@ namespace HomeInventory.Tests.Systems.Modules; [UnitTest] -public class UserManagementModuleTests() : BaseApiModuleTests(t => new(t)) +public class UserManagementModuleTests() : BaseApiModuleTests(static t => new(t)) { [Fact] public async Task AddRoutes_ShouldRegister() @@ -21,10 +21,10 @@ await Given .InitializeHostAsync(); var then = When - .Invoked(sutVar, routeBuilderVar, (sut, routeBuilder) => sut.AddRoutes(routeBuilder)); + .Invoked(sutVar, routeBuilderVar, static (sut, routeBuilder) => sut.AddRoutes(routeBuilder)); then - .Ensure(sutVar, dataSourcesVar, (module, dataSources) => + .Ensure(sutVar, dataSourcesVar, static (module, dataSources) => dataSources.Should().ContainSingle() .Which.Endpoints.OfType().Should().ContainSingle() .Which.Should().HaveRoutePattern(module.GroupPrefix, RoutePatternFactory.Parse("register")) @@ -47,10 +47,10 @@ await Given .InitializeHostAsync(); var then = await When - .InvokedAsync(sutVar, registerRequestVar, contextVar, (sut, body, context, ct) => sut.RegisterAsync(body, null!, null!, context, ct)); + .InvokedAsync(sutVar, registerRequestVar, contextVar, static (sut, body, context, ct) => sut.RegisterAsync(body, null!, null!, context, ct)); then - .Result(registerResponseVar, (actual, expected) => + .Result(registerResponseVar, static (actual, expected) => actual.Result.Should().BeOfType>() .Which.Should().HaveValue(expected)); } diff --git a/src/HomeInventory/HomeInventory.Tests/Systems/Persistence/AmountValueObjectConverterTests.cs b/src/HomeInventory/HomeInventory.Tests/Systems/Persistence/AmountValueObjectConverterTests.cs index bc8839238..33e137fd9 100644 --- a/src/HomeInventory/HomeInventory.Tests/Systems/Persistence/AmountValueObjectConverterTests.cs +++ b/src/HomeInventory/HomeInventory.Tests/Systems/Persistence/AmountValueObjectConverterTests.cs @@ -18,7 +18,7 @@ public class AmountValueObjectConverterTests : IAsyncLifetime public void TryConvert() => _test.TryConvert(); } -internal class InternalAmountValueObjectConverterTests() : BaseTest(t => new(t)) +internal class InternalAmountValueObjectConverterTests() : BaseTest(static t => new(t)) { public void TryConvert() { @@ -53,8 +53,8 @@ private sealed class ProductAmountModelCustomization : ICustomization { public void Customize(IFixture fixture) { - fixture.Customize(c => c - .With(m => m.UnitName, u => u.Name)); + fixture.Customize(static c => c + .With(static m => m.UnitName, static u => u.Name)); } } private sealed class AmountUnitCustomization : ICustomization @@ -71,7 +71,7 @@ private sealed class AmountCustomization : ICustomization { public void Customize(IFixture fixture) { - fixture.Customize(c => c.FromFactory((v, u) => new(v, u))); + fixture.Customize(static c => c.FromFactory(static (v, u) => new(v, u))); } } } diff --git a/src/HomeInventory/HomeInventory.Tests/Systems/Persistence/BaseRepositoryTest.cs b/src/HomeInventory/HomeInventory.Tests/Systems/Persistence/BaseRepositoryTest.cs index b4290e916..576ea02a1 100644 --- a/src/HomeInventory/HomeInventory.Tests/Systems/Persistence/BaseRepositoryTest.cs +++ b/src/HomeInventory/HomeInventory.Tests/Systems/Persistence/BaseRepositoryTest.cs @@ -13,7 +13,7 @@ protected BaseRepositoryTest() var services = new ServiceCollection(); var factory = new DefaultServiceProviderFactory(); - var config = new MapperConfiguration(x => + var config = new MapperConfiguration(static x => { x.AddProfile(); x.AddProfile(); diff --git a/src/HomeInventory/HomeInventory.Tests/Systems/Persistence/ByIdFilterSpecificationTests.cs b/src/HomeInventory/HomeInventory.Tests/Systems/Persistence/ByIdFilterSpecificationTests.cs index f0a056906..2ae420bdd 100644 --- a/src/HomeInventory/HomeInventory.Tests/Systems/Persistence/ByIdFilterSpecificationTests.cs +++ b/src/HomeInventory/HomeInventory.Tests/Systems/Persistence/ByIdFilterSpecificationTests.cs @@ -21,7 +21,7 @@ public ByIdFilterSpecificationTests() public void Should_SatisfyWithCorrectId() { var user = Fixture.Build() - .With(m => m.Id, _id) + .With(static m => m.Id, _id) .Create(); var query = new[] { user }.AsQueryable(); var sut = CreateSut(); @@ -47,7 +47,7 @@ public void Should_NotSatisfyWithWrongId() public async Task ExecuteAsync_Should_SatisfyWithCorrectId() { var user = Fixture.Build() - .With(m => m.Id, _id) + .With(static m => m.Id, _id) .Create(); await Context.Set().AddAsync(user, Cancellation.Token); await Context.SaveChangesAsync(); diff --git a/src/HomeInventory/HomeInventory.Tests/Systems/Persistence/EventsPersistenceServiceTests.cs b/src/HomeInventory/HomeInventory.Tests/Systems/Persistence/EventsPersistenceServiceTests.cs index 162fb3594..698c44120 100644 --- a/src/HomeInventory/HomeInventory.Tests/Systems/Persistence/EventsPersistenceServiceTests.cs +++ b/src/HomeInventory/HomeInventory.Tests/Systems/Persistence/EventsPersistenceServiceTests.cs @@ -6,7 +6,7 @@ namespace HomeInventory.Tests.Systems.Persistence; [UnitTest] -public class EventsPersistenceServiceTests() : BaseTest(t => new(t)) +public class EventsPersistenceServiceTests() : BaseTest(static t => new(t)) { private readonly DbContextOptions _options = DbContextFactory.CreateInMemoryOptions("database"); diff --git a/src/HomeInventory/HomeInventory.Tests/Systems/Persistence/OutboxMessageConfigurationTests.cs b/src/HomeInventory/HomeInventory.Tests/Systems/Persistence/OutboxMessageConfigurationTests.cs index 1e896b0f9..29e126863 100644 --- a/src/HomeInventory/HomeInventory.Tests/Systems/Persistence/OutboxMessageConfigurationTests.cs +++ b/src/HomeInventory/HomeInventory.Tests/Systems/Persistence/OutboxMessageConfigurationTests.cs @@ -32,7 +32,7 @@ public void UserModel_Should_HavePrimaryKey() type.Should().NotBeNull(); var primaryKey = type.FindPrimaryKey(); primaryKey.Should().NotBeNull(); - primaryKey.Properties.Should().ContainSingle(x => x.Name == nameof(OutboxMessage.Id)); + primaryKey.Properties.Should().ContainSingle(static x => x.Name == nameof(OutboxMessage.Id)); } [Fact] diff --git a/src/HomeInventory/HomeInventory.Tests/Systems/Persistence/UserHasEmailSpecificationTests.cs b/src/HomeInventory/HomeInventory.Tests/Systems/Persistence/UserHasEmailSpecificationTests.cs index 4fb0f2ddb..4daaedd41 100644 --- a/src/HomeInventory/HomeInventory.Tests/Systems/Persistence/UserHasEmailSpecificationTests.cs +++ b/src/HomeInventory/HomeInventory.Tests/Systems/Persistence/UserHasEmailSpecificationTests.cs @@ -20,7 +20,7 @@ public void Should_SatisfyWithCorrectEmail() { var email = Fixture.Create(); var user = Fixture.Build() - .With(x => x.Email, email) + .With(static x => x.Email, email) .Create(); var query = new[] { user }.AsQueryable(); var sut = new UserHasEmailSpecification(new(email)); @@ -34,7 +34,7 @@ public void Should_SatisfyWithCorrectEmail() public void Should_NotSatisfyWithWrongEmail() { var query = Fixture.Build() - .With(x => x.Email, Fixture.Create()) + .With(static x => x.Email, Fixture.Create()) .CreateMany() .AsQueryable(); var sut = new UserHasEmailSpecification(new(Fixture.Create())); diff --git a/src/HomeInventory/HomeInventory.Tests/Systems/Persistence/UserModelConfigurationTests.cs b/src/HomeInventory/HomeInventory.Tests/Systems/Persistence/UserModelConfigurationTests.cs index ba5f5947f..1e79530e4 100644 --- a/src/HomeInventory/HomeInventory.Tests/Systems/Persistence/UserModelConfigurationTests.cs +++ b/src/HomeInventory/HomeInventory.Tests/Systems/Persistence/UserModelConfigurationTests.cs @@ -20,7 +20,7 @@ public void UserModel_Should_HavePrimaryKey() type.Should().NotBeNull(); var primaryKey = type.FindPrimaryKey(); primaryKey.Should().NotBeNull(); - primaryKey.Properties.Should().ContainSingle(x => x.Name == nameof(UserModel.Id)); + primaryKey.Properties.Should().ContainSingle(static x => x.Name == nameof(UserModel.Id)); } private static UserModelConfiguration CreateSut() => new(); diff --git a/src/HomeInventory/HomeInventory.Tests/Systems/Persistence/UserRepositoryTests.cs b/src/HomeInventory/HomeInventory.Tests/Systems/Persistence/UserRepositoryTests.cs index de4ab2d18..43c13e976 100644 --- a/src/HomeInventory/HomeInventory.Tests/Systems/Persistence/UserRepositoryTests.cs +++ b/src/HomeInventory/HomeInventory.Tests/Systems/Persistence/UserRepositoryTests.cs @@ -19,9 +19,9 @@ public UserRepositoryTests() _user = Fixture.Create(); _userModel = Fixture.Build() - .With(x => x.Id, _user.Id) - .With(x => x.Email, _user.Email.Value) - .With(x => x.Password, _user.Password) + .With(static x => x.Id, _user.Id) + .With(static x => x.Email, _user.Email.Value) + .With(static x => x.Password, _user.Password) .Create(); } diff --git a/src/HomeInventory/HomeInventory.Tests/Validation/PasswordValidatorTests.cs b/src/HomeInventory/HomeInventory.Tests/Validation/PasswordValidatorTests.cs index 3732a3386..11ce75b6b 100644 --- a/src/HomeInventory/HomeInventory.Tests/Validation/PasswordValidatorTests.cs +++ b/src/HomeInventory/HomeInventory.Tests/Validation/PasswordValidatorTests.cs @@ -44,7 +44,7 @@ public void Should_NotPassValidation(string? password) var results = sut.TestValidate(container); - results.ShouldHaveValidationErrorFor(c => c.Password); + results.ShouldHaveValidationErrorFor(static c => c.Password); } private class Container @@ -55,8 +55,7 @@ private class Container #pragma warning disable IDE0028 // Simplify collection initialization private static InlineValidator CreateSut() => new() - { - v => v.RuleFor(x => x.Password).Password() + { static v => v.RuleFor(static x => x.Password).Password() }; #pragma warning restore IDE0028 // Simplify collection initialization } diff --git a/src/HomeInventory/HomeInventory.Web.Framework/HomeInventory.Web.Framework.csproj b/src/HomeInventory/HomeInventory.Web.Framework/HomeInventory.Web.Framework.csproj index c4a58d99e..9eab468fc 100644 --- a/src/HomeInventory/HomeInventory.Web.Framework/HomeInventory.Web.Framework.csproj +++ b/src/HomeInventory/HomeInventory.Web.Framework/HomeInventory.Web.Framework.csproj @@ -6,6 +6,7 @@ + diff --git a/src/HomeInventory/HomeInventory.Web.Framework/Infrastructure/ProblemDetailsFactoryExtensions.cs b/src/HomeInventory/HomeInventory.Web.Framework/Infrastructure/ProblemDetailsFactoryExtensions.cs index 9013ffd55..a63da84e7 100644 --- a/src/HomeInventory/HomeInventory.Web.Framework/Infrastructure/ProblemDetailsFactoryExtensions.cs +++ b/src/HomeInventory/HomeInventory.Web.Framework/Infrastructure/ProblemDetailsFactoryExtensions.cs @@ -12,7 +12,7 @@ public static ProblemDetails ConvertToProblem(this IProblemDetailsFactory factor factory.ConvertToProblem(result.Errors, traceIdentifier); public static ProblemDetails ConvertToProblem(this IProblemDetailsFactory factory, IEnumerable results, string? traceIdentifier = null) => - factory.ConvertToProblem(results.SelectMany(r => r.Errors), traceIdentifier); + factory.ConvertToProblem(results.SelectMany(static r => r.Errors), traceIdentifier); public static Results, ProblemHttpResult> MatchToOk(this IProblemDetailsFactory factory, IQueryResult errorOrResult, Func onValue, string? traceIdentifier = null) where T : notnull => @@ -28,5 +28,5 @@ public static Results, ProblemHttpResult> MatchToOk( }); private static ProblemDetails ConvertToProblem(this IProblemDetailsFactory factory, IEnumerable failures, string? traceIdentifier = null) => - factory.ConvertToProblem(failures.Select(x => new ValidationError(x.ErrorMessage, x.AttemptedValue)).Cast().ToSeq(), traceIdentifier); + factory.ConvertToProblem(failures.Select(static x => new ValidationError(x.ErrorMessage, x.AttemptedValue)).Cast().ToSeq(), traceIdentifier); } diff --git a/src/HomeInventory/HomeInventory.Web.Framework/ValidationContextFactory.cs b/src/HomeInventory/HomeInventory.Web.Framework/ValidationContextFactory.cs index b7b772f93..a64c524b8 100644 --- a/src/HomeInventory/HomeInventory.Web.Framework/ValidationContextFactory.cs +++ b/src/HomeInventory/HomeInventory.Web.Framework/ValidationContextFactory.cs @@ -5,7 +5,7 @@ namespace HomeInventory.Web.Framework; internal sealed class ValidationContextFactory(Action>? validationOptions = null) : IValidationContextFactory { - private readonly Action> _validationOptions = validationOptions ?? (_ => { }); + private readonly Action> _validationOptions = validationOptions ?? (static _ => { }); public IValidationContext CreateContext(TOptions options) => ValidationContext.CreateWithOptions(options, _validationOptions); diff --git a/src/HomeInventory/HomeInventory.Web.Framework/ValidationEndpointFilter.cs b/src/HomeInventory/HomeInventory.Web.Framework/ValidationEndpointFilter.cs index a11afe4f6..a4415af13 100644 --- a/src/HomeInventory/HomeInventory.Web.Framework/ValidationEndpointFilter.cs +++ b/src/HomeInventory/HomeInventory.Web.Framework/ValidationEndpointFilter.cs @@ -18,12 +18,12 @@ internal sealed class ValidationEndpointFilter(IValidationContextFactory v var validator = httpContext.RequestServices.GetValidator(); var results = await ValidateArgumentAsync(validator, arguments, httpContext.RequestAborted).ToArrayAsync(httpContext.RequestAborted); - if (results.Length == 0 || Array.TrueForAll(results, r => r.IsValid)) + if (results.Length == 0 || Array.TrueForAll(results, static r => r.IsValid)) { return await next(context); } - var problem = _problemDetailsFactory.ConvertToProblem(results.Where(r => !r.IsValid), httpContext.TraceIdentifier); + var problem = _problemDetailsFactory.ConvertToProblem(results.Where(static r => !r.IsValid), httpContext.TraceIdentifier); return TypedResults.Problem(problem); } diff --git a/src/HomeInventory/HomeInventory.Web.UserManagement/HomeInventory.Web.UserManagement.csproj b/src/HomeInventory/HomeInventory.Web.UserManagement/HomeInventory.Web.UserManagement.csproj index f99c2a577..3ad5919af 100644 --- a/src/HomeInventory/HomeInventory.Web.UserManagement/HomeInventory.Web.UserManagement.csproj +++ b/src/HomeInventory/HomeInventory.Web.UserManagement/HomeInventory.Web.UserManagement.csproj @@ -14,4 +14,8 @@ + + + + diff --git a/src/HomeInventory/HomeInventory.Web.UserManagement/UserManagementContractsMappings.cs b/src/HomeInventory/HomeInventory.Web.UserManagement/UserManagementContractsMappings.cs index 31334af77..cb5d9f05e 100644 --- a/src/HomeInventory/HomeInventory.Web.UserManagement/UserManagementContractsMappings.cs +++ b/src/HomeInventory/HomeInventory.Web.UserManagement/UserManagementContractsMappings.cs @@ -12,8 +12,8 @@ internal sealed class UserManagementContractsMappings : BaseMappingsProfile { public UserManagementContractsMappings() { - CreateMap().Using(x => x.Value, UserId.Converter); - CreateMap().Using(x => x.Value, x => new(x)); + CreateMap().Using(static x => x.Value, UserId.Converter); + CreateMap().Using(static x => x.Value, static x => new(x)); CreateMap().Using(CreateRegisterCommand); diff --git a/src/HomeInventory/HomeInventory.Web/Authorization/Dynamic/DynamicAuthorizationServiceCollectionExtensions.cs b/src/HomeInventory/HomeInventory.Web/Authorization/Dynamic/DynamicAuthorizationServiceCollectionExtensions.cs index 8bfa39884..204e5a9e4 100644 --- a/src/HomeInventory/HomeInventory.Web/Authorization/Dynamic/DynamicAuthorizationServiceCollectionExtensions.cs +++ b/src/HomeInventory/HomeInventory.Web/Authorization/Dynamic/DynamicAuthorizationServiceCollectionExtensions.cs @@ -5,6 +5,6 @@ namespace HomeInventory.Web.Authorization.Dynamic; public static class DynamicAuthorizationServiceCollectionExtensions { public static TBuilder RequireDynamicAuthorization(this TBuilder builder, params PermissionType[] permissions) - where TBuilder : IEndpointConventionBuilder => + where TBuilder : IEndpointConventionBuilder => builder.RequireAuthorization(AuthorizationPolicyNames.Dynamic).WithMetadata(new PermissionMetadata(permissions)); } diff --git a/src/HomeInventory/HomeInventory.Web/Configuration/Validation/JwtOptionsValidator.cs b/src/HomeInventory/HomeInventory.Web/Configuration/Validation/JwtOptionsValidator.cs index b3e511e2a..8bcd91237 100644 --- a/src/HomeInventory/HomeInventory.Web/Configuration/Validation/JwtOptionsValidator.cs +++ b/src/HomeInventory/HomeInventory.Web/Configuration/Validation/JwtOptionsValidator.cs @@ -6,10 +6,10 @@ internal sealed class JwtOptionsValidator : AbstractValidator, IOpti { public JwtOptionsValidator() { - RuleFor(x => x.Secret).NotEmpty(); - RuleFor(x => x.Issuer).NotEmpty(); - RuleFor(x => x.Audience).NotEmpty(); - RuleFor(x => x.Algorithm).NotEmpty(); - RuleFor(x => x.Expiry).GreaterThan(TimeSpan.FromSeconds(1)); + RuleFor(static x => x.Secret).NotEmpty(); + RuleFor(static x => x.Issuer).NotEmpty(); + RuleFor(static x => x.Audience).NotEmpty(); + RuleFor(static x => x.Algorithm).NotEmpty(); + RuleFor(static x => x.Expiry).GreaterThan(TimeSpan.FromSeconds(1)); } } diff --git a/src/HomeInventory/HomeInventory.Web/ErrorHandling/HomeInventoryProblemDetailsFactory.cs b/src/HomeInventory/HomeInventory.Web/ErrorHandling/HomeInventoryProblemDetailsFactory.cs index 917d767b9..2f6dd271c 100644 --- a/src/HomeInventory/HomeInventory.Web/ErrorHandling/HomeInventoryProblemDetailsFactory.cs +++ b/src/HomeInventory/HomeInventory.Web/ErrorHandling/HomeInventoryProblemDetailsFactory.cs @@ -64,7 +64,7 @@ private ProblemDetails InternalConvertToProblem(IEnumerable errors) return problems.FirstOrDefault() ?? throw new InvalidOperationException("Has to be at least one error provided"); } - var statuses = problems.Select(x => x.Status).ToHashSet(); + var statuses = problems.Select(static x => x.Status).ToHashSet(); var status = (statuses.Count == 1 ? statuses.First() : default) ?? _defaultStatusCode; return CreateProblem( status, diff --git a/src/HomeInventory/HomeInventory.Web/ErrorHandling/ProblemDetailsExtensions.cs b/src/HomeInventory/HomeInventory.Web/ErrorHandling/ProblemDetailsExtensions.cs index 5ee676560..3df3a6266 100644 --- a/src/HomeInventory/HomeInventory.Web/ErrorHandling/ProblemDetailsExtensions.cs +++ b/src/HomeInventory/HomeInventory.Web/ErrorHandling/ProblemDetailsExtensions.cs @@ -39,7 +39,7 @@ public static TProblem AddProblemDetailsExtensions(this TProblem probl public static TProblem AddProblemDetailsExtensions(this TProblem problemDetails, Seq errors) where TProblem : ProblemDetails { - problemDetails.Extensions["errorCodes"] = errors.Select(e => e.GetType().Name).ToArray(); + problemDetails.Extensions["errorCodes"] = errors.Select(static e => e.GetType().Name).ToArray(); problemDetails.Extensions["errors"] = errors.ToArray(); return problemDetails; } @@ -53,15 +53,15 @@ public static TProblem AddProblemsAndStatuses(this TProblem problemDet private static Dictionary ToErrorDictionary(this ModelStateDictionary modelState) => modelState - .Select(p => (p.Key, Messages: p.Value?.Errors.GetErrorMessages() ?? [])) - .Where(x => x.Messages.Length > 0) - .ToDictionary(x => x.Key, x => x.Messages); + .Select(static p => (p.Key, Messages: p.Value?.Errors.GetErrorMessages() ?? [])) + .Where(static x => x.Messages.Length > 0) + .ToDictionary(static x => x.Key, static x => x.Messages); private static string[] GetErrorMessages(this ModelErrorCollection collection) => collection switch { { Count: 1 } errors => [errors[0].GetErrorMessage()], - { } errors => errors.Select(e => e.GetErrorMessage()).ToArray(), + { } errors => errors.Select(static e => e.GetErrorMessage()).ToArray(), _ => [], }; diff --git a/src/HomeInventory/HomeInventory.Web/HomeInventory.Web.csproj b/src/HomeInventory/HomeInventory.Web/HomeInventory.Web.csproj index 1bd60ba45..a69242ba3 100644 --- a/src/HomeInventory/HomeInventory.Web/HomeInventory.Web.csproj +++ b/src/HomeInventory/HomeInventory.Web/HomeInventory.Web.csproj @@ -13,6 +13,7 @@ + diff --git a/src/HomeInventory/HomeInventory.Web/Modules/AuthenticationModule.cs b/src/HomeInventory/HomeInventory.Web/Modules/AuthenticationModule.cs index 0178fdfbb..04cf73576 100644 --- a/src/HomeInventory/HomeInventory.Web/Modules/AuthenticationModule.cs +++ b/src/HomeInventory/HomeInventory.Web/Modules/AuthenticationModule.cs @@ -22,7 +22,7 @@ protected override void AddRoutes(RouteGroupBuilder group) { group.MapPost("login", LoginAsync) .AllowAnonymous() - .WithValidationOf(s => s.IncludeAllRuleSets()); + .WithValidationOf(static s => s.IncludeAllRuleSets()); } public async Task, ProblemHttpResult>> LoginAsync([FromBody] LoginRequest body, HttpContext context, CancellationToken cancellationToken = default) diff --git a/src/HomeInventory/HomeInventory.Web/Modules/PermissionModule.cs b/src/HomeInventory/HomeInventory.Web/Modules/PermissionModule.cs index b44b51340..7c324fea8 100644 --- a/src/HomeInventory/HomeInventory.Web/Modules/PermissionModule.cs +++ b/src/HomeInventory/HomeInventory.Web/Modules/PermissionModule.cs @@ -22,5 +22,5 @@ protected override void AddRoutes(RouteGroupBuilder group) } public static Task>> GetPermissionsAsync([FromServices] PermissionList list, CancellationToken cancellationToken = default) - => Task.FromResult(TypedResults.Ok(list.Select(p => p.ToString()))); + => Task.FromResult(TypedResults.Ok(list.Select(static p => p.ToString()))); } diff --git a/src/HomeInventory/global.json b/src/HomeInventory/global.json index a3cf554a1..4eda52220 100644 --- a/src/HomeInventory/global.json +++ b/src/HomeInventory/global.json @@ -1,6 +1,6 @@ { "sdk": { - "version": "8.0.403", + "version": "9.0.100", "rollForward": "latestMajor", "allowPrerelease": false }