mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
Refactoring ModelDriver to favor composition over inheritance. Introduces idea of IModelFilter.
--HG-- extra : convert_revision : svn%3A5ff7c347-ad56-4c35-b696-ccb81de16e03/trunk%4041298
This commit is contained in:
48
src/Orchard.Tests/Models/Drivers/ModelDriverTests.cs
Normal file
48
src/Orchard.Tests/Models/Drivers/ModelDriverTests.cs
Normal file
@@ -0,0 +1,48 @@
|
||||
using NUnit.Framework;
|
||||
using Orchard.Models;
|
||||
using Orchard.Models.Driver;
|
||||
|
||||
namespace Orchard.Tests.Models.Drivers {
|
||||
|
||||
[TestFixture]
|
||||
public class ModelDriverTests {
|
||||
[Test]
|
||||
public void ModelDriverShouldUsePersistenceFilterToDelegateCreateAndLoad() {
|
||||
var modelDriver = new TestModelDriver();
|
||||
|
||||
var part = new TestModelPart();
|
||||
((IModelDriver)modelDriver).Creating(new CreateModelContext { Instance = part });
|
||||
Assert.That(part.CreatingCalled, Is.True);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void PartShouldBeAddedBasedOnSimplePredicate() {
|
||||
var modelDriver = new TestModelDriver();
|
||||
|
||||
var builder = new ModelBuilder("testing");
|
||||
((IModelDriver)modelDriver).Activating(new ActivatingModelContext { Builder = builder, ModelType = "testing" });
|
||||
var model = builder.Build();
|
||||
Assert.That(model.Is<TestModelPart>(), Is.True);
|
||||
Assert.That(model.As<TestModelPart>(), Is.Not.Null);
|
||||
}
|
||||
|
||||
public class TestModelPart : ModelPart {
|
||||
public bool CreatingCalled { get; set; }
|
||||
}
|
||||
|
||||
|
||||
public class TestModelDriver : ModelDriver {
|
||||
public TestModelDriver() {
|
||||
Filters.Add(new ActivatingFilter<TestModelPart>(x => x == "testing"));
|
||||
Filters.Add(new TestModelStorageFilter());
|
||||
}
|
||||
}
|
||||
|
||||
public class TestModelStorageFilter : StorageFilterBase<TestModelPart> {
|
||||
protected override void Creating(CreateModelContext context, TestModelPart instance) {
|
||||
instance.CreatingCalled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -2,7 +2,7 @@
|
||||
|
||||
namespace Orchard.Tests.Models.Stubs {
|
||||
public class AlphaDriver : ModelDriver {
|
||||
protected override void New(NewModelContext context) {
|
||||
protected override void Activating(ActivatingModelContext context) {
|
||||
if (context.ModelType == "alpha") {
|
||||
context.Builder.Weld<Alpha>();
|
||||
}
|
||||
|
@@ -6,7 +6,7 @@ using Orchard.Models.Driver;
|
||||
|
||||
namespace Orchard.Tests.Models.Stubs {
|
||||
public class BetaDriver : ModelDriver {
|
||||
protected override void New(NewModelContext context) {
|
||||
protected override void Activating(ActivatingModelContext context) {
|
||||
if (context.ModelType == "beta") {
|
||||
context.Builder.Weld<Beta>();
|
||||
}
|
||||
|
@@ -2,7 +2,7 @@
|
||||
|
||||
namespace Orchard.Tests.Models.Stubs {
|
||||
public class FlavoredDriver : ModelDriver {
|
||||
protected override void New(NewModelContext context) {
|
||||
protected override void Activating(ActivatingModelContext context) {
|
||||
if (context.ModelType == "beta" || context.ModelType == "alpha") {
|
||||
context.Builder.Weld<Flavored>();
|
||||
}
|
||||
|
@@ -1,7 +1,4 @@
|
||||
using System;
|
||||
using FluentNHibernate.Automapping;
|
||||
using FluentNHibernate.Automapping.Alterations;
|
||||
using Orchard.Data;
|
||||
using Orchard.Data;
|
||||
using Orchard.Models;
|
||||
using Orchard.Models.Driver;
|
||||
using Orchard.Models.Records;
|
||||
@@ -15,15 +12,10 @@ namespace Orchard.Tests.Models.Stubs {
|
||||
}
|
||||
|
||||
|
||||
public class GammaDriver : ModelDriverWithRecord<GammaRecord> {
|
||||
public GammaDriver(IRepository<GammaRecord> repository)
|
||||
: base(repository) {
|
||||
}
|
||||
|
||||
protected override void New(NewModelContext context) {
|
||||
if (context.ModelType == "gamma") {
|
||||
context.Builder.Weld<Gamma>();
|
||||
}
|
||||
public class GammaDriver : ModelDriver {
|
||||
public GammaDriver(IRepository<GammaRecord> repository){
|
||||
Filters.Add(new ActivatingFilter<Gamma>(x => x == "gamma"));
|
||||
Filters.Add(new StorageFilterForRecord<GammaRecord>(repository));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -2,7 +2,7 @@
|
||||
|
||||
namespace Orchard.Tests.Models.Stubs {
|
||||
public class StyledDriver : ModelDriver {
|
||||
protected override void New(NewModelContext context) {
|
||||
protected override void Activating(ActivatingModelContext context) {
|
||||
if (context.ModelType == "alpha") {
|
||||
context.Builder.Weld<Styled>();
|
||||
}
|
||||
|
@@ -107,6 +107,7 @@
|
||||
<Compile Include="Logging\LoggingModuleTests.cs" />
|
||||
<Compile Include="Models\DefaultModelManagerTests.cs" />
|
||||
<Compile Include="Models\Drivers\ModelBuilderTests.cs" />
|
||||
<Compile Include="Models\Drivers\ModelDriverTests.cs" />
|
||||
<Compile Include="Models\Stubs\Alpha.cs" />
|
||||
<Compile Include="Models\Stubs\AlphaDriver.cs" />
|
||||
<Compile Include="Models\Stubs\Beta.cs" />
|
||||
|
Reference in New Issue
Block a user