Fixing tests - and all sorts of issues

This commit is contained in:
Stephan
2017-06-23 18:54:42 +02:00
parent 08ce8bc4dc
commit e87be7ad9d
57 changed files with 585 additions and 265 deletions

View File

@@ -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++; };

View File

@@ -27,6 +27,7 @@ namespace Umbraco.Tests.Scoping
{
base.TearDown();
SafeCallContext.Clear();
ShadowFileSystems.ResetId();
ClearFiles();
}

View File

@@ -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();
}
}
}
}

View File

@@ -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;