mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
Continued implementation of model infrastructure. Adding orchard security providers. Adding Users package.
--HG-- extra : convert_revision : svn%3A5ff7c347-ad56-4c35-b696-ccb81de16e03/trunk%4039302
This commit is contained in:
@@ -28,7 +28,7 @@ namespace Orchard.Tests {
|
||||
private static void AddAlterations(AutoMappingAlterationCollection alterations, Type[] types) {
|
||||
foreach (var assembly in types.Select(t => t.Assembly).Distinct()) {
|
||||
alterations.Add(new AutoMappingOverrideAlteration(assembly));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static ISessionFactory CreateSessionFactory(params Type[] types) {
|
||||
|
@@ -2,9 +2,12 @@
|
||||
using Autofac;
|
||||
using Autofac.Builder;
|
||||
using Autofac.Modules;
|
||||
using NHibernate;
|
||||
using NUnit.Framework;
|
||||
using Orchard.Data;
|
||||
using Orchard.Models;
|
||||
using Orchard.Models.Driver;
|
||||
using Orchard.Models.Records;
|
||||
using Orchard.Tests.Models.Stubs;
|
||||
|
||||
namespace Orchard.Tests.Models {
|
||||
@@ -12,6 +15,23 @@ namespace Orchard.Tests.Models {
|
||||
public class DefaultModelBuilderTests {
|
||||
private IContainer _container;
|
||||
private IModelManager _manager;
|
||||
private ISessionFactory _sessionFactory;
|
||||
private ISession _session;
|
||||
|
||||
[TestFixtureSetUp]
|
||||
public void InitFixture() {
|
||||
var databaseFileName = System.IO.Path.GetTempFileName();
|
||||
_sessionFactory = DataUtility.CreateSessionFactory(
|
||||
databaseFileName,
|
||||
typeof(ModelRecord),
|
||||
typeof(ModelTypeRecord),
|
||||
typeof(GammaRecord));
|
||||
}
|
||||
|
||||
[TestFixtureTearDown]
|
||||
public void TermFixture() {
|
||||
|
||||
}
|
||||
|
||||
[SetUp]
|
||||
public void Init() {
|
||||
@@ -20,17 +40,35 @@ namespace Orchard.Tests.Models {
|
||||
builder.Register<DefaultModelManager>().As<IModelManager>();
|
||||
builder.Register<AlphaDriver>().As<IModelDriver>();
|
||||
builder.Register<BetaDriver>().As<IModelDriver>();
|
||||
builder.Register<GammaDriver>().As<IModelDriver>();
|
||||
builder.Register<FlavoredDriver>().As<IModelDriver>();
|
||||
builder.Register<StyledDriver>().As<IModelDriver>();
|
||||
|
||||
builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>));
|
||||
|
||||
_session = _sessionFactory.OpenSession();
|
||||
builder.Register(new TestSessionLocator(_session)).As<ISessionLocator>();
|
||||
|
||||
_container = builder.Build();
|
||||
_manager = _container.Resolve<IModelManager>();
|
||||
}
|
||||
|
||||
public class TestSessionLocator : ISessionLocator {
|
||||
private readonly ISession _session;
|
||||
|
||||
public TestSessionLocator(ISession session) {
|
||||
_session = session;
|
||||
}
|
||||
|
||||
public ISession For(Type entityType) {
|
||||
return _session;
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void AlphaDriverShouldWeldItsPart() {
|
||||
var foo = _manager.New("alpha");
|
||||
|
||||
|
||||
Assert.That(foo.Is<Alpha>(), Is.True);
|
||||
Assert.That(foo.As<Alpha>(), Is.Not.Null);
|
||||
Assert.That(foo.Is<Beta>(), Is.False);
|
||||
@@ -46,7 +84,7 @@ namespace Orchard.Tests.Models {
|
||||
|
||||
[Test, ExpectedException(typeof(InvalidCastException))]
|
||||
public void StronglyTypedNewShouldThrowCastExceptionIfNull() {
|
||||
var foo = _manager.New<Beta>("alpha");
|
||||
_manager.New<Beta>("alpha");
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -60,5 +98,59 @@ namespace Orchard.Tests.Models {
|
||||
Assert.That(beta.Is<Styled>(), Is.False);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void GetByIdShouldDetermineTypeAndLoadParts() {
|
||||
var modelRecord = CreateModelRecord("alpha");
|
||||
|
||||
var model = _manager.Get(modelRecord.Id);
|
||||
Assert.That(model.ModelType, Is.EqualTo("alpha"));
|
||||
Assert.That(model.Id, Is.EqualTo(modelRecord.Id));
|
||||
}
|
||||
|
||||
|
||||
[Test]
|
||||
public void ModelPartWithRecordShouldCallRepositoryToPopulate() {
|
||||
|
||||
var modelRecord = CreateModelRecord("gamma");
|
||||
|
||||
var model = _manager.Get(modelRecord.Id);
|
||||
|
||||
// create a gamma record
|
||||
var gamma = new GammaRecord {
|
||||
Model = _container.Resolve<IRepository<ModelRecord>>().Get(model.Id),
|
||||
Frap = "foo"
|
||||
};
|
||||
|
||||
_container.Resolve<IRepository<GammaRecord>>().Create(gamma);
|
||||
_session.Flush();
|
||||
_session.Clear();
|
||||
|
||||
// re-fetch from database
|
||||
model = _manager.Get(modelRecord.Id);
|
||||
|
||||
Assert.That(model.ModelType, Is.EqualTo("gamma"));
|
||||
Assert.That(model.Id, Is.EqualTo(modelRecord.Id));
|
||||
Assert.That(model.Is<Gamma>(), Is.True);
|
||||
Assert.That(model.As<Gamma>().Record, Is.Not.Null);
|
||||
Assert.That(model.As<Gamma>().Record.Model.Id, Is.EqualTo(model.Id));
|
||||
|
||||
}
|
||||
|
||||
|
||||
private ModelRecord CreateModelRecord(string modelType) {
|
||||
var modelRepository = _container.Resolve<IRepository<ModelRecord>>();
|
||||
var modelTypeRepository = _container.Resolve<IRepository<ModelTypeRecord>>();
|
||||
|
||||
var modelRecord = new ModelRecord { ModelType = new ModelTypeRecord { Name = modelType } };
|
||||
modelTypeRepository.Create(modelRecord.ModelType);
|
||||
modelRepository.Create(modelRecord);
|
||||
|
||||
_session.Flush();
|
||||
_session.Clear();
|
||||
return modelRecord;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
@@ -1,7 +1,7 @@
|
||||
using Orchard.Models.Driver;
|
||||
|
||||
namespace Orchard.Tests.Models.Stubs {
|
||||
public class AlphaDriver : ModelDriverBase {
|
||||
public class AlphaDriver : ModelDriver {
|
||||
protected override void New(NewModelContext context) {
|
||||
if (context.ModelType == "alpha") {
|
||||
WeldModelPart<Alpha>(context);
|
||||
|
@@ -5,7 +5,7 @@ using System.Text;
|
||||
using Orchard.Models.Driver;
|
||||
|
||||
namespace Orchard.Tests.Models.Stubs {
|
||||
public class BetaDriver : ModelDriverBase {
|
||||
public class BetaDriver : ModelDriver {
|
||||
protected override void New(NewModelContext context) {
|
||||
if (context.ModelType == "beta") {
|
||||
WeldModelPart<Beta>(context);
|
||||
|
@@ -1,7 +1,7 @@
|
||||
using Orchard.Models.Driver;
|
||||
|
||||
namespace Orchard.Tests.Models.Stubs {
|
||||
public class FlavoredDriver : ModelDriverBase {
|
||||
public class FlavoredDriver : ModelDriver {
|
||||
protected override void New(NewModelContext context) {
|
||||
if (context.ModelType == "beta" || context.ModelType == "alpha") {
|
||||
WeldModelPart<Flavored>(context);
|
||||
|
@@ -1,7 +1,7 @@
|
||||
using Orchard.Models.Driver;
|
||||
|
||||
namespace Orchard.Tests.Models.Stubs {
|
||||
public class StyledDriver : ModelDriverBase {
|
||||
public class StyledDriver : ModelDriver {
|
||||
protected override void New(NewModelContext context) {
|
||||
if (context.ModelType == "alpha") {
|
||||
WeldModelPart<Styled>(context);
|
||||
|
@@ -111,6 +111,7 @@
|
||||
<Compile Include="Models\Stubs\BetaDriver.cs" />
|
||||
<Compile Include="Models\Stubs\Flavored.cs" />
|
||||
<Compile Include="Models\Stubs\FlavoredDriver.cs" />
|
||||
<Compile Include="Models\Stubs\Gamma.cs" />
|
||||
<Compile Include="Models\Stubs\Styled.cs" />
|
||||
<Compile Include="Models\Stubs\StyledDriver.cs" />
|
||||
<Compile Include="Mvc\ModelBinders\KeyedListModelBinderTests.cs" />
|
||||
@@ -130,8 +131,6 @@
|
||||
<Compile Include="Records\Foo.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Stubs\StubHttpContext.cs" />
|
||||
<Compile Include="Utility\ReflectOnTests.cs" />
|
||||
<Compile Include="Utility\ReflectTests.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Orchard\Orchard.csproj">
|
||||
@@ -142,6 +141,9 @@
|
||||
<ItemGroup>
|
||||
<None Include="App.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="Utility\" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
|
Reference in New Issue
Block a user