Roughing in tests around topology descriptor manager

Implementation in settings module intended to live inside shell with access to current irepostory<> orm
Basic tests around serial numbers and initial conditions and update behaviors
Also sets expectations around event raising

--HG--
branch : dev
This commit is contained in:
Louis DeJardin
2010-04-15 02:27:55 -07:00
parent 8508a860cc
commit a1c639bd0f
9 changed files with 213 additions and 19 deletions

View File

@@ -86,6 +86,7 @@
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Roles\Controllers\AdminControllerTests.cs" />
<Compile Include="Roles\Services\RoleServiceTests.cs" />
<Compile Include="Settings\Topology\TopologyDescriptorManagerTests.cs" />
<Compile Include="Setup\SetupControllerTests.cs" />
<Compile Include="Values.cs" />
<Compile Include="Users\Controllers\AdminControllerTests.cs" />

View File

@@ -0,0 +1,144 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autofac;
using NUnit.Framework;
using Orchard.Core.Settings.Topology;
using Orchard.Core.Settings.Topology.Records;
using Orchard.Environment.Topology;
using Orchard.Environment.Topology.Models;
using Orchard.Events;
namespace Orchard.Tests.Modules.Settings.Topology {
[TestFixture]
public class TopologyDescriptorManagerTests : DatabaseEnabledTestsBase {
public override void Register(ContainerBuilder builder) {
builder.RegisterType<TopologyDescriptorManager>().As<ITopologyDescriptorManager>();
builder.RegisterType<StubEventBus>().As<IEventBus>().SingleInstance();
}
public class StubEventBus : IEventBus {
public string LastMessageName { get; set; }
public IDictionary<string, string> LastEventData { get; set; }
public void Notify(string messageName, IDictionary<string, string> eventData) {
LastMessageName = messageName;
LastEventData = eventData;
}
}
protected override IEnumerable<Type> DatabaseTypes {
get {
return new[] {
typeof (TopologyRecord),
typeof (TopologyFeatureRecord),
typeof (TopologyParameterRecord),
};
}
}
[Test]
public void TopologyShouldBeNullWhenItsNotInitialized() {
var manager = _container.Resolve<ITopologyDescriptorManager>();
var topology = manager.GetTopologyDescriptor();
Assert.That(topology, Is.Null);
}
[Test]
public void PriorSerialNumberOfZeroIsAcceptableForInitialUpdateAndSerialNumberIsNonzeroAfterwards() {
var manager = _container.Resolve<ITopologyDescriptorManager>();
manager.UpdateTopologyDescriptor(
0,
Enumerable.Empty<TopologyFeature>(),
Enumerable.Empty<TopologyParameter>());
var topology = manager.GetTopologyDescriptor();
Assert.That(topology, Is.Not.Null);
Assert.That(topology.SerialNumber, Is.Not.EqualTo(0));
}
[Test]
public void NonZeroInitialUpdateThrowsException() {
var manager = _container.Resolve<ITopologyDescriptorManager>();
Assert.Throws<Exception>(() => manager.UpdateTopologyDescriptor(
1,
Enumerable.Empty<TopologyFeature>(),
Enumerable.Empty<TopologyParameter>()));
}
[Test]
public void OnlyCorrectSerialNumberOnLaterUpdatesDoesNotThrowException() {
var manager = _container.Resolve<ITopologyDescriptorManager>();
manager.UpdateTopologyDescriptor(
0,
Enumerable.Empty<TopologyFeature>(),
Enumerable.Empty<TopologyParameter>());
var topology = manager.GetTopologyDescriptor();
Assert.That(topology.SerialNumber, Is.Not.EqualTo(0));
Assert.Throws<Exception>(() => manager.UpdateTopologyDescriptor(
0,
Enumerable.Empty<TopologyFeature>(),
Enumerable.Empty<TopologyParameter>()));
Assert.Throws<Exception>(() => manager.UpdateTopologyDescriptor(
topology.SerialNumber + 665321,
Enumerable.Empty<TopologyFeature>(),
Enumerable.Empty<TopologyParameter>()));
manager.UpdateTopologyDescriptor(
topology.SerialNumber,
Enumerable.Empty<TopologyFeature>(),
Enumerable.Empty<TopologyParameter>());
var topology2 = manager.GetTopologyDescriptor();
Assert.That(topology2.SerialNumber, Is.Not.EqualTo(0));
Assert.That(topology2.SerialNumber, Is.Not.EqualTo(topology.SerialNumber));
Assert.Throws<Exception>(() => manager.UpdateTopologyDescriptor(
0,
Enumerable.Empty<TopologyFeature>(),
Enumerable.Empty<TopologyParameter>()));
Assert.Throws<Exception>(() => manager.UpdateTopologyDescriptor(
topology.SerialNumber,
Enumerable.Empty<TopologyFeature>(),
Enumerable.Empty<TopologyParameter>()));
manager.UpdateTopologyDescriptor(
topology2.SerialNumber,
Enumerable.Empty<TopologyFeature>(),
Enumerable.Empty<TopologyParameter>());
Assert.Throws<Exception>(() => manager.UpdateTopologyDescriptor(
topology2.SerialNumber,
Enumerable.Empty<TopologyFeature>(),
Enumerable.Empty<TopologyParameter>()));
}
[Test]
public void SuccessfulUpdateRaisesAnEvent() {
var manager = _container.Resolve<ITopologyDescriptorManager>();
var eventBus = _container.Resolve<IEventBus>() as StubEventBus;
Assert.That(eventBus.LastMessageName, Is.Null);
Assert.Throws<Exception>(() => manager.UpdateTopologyDescriptor(
5,
Enumerable.Empty<TopologyFeature>(),
Enumerable.Empty<TopologyParameter>()));
Assert.That(eventBus.LastMessageName, Is.Null);
manager.UpdateTopologyDescriptor(
0,
Enumerable.Empty<TopologyFeature>(),
Enumerable.Empty<TopologyParameter>());
Assert.That(eventBus.LastMessageName, Is.EqualTo(typeof(ITopologyDescriptorManager).FullName + ".UpdateTopologyDescriptor"));
}
}
}

View File

@@ -124,7 +124,10 @@
<Compile Include="Settings\Drivers\SiteSettingsDriver.cs" />
<Compile Include="Settings\Models\SiteSettingsRecord.cs" />
<Compile Include="Settings\Permissions.cs" />
<Compile Include="Settings\Services\TopologyDescriptorManager.cs" />
<Compile Include="Settings\Topology\Records\TopologyFeatureRecord.cs" />
<Compile Include="Settings\Topology\Records\TopologyParameterRecord.cs" />
<Compile Include="Settings\Topology\Records\TopologyRecord.cs" />
<Compile Include="Settings\Topology\TopologyDescriptorManager.cs" />
<Compile Include="Themes\DesignerNotes\ZoneManagerEvents.cs" />
<Compile Include="Themes\Preview\IPreviewTheme.cs" />
<Compile Include="Themes\Preview\PreviewThemeFilter.cs" />

View File

@@ -1,18 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Orchard.Environment.Topology;
using Orchard.Environment.Topology.Models;
namespace Orchard.Core.Settings.Services {
public class TopologyDescriptorManager : ITopologyDescriptorManager {
public ShellTopologyDescriptor GetTopologyDescriptor() {
throw new NotImplementedException();
}
public void UpdateTopologyDescriptor(int priorSerialNumber, IEnumerable<TopologyFeature> enabledFeatures, IEnumerable<TopologyParameter> parameters) {
throw new NotImplementedException();
}
}
}

View File

@@ -0,0 +1,7 @@
namespace Orchard.Core.Settings.Topology.Records {
public class TopologyFeatureRecord {
public virtual int Id { get; set; }
public virtual TopologyRecord TopologyRecord { get; set; }
public virtual string Name { get; set; }
}
}

View File

@@ -0,0 +1,9 @@
namespace Orchard.Core.Settings.Topology.Records {
public class TopologyParameterRecord {
public virtual int Id { get; set; }
public virtual TopologyRecord TopologyRecord { get; set; }
public virtual string Component { get; set; }
public virtual string Name { get; set; }
public virtual string Value { get; set; }
}
}

View File

@@ -0,0 +1,10 @@
using System.Collections.Generic;
namespace Orchard.Core.Settings.Topology.Records {
public class TopologyRecord {
public virtual int Id { get; set; }
public virtual int SerialNumber { get; set; }
public virtual IList<TopologyFeatureRecord> EnabledFeatures { get; set; }
public virtual IList<TopologyParameterRecord> Parameters { get; set; }
}
}

View File

@@ -0,0 +1,36 @@
using System;
using System.Collections.Generic;
using Orchard.Core.Settings.Topology.Records;
using Orchard.Data;
using Orchard.Environment.Topology;
using Orchard.Environment.Topology.Models;
using Orchard.Events;
namespace Orchard.Core.Settings.Topology {
public class TopologyDescriptorManager : ITopologyDescriptorManager {
private readonly IRepository<TopologyRecord> _repository;
private readonly IEventBus _eventBus;
private int _serialNumber;
public TopologyDescriptorManager(
IRepository<TopologyRecord> repository,
IEventBus eventBus) {
_repository = repository;
_eventBus = eventBus;
}
public ShellTopologyDescriptor GetTopologyDescriptor() {
return _serialNumber == 0 ? null : new ShellTopologyDescriptor { SerialNumber = _serialNumber };
}
public void UpdateTopologyDescriptor(int priorSerialNumber, IEnumerable<TopologyFeature> enabledFeatures, IEnumerable<TopologyParameter> parameters) {
if (priorSerialNumber != _serialNumber)
throw new Exception();
++_serialNumber;
_eventBus.Notify(
typeof(ITopologyDescriptorManager).FullName + ".UpdateTopologyDescriptor",
null);
}
}
}

View File

@@ -23,4 +23,6 @@ namespace Orchard.Environment.Topology {
IEnumerable<TopologyFeature> enabledFeatures,
IEnumerable<TopologyParameter> parameters);
}
}