From b557469f9567022c38b81bfae1cb4eaafd898120 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Mon, 20 Sep 2021 16:44:43 +0200 Subject: [PATCH] Code analyzer fixes. --- .../Scripting/JintUser.cs | 1 - .../Contents/MongoContentCollection.cs | 1 - .../Contents/MongoContentRepository.cs | 1 - .../Contents/Operations/QueryScheduled.cs | 1 - .../Apps/Indexes/AppsIndex.cs | 1 - .../Guards/ScriptMetadataWrapper.cs | 3 +- .../Backup/BackupGrain.cs | 4 +-- .../Backup/BackupReader.cs | 1 - .../Comments/CommentTriggerHandler.cs | 2 +- .../Contents/ContentSchedulerGrain.cs | 1 - .../Contents/Queries/ContentEnricher.cs | 2 +- .../Repositories/IContentRepository.cs | 1 - .../Schemas/Indexes/SchemasIndex.cs | 1 - .../Squidex.Web/Pipeline/SetupMiddleware.cs | 2 +- .../Controllers/Backups/BackupsController.cs | 4 +-- .../Controllers/Backups/RestoreController.cs | 2 +- .../Users/UserManagementController.cs | 16 +++++------ .../Config/CreateAdminInitializer.cs | 6 ++-- .../Controllers/Account/AccountController.cs | 14 +++++----- .../Controllers/Connect/ConnectController.cs | 4 +-- .../Controllers/Profile/ProfileController.cs | 28 +++++++++---------- .../Controllers/Setup/SetupController.cs | 6 ++-- .../UserInfo/UserInfoController.cs | 2 +- .../src/Squidex/Config/Domain/AppsServices.cs | 1 - .../Apps/DefaultAppLogStoreTests.cs | 2 +- .../Apps/DomainObject/AppDomainObjectTests.cs | 2 ++ .../Assets/AssetsFluidExtensionTests.cs | 7 +++-- .../Assets/AssetsJintExtensionTests.cs | 6 ++-- .../Assets/BackupAssetsTests.cs | 1 - .../Assets/DefaultAssetFileStoreTests.cs | 18 ++++++------ .../DomainObject/AssetDomainObjectTests.cs | 2 ++ .../AssetFolderDomainObjectTests.cs | 2 ++ .../Assets/MongoDb/AssetQueryTests.cs | 4 +-- .../Assets/MongoDb/AssetsQueryFixture.cs | 7 +++-- .../Backup/BackupReaderWriterTests.cs | 15 +++++----- .../DomainObject/CommentsGrainTests.cs | 14 +++++----- .../Contents/ContentSchedulerGrainTests.cs | 1 - .../DomainObject/ContentDomainObjectTests.cs | 2 ++ .../Contents/GraphQL/GraphQLMutationTests.cs | 15 +++++----- .../Contents/GraphQL/GraphQLQueriesTests.cs | 27 +++++++++--------- .../Contents/MongoDb/ContentQueryTests.cs | 4 +-- .../Contents/MongoDb/ContentsQueryFixture.cs | 3 +- .../Contents/ReferencesFluidExtensionTests.cs | 7 +++-- .../Contents/ReferencesJintExtensionTests.cs | 6 ++-- .../Contents/Text/TextIndexerTests_Elastic.cs | 2 ++ .../Contents/Text/TextIndexerTests_Mongo.cs | 2 ++ .../DomainObject/RuleDomainObjectTests.cs | 2 ++ .../DomainObject/SchemaDomainObjectTests.cs | 2 ++ .../Schemas/Indexes/SchemasIndexTests.cs | 4 +-- .../Squidex.Domain.Apps.Entities.Tests.csproj | 5 ++++ .../TestHelpers/AExtensions.cs | 2 +- .../TestHelpers/HandlerTestBase.cs | 4 ++- .../Reflection/SimpleMapperTests.cs | 2 ++ 53 files changed, 148 insertions(+), 127 deletions(-) diff --git a/backend/src/Squidex.Domain.Apps.Core.Operations/Scripting/JintUser.cs b/backend/src/Squidex.Domain.Apps.Core.Operations/Scripting/JintUser.cs index b7ba22b06..9a75925c2 100644 --- a/backend/src/Squidex.Domain.Apps.Core.Operations/Scripting/JintUser.cs +++ b/backend/src/Squidex.Domain.Apps.Core.Operations/Scripting/JintUser.cs @@ -10,7 +10,6 @@ using System.Linq; using System.Security.Claims; using Jint; using Jint.Native; -using Jint.Runtime.Interop; using Squidex.Infrastructure; using Squidex.Infrastructure.Security; using Squidex.Shared.Identity; diff --git a/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/MongoContentCollection.cs b/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/MongoContentCollection.cs index 0cf7a2528..6dd20687b 100644 --- a/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/MongoContentCollection.cs +++ b/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/MongoContentCollection.cs @@ -5,7 +5,6 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== -using System; using System.Collections.Generic; using System.Linq; using System.Threading; diff --git a/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/MongoContentRepository.cs b/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/MongoContentRepository.cs index 863eb862e..9d588382d 100644 --- a/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/MongoContentRepository.cs +++ b/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/MongoContentRepository.cs @@ -5,7 +5,6 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== -using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; diff --git a/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/Operations/QueryScheduled.cs b/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/Operations/QueryScheduled.cs index 12fdc8fcf..364e1078f 100644 --- a/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/Operations/QueryScheduled.cs +++ b/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Contents/Operations/QueryScheduled.cs @@ -5,7 +5,6 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== -using System; using System.Collections.Generic; using System.Linq; using System.Threading; diff --git a/backend/src/Squidex.Domain.Apps.Entities/Apps/Indexes/AppsIndex.cs b/backend/src/Squidex.Domain.Apps.Entities/Apps/Indexes/AppsIndex.cs index c7883c5a4..5d624844b 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Apps/Indexes/AppsIndex.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Apps/Indexes/AppsIndex.cs @@ -22,7 +22,6 @@ using Squidex.Infrastructure.Security; using Squidex.Infrastructure.Translations; using Squidex.Infrastructure.Validation; using Squidex.Shared; -using Squidex.Text; namespace Squidex.Domain.Apps.Entities.Apps.Indexes { diff --git a/backend/src/Squidex.Domain.Apps.Entities/Assets/DomainObject/Guards/ScriptMetadataWrapper.cs b/backend/src/Squidex.Domain.Apps.Entities/Assets/DomainObject/Guards/ScriptMetadataWrapper.cs index bed654a95..78401bc50 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Assets/DomainObject/Guards/ScriptMetadataWrapper.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Assets/DomainObject/Guards/ScriptMetadataWrapper.cs @@ -5,7 +5,6 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== -using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; @@ -31,7 +30,7 @@ namespace Squidex.Domain.Apps.Entities.Assets.DomainObject.Guards public ICollection Values { - get => metadata.Values.Select(x => (object?)x).ToList(); + get => metadata.Values.Cast().ToList(); } public object? this[string key] diff --git a/backend/src/Squidex.Domain.Apps.Entities/Backup/BackupGrain.cs b/backend/src/Squidex.Domain.Apps.Entities/Backup/BackupGrain.cs index 5fac90163..9d42259fd 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Backup/BackupGrain.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Backup/BackupGrain.cs @@ -166,7 +166,7 @@ namespace Squidex.Domain.Apps.Entities.Backup await handler.BackupEventAsync(@event, context, ct); } - writer.WriteEvent(storedEvent); + writer.WriteEvent(storedEvent, ct); job.HandledEvents = writer.WrittenEvents; job.HandledAssets = writer.WrittenAttachments; @@ -188,7 +188,7 @@ namespace Squidex.Domain.Apps.Entities.Backup await handler.CompleteBackupAsync(context); } - await userMapping.StoreAsync(writer, userResolver); + await userMapping.StoreAsync(writer, userResolver, ct); } stream.Position = 0; diff --git a/backend/src/Squidex.Domain.Apps.Entities/Backup/BackupReader.cs b/backend/src/Squidex.Domain.Apps.Entities/Backup/BackupReader.cs index 95226cb3f..0ec3efc9b 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Backup/BackupReader.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Backup/BackupReader.cs @@ -5,7 +5,6 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== -using System; using System.Collections.Generic; using System.IO; using System.IO.Compression; diff --git a/backend/src/Squidex.Domain.Apps.Entities/Comments/CommentTriggerHandler.cs b/backend/src/Squidex.Domain.Apps.Entities/Comments/CommentTriggerHandler.cs index 3d0d81f25..846aa2ac0 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Comments/CommentTriggerHandler.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Comments/CommentTriggerHandler.cs @@ -47,7 +47,7 @@ namespace Squidex.Domain.Apps.Entities.Comments if (commentCreated.Mentions?.Length > 0) { - var users = await userResolver.QueryManyAsync(commentCreated.Mentions); + var users = await userResolver.QueryManyAsync(commentCreated.Mentions, ct); if (users.Count > 0) { diff --git a/backend/src/Squidex.Domain.Apps.Entities/Contents/ContentSchedulerGrain.cs b/backend/src/Squidex.Domain.Apps.Entities/Contents/ContentSchedulerGrain.cs index f65e61986..2743c40a8 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Contents/ContentSchedulerGrain.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Contents/ContentSchedulerGrain.cs @@ -6,7 +6,6 @@ // ========================================================================== using System; -using System.Threading; using System.Threading.Tasks; using NodaTime; using Orleans; diff --git a/backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/ContentEnricher.cs b/backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/ContentEnricher.cs index 6b4ed43b9..fd4c70d0a 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/ContentEnricher.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/ContentEnricher.cs @@ -91,7 +91,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries throw new DomainObjectNotFoundException(x.ToString()); } - var components = await appProvider.GetComponentsAsync(schema); + var components = await appProvider.GetComponentsAsync(schema, ct); return (schema, components); }); diff --git a/backend/src/Squidex.Domain.Apps.Entities/Contents/Repositories/IContentRepository.cs b/backend/src/Squidex.Domain.Apps.Entities/Contents/Repositories/IContentRepository.cs index 2d1f28f7a..4bce39829 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Contents/Repositories/IContentRepository.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Contents/Repositories/IContentRepository.cs @@ -5,7 +5,6 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== -using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; diff --git a/backend/src/Squidex.Domain.Apps.Entities/Schemas/Indexes/SchemasIndex.cs b/backend/src/Squidex.Domain.Apps.Entities/Schemas/Indexes/SchemasIndex.cs index 7bfd7aba6..6955036ff 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Schemas/Indexes/SchemasIndex.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Schemas/Indexes/SchemasIndex.cs @@ -18,7 +18,6 @@ using Squidex.Infrastructure; using Squidex.Infrastructure.Commands; using Squidex.Infrastructure.Translations; using Squidex.Infrastructure.Validation; -using Squidex.Text; namespace Squidex.Domain.Apps.Entities.Schemas.Indexes { diff --git a/backend/src/Squidex.Web/Pipeline/SetupMiddleware.cs b/backend/src/Squidex.Web/Pipeline/SetupMiddleware.cs index 305c42811..d186d6062 100644 --- a/backend/src/Squidex.Web/Pipeline/SetupMiddleware.cs +++ b/backend/src/Squidex.Web/Pipeline/SetupMiddleware.cs @@ -23,7 +23,7 @@ namespace Squidex.Web.Pipeline public async Task InvokeAsync(HttpContext context, IUserService userService) { - if (!isUserFound && await userService.IsEmptyAsync()) + if (!isUserFound && await userService.IsEmptyAsync(context.RequestAborted)) { var url = context.Request.PathBase.Add("/identity-server/setup"); diff --git a/backend/src/Squidex/Areas/Api/Controllers/Backups/BackupsController.cs b/backend/src/Squidex/Areas/Api/Controllers/Backups/BackupsController.cs index c217b3054..aa33d430a 100644 --- a/backend/src/Squidex/Areas/Api/Controllers/Backups/BackupsController.cs +++ b/backend/src/Squidex/Areas/Api/Controllers/Backups/BackupsController.cs @@ -49,7 +49,7 @@ namespace Squidex.Areas.Api.Controllers.Backups [ApiCosts(0)] public async Task GetBackups(string app) { - var jobs = await backupService.GetBackupsAsync(AppId); + var jobs = await backupService.GetBackupsAsync(AppId, HttpContext.RequestAborted); var response = BackupJobsDto.FromBackups(jobs, Resources); @@ -93,7 +93,7 @@ namespace Squidex.Areas.Api.Controllers.Backups [ApiCosts(0)] public async Task DeleteBackup(string app, DomainId id) { - await backupService.DeleteBackupAsync(AppId, id); + await backupService.DeleteBackupAsync(AppId, id, HttpContext.RequestAborted); return NoContent(); } diff --git a/backend/src/Squidex/Areas/Api/Controllers/Backups/RestoreController.cs b/backend/src/Squidex/Areas/Api/Controllers/Backups/RestoreController.cs index 233efaa32..765ba6c67 100644 --- a/backend/src/Squidex/Areas/Api/Controllers/Backups/RestoreController.cs +++ b/backend/src/Squidex/Areas/Api/Controllers/Backups/RestoreController.cs @@ -44,7 +44,7 @@ namespace Squidex.Areas.Api.Controllers.Backups [ApiPermission(Permissions.AdminRestore)] public async Task GetRestoreJob() { - var job = await backupService.GetRestoreAsync(); + var job = await backupService.GetRestoreAsync(HttpContext.RequestAborted); if (job == null) { diff --git a/backend/src/Squidex/Areas/Api/Controllers/Users/UserManagementController.cs b/backend/src/Squidex/Areas/Api/Controllers/Users/UserManagementController.cs index 6221167d6..8feb0b513 100644 --- a/backend/src/Squidex/Areas/Api/Controllers/Users/UserManagementController.cs +++ b/backend/src/Squidex/Areas/Api/Controllers/Users/UserManagementController.cs @@ -1,4 +1,4 @@ -// ========================================================================== +// ========================================================================== // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex UG (haftungsbeschraenkt) @@ -35,7 +35,7 @@ namespace Squidex.Areas.Api.Controllers.Users [ApiPermission(Permissions.AdminUsersRead)] public async Task GetUsers([FromQuery] string? query = null, [FromQuery] int skip = 0, [FromQuery] int take = 10) { - var users = await userService.QueryAsync(query, take, skip); + var users = await userService.QueryAsync(query, take, skip, HttpContext.RequestAborted); var response = UsersDto.FromResults(users, users.Total, Resources); @@ -48,7 +48,7 @@ namespace Squidex.Areas.Api.Controllers.Users [ApiPermission(Permissions.AdminUsersRead)] public async Task GetUser(string id) { - var user = await userService.FindByIdAsync(id); + var user = await userService.FindByIdAsync(id, HttpContext.RequestAborted); if (user == null) { @@ -66,7 +66,7 @@ namespace Squidex.Areas.Api.Controllers.Users [ApiPermission(Permissions.AdminUsersCreate)] public async Task PostUser([FromBody] CreateUserDto request) { - var user = await userService.CreateAsync(request.Email, request.ToValues()); + var user = await userService.CreateAsync(request.Email, request.ToValues(), ct: HttpContext.RequestAborted); var response = UserDto.FromUser(user, Resources); @@ -79,7 +79,7 @@ namespace Squidex.Areas.Api.Controllers.Users [ApiPermission(Permissions.AdminUsersUpdate)] public async Task PutUser(string id, [FromBody] UpdateUserDto request) { - var user = await userService.UpdateAsync(id, request.ToValues()); + var user = await userService.UpdateAsync(id, request.ToValues(), ct: HttpContext.RequestAborted); var response = UserDto.FromUser(user, Resources); @@ -97,7 +97,7 @@ namespace Squidex.Areas.Api.Controllers.Users throw new DomainForbiddenException(T.Get("users.lockYourselfError")); } - var user = await userService.LockAsync(id); + var user = await userService.LockAsync(id, HttpContext.RequestAborted); var response = UserDto.FromUser(user, Resources); @@ -115,7 +115,7 @@ namespace Squidex.Areas.Api.Controllers.Users throw new DomainForbiddenException(T.Get("users.unlockYourselfError")); } - var user = await userService.UnlockAsync(id); + var user = await userService.UnlockAsync(id, HttpContext.RequestAborted); var response = UserDto.FromUser(user, Resources); @@ -133,7 +133,7 @@ namespace Squidex.Areas.Api.Controllers.Users throw new DomainForbiddenException(T.Get("users.deleteYourselfError")); } - await userService.DeleteAsync(id); + await userService.DeleteAsync(id, HttpContext.RequestAborted); return NoContent(); } diff --git a/backend/src/Squidex/Areas/IdentityServer/Config/CreateAdminInitializer.cs b/backend/src/Squidex/Areas/IdentityServer/Config/CreateAdminInitializer.cs index e9be6ad74..5eb66216c 100644 --- a/backend/src/Squidex/Areas/IdentityServer/Config/CreateAdminInitializer.cs +++ b/backend/src/Squidex/Areas/IdentityServer/Config/CreateAdminInitializer.cs @@ -56,7 +56,7 @@ namespace Squidex.Areas.IdentityServer.Config { try { - var user = await userService.FindByEmailAsync(adminEmail); + var user = await userService.FindByEmailAsync(adminEmail, ct); if (user != null) { @@ -70,7 +70,7 @@ namespace Squidex.Areas.IdentityServer.Config Permissions = permissions }; - await userService.UpdateAsync(user.Id, values); + await userService.UpdateAsync(user.Id, values, ct: ct); } } else @@ -84,7 +84,7 @@ namespace Squidex.Areas.IdentityServer.Config DisplayName = adminEmail }; - await userService.CreateAsync(adminEmail, values); + await userService.CreateAsync(adminEmail, values, ct: ct); } } catch (Exception ex) diff --git a/backend/src/Squidex/Areas/IdentityServer/Controllers/Account/AccountController.cs b/backend/src/Squidex/Areas/IdentityServer/Controllers/Account/AccountController.cs index 96e68b3ff..25d886d16 100644 --- a/backend/src/Squidex/Areas/IdentityServer/Controllers/Account/AccountController.cs +++ b/backend/src/Squidex/Areas/IdentityServer/Controllers/Account/AccountController.cs @@ -98,7 +98,7 @@ namespace Squidex.Areas.IdentityServer.Controllers.Account return View(vm); } - var user = await userService.GetAsync(User); + var user = await userService.GetAsync(User, HttpContext.RequestAborted); if (user == null) { @@ -111,7 +111,7 @@ namespace Squidex.Areas.IdentityServer.Controllers.Account ConsentForEmails = model.ConsentToAutomatedEmails }; - await userService.UpdateAsync(user.Id, update); + await userService.UpdateAsync(user.Id, update, ct: HttpContext.RequestAborted); return RedirectToReturnUrl(returnUrl); } @@ -238,7 +238,7 @@ namespace Squidex.Areas.IdentityServer.Controllers.Account if (isLoggedIn) { - user = await userService.FindByLoginAsync(externalLogin.LoginProvider, externalLogin.ProviderKey); + user = await userService.FindByLoginAsync(externalLogin.LoginProvider, externalLogin.ProviderKey, HttpContext.RequestAborted); } else { @@ -249,22 +249,22 @@ namespace Squidex.Areas.IdentityServer.Controllers.Account throw new DomainException("User has no exposed email address."); } - user = await userService.FindByEmailAsync(email); + user = await userService.FindByEmailAsync(email, HttpContext.RequestAborted); if (user != null) { var update = CreateUserValues(externalLogin, email, user); - await userService.UpdateAsync(user.Id, update); + await userService.UpdateAsync(user.Id, update, ct: HttpContext.RequestAborted); } else { var update = CreateUserValues(externalLogin, email); - user = await userService.CreateAsync(email, update, identityOptions.LockAutomatically); + user = await userService.CreateAsync(email, update, identityOptions.LockAutomatically, HttpContext.RequestAborted); } - await userService.AddLoginAsync(user.Id, externalLogin); + await userService.AddLoginAsync(user.Id, externalLogin, HttpContext.RequestAborted); var (success, locked) = await LoginAsync(externalLogin); diff --git a/backend/src/Squidex/Areas/IdentityServer/Controllers/Connect/ConnectController.cs b/backend/src/Squidex/Areas/IdentityServer/Controllers/Connect/ConnectController.cs index 01e9c186a..54ac63a24 100644 --- a/backend/src/Squidex/Areas/IdentityServer/Controllers/Connect/ConnectController.cs +++ b/backend/src/Squidex/Areas/IdentityServer/Controllers/Connect/ConnectController.cs @@ -63,7 +63,7 @@ namespace Notifo.Areas.Account.Controllers throw new InvalidOperationException("The user details cannot be retrieved."); } - var user = await userService.GetAsync(principal); + var user = await userService.GetAsync(principal, HttpContext.RequestAborted); if (user == null) { @@ -153,7 +153,7 @@ namespace Notifo.Areas.Account.Controllers }); } - var user = await userService.GetAsync(User); + var user = await userService.GetAsync(User, HttpContext.RequestAborted); if (user == null) { diff --git a/backend/src/Squidex/Areas/IdentityServer/Controllers/Profile/ProfileController.cs b/backend/src/Squidex/Areas/IdentityServer/Controllers/Profile/ProfileController.cs index 993e93bb8..32081805c 100644 --- a/backend/src/Squidex/Areas/IdentityServer/Controllers/Profile/ProfileController.cs +++ b/backend/src/Squidex/Areas/IdentityServer/Controllers/Profile/ProfileController.cs @@ -1,4 +1,4 @@ -// ========================================================================== +// ========================================================================== // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex UG (haftungsbeschraenkt) @@ -54,7 +54,7 @@ namespace Squidex.Areas.IdentityServer.Controllers.Profile [Route("/account/profile/")] public async Task Profile(string? successMessage = null) { - var user = await userService.GetAsync(User); + var user = await userService.GetAsync(User, HttpContext.RequestAborted); return View(await GetVM(user, successMessage: successMessage)); } @@ -67,7 +67,7 @@ namespace Squidex.Areas.IdentityServer.Controllers.Profile var properties = SignInManager.ConfigureExternalAuthenticationProperties(provider, - Url.Action(nameof(AddLoginCallback)), userService.GetUserId(User)); + Url.Action(nameof(AddLoginCallback)), userService.GetUserId(User, HttpContext.RequestAborted)); return Challenge(properties, provider); } @@ -84,7 +84,7 @@ namespace Squidex.Areas.IdentityServer.Controllers.Profile [Route("/account/profile/update/")] public Task UpdateProfile(ChangeProfileModel model) { - return MakeChangeAsync(id => userService.UpdateAsync(id, model.ToValues()), + return MakeChangeAsync(id => userService.UpdateAsync(id, model.ToValues(), ct: HttpContext.RequestAborted), T.Get("users.profile.updateProfileDone"), model); } @@ -92,7 +92,7 @@ namespace Squidex.Areas.IdentityServer.Controllers.Profile [Route("/account/profile/properties/")] public Task UpdateProperties(ChangePropertiesModel model) { - return MakeChangeAsync(id => userService.UpdateAsync(id, model.ToValues()), + return MakeChangeAsync(id => userService.UpdateAsync(id, model.ToValues(), ct: HttpContext.RequestAborted), T.Get("users.profile.updatePropertiesDone"), model); } @@ -100,7 +100,7 @@ namespace Squidex.Areas.IdentityServer.Controllers.Profile [Route("/account/profile/login-remove/")] public Task RemoveLogin(RemoveLoginModel model) { - return MakeChangeAsync(id => userService.RemoveLoginAsync(id, model.LoginProvider, model.ProviderKey), + return MakeChangeAsync(id => userService.RemoveLoginAsync(id, model.LoginProvider, model.ProviderKey, HttpContext.RequestAborted), T.Get("users.profile.removeLoginDone"), model); } @@ -108,7 +108,7 @@ namespace Squidex.Areas.IdentityServer.Controllers.Profile [Route("/account/profile/password-set/")] public Task SetPassword(SetPasswordModel model) { - return MakeChangeAsync(id => userService.SetPasswordAsync(id, model.Password), + return MakeChangeAsync(id => userService.SetPasswordAsync(id, model.Password, ct: HttpContext.RequestAborted), T.Get("users.profile.setPasswordDone"), model); } @@ -116,7 +116,7 @@ namespace Squidex.Areas.IdentityServer.Controllers.Profile [Route("/account/profile/password-change/")] public Task ChangePassword(ChangePasswordModel model) { - return MakeChangeAsync(id => userService.SetPasswordAsync(id, model.Password, model.OldPassword), + return MakeChangeAsync(id => userService.SetPasswordAsync(id, model.Password, model.OldPassword, HttpContext.RequestAborted), T.Get("users.profile.changePasswordDone"), model); } @@ -140,14 +140,14 @@ namespace Squidex.Areas.IdentityServer.Controllers.Profile { var update = new UserValues { ClientSecret = RandomHash.New() }; - await userService.UpdateAsync(id, update); + await userService.UpdateAsync(id, update, ct: HttpContext.RequestAborted); } private async Task AddLoginAsync(string id) { var externalLogin = await SignInManager.GetExternalLoginInfoWithDisplayNameAsync(id); - await userService.AddLoginAsync(id, externalLogin); + await userService.AddLoginAsync(id, externalLogin, HttpContext.RequestAborted); } private async Task UpdatePictureAsync(List file, string id) @@ -175,12 +175,12 @@ namespace Squidex.Areas.IdentityServer.Controllers.Profile var update = new UserValues { PictureUrl = SquidexClaimTypes.PictureUrlStore }; - await userService.UpdateAsync(id, update); + await userService.UpdateAsync(id, update, ct: HttpContext.RequestAborted); } private async Task MakeChangeAsync(Func action, string successMessage, TModel? model = null) where TModel : class { - var user = await userService.GetAsync(User); + var user = await userService.GetAsync(User, HttpContext.RequestAborted); if (user == null) { @@ -222,8 +222,8 @@ namespace Squidex.Areas.IdentityServer.Controllers.Profile var (providers, hasPassword, logins) = await AsyncHelper.WhenAll( SignInManager.GetExternalProvidersAsync(), - userService.HasPasswordAsync(user), - userService.GetLoginsAsync(user)); + userService.HasPasswordAsync(user, HttpContext.RequestAborted), + userService.GetLoginsAsync(user, HttpContext.RequestAborted)); var vm = new ProfileVM { diff --git a/backend/src/Squidex/Areas/IdentityServer/Controllers/Setup/SetupController.cs b/backend/src/Squidex/Areas/IdentityServer/Controllers/Setup/SetupController.cs index f9b5893d1..014e3bb84 100644 --- a/backend/src/Squidex/Areas/IdentityServer/Controllers/Setup/SetupController.cs +++ b/backend/src/Squidex/Areas/IdentityServer/Controllers/Setup/SetupController.cs @@ -50,7 +50,7 @@ namespace Squidex.Areas.IdentityServer.Controllers.Setup [Route("setup/")] public async Task Setup() { - if (!await userService.IsEmptyAsync()) + if (!await userService.IsEmptyAsync(HttpContext.RequestAborted)) { return RedirectToReturnUrl(null); } @@ -62,7 +62,7 @@ namespace Squidex.Areas.IdentityServer.Controllers.Setup [Route("setup/")] public async Task Setup(CreateUserModel model) { - if (!await userService.IsEmptyAsync()) + if (!await userService.IsEmptyAsync(HttpContext.RequestAborted)) { return RedirectToReturnUrl(null); } @@ -78,7 +78,7 @@ namespace Squidex.Areas.IdentityServer.Controllers.Setup var user = await userService.CreateAsync(model.Email, new UserValues { Password = model.Password - }); + }, ct: HttpContext.RequestAborted); await SignInManager.SignInAsync((IdentityUser)user.Identity, true); diff --git a/backend/src/Squidex/Areas/IdentityServer/Controllers/UserInfo/UserInfoController.cs b/backend/src/Squidex/Areas/IdentityServer/Controllers/UserInfo/UserInfoController.cs index b3f9fd425..f5dfb4441 100644 --- a/backend/src/Squidex/Areas/IdentityServer/Controllers/UserInfo/UserInfoController.cs +++ b/backend/src/Squidex/Areas/IdentityServer/Controllers/UserInfo/UserInfoController.cs @@ -33,7 +33,7 @@ namespace Squidex.Areas.IdentityServer.Controllers.UserInfo [Produces("application/json")] public async Task UserInfo() { - var user = await userService.GetAsync(User); + var user = await userService.GetAsync(User, HttpContext.RequestAborted); if (user == null) { diff --git a/backend/src/Squidex/Config/Domain/AppsServices.cs b/backend/src/Squidex/Config/Domain/AppsServices.cs index 1c5e66ea9..f0edc7e68 100644 --- a/backend/src/Squidex/Config/Domain/AppsServices.cs +++ b/backend/src/Squidex/Config/Domain/AppsServices.cs @@ -14,7 +14,6 @@ using Squidex.Domain.Apps.Core.Apps; using Squidex.Domain.Apps.Entities; using Squidex.Domain.Apps.Entities.Apps; using Squidex.Domain.Apps.Entities.Apps.DomainObject; -using Squidex.Domain.Apps.Entities.Assets; using Squidex.Domain.Apps.Entities.History; using Squidex.Domain.Apps.Entities.Search; using Squidex.Infrastructure.Collections; diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Apps/DefaultAppLogStoreTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Apps/DefaultAppLogStoreTests.cs index 28ddc78a4..2551c0d44 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Apps/DefaultAppLogStoreTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Apps/DefaultAppLogStoreTests.cs @@ -101,7 +101,7 @@ namespace Squidex.Domain.Apps.Entities.Apps Contains(request.CacheServer, recordedRequest); Contains(request.CacheStatus, recordedRequest); Contains(request.CacheTTL, recordedRequest); - Contains(request.ElapsedMs.ToString(), recordedRequest); + Contains(request.ElapsedMs.ToString(CultureInfo.InvariantCulture), recordedRequest); Contains(request.RequestMethod, recordedRequest); Contains(request.RequestPath, recordedRequest); Contains(request.StatusCode, recordedRequest); diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Apps/DomainObject/AppDomainObjectTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Apps/DomainObject/AppDomainObjectTests.cs index 91abc857c..c53db0384 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Apps/DomainObject/AppDomainObjectTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Apps/DomainObject/AppDomainObjectTests.cs @@ -70,7 +70,9 @@ namespace Squidex.Domain.Apps.Entities.Apps.DomainObject }; sut = new AppDomainObject(PersistenceFactory, A.Dummy(), initialSettings, appPlansProvider, appPlansBillingManager, userResolver); +#pragma warning disable MA0056 // Do not call overridable members in constructor sut.Setup(Id); +#pragma warning restore MA0056 // Do not call overridable members in constructor } [Fact] diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetsFluidExtensionTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetsFluidExtensionTests.cs index e822a4938..d1744b49c 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetsFluidExtensionTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetsFluidExtensionTests.cs @@ -5,6 +5,7 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== +using System; using System.IO; using System.Text; using System.Threading; @@ -368,9 +369,9 @@ namespace Squidex.Domain.Apps.Entities.Assets private static string Cleanup(string text) { return text - .Replace("\r", string.Empty) - .Replace("\n", string.Empty) - .Replace(" ", string.Empty); + .Replace("\r", string.Empty, StringComparison.Ordinal) + .Replace("\n", string.Empty, StringComparison.Ordinal) + .Replace(" ", string.Empty, StringComparison.Ordinal); } } } diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetsJintExtensionTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetsJintExtensionTests.cs index d7d82efed..90b0ba914 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetsJintExtensionTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetsJintExtensionTests.cs @@ -406,9 +406,9 @@ namespace Squidex.Domain.Apps.Entities.Assets private static string Cleanup(string text) { return text - .Replace("\r", string.Empty) - .Replace("\n", string.Empty) - .Replace(" ", string.Empty); + .Replace("\r", string.Empty, StringComparison.Ordinal) + .Replace("\n", string.Empty, StringComparison.Ordinal) + .Replace(" ", string.Empty, StringComparison.Ordinal); } } } diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/BackupAssetsTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/BackupAssetsTests.cs index d1ce8c3db..fd3246bf9 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/BackupAssetsTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/BackupAssetsTests.cs @@ -5,7 +5,6 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== -using System; using System.Collections.Generic; using System.IO; using System.Threading; diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/DefaultAssetFileStoreTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/DefaultAssetFileStoreTests.cs index 06902501e..aa1198335 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/DefaultAssetFileStoreTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/DefaultAssetFileStoreTests.cs @@ -5,7 +5,9 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== +using System; using System.Collections.Generic; +using System.Globalization; using System.IO; using System.Linq; using System.Threading; @@ -81,10 +83,10 @@ namespace Squidex.Domain.Apps.Entities.Assets var size = 1024L; - A.CallTo(() => assetStore.GetSizeAsync(fullName, default)) + A.CallTo(() => assetStore.GetSizeAsync(fullName, ct)) .Returns(size); - var result = await sut.GetFileSizeAsync(appId, assetId, assetFileVersion, suffix); + var result = await sut.GetFileSizeAsync(appId, assetId, assetFileVersion, suffix, ct); Assert.Equal(size, result); } @@ -97,13 +99,13 @@ namespace Squidex.Domain.Apps.Entities.Assets var size = 1024L; - A.CallTo(() => assetStore.GetSizeAsync(A._, default)) + A.CallTo(() => assetStore.GetSizeAsync(A._, ct)) .Throws(new AssetNotFoundException(assetId.ToString())); - A.CallTo(() => assetStore.GetSizeAsync(fullName, default)) + A.CallTo(() => assetStore.GetSizeAsync(fullName, ct)) .Returns(size); - var result = await sut.GetFileSizeAsync(appId, assetId, assetFileVersion, suffix); + var result = await sut.GetFileSizeAsync(appId, assetId, assetFileVersion, suffix, ct); Assert.Equal(size, result); } @@ -272,9 +274,9 @@ namespace Squidex.Domain.Apps.Entities.Assets private string GetFullName(string fileName) { return fileName - .Replace("{appId}", appId.ToString()) - .Replace("{assetId}", assetId.ToString()) - .Replace("{assetFileVersion}", assetFileVersion.ToString()); + .Replace("{appId}", appId.ToString(), StringComparison.Ordinal) + .Replace("{assetId}", assetId.ToString(), StringComparison.Ordinal) + .Replace("{assetFileVersion}", assetFileVersion.ToString(CultureInfo.InvariantCulture), StringComparison.Ordinal); } } } diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/DomainObject/AssetDomainObjectTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/DomainObject/AssetDomainObjectTests.cs index 34f870370..68e794651 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/DomainObject/AssetDomainObjectTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/DomainObject/AssetDomainObjectTests.cs @@ -83,7 +83,9 @@ namespace Squidex.Domain.Apps.Entities.Assets.DomainObject .BuildServiceProvider(); sut = new AssetDomainObject(PersistenceFactory, log, serviceProvider); +#pragma warning disable MA0056 // Do not call overridable members in constructor sut.Setup(Id); +#pragma warning restore MA0056 // Do not call overridable members in constructor } [Fact] diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/DomainObject/AssetFolderDomainObjectTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/DomainObject/AssetFolderDomainObjectTests.cs index 22906257b..ec47f769e 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/DomainObject/AssetFolderDomainObjectTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/DomainObject/AssetFolderDomainObjectTests.cs @@ -57,7 +57,9 @@ namespace Squidex.Domain.Apps.Entities.Assets.DomainObject .BuildServiceProvider(); sut = new AssetFolderDomainObject(PersistenceFactory, log, serviceProvider); +#pragma warning disable MA0056 // Do not call overridable members in constructor sut.Setup(Id); +#pragma warning restore MA0056 // Do not call overridable members in constructor } [Fact] diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/MongoDb/AssetQueryTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/MongoDb/AssetQueryTests.cs index 770f9cb27..ab4443f1b 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/MongoDb/AssetQueryTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/MongoDb/AssetQueryTests.cs @@ -242,7 +242,7 @@ namespace Squidex.Domain.Apps.Entities.Assets.MongoDb private static string Cleanup(string filter, object? arg = null) { - return filter.Replace('\'', '"').Replace("[value]", arg?.ToString()); + return filter.Replace('\'', '"').Replace("[value]", arg?.ToString(), StringComparison.Ordinal); } } -} \ No newline at end of file +} diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/MongoDb/AssetsQueryFixture.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/MongoDb/AssetsQueryFixture.cs index 6dfc37f4b..ff85e8da2 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/MongoDb/AssetsQueryFixture.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/MongoDb/AssetsQueryFixture.cs @@ -7,6 +7,7 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.Threading.Tasks; using MongoDB.Bson; using MongoDB.Driver; @@ -77,11 +78,11 @@ namespace Squidex.Domain.Apps.Entities.Assets.MongoDb { for (var i = 0; i < numValues; i++) { - var fileName = i.ToString(); + var fileName = i.ToString(CultureInfo.InvariantCulture); for (var j = 0; j < numValues; j++) { - var tag = j.ToString(); + var tag = j.ToString(CultureInfo.InvariantCulture); var asset = new MongoAssetEntity { @@ -129,7 +130,7 @@ namespace Squidex.Domain.Apps.Entities.Assets.MongoDb public string RandomValue() { - return random.Next(0, numValues).ToString(); + return random.Next(0, numValues).ToString(CultureInfo.InvariantCulture); } } } diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Backup/BackupReaderWriterTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Backup/BackupReaderWriterTests.cs index 28b6c5a7b..df3031d4d 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Backup/BackupReaderWriterTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Backup/BackupReaderWriterTests.cs @@ -7,6 +7,7 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.IO; using System.Threading.Tasks; using FakeItEasy; @@ -163,15 +164,15 @@ namespace Squidex.Domain.Apps.Entities.Backup var eventData = formatter.ToEventData(envelope, Guid.NewGuid(), true); var eventStored = new StoredEvent(stream, "1", 2, eventData); - var index = int.Parse(envelope.Headers["Index"].ToString()); + var index = int.Parse(envelope.Headers["Index"].ToString(), NumberStyles.Integer, CultureInfo.InvariantCulture); if (index % 17 == 0) { - await WriteGuidAsync(writer, index.ToString(), envelope.Payload.Id); + await WriteGuidAsync(writer, index.ToString(CultureInfo.InvariantCulture), envelope.Payload.Id); } else if (index % 37 == 0) { - await WriteJsonGuidAsync(writer, index.ToString(), envelope.Payload.Id); + await WriteJsonGuidAsync(writer, index.ToString(CultureInfo.InvariantCulture), envelope.Payload.Id); } writer.WriteEvent(eventStored); @@ -182,19 +183,19 @@ namespace Squidex.Domain.Apps.Entities.Backup await foreach (var @event in reader.ReadEventsAsync(streamNameResolver, formatter)) { - var index = int.Parse(@event.Event.Headers["Index"].ToString()); + var index = int.Parse(@event.Event.Headers["Index"].ToString(), NumberStyles.Integer, CultureInfo.InvariantCulture); var id = Guid.Parse(@event.Event.Headers["Id"].ToString()); if (index % 17 == 0) { - var guid = await ReadGuidAsync(reader, index.ToString()); + var guid = await ReadGuidAsync(reader, index.ToString(CultureInfo.InvariantCulture)); Assert.Equal(id, guid); } else if (index % 37 == 0) { - var guid = await ReadJsonGuidAsync(reader, index.ToString()); + var guid = await ReadJsonGuidAsync(reader, index.ToString(CultureInfo.InvariantCulture)); Assert.Equal(id, guid); } @@ -242,7 +243,7 @@ namespace Squidex.Domain.Apps.Entities.Backup { var buffer = new byte[16]; - await stream.ReadAsync(buffer); + _ = await stream.ReadAsync(buffer); read = new Guid(buffer); } diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Comments/DomainObject/CommentsGrainTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Comments/DomainObject/CommentsGrainTests.cs index 7add3e4a1..9e36b3898 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Comments/DomainObject/CommentsGrainTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Comments/DomainObject/CommentsGrainTests.cs @@ -57,12 +57,12 @@ namespace Squidex.Domain.Apps.Entities.Comments.DomainObject result.Value.ShouldBeEquivalent(CommandResult.Empty(commentsId, 0, EtagVersion.Empty)); - sut.GetCommentsAsync(0).Result.Should().BeEquivalentTo(new CommentsResult + (await sut.GetCommentsAsync(0)).Should().BeEquivalentTo(new CommentsResult { Version = 0 }); - sut.GetCommentsAsync(-1).Result.Should().BeEquivalentTo(new CommentsResult + (await sut.GetCommentsAsync(-1)).Should().BeEquivalentTo(new CommentsResult { CreatedComments = new List { @@ -88,7 +88,7 @@ namespace Squidex.Domain.Apps.Entities.Comments.DomainObject result.Value.ShouldBeEquivalent(CommandResult.Empty(commentsId, 1, 0)); - sut.GetCommentsAsync(-1).Result.Should().BeEquivalentTo(new CommentsResult + (await sut.GetCommentsAsync(-1)).Should().BeEquivalentTo(new CommentsResult { CreatedComments = new List { @@ -97,7 +97,7 @@ namespace Squidex.Domain.Apps.Entities.Comments.DomainObject Version = 1 }); - sut.GetCommentsAsync(0).Result.Should().BeEquivalentTo(new CommentsResult + (await sut.GetCommentsAsync(0)).Should().BeEquivalentTo(new CommentsResult { UpdatedComments = new List { @@ -124,12 +124,12 @@ namespace Squidex.Domain.Apps.Entities.Comments.DomainObject result.Value.ShouldBeEquivalent(CommandResult.Empty(commentsId, 2, 1)); - sut.GetCommentsAsync(-1).Result.Should().BeEquivalentTo(new CommentsResult + (await sut.GetCommentsAsync(-1)).Should().BeEquivalentTo(new CommentsResult { Version = 2 }); - sut.GetCommentsAsync(0).Result.Should().BeEquivalentTo(new CommentsResult + (await sut.GetCommentsAsync(0)).Should().BeEquivalentTo(new CommentsResult { DeletedComments = new List { @@ -138,7 +138,7 @@ namespace Squidex.Domain.Apps.Entities.Comments.DomainObject Version = 2 }); - sut.GetCommentsAsync(1).Result.Should().BeEquivalentTo(new CommentsResult + (await sut.GetCommentsAsync(1)).Should().BeEquivalentTo(new CommentsResult { DeletedComments = new List { diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentSchedulerGrainTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentSchedulerGrainTests.cs index 5a512b6eb..d3eb9c9d4 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentSchedulerGrainTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentSchedulerGrainTests.cs @@ -5,7 +5,6 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== -using System; using System.Linq; using System.Threading.Tasks; using FakeItEasy; diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/DomainObject/ContentDomainObjectTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/DomainObject/ContentDomainObjectTests.cs index ecaa595bb..de5c85cfc 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/DomainObject/ContentDomainObjectTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/DomainObject/ContentDomainObjectTests.cs @@ -120,7 +120,9 @@ namespace Squidex.Domain.Apps.Entities.Contents.DomainObject .BuildServiceProvider(); sut = new ContentDomainObject(PersistenceFactory, log, serviceProvider); +#pragma warning disable MA0056 // Do not call overridable members in constructor sut.Setup(Id); +#pragma warning restore MA0056 // Do not call overridable members in constructor } [Fact] diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLMutationTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLMutationTests.cs index 1a698ae00..4c4c6b475 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLMutationTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLMutationTests.cs @@ -5,6 +5,7 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== +using System; using System.Text.RegularExpressions; using System.Threading.Tasks; using FakeItEasy; @@ -730,19 +731,19 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL private string CreateQuery(string query) { query = query - .Replace("", contentId.ToString()) - .Replace("'", "\"") - .Replace("`", "\"") - .Replace("", TestContent.AllFields); + .Replace("", contentId.ToString(), StringComparison.Ordinal) + .Replace("'", "\"", StringComparison.Ordinal) + .Replace("`", "\"", StringComparison.Ordinal) + .Replace("", TestContent.AllFields, StringComparison.Ordinal); - if (query.Contains("")) + if (query.Contains("", StringComparison.Ordinal)) { var data = TestContent.Input(content, TestSchemas.Ref1.Id, TestSchemas.Ref2.Id); var dataJson = JsonConvert.SerializeObject(data, Formatting.Indented); - var dataString = Regex.Replace(dataJson, "\"([^\"]+)\":", x => x.Groups[1].Value + ":").Replace(".0", string.Empty); + var dataString = Regex.Replace(dataJson, "\"([^\"]+)\":", x => x.Groups[1].Value + ":").Replace(".0", string.Empty, StringComparison.Ordinal); - query = query.Replace("", dataString); + query = query.Replace("", dataString, StringComparison.Ordinal); } return query; diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLQueriesTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLQueriesTests.cs index 08246cd6a..fa3151445 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLQueriesTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/GraphQL/GraphQLQueriesTests.cs @@ -5,6 +5,7 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== +using System; using System.Threading; using System.Threading.Tasks; using FakeItEasy; @@ -61,7 +62,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL var asset = TestAsset.Create(DomainId.NewGuid()); A.CallTo(() => assetQuery.QueryAsync(MatchsAssetContext(), null, - A.That.Matches(x => x.QueryAsOdata == "?$top=30&$skip=5&$filter=my-query" && x.NoTotal == true), A._)) + A.That.Matches(x => x.QueryAsOdata == "?$top=30&$skip=5&$filter=my-query" && x.NoTotal), A._)) .Returns(ResultList.CreateFrom(0, asset)); var result = await ExecuteAsync(new ExecutionOptions { Query = query }); @@ -96,7 +97,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL var asset = TestAsset.Create(DomainId.NewGuid()); A.CallTo(() => assetQuery.QueryAsync(MatchsAssetContext(), null, - A.That.Matches(x => x.QueryAsOdata == "?$top=30&$skip=5&$filter=my-query" && x.NoTotal == false), A._)) + A.That.Matches(x => x.QueryAsOdata == "?$top=30&$skip=5&$filter=my-query" && !x.NoTotal), A._)) .Returns(ResultList.CreateFrom(10, asset)); var result = await ExecuteAsync(new ExecutionOptions { Query = query }); @@ -190,7 +191,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL var content = TestContent.Create(contentId); A.CallTo(() => contentQuery.QueryAsync(MatchsContentContext(), TestSchemas.Default.Id.ToString(), - A.That.Matches(x => x.QueryAsOdata == "?$top=30&$skip=5" && x.NoTotal == true), A._)) + A.That.Matches(x => x.QueryAsOdata == "?$top=30&$skip=5" && x.NoTotal), A._)) .Returns(ResultList.CreateFrom(0, content)); var result = await ExecuteAsync(new ExecutionOptions { Query = query }); @@ -223,7 +224,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL var content = TestContent.Create(contentId); A.CallTo(() => contentQuery.QueryAsync(MatchsContentContext(), TestSchemas.Default.Id.ToString(), - A.That.Matches(x => x.QueryAsOdata == "?$top=30&$skip=5" && x.NoTotal == true), A._)) + A.That.Matches(x => x.QueryAsOdata == "?$top=30&$skip=5" && x.NoTotal), A._)) .Returns(ResultList.CreateFrom(0, content)); var result = await ExecuteAsync(new ExecutionOptions { Query = query }); @@ -259,7 +260,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL var content = TestContent.Create(contentId); A.CallTo(() => contentQuery.QueryAsync(MatchsContentContext(), TestSchemas.Default.Id.ToString(), - A.That.Matches(x => x.QueryAsOdata == "?$top=30&$skip=5" && x.NoTotal == false), A._)) + A.That.Matches(x => x.QueryAsOdata == "?$top=30&$skip=5" && !x.NoTotal), A._)) .Returns(ResultList.CreateFrom(10, content)); var result = await ExecuteAsync(new ExecutionOptions { Query = query }); @@ -466,7 +467,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL .Returns(ResultList.CreateFrom(1, contentRef)); A.CallTo(() => contentQuery.QueryAsync(MatchsContentContext(), content.SchemaId.Id.ToString(), - A.That.Matches(x => x.QueryAsOdata == "?$top=30&$skip=5" && x.Reference == contentRefId && x.NoTotal == true), A._)) + A.That.Matches(x => x.QueryAsOdata == "?$top=30&$skip=5" && x.Reference == contentRefId && x.NoTotal), A._)) .Returns(ResultList.CreateFrom(1, content)); var result = await ExecuteAsync(new ExecutionOptions { Query = query }); @@ -530,7 +531,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL .Returns(ResultList.CreateFrom(1, contentRef)); A.CallTo(() => contentQuery.QueryAsync(MatchsContentContext(), content.SchemaId.Id.ToString(), - A.That.Matches(x => x.QueryAsOdata == "?$top=30&$skip=5" && x.Reference == contentRefId && x.NoTotal == false), A._)) + A.That.Matches(x => x.QueryAsOdata == "?$top=30&$skip=5" && x.Reference == contentRefId && !x.NoTotal), A._)) .Returns(ResultList.CreateFrom(1, content)); var result = await ExecuteAsync(new ExecutionOptions { Query = query }); @@ -732,17 +733,17 @@ namespace Squidex.Domain.Apps.Entities.Contents.GraphQL var json = serializer.Serialize(result); - Assert.Contains("\"errors\"", json); + Assert.Contains("\"errors\"", json, StringComparison.Ordinal); } private static string CreateQuery(string query, DomainId id = default) { return query - .Replace("'", "\"") - .Replace("", id.ToString()) - .Replace("", TestAsset.AllFields) - .Replace("", TestContent.AllFields) - .Replace("", TestContent.AllFlatFields); + .Replace("'", "\"", StringComparison.Ordinal) + .Replace("", id.ToString(), StringComparison.Ordinal) + .Replace("", TestAsset.AllFields, StringComparison.Ordinal) + .Replace("", TestContent.AllFields, StringComparison.Ordinal) + .Replace("", TestContent.AllFlatFields, StringComparison.Ordinal); } private Context MatchsAssetContext() diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/MongoDb/ContentQueryTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/MongoDb/ContentQueryTests.cs index c15b267f2..501346ee9 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/MongoDb/ContentQueryTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/MongoDb/ContentQueryTests.cs @@ -263,7 +263,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.MongoDb private static string Cleanup(string filter, object? arg = null) { - return filter.Replace('\'', '"').Replace("[value]", arg?.ToString()); + return filter.Replace('\'', '"').Replace("[value]", arg?.ToString(), StringComparison.Ordinal); } } -} \ No newline at end of file +} diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/MongoDb/ContentsQueryFixture.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/MongoDb/ContentsQueryFixture.cs index 6294976a3..3fa9de265 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/MongoDb/ContentsQueryFixture.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/MongoDb/ContentsQueryFixture.cs @@ -7,6 +7,7 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.Threading; using System.Threading.Tasks; using FakeItEasy; @@ -182,7 +183,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.MongoDb public string RandomValue() { - return random.Next(0, numValues).ToString(); + return random.Next(0, numValues).ToString(CultureInfo.InvariantCulture); } private static IAppEntity CreateApp(DomainId appId) diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ReferencesFluidExtensionTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ReferencesFluidExtensionTests.cs index 224f32aa7..d8afc2ed6 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ReferencesFluidExtensionTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ReferencesFluidExtensionTests.cs @@ -5,6 +5,7 @@ // All rights reserved. Licensed under the MIT license. // ========================================================================== +using System; using System.Threading; using System.Threading.Tasks; using FakeItEasy; @@ -156,9 +157,9 @@ namespace Squidex.Domain.Apps.Entities.Contents private static string Cleanup(string text) { return text - .Replace("\r", string.Empty) - .Replace("\n", string.Empty) - .Replace(" ", string.Empty); + .Replace("\r", string.Empty, StringComparison.Ordinal) + .Replace("\n", string.Empty, StringComparison.Ordinal) + .Replace(" ", string.Empty, StringComparison.Ordinal); } } } diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ReferencesJintExtensionTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ReferencesJintExtensionTests.cs index a7f6336ed..7c6d26f16 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ReferencesJintExtensionTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/ReferencesJintExtensionTests.cs @@ -160,9 +160,9 @@ namespace Squidex.Domain.Apps.Entities.Contents private static string Cleanup(string text) { return text - .Replace("\r", string.Empty) - .Replace("\n", string.Empty) - .Replace(" ", string.Empty); + .Replace("\r", string.Empty, StringComparison.Ordinal) + .Replace("\n", string.Empty, StringComparison.Ordinal) + .Replace(" ", string.Empty, StringComparison.Ordinal); } } } diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/Text/TextIndexerTests_Elastic.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/Text/TextIndexerTests_Elastic.cs index abe98770e..150a5119c 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/Text/TextIndexerTests_Elastic.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/Text/TextIndexerTests_Elastic.cs @@ -38,7 +38,9 @@ namespace Squidex.Domain.Apps.Entities.Contents.Text public TextIndexerTests_Elastic() { +#pragma warning disable MA0056 // Do not call overridable members in constructor SupportsQuerySyntax = true; +#pragma warning restore MA0056 // Do not call overridable members in constructor } [Fact] diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/Text/TextIndexerTests_Mongo.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/Text/TextIndexerTests_Mongo.cs index fd35a392d..d3a5f1148 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/Text/TextIndexerTests_Mongo.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/Text/TextIndexerTests_Mongo.cs @@ -51,8 +51,10 @@ namespace Squidex.Domain.Apps.Entities.Contents.Text DomainIdSerializer.Register(); +#pragma warning disable MA0056 // Do not call overridable members in constructor SupportsQuerySyntax = false; SupportsGeo = true; +#pragma warning restore MA0056 // Do not call overridable members in constructor } [Fact] diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Rules/DomainObject/RuleDomainObjectTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Rules/DomainObject/RuleDomainObjectTests.cs index 32fb0d8dd..a603b6d46 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Rules/DomainObject/RuleDomainObjectTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Rules/DomainObject/RuleDomainObjectTests.cs @@ -39,7 +39,9 @@ namespace Squidex.Domain.Apps.Entities.Rules.DomainObject public RuleDomainObjectTests() { sut = new RuleDomainObject(PersistenceFactory, A.Dummy(), appProvider, ruleEnqueuer); +#pragma warning disable MA0056 // Do not call overridable members in constructor sut.Setup(Id); +#pragma warning restore MA0056 // Do not call overridable members in constructor } [Fact] diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/DomainObject/SchemaDomainObjectTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/DomainObject/SchemaDomainObjectTests.cs index 6b88f1726..b6942f130 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/DomainObject/SchemaDomainObjectTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/DomainObject/SchemaDomainObjectTests.cs @@ -39,7 +39,9 @@ namespace Squidex.Domain.Apps.Entities.Schemas.DomainObject public SchemaDomainObjectTests() { sut = new SchemaDomainObject(PersistenceFactory, A.Dummy()); +#pragma warning disable MA0056 // Do not call overridable members in constructor sut.Setup(Id); +#pragma warning restore MA0056 // Do not call overridable members in constructor } [Fact] diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/Indexes/SchemasIndexTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/Indexes/SchemasIndexTests.cs index 2703884d3..64eaff977 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/Indexes/SchemasIndexTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Schemas/Indexes/SchemasIndexTests.cs @@ -38,11 +38,11 @@ namespace Squidex.Domain.Apps.Entities.Schemas.Indexes A.CallTo(() => grainFactory.GetGrain(appId.Id.ToString(), null)) .Returns(this.cache); - var cache = + var localCache = new ReplicatedCache(new MemoryCache(Options.Create(new MemoryCacheOptions())), new SimplePubSub(A.Fake>()), Options.Create(new ReplicatedCacheOptions { Enable = true })); - sut = new SchemasIndex(grainFactory, cache); + sut = new SchemasIndex(grainFactory, localCache); } [Fact] diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Squidex.Domain.Apps.Entities.Tests.csproj b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Squidex.Domain.Apps.Entities.Tests.csproj index 9d2e184da..efe90fb27 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Squidex.Domain.Apps.Entities.Tests.csproj +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Squidex.Domain.Apps.Entities.Tests.csproj @@ -4,6 +4,7 @@ net5.0 Squidex.Domain.Apps.Entities 9.0 + en enable @@ -22,6 +23,10 @@ + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/TestHelpers/AExtensions.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/TestHelpers/AExtensions.cs index fb35f7fbf..728bef361 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/TestHelpers/AExtensions.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/TestHelpers/AExtensions.cs @@ -22,7 +22,7 @@ namespace Squidex.Domain.Apps.Entities.TestHelpers public static Q HasIdsWithoutTotal(this INegatableArgumentConstraintManager that, params DomainId[] ids) { - return that.Matches(x => x.Ids != null && x.Ids.SetEquals(ids) && x.NoTotal == true); + return that.Matches(x => x.Ids != null && x.Ids.SetEquals(ids) && x.NoTotal); } public static Q HasIds(this INegatableArgumentConstraintManager that, params DomainId[] ids) diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/TestHelpers/HandlerTestBase.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/TestHelpers/HandlerTestBase.cs index 40ab017da..a86fa7fb1 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/TestHelpers/HandlerTestBase.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/TestHelpers/HandlerTestBase.cs @@ -61,6 +61,7 @@ namespace Squidex.Domain.Apps.Entities.TestHelpers protected HandlerTestBase() { +#pragma warning disable MA0056 // Do not call overridable members in constructor A.CallTo(() => persistenceFactory.WithSnapshotsAndEventSourcing(A._, Id, A>._, A._)) .Returns(persistence); @@ -72,6 +73,7 @@ namespace Squidex.Domain.Apps.Entities.TestHelpers A.CallTo(() => persistence.DeleteAsync()) .Invokes(() => LastEvents = Enumerable.Empty>()); +#pragma warning restore MA0056 // Do not call overridable members in constructor } protected CommandContext CreateCommandContext(TCommand command) where TCommand : SquidexCommand @@ -148,4 +150,4 @@ namespace Squidex.Domain.Apps.Entities.TestHelpers return @event; } } -} \ No newline at end of file +} diff --git a/backend/tests/Squidex.Infrastructure.Tests/Reflection/SimpleMapperTests.cs b/backend/tests/Squidex.Infrastructure.Tests/Reflection/SimpleMapperTests.cs index f37095531..9195e4447 100644 --- a/backend/tests/Squidex.Infrastructure.Tests/Reflection/SimpleMapperTests.cs +++ b/backend/tests/Squidex.Infrastructure.Tests/Reflection/SimpleMapperTests.cs @@ -40,7 +40,9 @@ namespace Squidex.Infrastructure.Reflection public class Writeonly { +#pragma warning disable MA0041 // Make property static public T P1 +#pragma warning restore MA0041 // Make property static { set => Debug.WriteLine(value); }