Fix unit tests

--HG--
branch : dev
This commit is contained in:
Renaud Paquay
2010-05-21 21:26:07 -07:00
parent fcfc992a59
commit eb138170f8
6 changed files with 61 additions and 90 deletions

View File

@@ -16,7 +16,7 @@ namespace Orchard.Specs.Bindings {
var webApp = Binding<WebAppHosting>(); var webApp = Binding<WebAppHosting>();
webApp.GivenIHaveACleanSiteWith(TableData( webApp.GivenIHaveACleanSiteWith(TableData(
new { extension = "module", names = "Orchard.Setup, Orchard.Modules, Orchard.Themes, Orchard.Users, Orchard.Roles, Orchard.Pages, Orchard.Comments, TinyMce" }, new { extension = "module", names = "Orchard.Setup, Orchard.Modules, Orchard.Themes, Orchard.Users, Orchard.Roles, Orchard.Pages, Orchard.Comments, Orchard.Tags, TinyMce" },
new { extension = "core", names = "Common, Dashboard, Feeds, HomePage, Navigation, Scheduling, Settings, XmlRpc" }, new { extension = "core", names = "Common, Dashboard, Feeds, HomePage, Navigation, Scheduling, Settings, XmlRpc" },
new { extension = "theme", names = "SafeMode, Classic" })); new { extension = "theme", names = "SafeMode, Classic" }));

View File

@@ -1,16 +1,16 @@
using Autofac; using Autofac;
using NHibernate; using NHibernate;
using NUnit.Framework; using NUnit.Framework;
using Orchard.ContentManagement;
using Orchard.ContentManagement.MetaData.Records; using Orchard.ContentManagement.MetaData.Records;
using Orchard.ContentManagement.MetaData.Services; using Orchard.ContentManagement.MetaData.Services;
using Orchard.Data;
using Orchard.ContentManagement;
using Orchard.ContentManagement.Records; using Orchard.ContentManagement.Records;
using Orchard.Data;
namespace Orchard.Tests.ContentManagement{ namespace Orchard.Tests.ContentManagement{
[TestFixture] [TestFixture]
class ContentTypeMetaDataTests public class ContentTypeMetaDataTests
{ {
private IContainer _container; private IContainer _container;
private ISessionFactory _sessionFactory; private ISessionFactory _sessionFactory;
@@ -57,8 +57,6 @@ namespace Orchard.Tests.ContentManagement{
Assert.IsTrue(contentTypeService.ValidateContentTypeToContentPartMapping("foo","bar"),"Content Type not successfully mapped"); Assert.IsTrue(contentTypeService.ValidateContentTypeToContentPartMapping("foo","bar"),"Content Type not successfully mapped");
contentTypeService.UnMapContentTypeToContentPart("foo", "bar"); contentTypeService.UnMapContentTypeToContentPart("foo", "bar");
Assert.IsFalse(contentTypeService.ValidateContentTypeToContentPartMapping("foo", "bar"), "Content Type mapping not successfully deleted"); Assert.IsFalse(contentTypeService.ValidateContentTypeToContentPartMapping("foo", "bar"), "Content Type mapping not successfully deleted");
} }
} }
} }

View File

@@ -56,14 +56,6 @@
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>..\..\lib\fluentnhibernate\FluentNHibernate.dll</HintPath> <HintPath>..\..\lib\fluentnhibernate\FluentNHibernate.dll</HintPath>
</Reference> </Reference>
<Reference Include="Machine.Migrations, Version=1.0.0.0, Culture=neutral, PublicKeyToken=5c474de7a495cff1, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\lib\machine.migrations\Machine.Migrations.dll</HintPath>
</Reference>
<Reference Include="Machine.Migrations.NHibernate, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\lib\machine.migrations\Machine.Migrations.NHibernate.dll</HintPath>
</Reference>
<Reference Include="Moq, Version=4.0.812.4, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL"> <Reference Include="Moq, Version=4.0.812.4, Culture=neutral, PublicKeyToken=69f491c39445e920, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>..\..\lib\moq\Moq.dll</HintPath> <HintPath>..\..\lib\moq\Moq.dll</HintPath>

View File

@@ -1,42 +1,34 @@
using System; using System.Collections.Generic;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text;
using JetBrains.Annotations;
using Orchard.ContentManagement.Handlers; using Orchard.ContentManagement.Handlers;
using Orchard.ContentManagement.MetaData.Records;
using Orchard.ContentManagement.MetaData.Services; using Orchard.ContentManagement.MetaData.Services;
using Orchard.Data;
using Orchard.ContentManagement.Drivers; using Orchard.ContentManagement.Drivers;
using Orchard.ContentManagement.Records;
namespace Orchard.ContentManagement.MetaData namespace Orchard.ContentManagement.MetaData {
{ public class ContentPartHandler : ContentHandler {
[UsedImplicitly] private readonly IEnumerable<IContentPartDriver> _contentPartDrivers;
public class ContentPartHandler : ContentHandler
{
private readonly IEnumerable<ContentPartInfo> _contentPartInfos;
private readonly IContentTypeService _contentTypeService; private readonly IContentTypeService _contentTypeService;
public ContentPartHandler(IEnumerable<IContentPartDriver> contentPartDrivers, IOrchardServices orchardServices, IContentTypeService contentTypeService) { public ContentPartHandler(IEnumerable<IContentPartDriver> contentPartDrivers, IContentTypeService contentTypeService) {
_contentPartDrivers = contentPartDrivers;
_contentTypeService = contentTypeService; _contentTypeService = contentTypeService;
_contentPartInfos = contentPartDrivers.SelectMany<IContentPartDriver, ContentPartInfo>(cpp => cpp.GetPartInfo());
} }
protected override void Activating(ActivatingContentContext context) { protected override void Activating(ActivatingContentContext context) {
var contentTypeRecord = _contentTypeService.GetContentTypeRecord(context.ContentType) ?? new ContentTypeRecord(); var contentTypeRecord = _contentTypeService.GetContentTypeRecord(context.ContentType);
if (contentTypeRecord == null)
return;
if (contentTypeRecord.ContentParts != null){ var contentPartInfos = _contentPartDrivers.SelectMany(cpp => cpp.GetPartInfo()).ToList();
foreach (var contentTypePartRecord in contentTypeRecord.ContentParts){
//var record = contentTypePartRecord;
var contentPart = _contentPartInfos.Single(x => x.PartName == contentTypePartRecord.PartName.PartName).Factory(); foreach (var contentTypePartRecord in contentTypeRecord.ContentParts) {
context.Builder.Weld(contentPart); // We might have a part in the database, but the corresponding feature might not
// be enabled anymore, so we need to be resilient to that situation.
var contentPartInfo = contentPartInfos.SingleOrDefault(x => x.PartName == contentTypePartRecord.PartName.PartName);
if (contentPartInfo != null) {
context.Builder.Weld(contentPartInfo.Factory());
} }
} }
} }
} }
} }

View File

@@ -1,70 +1,69 @@
using System; using System.Collections.Generic;
using System.Linq; using System.Linq;
using Orchard.ContentManagement.MetaData.Records;
using Orchard.Data;
using System.Collections.Generic;
using JetBrains.Annotations; using JetBrains.Annotations;
using Orchard.ContentManagement.MetaData.Records;
using Orchard.ContentManagement.Records; using Orchard.ContentManagement.Records;
using Orchard.Data;
namespace Orchard.ContentManagement.MetaData.Services namespace Orchard.ContentManagement.MetaData.Services {
{
[UsedImplicitly] [UsedImplicitly]
public class ContentTypeService : IContentTypeService public class ContentTypeService : IContentTypeService {
{
private readonly IRepository<ContentTypeRecord> _contentTypeRepository; private readonly IRepository<ContentTypeRecord> _contentTypeRepository;
private readonly IRepository<ContentTypePartNameRecord> _contentTypePartNameRepository; private readonly IRepository<ContentTypePartNameRecord> _contentTypePartNameRepository;
private readonly IRepository<ContentTypePartRecord> _contentTypePartRepository; private readonly IRepository<ContentTypePartRecord> _contentTypePartRepository;
public ContentTypeService(IRepository<ContentTypePartRecord> contentTypePartRepository, IRepository<ContentTypeRecord> contentTypeRepository, IRepository<ContentTypePartNameRecord> contentTypePartNameRepository) public ContentTypeService(IRepository<ContentTypePartRecord> contentTypePartRepository, IRepository<ContentTypeRecord> contentTypeRepository, IRepository<ContentTypePartNameRecord> contentTypePartNameRepository) {
{
_contentTypeRepository = contentTypeRepository; _contentTypeRepository = contentTypeRepository;
_contentTypePartNameRepository = contentTypePartNameRepository; _contentTypePartNameRepository = contentTypePartNameRepository;
_contentTypePartRepository = contentTypePartRepository; _contentTypePartRepository = contentTypePartRepository;
} }
public ContentTypeRecord GetContentTypeRecord(string contentTypeName) {
return _contentTypeRepository.Fetch(x => x.Name == contentTypeName).SingleOrDefault();
}
public ContentTypePartNameRecord GetContentPartNameRecord(string name) { public ContentTypePartNameRecord GetContentPartNameRecord(string name) {
return _contentTypePartNameRepository.Fetch(x => x.PartName == name).Single(); return _contentTypePartNameRepository.Fetch(x => x.PartName == name).SingleOrDefault();
}
public IEnumerable<ContentTypeRecord> GetContentTypes() {
return _contentTypeRepository.Table.ToList();
}
public IEnumerable<ContentTypePartNameRecord> GetContentTypePartNames() {
return _contentTypePartNameRepository.Table.ToList();
} }
public void MapContentTypeToContentPart(string contentType, string contentPart) { public void MapContentTypeToContentPart(string contentType, string contentPart) {
var contentTypeRecord = GetContentTypeRecord(contentType) ?? new ContentTypeRecord(); // Create content type if needed
contentTypeRecord.Name = contentType; var contentTypeRecord = GetContentTypeRecord(contentType);
var contentTypePartNameRecord = if (contentTypeRecord == null) {
_contentTypePartNameRepository.Fetch(x => x.PartName == contentPart).SingleOrDefault(); contentTypeRecord = new ContentTypeRecord { Name = contentType };
if (contentTypePartNameRecord==null) { _contentTypeRepository.Create(contentTypeRecord);
contentTypePartNameRecord=new ContentTypePartNameRecord(){PartName = contentPart};
_contentTypePartNameRepository.Update(contentTypePartNameRecord);
contentTypePartNameRecord =
_contentTypePartNameRepository.Fetch(x => x.PartName == contentPart).SingleOrDefault();
}
var contentTypePartRecord = new ContentTypePartRecord() {
PartName = contentTypePartNameRecord
};
if (contentTypeRecord.ContentParts==null) {
contentTypeRecord.ContentParts = new List<ContentTypePartRecord> { contentTypePartRecord };
}
else {
contentTypeRecord.ContentParts.Add(contentTypePartRecord);
} }
_contentTypeRepository.Update(contentTypeRecord); // Create part name if needed
var contentTypePartNameRecord = GetContentPartNameRecord(contentPart);
if (contentTypePartNameRecord == null) {
contentTypePartNameRecord = new ContentTypePartNameRecord { PartName = contentPart };
_contentTypePartNameRepository.Create(contentTypePartNameRecord);
}
// Add part name to content type
var contentTypePartRecord = new ContentTypePartRecord { PartName = contentTypePartNameRecord };
contentTypeRecord.ContentParts.Add(contentTypePartRecord);
} }
public void UnMapContentTypeToContentPart(string contentType, string contentPart) { public void UnMapContentTypeToContentPart(string contentType, string contentPart) {
var contentTypeRecord = GetContentTypeRecord(contentType) ?? new ContentTypeRecord(); var contentTypeRecord = GetContentTypeRecord(contentType);
var contentTypePartNameRecord = _contentTypePartNameRepository.Fetch(x => x.PartName == contentPart).Single(); var contentTypePartNameRecord = _contentTypePartNameRepository.Fetch(x => x.PartName == contentPart).Single();
var contentTypePartRecord = contentTypeRecord.ContentParts.Single(x => x.PartName == contentTypePartNameRecord);
var contentTypePartRecord = contentTypeRecord.ContentParts.SingleOrDefault(x => x.PartName == contentTypePartNameRecord); contentTypeRecord.ContentParts.Remove(contentTypePartRecord);
if (contentTypePartRecord != null)
{
_contentTypePartRepository.Delete(contentTypePartRecord);
contentTypeRecord.ContentParts.Remove(contentTypePartRecord);
}
} }
public bool ValidateContentTypeToContentPartMapping(string contentType, string contentPart) { public bool ValidateContentTypeToContentPartMapping(string contentType, string contentPart) {
var contentTypeRecord = GetContentTypeRecord(contentType) ?? new ContentTypeRecord(); var contentTypeRecord = GetContentTypeRecord(contentType) ?? new ContentTypeRecord();
if (contentTypeRecord.ContentParts.Count==0) if (contentTypeRecord.ContentParts.Count == 0)
return false; return false;
var contentTypePart = contentTypeRecord.ContentParts.Single(x => x.PartName.PartName == contentPart); var contentTypePart = contentTypeRecord.ContentParts.Single(x => x.PartName.PartName == contentPart);
return contentTypePart != null; return contentTypePart != null;
@@ -78,18 +77,5 @@ namespace Orchard.ContentManagement.MetaData.Services
_contentTypePartNameRepository.Update(contentTypePartNameRecord); _contentTypePartNameRepository.Update(contentTypePartNameRecord);
} }
public ContentTypeRecord GetContentTypeRecord(string contentTypeName) {
return _contentTypeRepository.Fetch(x => x.Name == contentTypeName).SingleOrDefault();
}
public IEnumerable<ContentTypeRecord> GetContentTypes() {
return _contentTypeRepository.Table.ToList();
}
public IEnumerable<ContentTypePartNameRecord> GetContentTypePartNames() {
return _contentTypePartNameRepository.Table.ToList();
}
} }
} }

View File

@@ -4,6 +4,9 @@ using Orchard.Data.Conventions;
namespace Orchard.ContentManagement.Records { namespace Orchard.ContentManagement.Records {
public class ContentTypeRecord { public class ContentTypeRecord {
public ContentTypeRecord() {
ContentParts = new List<ContentTypePartRecord>();
}
public virtual int Id { get; set; } public virtual int Id { get; set; }
public virtual string Name { get; set; } public virtual string Name { get; set; }
[CascadeAllDeleteOrphan] [CascadeAllDeleteOrphan]