Fixing tests - and all sorts of issues
This commit is contained in:
@@ -1,22 +1,25 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using LightInject;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using Umbraco.Core.Events;
|
||||
using Umbraco.Core.Models;
|
||||
using Umbraco.Core.IO;
|
||||
using Umbraco.Core.Logging;
|
||||
using Umbraco.Core.Persistence;
|
||||
using Umbraco.Core.Scoping;
|
||||
using Umbraco.Tests.TestHelpers;
|
||||
using Umbraco.Tests.TestHelpers.Entities;
|
||||
using Umbraco.Core.Composing;
|
||||
using Umbraco.Core.Persistence.Mappers;
|
||||
|
||||
namespace Umbraco.Tests.Scoping
|
||||
{
|
||||
[TestFixture]
|
||||
public class ScopeEventDispatcherTests //: BaseUmbracoConfigurationTest
|
||||
{
|
||||
private TestObjects _testObjects;
|
||||
|
||||
[SetUp]
|
||||
public void Setup()
|
||||
{
|
||||
@@ -24,6 +27,23 @@ namespace Umbraco.Tests.Scoping
|
||||
DoThing1 = null;
|
||||
DoThing2 = null;
|
||||
DoThing3 = null;
|
||||
|
||||
Current.Container = new ServiceContainer();
|
||||
|
||||
_testObjects = new TestObjects(Current.Container);
|
||||
Current.Container.RegisterSingleton(f => Current.Container);
|
||||
Current.Container.RegisterSingleton(factory => new FileSystems(factory.TryGetInstance<ILogger>()));
|
||||
Current.Container.RegisterCollectionBuilder<MapperCollectionBuilder>();
|
||||
|
||||
SettingsForTests.Reset(); // ensure we have configuration
|
||||
}
|
||||
|
||||
[TearDown]
|
||||
public void TearDown()
|
||||
{
|
||||
Current.Reset();
|
||||
|
||||
SettingsForTests.Reset();
|
||||
}
|
||||
|
||||
[TestCase(false, true, true)]
|
||||
@@ -42,7 +62,7 @@ namespace Umbraco.Tests.Scoping
|
||||
DoThing1 += (sender, args) => { counter1++; if (cancel) args.Cancel = true; };
|
||||
DoThing2 += (sender, args) => { counter2++; };
|
||||
|
||||
var scopeProvider = new ScopeProvider(Mock.Of<IUmbracoDatabaseFactory>(), Mock.Of<FileSystems>(), Mock.Of<ILogger>());
|
||||
var scopeProvider = _testObjects.GetScopeProvider(Mock.Of<ILogger>());
|
||||
using (var scope = scopeProvider.CreateScope(eventDispatcher: passive ? new PassiveEventDispatcher() : null))
|
||||
{
|
||||
var cancelled = scope.Events.DispatchCancelable(DoThing1, this, new SaveEventArgs<string>("test"));
|
||||
@@ -71,7 +91,7 @@ namespace Umbraco.Tests.Scoping
|
||||
DoThing2 += OnDoThingFail;
|
||||
DoThing3 += OnDoThingFail;
|
||||
|
||||
var scopeProvider = new ScopeProvider(Mock.Of<IUmbracoDatabaseFactory>(), Mock.Of<FileSystems>(), Mock.Of<ILogger>());
|
||||
var scopeProvider = _testObjects.GetScopeProvider(Mock.Of<ILogger>());
|
||||
using (var scope = scopeProvider.CreateScope(eventDispatcher: new PassiveEventDispatcher()))
|
||||
{
|
||||
scope.Events.Dispatch(DoThing1, this, new SaveEventArgs<string>("test"));
|
||||
@@ -101,7 +121,7 @@ namespace Umbraco.Tests.Scoping
|
||||
DoDeleteForContent += OnDoThingFail;
|
||||
DoForTestArgs += OnDoThingFail;
|
||||
DoForTestArgs2 += OnDoThingFail;
|
||||
|
||||
|
||||
var contentType = MockedContentTypes.CreateBasicContentType();
|
||||
|
||||
var content1 = MockedContent.CreateBasicContent(contentType);
|
||||
@@ -113,10 +133,10 @@ namespace Umbraco.Tests.Scoping
|
||||
var content3 = MockedContent.CreateBasicContent(contentType);
|
||||
content3.Id = 789;
|
||||
|
||||
var scopeProvider = new ScopeProvider(Mock.Of<IUmbracoDatabaseFactory>(), Mock.Of<FileSystems>(), Mock.Of<ILogger>());
|
||||
var scopeProvider = _testObjects.GetScopeProvider(Mock.Of<ILogger>());
|
||||
using (var scope = scopeProvider.CreateScope(eventDispatcher: new PassiveEventDispatcher()))
|
||||
{
|
||||
|
||||
|
||||
//content1 will be filtered from the args
|
||||
scope.Events.Dispatch(DoSaveForContent, this, new SaveEventArgs<IContent>(new[]{ content1 , content3}));
|
||||
scope.Events.Dispatch(DoDeleteForContent, this, new DeleteEventArgs<IContent>(content1));
|
||||
@@ -145,13 +165,13 @@ namespace Umbraco.Tests.Scoping
|
||||
|
||||
/// <summary>
|
||||
/// This will test that when we track events that before we Get the events we normalize all of the
|
||||
/// event entities to be the latest one (most current) found amongst the event so that there is
|
||||
/// event entities to be the latest one (most current) found amongst the event so that there is
|
||||
/// no 'stale' entities in any of the args
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void LatestEntities()
|
||||
{
|
||||
DoSaveForContent += OnDoThingFail;
|
||||
DoSaveForContent += OnDoThingFail;
|
||||
|
||||
var now = DateTime.Now;
|
||||
var contentType = MockedContentTypes.CreateBasicContentType();
|
||||
@@ -165,9 +185,9 @@ namespace Umbraco.Tests.Scoping
|
||||
content3.Id = 123;
|
||||
content3.UpdateDate = now.AddMinutes(3);
|
||||
|
||||
var scopeProvider = new ScopeProvider(Mock.Of<IUmbracoDatabaseFactory>(), Mock.Of<FileSystems>(), Mock.Of<ILogger>());
|
||||
var scopeProvider = _testObjects.GetScopeProvider(Mock.Of<ILogger>());
|
||||
using (var scope = scopeProvider.CreateScope(eventDispatcher: new PassiveEventDispatcher()))
|
||||
{
|
||||
{
|
||||
scope.Events.Dispatch(DoSaveForContent, this, new SaveEventArgs<IContent>(content1));
|
||||
scope.Events.Dispatch(DoSaveForContent, this, new SaveEventArgs<IContent>(content2));
|
||||
scope.Events.Dispatch(DoSaveForContent, this, new SaveEventArgs<IContent>(content3));
|
||||
@@ -175,7 +195,7 @@ namespace Umbraco.Tests.Scoping
|
||||
// events have been queued
|
||||
var events = scope.Events.GetEvents(EventDefinitionFilter.All).ToArray();
|
||||
Assert.AreEqual(3, events.Length);
|
||||
|
||||
|
||||
foreach (var t in events)
|
||||
{
|
||||
var args = (SaveEventArgs<IContent>)t.Args;
|
||||
@@ -205,7 +225,7 @@ namespace Umbraco.Tests.Scoping
|
||||
content3.Id = 123;
|
||||
content1.UpdateDate = now.AddMinutes(3);
|
||||
|
||||
var scopeProvider = new ScopeProvider(Mock.Of<IUmbracoDatabaseFactory>(), Mock.Of<FileSystems>(), Mock.Of<ILogger>());
|
||||
var scopeProvider = _testObjects.GetScopeProvider(Mock.Of<ILogger>());
|
||||
using (var scope = scopeProvider.CreateScope(eventDispatcher: new PassiveEventDispatcher()))
|
||||
{
|
||||
scope.Events.Dispatch(DoSaveForContent, this, new SaveEventArgs<IContent>(content1));
|
||||
@@ -214,7 +234,7 @@ namespace Umbraco.Tests.Scoping
|
||||
|
||||
// events have been queued
|
||||
var events = scope.Events.GetEvents(EventDefinitionFilter.FirstIn).ToArray();
|
||||
Assert.AreEqual(1, events.Length);
|
||||
Assert.AreEqual(1, events.Length);
|
||||
Assert.AreEqual(content1, ((SaveEventArgs<IContent>) events[0].Args).SavedEntities.First());
|
||||
Assert.IsTrue(object.ReferenceEquals(content1, ((SaveEventArgs<IContent>)events[0].Args).SavedEntities.First()));
|
||||
Assert.AreEqual(content1.UpdateDate, ((SaveEventArgs<IContent>) events[0].Args).SavedEntities.First().UpdateDate);
|
||||
@@ -238,7 +258,7 @@ namespace Umbraco.Tests.Scoping
|
||||
content3.Id = 123;
|
||||
content3.UpdateDate = now.AddMinutes(3);
|
||||
|
||||
var scopeProvider = new ScopeProvider(Mock.Of<IUmbracoDatabaseFactory>(), Mock.Of<FileSystems>(), Mock.Of<ILogger>());
|
||||
var scopeProvider = _testObjects.GetScopeProvider(Mock.Of<ILogger>());
|
||||
using (var scope = scopeProvider.CreateScope(eventDispatcher: new PassiveEventDispatcher()))
|
||||
{
|
||||
scope.Events.Dispatch(DoSaveForContent, this, new SaveEventArgs<IContent>(content1));
|
||||
@@ -262,7 +282,7 @@ namespace Umbraco.Tests.Scoping
|
||||
DoThing2 += OnDoThingFail;
|
||||
DoThing3 += OnDoThingFail;
|
||||
|
||||
var scopeProvider = new ScopeProvider(Mock.Of<IUmbracoDatabaseFactory>(), Mock.Of<FileSystems>(), Mock.Of<ILogger>());
|
||||
var scopeProvider = _testObjects.GetScopeProvider(Mock.Of<ILogger>());
|
||||
using (var scope = scopeProvider.CreateScope(eventDispatcher: new PassiveEventDispatcher()))
|
||||
{
|
||||
scope.Events.Dispatch(DoThing1, this, new SaveEventArgs<string>("test"));
|
||||
@@ -288,7 +308,7 @@ namespace Umbraco.Tests.Scoping
|
||||
ScopeContext ambientContext = null;
|
||||
Guid value = Guid.Empty;
|
||||
|
||||
var scopeProvider = new ScopeProvider(Mock.Of<IUmbracoDatabaseFactory>(), Mock.Of<FileSystems>(), Mock.Of<ILogger>());
|
||||
var scopeProvider = _testObjects.GetScopeProvider(Mock.Of<ILogger>()) as ScopeProvider;
|
||||
|
||||
DoThing1 += (sender, args) => { counter++; };
|
||||
DoThing2 += (sender, args) => { counter++; };
|
||||
|
||||
@@ -27,6 +27,7 @@ namespace Umbraco.Tests.Scoping
|
||||
{
|
||||
base.TearDown();
|
||||
SafeCallContext.Clear();
|
||||
ShadowFileSystems.ResetId();
|
||||
ClearFiles();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using NUnit.Framework;
|
||||
using Umbraco.Core.Cache;
|
||||
using Umbraco.Core.Composing;
|
||||
using Umbraco.Core.Models;
|
||||
using Umbraco.Core.Models.Membership;
|
||||
@@ -8,6 +10,10 @@ using Umbraco.Core.Scoping;
|
||||
using Umbraco.Tests.TestHelpers;
|
||||
using Umbraco.Tests.Testing;
|
||||
using Umbraco.Web.Cache;
|
||||
using LightInject;
|
||||
using Moq;
|
||||
using Umbraco.Core.Events;
|
||||
using Umbraco.Core.Sync;
|
||||
|
||||
namespace Umbraco.Tests.Scoping
|
||||
{
|
||||
@@ -17,6 +23,32 @@ namespace Umbraco.Tests.Scoping
|
||||
{
|
||||
private CacheRefresherComponent _cacheRefresher;
|
||||
|
||||
protected override void Compose()
|
||||
{
|
||||
base.Compose();
|
||||
|
||||
// the cache refresher component needs to trigger to refresh caches
|
||||
// but then, it requires a lot of plumbing ;(
|
||||
// fixme - and we cannot inject a DistributedCache yet
|
||||
// so doing all this mess
|
||||
Container.RegisterSingleton<IServerMessenger, LocalServerMessenger>();
|
||||
Container.RegisterSingleton(f => Mock.Of<IServerRegistrar>());
|
||||
Container.RegisterCollectionBuilder<CacheRefresherCollectionBuilder>()
|
||||
.Add(f => f.TryGetInstance<TypeLoader>().GetCacheRefreshers());
|
||||
}
|
||||
|
||||
protected override void ComposeCacheHelper()
|
||||
{
|
||||
// this is what's created core web runtime
|
||||
var cacheHelper = new CacheHelper(
|
||||
new DeepCloneRuntimeCacheProvider(new ObjectCacheRuntimeCacheProvider()),
|
||||
new StaticCacheProvider(),
|
||||
new NullCacheProvider(),
|
||||
new IsolatedRuntimeCache(type => new DeepCloneRuntimeCacheProvider(new ObjectCacheRuntimeCacheProvider())));
|
||||
Container.RegisterSingleton(f => cacheHelper);
|
||||
Container.RegisterSingleton(f => f.GetInstance<CacheHelper>().RuntimeCache);
|
||||
}
|
||||
|
||||
[TearDown]
|
||||
public void Teardown()
|
||||
{
|
||||
@@ -42,13 +74,16 @@ namespace Umbraco.Tests.Scoping
|
||||
Assert.AreEqual(user.Id, globalCached.Id);
|
||||
Assert.AreEqual("name", globalCached.Name);
|
||||
|
||||
// get user again - else we'd modify the one that's in the cache
|
||||
user = service.GetUserById(user.Id);
|
||||
|
||||
_cacheRefresher = new CacheRefresherComponent(true);
|
||||
_cacheRefresher.Initialize();
|
||||
|
||||
Assert.IsNull(scopeProvider.AmbientScope);
|
||||
using (var scope = scopeProvider.CreateScope(repositoryCacheMode: RepositoryCacheMode.Scoped))
|
||||
{
|
||||
Assert.IsInstanceOf<Scope>(scope);
|
||||
Assert.IsInstanceOf<Core.Scoping.Scope>(scope);
|
||||
Assert.IsNotNull(scopeProvider.AmbientScope);
|
||||
Assert.AreSame(scope, scopeProvider.AmbientScope);
|
||||
|
||||
@@ -76,7 +111,7 @@ namespace Umbraco.Tests.Scoping
|
||||
}
|
||||
Assert.IsNull(scopeProvider.AmbientScope);
|
||||
|
||||
globalCached = (IUser)globalCache.GetCacheItem(GetCacheIdKey<IUser>(user.Id), () => null);
|
||||
globalCached = (IUser) globalCache.GetCacheItem(GetCacheIdKey<IUser>(user.Id), () => null);
|
||||
if (complete)
|
||||
{
|
||||
// global cache has been cleared
|
||||
@@ -129,7 +164,7 @@ namespace Umbraco.Tests.Scoping
|
||||
Assert.IsNull(scopeProvider.AmbientScope);
|
||||
using (var scope = scopeProvider.CreateScope(repositoryCacheMode: RepositoryCacheMode.Scoped))
|
||||
{
|
||||
Assert.IsInstanceOf<Scope>(scope);
|
||||
Assert.IsInstanceOf<Core.Scoping.Scope>(scope);
|
||||
Assert.IsNotNull(scopeProvider.AmbientScope);
|
||||
Assert.AreSame(scope, scopeProvider.AmbientScope);
|
||||
|
||||
@@ -221,7 +256,7 @@ namespace Umbraco.Tests.Scoping
|
||||
Assert.IsNull(scopeProvider.AmbientScope);
|
||||
using (var scope = scopeProvider.CreateScope(repositoryCacheMode: RepositoryCacheMode.Scoped))
|
||||
{
|
||||
Assert.IsInstanceOf<Scope>(scope);
|
||||
Assert.IsInstanceOf<Core.Scoping.Scope>(scope);
|
||||
Assert.IsNotNull(scopeProvider.AmbientScope);
|
||||
Assert.AreSame(scope, scopeProvider.AmbientScope);
|
||||
|
||||
@@ -281,5 +316,29 @@ namespace Umbraco.Tests.Scoping
|
||||
{
|
||||
return $"uRepo_{typeof (T).Name}_";
|
||||
}
|
||||
|
||||
public class PassiveEventDispatcher : QueuingEventDispatcherBase
|
||||
{
|
||||
public PassiveEventDispatcher()
|
||||
: base(false)
|
||||
{ }
|
||||
|
||||
protected override void ScopeExitCompleted()
|
||||
{
|
||||
// do nothing
|
||||
}
|
||||
}
|
||||
|
||||
public class LocalServerMessenger : ServerMessengerBase
|
||||
{
|
||||
public LocalServerMessenger()
|
||||
: base(false)
|
||||
{ }
|
||||
|
||||
protected override void DeliverRemote(IEnumerable<IServerAddress> servers, ICacheRefresher refresher, MessageType messageType, IEnumerable<object> ids = null, string json = null)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ namespace Umbraco.Tests.Scoping
|
||||
// need to rewrite these tests entirely using the XmlStore and such
|
||||
// need to create an equivalent test for NuCache once we understand it
|
||||
|
||||
Assert.Fail("oops");
|
||||
Assert.Fail("need to rewrite these tests entirely for XmlStore");
|
||||
}
|
||||
|
||||
//private CacheRefresherComponent _cacheRefresher;
|
||||
|
||||
Reference in New Issue
Block a user