diff --git a/src/Umbraco.Core/Services/ContentService.cs b/src/Umbraco.Core/Services/ContentService.cs
index 160804c85b..c1b81505a1 100644
--- a/src/Umbraco.Core/Services/ContentService.cs
+++ b/src/Umbraco.Core/Services/ContentService.cs
@@ -372,7 +372,7 @@ public class ContentService : RepositoryService, IContentService
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 class ContentService : RepositoryService, IContentService
Save(content, userId);
+ scope.Complete();
+
return content;
}
}
@@ -416,7 +418,7 @@ public class ContentService : RepositoryService, IContentService
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 class ContentService : RepositoryService, IContentService
Save(content, userId);
+ scope.Complete();
return content;
}
}
@@ -508,10 +511,11 @@ public class ContentService : RepositoryService, IContentService
///
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();
}
}
@@ -2978,7 +2982,7 @@ public class ContentService : RepositoryService, IContentService
public ContentDataIntegrityReport CheckDataIntegrity(ContentDataIntegrityReportOptions options)
{
- using (ICoreScope scope = ScopeProvider.CreateCoreScope(autoComplete: true))
+ using (ICoreScope scope = ScopeProvider.CreateCoreScope())
{
scope.WriteLock(Constants.Locks.ContentTree);
@@ -2991,6 +2995,8 @@ public class ContentService : RepositoryService, IContentService
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 7cf63445a9..512fad0674 100644
--- a/src/Umbraco.Core/Services/ContentTypeServiceBaseOfTRepositoryTItemTService.cs
+++ b/src/Umbraco.Core/Services/ContentTypeServiceBaseOfTRepositoryTItemTService.cs
@@ -322,7 +322,6 @@ public abstract class ContentTypeServiceBase : ContentTypeSe
}
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 6f1c28deb8..1c190311da 100644
--- a/src/Umbraco.Core/Services/ContentVersionService.cs
+++ b/src/Umbraco.Core/Services/ContentVersionService.cs
@@ -68,7 +68,7 @@ internal class ContentVersionService : IContentVersionService
///
public void SetPreventCleanup(int versionId, bool preventCleanup, int userId = Constants.Security.SuperUserId)
{
- 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 @@ internal class ContentVersionService : IContentVersionService
var message = $"set preventCleanup = '{preventCleanup}' for version '{versionId}'";
Audit(auditType, userId, version.ContentId, message, $"{version.VersionDate}");
+ scope.Complete();
}
}
@@ -120,7 +121,7 @@ internal class ContentVersionService : IContentVersionService
*
* 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();
@@ -154,6 +155,8 @@ internal class ContentVersionService : IContentVersionService
versionsToDelete.Add(version);
}
+
+ scope.Complete();
}
if (!versionsToDelete.Any())
@@ -169,7 +172,7 @@ internal class ContentVersionService : IContentVersionService
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();
@@ -182,12 +185,16 @@ internal class ContentVersionService : IContentVersionService
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 08cfd602f5..857ecdc347 100644
--- a/src/Umbraco.Core/Services/DataTypeService.cs
+++ b/src/Umbraco.Core/Services/DataTypeService.cs
@@ -608,7 +608,7 @@ namespace Umbraco.Cms.Core.Services.Implement
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 f51858fa5b..234dae683f 100644
--- a/src/Umbraco.Core/Services/DefaultContentVersionCleanupPolicy.cs
+++ b/src/Umbraco.Core/Services/DefaultContentVersionCleanupPolicy.cs
@@ -33,7 +33,7 @@ public class DefaultContentVersionCleanupPolicy : IContentVersionCleanupPolicy
var theRest = new List();
- using (_scopeProvider.CreateCoreScope(autoComplete: true))
+ using (ICoreScope scope = _scopeProvider.CreateCoreScope())
{
var policyOverrides = _documentVersionRepository.GetCleanupPolicies()?
.ToDictionary(x => x.ContentTypeId);
@@ -77,6 +77,8 @@ public class DefaultContentVersionCleanupPolicy : IContentVersionCleanupPolicy
yield return version;
}
}
+
+ scope.Complete();
}
}
diff --git a/src/Umbraco.Core/Services/MediaService.cs b/src/Umbraco.Core/Services/MediaService.cs
index fadc682d16..8738c6c67e 100644
--- a/src/Umbraco.Core/Services/MediaService.cs
+++ b/src/Umbraco.Core/Services/MediaService.cs
@@ -1197,7 +1197,7 @@ namespace Umbraco.Cms.Core.Services
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 @@ namespace Umbraco.Cms.Core.Services
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 64da30b991..bcfa102d1f 100644
--- a/src/Umbraco.Core/Services/TwoFactorLoginService.cs
+++ b/src/Umbraco.Core/Services/TwoFactorLoginService.cs
@@ -42,8 +42,10 @@ public class TwoFactorLoginService : ITwoFactorLoginService
///
public async Task DeleteUserLoginsAsync(Guid userOrMemberKey)
{
- using ICoreScope scope = _scopeProvider.CreateCoreScope(autoComplete: true);
+ using ICoreScope scope = _scopeProvider.CreateCoreScope();
await _twoFactorLoginRepository.DeleteUserLoginsAsync(userOrMemberKey);
+
+ scope.Complete();
}
///
@@ -138,8 +140,12 @@ public class TwoFactorLoginService : ITwoFactorLoginService
///
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;
}
///
@@ -156,9 +162,10 @@ public class TwoFactorLoginService : ITwoFactorLoginService
///
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 328cf5ee5c..da1fbaf157 100644
--- a/src/Umbraco.Infrastructure/HostedServices/ScheduledPublishing.cs
+++ b/src/Umbraco.Infrastructure/HostedServices/ScheduledPublishing.cs
@@ -106,7 +106,7 @@ public class ScheduledPublishing : RecurringHostedServiceBase
// 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.
@@ -125,6 +125,8 @@ public class ScheduledPublishing : RecurringHostedServiceBase
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 ecd9aaf329..ca8a4e0353 100644
--- a/src/Umbraco.Infrastructure/Logging/Viewer/LogViewerConfig.cs
+++ b/src/Umbraco.Infrastructure/Logging/Viewer/LogViewerConfig.cs
@@ -1,6 +1,8 @@
+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,9 +43,10 @@ public class LogViewerConfig : ILogViewerConfig
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();
}
@@ -37,7 +55,7 @@ public class LogViewerConfig : ILogViewerConfig
public IReadOnlyList DeleteSavedSearch(string name)
{
- using IScope scope = _scopeProvider.CreateScope(autoComplete: true);
+ using IScope scope = _scopeProvider.CreateScope();
ILogViewerQuery? item = _logViewerQueryRepository.GetByName(name);
if (item is not null)
@@ -46,6 +64,8 @@ public class LogViewerConfig : ILogViewerConfig
}
// 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 934cefb0b8..4e4b43f509 100644
--- a/src/Umbraco.Infrastructure/Security/MemberUserStore.cs
+++ b/src/Umbraco.Infrastructure/Security/MemberUserStore.cs
@@ -96,7 +96,7 @@ public class MemberUserStore : UmbracoUserStore 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 @@ public class UmbProfileController : SurfaceController
_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 493dd624d1..3fb2a966c4 100644
--- a/src/Umbraco.Web.Website/Controllers/UmbRegisterController.cs
+++ b/src/Umbraco.Web.Website/Controllers/UmbRegisterController.cs
@@ -118,7 +118,7 @@ public class UmbRegisterController : SurfaceController
/// 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 @@ public class UmbRegisterController : SurfaceController
}
}
+ scope.Complete();
+
return identityResult;
}
}
diff --git a/tests/Umbraco.Tests.Common/TestHelperBase.cs b/tests/Umbraco.Tests.Common/TestHelperBase.cs
index ba7d29cd69..21c3c65b7d 100644
--- a/tests/Umbraco.Tests.Common/TestHelperBase.cs
+++ b/tests/Umbraco.Tests.Common/TestHelperBase.cs
@@ -7,6 +7,7 @@ using System.Reflection;
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.Composing;
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.Runtime;
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 abstract class TestHelperBase
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 33b89f1738..24b15b5723 100644
--- a/tests/Umbraco.Tests.UnitTests/TestHelpers/TestHelper.cs
+++ b/tests/Umbraco.Tests.UnitTests/TestHelpers/TestHelper.cs
@@ -31,6 +31,7 @@ using Umbraco.Cms.Core.Net;
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;
@@ -42,6 +43,7 @@ using Umbraco.Cms.Tests.Common.Testing;
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;
@@ -58,6 +60,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 65307cd143..a27ca71058 100644
--- a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Logging/LogviewerTests.cs
+++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Logging/LogviewerTests.cs
@@ -48,7 +48,7 @@ public class LogviewerTests
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 f745c06ceb..10d4510902 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.Infrastructure.Scoping;
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 b631e2140f..a9a4d7a91c 100644
--- a/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Security/MemberUserStoreTests.cs
+++ b/tests/Umbraco.Tests.UnitTests/Umbraco.Infrastructure/Security/MemberUserStoreTests.cs
@@ -14,6 +14,7 @@ using Umbraco.Cms.Core.PublishedCache;
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;
@@ -27,23 +28,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(),