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:
loudej
2009-11-10 03:41:01 +00:00
parent fe64cea912
commit f0b46afc84
33 changed files with 975 additions and 41 deletions

View File

@@ -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) {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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