mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
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:
@@ -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" />
|
||||
|
@@ -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"));
|
||||
}
|
||||
}
|
||||
}
|
@@ -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" />
|
||||
|
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
@@ -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; }
|
||||
}
|
||||
}
|
@@ -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; }
|
||||
}
|
||||
}
|
@@ -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; }
|
||||
}
|
||||
}
|
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@@ -23,4 +23,6 @@ namespace Orchard.Environment.Topology {
|
||||
IEnumerable<TopologyFeature> enabledFeatures,
|
||||
IEnumerable<TopologyParameter> parameters);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user