diff --git a/src/Umbraco.Core/Services/ContentService.cs b/src/Umbraco.Core/Services/ContentService.cs
index f324384a3d58..8694eb9bf8f4 100644
--- a/src/Umbraco.Core/Services/ContentService.cs
+++ b/src/Umbraco.Core/Services/ContentService.cs
@@ -372,7 +372,7 @@ public IContent Create(string name, IContent? parent, string contentTypeAlias, i
public IContent CreateAndSave(string name, int parentId, string contentTypeAlias, int userId = Constants.Security.SuperUserId)
{
// TODO: what about culture?
- using (ICoreScope scope = ScopeProvider.CreateCoreScope(autoComplete: true))
+ using (ICoreScope scope = ScopeProvider.CreateCoreScope())
{
// locking the content tree secures content types too
scope.WriteLock(Constants.Locks.ContentTree);
@@ -395,6 +395,8 @@ public IContent CreateAndSave(string name, int parentId, string contentTypeAlias
Save(content, userId);
+ scope.Complete();
+
return content;
}
}
@@ -416,7 +418,7 @@ public IContent CreateAndSave(string name, IContent parent, string contentTypeAl
throw new ArgumentNullException(nameof(parent));
}
- using (ICoreScope scope = ScopeProvider.CreateCoreScope(autoComplete: true))
+ using (ICoreScope scope = ScopeProvider.CreateCoreScope())
{
// locking the content tree secures content types too
scope.WriteLock(Constants.Locks.ContentTree);
@@ -431,6 +433,7 @@ public IContent CreateAndSave(string name, IContent parent, string contentTypeAl
Save(content, userId);
+ scope.Complete();
return content;
}
}
@@ -508,10 +511,11 @@ public ContentScheduleCollection GetContentScheduleByContentId(int contentId)
///
public void PersistContentSchedule(IContent content, ContentScheduleCollection contentSchedule)
{
- using (ICoreScope scope = ScopeProvider.CreateCoreScope(autoComplete: true))
+ using (ICoreScope scope = ScopeProvider.CreateCoreScope())
{
scope.WriteLock(Constants.Locks.ContentTree);
_documentRepository.PersistContentSchedule(content, contentSchedule);
+ scope.Complete();
}
}
@@ -2960,7 +2964,7 @@ private OperationResult Sort(ICoreScope scope, IContent[] itemsA, int userId, Ev
public ContentDataIntegrityReport CheckDataIntegrity(ContentDataIntegrityReportOptions options)
{
- using (ICoreScope scope = ScopeProvider.CreateCoreScope(autoComplete: true))
+ using (ICoreScope scope = ScopeProvider.CreateCoreScope())
{
scope.WriteLock(Constants.Locks.ContentTree);
@@ -2973,6 +2977,8 @@ public ContentDataIntegrityReport CheckDataIntegrity(ContentDataIntegrityReportO
scope.Notifications.Publish(new ContentTreeChangeNotification(root, TreeChangeTypes.RefreshAll, EventMessagesFactory.Get()));
}
+ scope.Complete();
+
return report;
}
}
diff --git a/src/Umbraco.Core/Services/ContentTypeServiceBaseOfTRepositoryTItemTService.cs b/src/Umbraco.Core/Services/ContentTypeServiceBaseOfTRepositoryTItemTService.cs
index 7cf63445a934..512fad06742e 100644
--- a/src/Umbraco.Core/Services/ContentTypeServiceBaseOfTRepositoryTItemTService.cs
+++ b/src/Umbraco.Core/Services/ContentTypeServiceBaseOfTRepositoryTItemTService.cs
@@ -322,7 +322,6 @@ public IEnumerable GetAll(IEnumerable? ids)
}
using (ICoreScope scope = ScopeProvider.CreateCoreScope(autoComplete: true))
-
{
scope.ReadLock(ReadLockIds);
return Repository.GetMany(ids.ToArray());
diff --git a/src/Umbraco.Core/Services/ContentVersionService.cs b/src/Umbraco.Core/Services/ContentVersionService.cs
index 24443a3957db..d4dea0af914a 100644
--- a/src/Umbraco.Core/Services/ContentVersionService.cs
+++ b/src/Umbraco.Core/Services/ContentVersionService.cs
@@ -68,7 +68,7 @@ public IReadOnlyCollection PerformContentVersionCleanup(Date
///
public void SetPreventCleanup(int versionId, bool preventCleanup, int userId = -1)
{
- using (ICoreScope scope = _scopeProvider.CreateCoreScope(autoComplete: true))
+ using (ICoreScope scope = _scopeProvider.CreateCoreScope())
{
scope.WriteLock(Constants.Locks.ContentTree);
_documentVersionRepository.SetPreventCleanup(versionId, preventCleanup);
@@ -87,6 +87,7 @@ public void SetPreventCleanup(int versionId, bool preventCleanup, int userId = -
var message = $"set preventCleanup = '{preventCleanup}' for version '{versionId}'";
Audit(auditType, userId, version.ContentId, message, $"{version.VersionDate}");
+ scope.Complete();
}
}
@@ -120,7 +121,7 @@ private IReadOnlyCollection CleanupDocumentVersions(DateTime
*
* tl;dr lots of scopes to enable other connections to use the DB whilst we work.
*/
- using (ICoreScope scope = _scopeProvider.CreateCoreScope(autoComplete: true))
+ using (ICoreScope scope = _scopeProvider.CreateCoreScope())
{
IReadOnlyCollection? allHistoricVersions =
_documentVersionRepository.GetDocumentVersionsEligibleForCleanup();
@@ -149,6 +150,8 @@ private IReadOnlyCollection CleanupDocumentVersions(DateTime
versionsToDelete.Add(version);
}
+
+ scope.Complete();
}
if (!versionsToDelete.Any())
@@ -161,7 +164,7 @@ private IReadOnlyCollection CleanupDocumentVersions(DateTime
foreach (IEnumerable group in versionsToDelete.InGroupsOf(Constants.Sql.MaxParameterCount))
{
- using (ICoreScope scope = _scopeProvider.CreateCoreScope(autoComplete: true))
+ using (ICoreScope scope = _scopeProvider.CreateCoreScope())
{
scope.WriteLock(Constants.Locks.ContentTree);
var groupEnumerated = group.ToList();
@@ -174,12 +177,16 @@ private IReadOnlyCollection CleanupDocumentVersions(DateTime
scope.Notifications.Publish(
new ContentDeletedVersionsNotification(version.ContentId, messages, version.VersionId));
}
+
+ scope.Complete();
}
}
- using (_scopeProvider.CreateCoreScope(autoComplete: true))
+ using (ICoreScope scope = _scopeProvider.CreateCoreScope())
{
Audit(AuditType.Delete, Constants.Security.SuperUserId, -1, $"Removed {versionsToDelete.Count} ContentVersion(s) according to cleanup policy");
+
+ scope.Complete();
}
return versionsToDelete;
diff --git a/src/Umbraco.Core/Services/DataTypeService.cs b/src/Umbraco.Core/Services/DataTypeService.cs
index 92ab381c7984..885cfc21af3c 100644
--- a/src/Umbraco.Core/Services/DataTypeService.cs
+++ b/src/Umbraco.Core/Services/DataTypeService.cs
@@ -608,7 +608,7 @@ public void Delete(IDataType dataType, int userId = Constants.Security.SuperUser
public IReadOnlyDictionary> GetReferences(int id)
{
- using ICoreScope scope = ScopeProvider.CreateCoreScope(autoComplete:true);
+ using ICoreScope scope = ScopeProvider.CreateCoreScope(autoComplete: true);
return _dataTypeRepository.FindUsages(id);
}
diff --git a/src/Umbraco.Core/Services/DefaultContentVersionCleanupPolicy.cs b/src/Umbraco.Core/Services/DefaultContentVersionCleanupPolicy.cs
index f51858fa5b25..234dae683f80 100644
--- a/src/Umbraco.Core/Services/DefaultContentVersionCleanupPolicy.cs
+++ b/src/Umbraco.Core/Services/DefaultContentVersionCleanupPolicy.cs
@@ -33,7 +33,7 @@ public IEnumerable Apply(DateTime asAtDate, IEnumerable();
- using (_scopeProvider.CreateCoreScope(autoComplete: true))
+ using (ICoreScope scope = _scopeProvider.CreateCoreScope())
{
var policyOverrides = _documentVersionRepository.GetCleanupPolicies()?
.ToDictionary(x => x.ContentTypeId);
@@ -77,6 +77,8 @@ public IEnumerable Apply(DateTime asAtDate, IEnumerable items, int userId = Constants.Security.Supe
public ContentDataIntegrityReport CheckDataIntegrity(ContentDataIntegrityReportOptions options)
{
- using (ICoreScope scope = ScopeProvider.CreateCoreScope(autoComplete: true))
+ using (ICoreScope scope = ScopeProvider.CreateCoreScope())
{
scope.WriteLock(Constants.Locks.MediaTree);
@@ -1210,6 +1210,7 @@ public ContentDataIntegrityReport CheckDataIntegrity(ContentDataIntegrityReportO
scope.Notifications.Publish(new MediaTreeChangeNotification(root, TreeChangeTypes.RefreshAll, EventMessagesFactory.Get()));
}
+ scope.Complete();
return report;
}
}
diff --git a/src/Umbraco.Core/Services/TwoFactorLoginService.cs b/src/Umbraco.Core/Services/TwoFactorLoginService.cs
index de79284ac9fc..19ecf5a2dfe2 100644
--- a/src/Umbraco.Core/Services/TwoFactorLoginService.cs
+++ b/src/Umbraco.Core/Services/TwoFactorLoginService.cs
@@ -59,8 +59,10 @@ public TwoFactorLoginService(
///
public async Task DeleteUserLoginsAsync(Guid userOrMemberKey)
{
- using ICoreScope scope = _scopeProvider.CreateCoreScope(autoComplete: true);
+ using ICoreScope scope = _scopeProvider.CreateCoreScope();
await _twoFactorLoginRepository.DeleteUserLoginsAsync(userOrMemberKey);
+
+ scope.Complete();
}
///
@@ -155,8 +157,12 @@ public async Task IsTwoFactorEnabledAsync(Guid userOrMemberKey) =>
///
public async Task DisableAsync(Guid userOrMemberKey, string providerName)
{
- using ICoreScope scope = _scopeProvider.CreateCoreScope(autoComplete: true);
- return await _twoFactorLoginRepository.DeleteUserLoginsAsync(userOrMemberKey, providerName);
+ using ICoreScope scope = _scopeProvider.CreateCoreScope();
+ var result = await _twoFactorLoginRepository.DeleteUserLoginsAsync(userOrMemberKey, providerName);
+
+ scope.Complete();
+
+ return result;
}
///
@@ -173,9 +179,10 @@ public bool ValidateTwoFactorSetup(string providerName, string secret, string co
///
public Task SaveAsync(TwoFactorLogin twoFactorLogin)
{
- using ICoreScope scope = _scopeProvider.CreateCoreScope(autoComplete: true);
+ using ICoreScope scope = _scopeProvider.CreateCoreScope();
_twoFactorLoginRepository.Save(twoFactorLogin);
+ scope.Complete();
return Task.CompletedTask;
}
diff --git a/src/Umbraco.Infrastructure/HostedServices/ScheduledPublishing.cs b/src/Umbraco.Infrastructure/HostedServices/ScheduledPublishing.cs
index d593124ccbeb..d8a77414dc30 100644
--- a/src/Umbraco.Infrastructure/HostedServices/ScheduledPublishing.cs
+++ b/src/Umbraco.Infrastructure/HostedServices/ScheduledPublishing.cs
@@ -94,7 +94,7 @@ public override Task PerformExecuteAsync(object? state)
// but then what should be its "scope"? could we attach it to scopes?
// - and we should definitively *not* have to flush it here (should be auto)
using UmbracoContextReference contextReference = _umbracoContextFactory.EnsureUmbracoContext();
- using ICoreScope scope = _scopeProvider.CreateCoreScope(autoComplete: true);
+ using ICoreScope scope = _scopeProvider.CreateCoreScope();
/* We used to assume that there will never be two instances running concurrently where (IsMainDom && ServerRole == SchedulingPublisher)
* However this is possible during an azure deployment slot swap for the SchedulingPublisher instance when trying to achieve zero downtime deployments.
@@ -113,6 +113,8 @@ public override Task PerformExecuteAsync(object? state)
grouped.Count(),
grouped.Key);
}
+
+ scope.Complete();
}
finally
{
diff --git a/src/Umbraco.Infrastructure/Logging/Viewer/LogViewerConfig.cs b/src/Umbraco.Infrastructure/Logging/Viewer/LogViewerConfig.cs
index e8b9de36d78f..082efbfb124e 100644
--- a/src/Umbraco.Infrastructure/Logging/Viewer/LogViewerConfig.cs
+++ b/src/Umbraco.Infrastructure/Logging/Viewer/LogViewerConfig.cs
@@ -1,6 +1,8 @@
-using Umbraco.Cms.Core.Models;
+using Microsoft.Extensions.DependencyInjection;
+using Umbraco.Cms.Core.DependencyInjection;
+using Umbraco.Cms.Core.Models;
using Umbraco.Cms.Core.Persistence.Repositories;
-using Umbraco.Cms.Core.Scoping;
+using Umbraco.Cms.Infrastructure.Scoping;
using IScope = Umbraco.Cms.Infrastructure.Scoping.IScope;
namespace Umbraco.Cms.Core.Logging.Viewer;
@@ -10,6 +12,21 @@ public class LogViewerConfig : ILogViewerConfig
private readonly ILogViewerQueryRepository _logViewerQueryRepository;
private readonly IScopeProvider _scopeProvider;
+ [Obsolete("Use non-obsolete ctor. This will be removed in Umbraco 14.")]
+ public LogViewerConfig(ILogViewerQueryRepository logViewerQueryRepository, Umbraco.Cms.Core.Scoping.IScopeProvider scopeProvider)
+ : this(logViewerQueryRepository, StaticServiceProvider.Instance.GetRequiredService())
+ {
+
+ }
+
+ //Temp ctor used by MSDI (Greedy)
+ [Obsolete("Use non-obsolete ctor. This will be removed in Umbraco 14.")]
+ public LogViewerConfig(ILogViewerQueryRepository logViewerQueryRepository, Umbraco.Cms.Core.Scoping.IScopeProvider coreScopeProvider, IScopeProvider scopeProvider)
+ : this(logViewerQueryRepository, scopeProvider)
+ {
+
+ }
+
public LogViewerConfig(ILogViewerQueryRepository logViewerQueryRepository, IScopeProvider scopeProvider)
{
_logViewerQueryRepository = logViewerQueryRepository;
@@ -26,15 +43,16 @@ public LogViewerConfig(ILogViewerQueryRepository logViewerQueryRepository, IScop
public IReadOnlyList? AddSavedSearch(string? name, string? query)
{
- using IScope scope = _scopeProvider.CreateScope(autoComplete: true);
+ using IScope scope = _scopeProvider.CreateScope();
_logViewerQueryRepository.Save(new LogViewerQuery(name, query));
+ scope.Complete();
return GetSavedSearches();
}
public IReadOnlyList? DeleteSavedSearch(string? name, string? query)
{
- using IScope scope = _scopeProvider.CreateScope(autoComplete: true);
+ using IScope scope = _scopeProvider.CreateScope();
ILogViewerQuery? item = name is null ? null : _logViewerQueryRepository.GetByName(name);
if (item is not null)
{
@@ -42,6 +60,8 @@ public LogViewerConfig(ILogViewerQueryRepository logViewerQueryRepository, IScop
}
// Return the updated object - so we can instantly reset the entire array from the API response
- return GetSavedSearches();
+ IReadOnlyList result = GetSavedSearches();
+ scope.Complete();
+ return result;
}
}
diff --git a/src/Umbraco.Infrastructure/Security/MemberUserStore.cs b/src/Umbraco.Infrastructure/Security/MemberUserStore.cs
index 70efeeb73913..059017baaa6f 100644
--- a/src/Umbraco.Infrastructure/Security/MemberUserStore.cs
+++ b/src/Umbraco.Infrastructure/Security/MemberUserStore.cs
@@ -96,7 +96,7 @@ public override Task CreateAsync(
throw new ArgumentNullException(nameof(user));
}
- using ICoreScope scope = _scopeProvider.CreateCoreScope(autoComplete: true);
+ using ICoreScope scope = _scopeProvider.CreateCoreScope();
// create member
IMember memberEntity = _memberService.CreateMember(
@@ -150,6 +150,7 @@ public override Task CreateAsync(
x.Value)));
}
+ scope.Complete();
return Task.FromResult(IdentityResult.Success);
}
catch (Exception ex)
@@ -179,7 +180,7 @@ public override Task UpdateAsync(
throw new InvalidOperationException("The user id must be an integer to work with the Umbraco");
}
- using ICoreScope scope = _scopeProvider.CreateCoreScope(autoComplete: true);
+ using ICoreScope scope = _scopeProvider.CreateCoreScope();
IMember? found = _memberService.GetById(asInt);
if (found != null)
@@ -220,6 +221,7 @@ public override Task UpdateAsync(
}
}
+ scope.Complete();
return Task.FromResult(IdentityResult.Success);
}
catch (Exception ex)
diff --git a/src/Umbraco.Web.Website/Controllers/UmbProfileController.cs b/src/Umbraco.Web.Website/Controllers/UmbProfileController.cs
index 41286f7dba01..22d5f7e3e268 100644
--- a/src/Umbraco.Web.Website/Controllers/UmbProfileController.cs
+++ b/src/Umbraco.Web.Website/Controllers/UmbProfileController.cs
@@ -102,7 +102,7 @@ private void AddErrors(IdentityResult result)
private async Task UpdateMemberAsync(ProfileModel model, MemberIdentityUser currentMember)
{
- using ICoreScope scope = _scopeProvider.CreateCoreScope(autoComplete: true);
+ using ICoreScope scope = _scopeProvider.CreateCoreScope();
currentMember.Email = model.Email;
currentMember.Name = model.Name;
@@ -140,6 +140,7 @@ private async Task UpdateMemberAsync(ProfileModel model, MemberI
_memberService.Save(member);
+ scope.Complete();
return saveResult;
}
}
diff --git a/src/Umbraco.Web.Website/Controllers/UmbRegisterController.cs b/src/Umbraco.Web.Website/Controllers/UmbRegisterController.cs
index 493dd624d1a9..3fb2a966c439 100644
--- a/src/Umbraco.Web.Website/Controllers/UmbRegisterController.cs
+++ b/src/Umbraco.Web.Website/Controllers/UmbRegisterController.cs
@@ -118,7 +118,7 @@ private void AddErrors(IdentityResult result)
/// Result of registration operation.
private async Task RegisterMemberAsync(RegisterModel model)
{
- using ICoreScope scope = _scopeProvider.CreateCoreScope(autoComplete: true);
+ using ICoreScope scope = _scopeProvider.CreateCoreScope();
// U4-10762 Server error with "Register Member" snippet (Cannot save member with empty name)
// If name field is empty, add the email address instead.
@@ -160,6 +160,8 @@ private async Task RegisterMemberAsync(RegisterModel model)
}
}
+ scope.Complete();
+
return identityResult;
}
}
diff --git a/tests/Umbraco.Tests.Common/TestHelperBase.cs b/tests/Umbraco.Tests.Common/TestHelperBase.cs
index ba7d29cd69cf..21c3c65b7da5 100644
--- a/tests/Umbraco.Tests.Common/TestHelperBase.cs
+++ b/tests/Umbraco.Tests.Common/TestHelperBase.cs
@@ -7,6 +7,7 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
+using Microsoft.Extensions.Options;
using Moq;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.Cache;
@@ -14,6 +15,8 @@
using Umbraco.Cms.Core.Configuration;
using Umbraco.Cms.Core.Configuration.Models;
using Umbraco.Cms.Core.Diagnostics;
+using Umbraco.Cms.Core.DistributedLocking;
+using Umbraco.Cms.Core.Events;
using Umbraco.Cms.Core.Hosting;
using Umbraco.Cms.Core.IO;
using Umbraco.Cms.Core.Logging;
@@ -24,6 +27,8 @@
using Umbraco.Cms.Core.Serialization;
using Umbraco.Cms.Core.Strings;
using Umbraco.Cms.Infrastructure.Persistence;
+using Umbraco.Cms.Infrastructure.Persistence.SqlSyntax;
+using Umbraco.Cms.Infrastructure.Scoping;
using Umbraco.Cms.Infrastructure.Serialization;
using Umbraco.Cms.Tests.Common.TestHelpers;
using Umbraco.Extensions;
@@ -76,6 +81,61 @@ public string WorkingDirectory
public IShortStringHelper ShortStringHelper { get; } =
new DefaultShortStringHelper(new DefaultShortStringHelperConfig());
+ public IScopeProvider ScopeProvider
+ {
+ get
+ {
+ var loggerFactory = NullLoggerFactory.Instance;
+ var fileSystems = new FileSystems(
+ loggerFactory,
+ Mock.Of(),
+ Mock.Of>(),
+ Mock.Of());
+ var mediaFileManager = new MediaFileManager(
+ Mock.Of(),
+ Mock.Of(),
+ loggerFactory.CreateLogger(),
+ Mock.Of(),
+ Mock.Of(),
+ Options.Create(new ContentSettings()));
+ var databaseFactory = new Mock();
+ var database = new Mock();
+ var sqlContext = new Mock();
+
+ var lockingMechanism = new Mock();
+ lockingMechanism.Setup(x => x.ReadLock(It.IsAny(), It.IsAny()))
+ .Returns(Mock.Of());
+ lockingMechanism.Setup(x => x.WriteLock(It.IsAny(), It.IsAny()))
+ .Returns(Mock.Of());
+
+ var lockingMechanismFactory = new Mock();
+ lockingMechanismFactory.Setup(x => x.DistributedLockingMechanism)
+ .Returns(lockingMechanism.Object);
+
+ // Setup mock of database factory to return mock of database.
+ databaseFactory.Setup(x => x.CreateDatabase()).Returns(database.Object);
+ databaseFactory.Setup(x => x.SqlContext).Returns(sqlContext.Object);
+
+ // Setup mock of database to return mock of sql SqlContext
+ database.Setup(x => x.SqlContext).Returns(sqlContext.Object);
+
+ var syntaxProviderMock = new Mock();
+
+ // Setup mock of ISqlContext to return syntaxProviderMock
+ sqlContext.Setup(x => x.SqlSyntax).Returns(syntaxProviderMock.Object);
+
+ return new ScopeProvider(
+ new AmbientScopeStack(),
+ new AmbientScopeContextStack(),
+ lockingMechanismFactory.Object,
+ databaseFactory.Object,
+ fileSystems,
+ new TestOptionsMonitor(new CoreDebugSettings()),
+ mediaFileManager,
+ loggerFactory,
+ Mock.Of());
+ }
+ }
public IJsonSerializer JsonSerializer { get; } = new JsonNetSerializer();
diff --git a/tests/Umbraco.Tests.UnitTests/TestHelpers/TestHelper.cs b/tests/Umbraco.Tests.UnitTests/TestHelpers/TestHelper.cs
index cfc57ee9ff2d..b123a6695e62 100644
--- a/tests/Umbraco.Tests.UnitTests/TestHelpers/TestHelper.cs
+++ b/tests/Umbraco.Tests.UnitTests/TestHelpers/TestHelper.cs
@@ -32,6 +32,7 @@
using Umbraco.Cms.Core.PropertyEditors;
using Umbraco.Cms.Core.Routing;
using Umbraco.Cms.Core.Runtime;
+using Umbraco.Cms.Core.Scoping;
using Umbraco.Cms.Core.Serialization;
using Umbraco.Cms.Core.Strings;
using Umbraco.Cms.Infrastructure.Mail;
@@ -43,6 +44,7 @@
using Umbraco.Extensions;
using File = System.IO.File;
using IHostingEnvironment = Umbraco.Cms.Core.Hosting.IHostingEnvironment;
+using IScopeProvider = Umbraco.Cms.Infrastructure.Scoping.IScopeProvider;
namespace Umbraco.Cms.Tests.UnitTests.TestHelpers;
@@ -59,6 +61,8 @@ public static class TestHelper
/// The assembly directory.
public static string WorkingDirectory => s_testHelperInternal.WorkingDirectory;
+ public static IScopeProvider ScopeProvider => s_testHelperInternal.ScopeProvider;
+ public static ICoreScopeProvider CoreScopeProvider => s_testHelperInternal.ScopeProvider;
public static IShortStringHelper ShortStringHelper => s_testHelperInternal.ShortStringHelper;
public static IJsonSerializer JsonSerializer => s_testHelperInternal.JsonSerializer;
diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Logging/LogviewerTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Logging/LogviewerTests.cs
index 5c028714b80e..cf3d985b2a08 100644
--- a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Logging/LogviewerTests.cs
+++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Logging/LogviewerTests.cs
@@ -49,7 +49,7 @@ public void Setup()
File.Copy(exampleLogfilePath, _newLogfilePath, true);
var logger = Mock.Of>();
- var logViewerConfig = new LogViewerConfig(LogViewerQueryRepository, Mock.Of());
+ var logViewerConfig = new LogViewerConfig(LogViewerQueryRepository, TestHelper.ScopeProvider);
var logLevelLoader = Mock.Of();
_logViewer =
new SerilogJsonLogViewer(logger, logViewerConfig, loggingConfiguration, logLevelLoader, Log.Logger);
diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Security/MemberManagerTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Security/MemberManagerTests.cs
index f745c06ceb0d..10d45109022e 100644
--- a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Security/MemberManagerTests.cs
+++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Security/MemberManagerTests.cs
@@ -17,6 +17,7 @@
using Umbraco.Cms.Tests.Common;
using Umbraco.Cms.Tests.Common.Builders;
using Umbraco.Cms.Tests.Common.Builders.Extensions;
+using Umbraco.Cms.Tests.UnitTests.TestHelpers;
using Umbraco.Cms.Web.Common.Security;
namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Security;
@@ -33,7 +34,7 @@ public class MemberManagerTests
public MemberManager CreateSut()
{
- var scopeProvider = new Mock().Object;
+ var scopeProvider = TestHelper.ScopeProvider;
_mockMemberService = new Mock();
var mapDefinitions = new List
diff --git a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Security/MemberUserStoreTests.cs b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Security/MemberUserStoreTests.cs
index 9e2a769e746e..79a60418182a 100644
--- a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Security/MemberUserStoreTests.cs
+++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Security/MemberUserStoreTests.cs
@@ -15,6 +15,7 @@
using Umbraco.Cms.Core.Scoping;
using Umbraco.Cms.Core.Security;
using Umbraco.Cms.Core.Services;
+using Umbraco.Cms.Tests.UnitTests.TestHelpers;
using Umbraco.Cms.Tests.UnitTests.Umbraco.Core.ShortStringHelper;
using IScopeProvider = Umbraco.Cms.Infrastructure.Scoping.IScopeProvider;
@@ -28,23 +29,12 @@ public class MemberUserStoreTests
public MemberUserStore CreateSut()
{
_mockMemberService = new Mock();
- var mockScope = new Mock();
- var mockScopeProvider = new Mock();
- mockScopeProvider
- .Setup(x => x.CreateScope(
- It.IsAny(),
- It.IsAny(),
- It.IsAny(),
- It.IsAny(),
- It.IsAny(),
- It.IsAny(),
- It.IsAny()))
- .Returns(mockScope.Object);
+ var mockScopeProvider = TestHelper.ScopeProvider;
return new MemberUserStore(
_mockMemberService.Object,
- new UmbracoMapper(new MapDefinitionCollection(() => new List()), mockScopeProvider.Object, NullLogger.Instance),
- mockScopeProvider.Object,
+ new UmbracoMapper(new MapDefinitionCollection(() => new List()), mockScopeProvider, NullLogger.Instance),
+ mockScopeProvider,
new IdentityErrorDescriber(),
Mock.Of(),
Mock.Of(),