Starting implementation of the UserRepository.

Fixing unit tests.
This commit is contained in:
Morten Christensen
2012-11-09 14:45:28 -01:00
parent fadac469e9
commit e3d5fa766d
24 changed files with 220 additions and 82 deletions

View File

@@ -45,7 +45,7 @@ namespace Umbraco.Core.Models
private static readonly PropertyInfo SortOrderSelector = ExpressionHelper.GetPropertyInfo<ContentBase, int>(x => x.SortOrder);
private static readonly PropertyInfo LevelSelector = ExpressionHelper.GetPropertyInfo<ContentBase, int>(x => x.Level);
private static readonly PropertyInfo PathSelector = ExpressionHelper.GetPropertyInfo<ContentBase, string>(x => x.Path);
private static readonly PropertyInfo UserSelector = ExpressionHelper.GetPropertyInfo<ContentBase, IProfile>(x => x.Creator);
private static readonly PropertyInfo CreatorSelector = ExpressionHelper.GetPropertyInfo<ContentBase, IProfile>(x => x.Creator);
private static readonly PropertyInfo TrashedSelector = ExpressionHelper.GetPropertyInfo<ContentBase, bool>(x => x.Trashed);
private static readonly PropertyInfo DefaultContentTypeIdSelector = ExpressionHelper.GetPropertyInfo<ContentBase, int>(x => x.ContentTypeId);
private readonly static PropertyInfo PropertyCollectionSelector = ExpressionHelper.GetPropertyInfo<ContentBase, PropertyCollection>(x => x.Properties);
@@ -137,7 +137,7 @@ namespace Umbraco.Core.Models
}
/// <summary>
/// IProfile of the user who created this Content
/// Profile of the user who created this Content
/// </summary>
[DataMember]
public virtual IProfile Creator
@@ -146,7 +146,7 @@ namespace Umbraco.Core.Models
set
{
_creator = value;
OnPropertyChanged(UserSelector);
OnPropertyChanged(CreatorSelector);
}
}

View File

@@ -4,6 +4,7 @@ using System.Linq;
using System.Reflection;
using System.Runtime.Serialization;
using Umbraco.Core.Models.EntityBase;
using Umbraco.Core.Models.Membership;
namespace Umbraco.Core.Models
{
@@ -21,7 +22,7 @@ namespace Umbraco.Core.Models
private int _sortOrder;
private string _icon;
private string _thumbnail;
private int _userId;
private IProfile _creator;
private bool _allowedAsRoot;
private bool _isContainer;
private bool _trashed;
@@ -44,7 +45,7 @@ namespace Umbraco.Core.Models
private static readonly PropertyInfo DescriptionSelector = ExpressionHelper.GetPropertyInfo<ContentTypeBase, string>(x => x.Description);
private static readonly PropertyInfo IconSelector = ExpressionHelper.GetPropertyInfo<ContentTypeBase, string>(x => x.Icon);
private static readonly PropertyInfo ThumbnailSelector = ExpressionHelper.GetPropertyInfo<ContentTypeBase, string>(x => x.Thumbnail);
private static readonly PropertyInfo UserIdSelector = ExpressionHelper.GetPropertyInfo<ContentTypeBase, int>(x => x.UserId);
private static readonly PropertyInfo CreatorSelector = ExpressionHelper.GetPropertyInfo<ContentTypeBase, IProfile>(x => x.Creator);
private static readonly PropertyInfo AllowedAsRootSelector = ExpressionHelper.GetPropertyInfo<ContentTypeBase, bool>(x => x.AllowedAsRoot);
private static readonly PropertyInfo IsContainerSelector = ExpressionHelper.GetPropertyInfo<ContentTypeBase, bool>(x => x.IsContainer);
private static readonly PropertyInfo TrashedSelector = ExpressionHelper.GetPropertyInfo<ContentTypeBase, bool>(x => x.Trashed);
@@ -184,16 +185,16 @@ namespace Umbraco.Core.Models
}
/// <summary>
/// Id of the user who created this Content
/// Gets or sets the Profile of the user who created this ContentType
/// </summary>
[DataMember]
public virtual int UserId
public virtual IProfile Creator
{
get { return _userId; }
get { return _creator; }
set
{
_userId = value;
OnPropertyChanged(UserIdSelector);
_creator = value;
OnPropertyChanged(CreatorSelector);
}
}

View File

@@ -1,5 +1,6 @@
using System.Collections.Generic;
using Umbraco.Core.Models.EntityBase;
using Umbraco.Core.Models.Membership;
namespace Umbraco.Core.Models
{
@@ -55,9 +56,9 @@ namespace Umbraco.Core.Models
string Thumbnail { get; set; }
/// <summary>
/// Gets or Sets the Id of the User who created the ContentType
/// Gets or Sets the Profile of the User who created the ContentType
/// </summary>
int UserId { get; set; }
IProfile Creator { get; set; }
/// <summary>
/// Gets or Sets a boolean indicating whether this ContentType is allowed at the root

View File

@@ -1,11 +1,12 @@
using System;
using System.Collections.Generic;
using Umbraco.Core.Models.EntityBase;
namespace Umbraco.Core.Models.Membership
{
internal interface IMembershipUser : IMembershipUserId
internal interface IMembershipUser : IMembershipUserId, IAggregateRoot
{
object Id { get; set; }
new object Id { get; set; }
string Username { get; set; }
string Email { get; set; }
string Password { get; set; }
@@ -15,9 +16,11 @@ namespace Umbraco.Core.Models.Membership
bool IsApproved { get; set; }
bool IsOnline { get; set; }
bool IsLockedOut { get; set; }
DateTime CreationDate { get; set; }
//Was CreationDate
//DateTime CreateDate { get; set; }
//LastActivityDate
//DateTime UpdateDate { get; set; }
DateTime LastLoginDate { get; set; }
DateTime LastActivityDate { get; set; }
DateTime LastPasswordChangeDate { get; set; }
DateTime LastLockoutDate { get; set; }

View File

@@ -0,0 +1,17 @@
using System.Collections.Generic;
namespace Umbraco.Core.Models.Membership
{
/// <summary>
/// Defines the interface for a <see cref="User"/>
/// </summary>
/// <remarks>Will be left internal until a proper Membership implementation is part of the roadmap</remarks>
internal interface IUser : IMembershipUser
{
string Name { get; set; }
int SessionTimeout { get; set; }
int StartContentId { get; set; }
int StartMediaId { get; set; }
IEnumerable<string> Applications { get; set; }
}
}

View File

@@ -26,7 +26,7 @@ namespace Umbraco.Core.Models.Membership
public string Name { get; set; }
internal virtual object ProviderUserKey
public virtual object ProviderUserKey
{
get { throw new System.NotImplementedException(); }
set { throw new System.NotImplementedException(); }

View File

@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using Umbraco.Core.Models.EntityBase;
namespace Umbraco.Core.Models.Membership
{
@@ -10,8 +11,32 @@ namespace Umbraco.Core.Models.Membership
/// Should be internal until a proper user/membership implementation
/// is part of the roadmap.
/// </remarks>
internal class User : UserProfile, IMembershipUser
internal class User : UserProfile, IUser
{
private bool _hasIdentity;
private int _id;
#region Implementation of IEntity
public bool HasIdentity { get { return Id != null || _hasIdentity; } }
int IEntity.Id
{
get
{
return _id;
}
set
{
_id = value;
_hasIdentity = true;
}
}
public Guid Key { get; set; }
#endregion
#region Implementation of IMembershipUser
public string Username { get; set; }
@@ -23,9 +48,9 @@ namespace Umbraco.Core.Models.Membership
public bool IsApproved { get; set; }
public bool IsOnline { get; set; }
public bool IsLockedOut { get; set; }
public DateTime CreationDate { get; set; }
public DateTime CreateDate { get; set; }
public DateTime UpdateDate { get; set; }
public DateTime LastLoginDate { get; set; }
public DateTime LastActivityDate { get; set; }
public DateTime LastPasswordChangeDate { get; set; }
public DateTime LastLockoutDate { get; set; }
@@ -33,11 +58,5 @@ namespace Umbraco.Core.Models.Membership
public IEnumerable<object> Groups { get; set; }
#endregion
#region Implementation of IMembershipUserId
public new object ProviderUserKey { get; set; }
#endregion
}
}

View File

@@ -17,8 +17,16 @@ namespace Umbraco.Core.Models
var xd = new XmlDocument();
XmlNode xmlNode = xd.CreateNode(XmlNodeType.Element, nodeName, "");
xmlNode.AppendChild(property.PropertyType.DataType(property.Id).Data.ToXMl(xd));
XmlNode child = property.PropertyType.DataTypeDatabaseType == DataTypeDatabaseType.Ntext
? xd.CreateCDataSection(property.Value.ToString()) as XmlNode
: xd.CreateTextNode(property.Value.ToString());
xmlNode.AppendChild(child);
//This seems to fail during testing
//xmlNode.AppendChild(property.PropertyType.DataType(property.Id).Data.ToXMl(xd));
var element = xmlNode.GetXElement();
return element;
}

View File

@@ -1,6 +1,7 @@
using System;
using System.Globalization;
using Umbraco.Core.Models;
using Umbraco.Core.Models.Membership;
using Umbraco.Core.Models.Rdbms;
namespace Umbraco.Core.Persistence.Factories
@@ -34,10 +35,7 @@ namespace Umbraco.Core.Persistence.Factories
CreateDate = dto.ContentTypeDto.NodeDto.CreateDate,
Path = dto.ContentTypeDto.NodeDto.Path,
Level = dto.ContentTypeDto.NodeDto.Level,
UserId =
dto.ContentTypeDto.NodeDto.UserId.HasValue
? dto.ContentTypeDto.NodeDto.UserId.Value
: 0,
Creator = new Profile(dto.ContentTypeDto.NodeDto.UserId.Value, ""),
AllowedAsRoot = dto.ContentTypeDto.AllowAtRoot,
IsContainer = dto.ContentTypeDto.IsContainer,
Trashed = dto.ContentTypeDto.NodeDto.Trashed
@@ -85,7 +83,7 @@ namespace Umbraco.Core.Persistence.Factories
Text = entity.Name,
Trashed = false,
UniqueId = entity.Key,
UserId = entity.UserId
UserId = entity.Creator.Id.SafeCast<int>()
};
return nodeDto;
}

View File

@@ -1,6 +1,7 @@
using System;
using System.Globalization;
using Umbraco.Core.Models;
using Umbraco.Core.Models.Membership;
using Umbraco.Core.Models.Rdbms;
namespace Umbraco.Core.Persistence.Factories
@@ -34,10 +35,7 @@ namespace Umbraco.Core.Persistence.Factories
CreateDate = dto.NodeDto.CreateDate,
Path = dto.NodeDto.Path,
Level = dto.NodeDto.Level,
UserId =
dto.NodeDto.UserId.HasValue
? dto.NodeDto.UserId.Value
: 0,
Creator = new Profile(dto.NodeDto.UserId.Value, ""),
AllowedAsRoot = dto.AllowAtRoot,
IsContainer = dto.IsContainer,
Trashed = dto.NodeDto.Trashed
@@ -77,7 +75,7 @@ namespace Umbraco.Core.Persistence.Factories
Text = entity.Name,
Trashed = false,
UniqueId = entity.Key,
UserId = entity.UserId
UserId = entity.Creator.Id.SafeCast<int>()
};
return nodeDto;
}

View File

@@ -36,7 +36,7 @@ namespace Umbraco.Core.Persistence.Mappers
CacheMap<ContentType, NodeDto>(src => src.Name, dto => dto.Text);
CacheMap<ContentType, NodeDto>(src => src.Trashed, dto => dto.Trashed);
CacheMap<ContentType, NodeDto>(src => src.Key, dto => dto.UniqueId);
CacheMap<ContentType, NodeDto>(src => src.UserId, dto => dto.UserId);
CacheMap<ContentType, NodeDto>(src => src.Creator, dto => dto.UserId);
CacheMap<ContentType, ContentTypeDto>(src => src.Alias, dto => dto.Alias);
CacheMap<ContentType, ContentTypeDto>(src => src.AllowedAsRoot, dto => dto.AllowAtRoot);
CacheMap<ContentType, ContentTypeDto>(src => src.Description, dto => dto.Description);

View File

@@ -0,0 +1,9 @@
using Umbraco.Core.Models.Membership;
namespace Umbraco.Core.Persistence.Repositories
{
internal interface IUserRepository : IRepositoryQueryable<int, IUser>
{
}
}

View File

@@ -42,11 +42,13 @@ namespace Umbraco.Core.Persistence.Repositories
if (FileSystem.FileExists(masterpageName))
{
var stream = FileSystem.OpenFile(masterpageName);
byte[] bytes = new byte[stream.Length];
stream.Position = 0;
stream.Read(bytes, 0, (int)stream.Length);
content = Encoding.UTF8.GetString(bytes);
using (var stream = FileSystem.OpenFile(masterpageName))
{
byte[] bytes = new byte[stream.Length];
stream.Position = 0;
stream.Read(bytes, 0, (int) stream.Length);
content = Encoding.UTF8.GetString(bytes);
}
path = FileSystem.GetRelativePath(masterpageName);
created = FileSystem.GetCreated(path).UtcDateTime;
@@ -55,11 +57,13 @@ namespace Umbraco.Core.Persistence.Repositories
}
else
{
var stream = _viewsFileSystem.OpenFile(viewName);
byte[] bytes = new byte[stream.Length];
stream.Position = 0;
stream.Read(bytes, 0, (int)stream.Length);
content = Encoding.UTF8.GetString(bytes);
using (var stream = _viewsFileSystem.OpenFile(viewName))
{
byte[] bytes = new byte[stream.Length];
stream.Position = 0;
stream.Read(bytes, 0, (int) stream.Length);
content = Encoding.UTF8.GetString(bytes);
}
path = _viewsFileSystem.GetRelativePath(viewName);
created = FileSystem.GetCreated(path).UtcDateTime;

View File

@@ -0,0 +1,72 @@
using System;
using System.Collections.Generic;
using Umbraco.Core.Models.Membership;
using Umbraco.Core.Persistence.Querying;
using Umbraco.Core.Persistence.UnitOfWork;
namespace Umbraco.Core.Persistence.Repositories
{
/// <summary>
/// Represents the UserRepository for doing CRUD operations for users
/// </summary>
internal class UserRepository : PetaPocoRepositoryBase<int, IUser>, IUserRepository
{
public UserRepository(IUnitOfWork work)
: base(work)
{
}
#region Overrides of RepositoryBase<int,IUser>
protected override IUser PerformGet(int id)
{
throw new NotImplementedException();
}
protected override IEnumerable<IUser> PerformGetAll(params int[] ids)
{
throw new NotImplementedException();
}
protected override IEnumerable<IUser> PerformGetByQuery(IQuery<IUser> query)
{
throw new NotImplementedException();
}
#endregion
#region Overrides of PetaPocoRepositoryBase<int,IUser>
protected override Sql GetBaseQuery(bool isCount)
{
throw new NotImplementedException();
}
protected override string GetBaseWhereClause()
{
throw new NotImplementedException();
}
protected override IEnumerable<string> GetDeleteClauses()
{
throw new NotImplementedException();
}
protected override Guid NodeObjectTypeId
{
get { throw new NotImplementedException(); }
}
protected override void PersistNewItem(IUser entity)
{
throw new NotImplementedException();
}
protected override void PersistUpdatedItem(IUser entity)
{
throw new NotImplementedException();
}
#endregion
}
}

View File

@@ -105,6 +105,7 @@
<Compile Include="Models\Membership\IMembershipUser.cs" />
<Compile Include="Models\Membership\IMembershipUserId.cs" />
<Compile Include="Models\Membership\IProfile.cs" />
<Compile Include="Models\Membership\IUser.cs" />
<Compile Include="Models\Membership\Profile.cs" />
<Compile Include="Models\Membership\User.cs" />
<Compile Include="Models\Membership\UserProfile.cs" />
@@ -193,6 +194,7 @@
<Compile Include="Persistence\Repositories\Interfaces\IRepository.cs" />
<Compile Include="Persistence\Repositories\Interfaces\IStylesheetRepository.cs" />
<Compile Include="Persistence\Repositories\Interfaces\ITemplateRepository.cs" />
<Compile Include="Persistence\Repositories\Interfaces\IUserRepository.cs" />
<Compile Include="Persistence\Repositories\LanguageRepository.cs" />
<Compile Include="Persistence\Repositories\MacroRepository.cs" />
<Compile Include="Persistence\Repositories\MediaRepository.cs" />
@@ -204,6 +206,7 @@
<Compile Include="Persistence\Repositories\ScriptRepository.cs" />
<Compile Include="Persistence\Repositories\StylesheetRepository.cs" />
<Compile Include="Persistence\Repositories\TemplateRepository.cs" />
<Compile Include="Persistence\Repositories\UserRepository.cs" />
<Compile Include="Persistence\RepositoryResolver.cs" />
<Compile Include="Persistence\SqlSyntax\DbTypes.cs" />
<Compile Include="Persistence\SqlSyntax\ISqlSyntaxProvider.cs" />

View File

@@ -8,7 +8,7 @@
</configSections>
<appSettings>
<add key="umbracoDbDSN" value="datalayer=SQLCE4Umbraco.SqlCEHelper,SQLCE4Umbraco;data source=|DataDirectory|\test.sdf" />
<add key="umbracoDbDSN" value="datalayer=SQLCE4Umbraco.SqlCEHelper,SQLCE4Umbraco;data source=|DataDirectory|\UmbracoPetaPocoTests.sdf" />
<add key="umbracoConfigurationStatus" value="6.0.0" />
<add key="umbracoReservedUrls" value="~/config/splashes/booting.aspx,~/install/default.aspx,~/config/splashes/noNodes.aspx,~/VSEnterpriseHelper.axd" />
<add key="umbracoReservedPaths" value="~/umbraco,~/install/" />
@@ -30,7 +30,7 @@
</appSettings>
<connectionStrings>
<add name="umbracoDbDSN" connectionString="Datasource=|DataDirectory|test.sdf" providerName="System.Data.SqlServerCe.4.0"/>
<add name="umbracoDbDSN" connectionString="Datasource=|DataDirectory|UmbracoPetaPocoTests.sdf" providerName="System.Data.SqlServerCe.4.0"/>
</connectionStrings>
<FileSystemProviders>

View File

@@ -38,7 +38,7 @@ namespace Umbraco.Tests.DynamicDocument
Path.Combine(currDir.Parent.Parent.FullName, "config", "umbracoSettings.config"),
true);
UmbracoSettings.SettingsFilePath = IOHelper.MapPath(SystemDirectories.Config, false);
UmbracoSettings.SettingsFilePath = IOHelper.MapPath(SystemDirectories.Config + Path.DirectorySeparatorChar, false);
//for testing, we'll specify which assemblies are scanned for the PluginTypeResolver
PluginManager.Current.AssembliesToScan = new[]

View File

@@ -41,6 +41,11 @@ namespace Umbraco.Tests.IO
Assert.AreEqual(1, files.Count());
foreach (var file in files)
{
_fileSystem.DeleteFile(file);
}
_fileSystem.DeleteDirectory("test", true);
}

View File

@@ -8,6 +8,7 @@ using Umbraco.Tests.TestHelpers;
using Umbraco.Tests.TestHelpers.Entities;
using umbraco.editorControls.tinyMCE3;
using umbraco.interfaces;
using File = System.IO.File;
namespace Umbraco.Tests.Models
{
@@ -38,15 +39,10 @@ namespace Umbraco.Tests.Models
{
DatabaseContext.Database.Dispose();
TestHelper.ClearDatabase();
//reset the app context
DataTypesResolver.Reset();
ApplicationContext.Current = null;
Resolution.IsFrozen = false;
string path = TestHelper.CurrentAssemblyDirectory;
AppDomain.CurrentDomain.SetData("DataDirectory", null);
base.TearDown();
}
[Test]
public void Can_Generate_Xml_Representation_Of_Content()

View File

@@ -36,7 +36,7 @@ namespace Umbraco.Tests.Persistence
AppDomain.CurrentDomain.SetData("DataDirectory", path);
//Delete database file before continueing
string filePath = string.Concat(path, "\\test.sdf");
string filePath = string.Concat(path, "\\UmbracoPetaPocoTests.sdf");
if (File.Exists(filePath))
{
File.Delete(filePath);

View File

@@ -1,8 +1,11 @@
using System;
using System.IO;
using System.Web;
using System.Xml;
using NUnit.Framework;
using Umbraco.Core;
using Umbraco.Core.Configuration;
using Umbraco.Core.IO;
using Umbraco.Core.Models;
using Umbraco.Core.ObjectResolution;
using Umbraco.Tests.TestHelpers;
@@ -19,6 +22,8 @@ namespace Umbraco.Tests.Publishing
[SetUp]
public override void Initialize()
{
UmbracoSettings.SettingsFilePath = IOHelper.MapPath(SystemDirectories.Config + Path.DirectorySeparatorChar, false);
//this ensures its reset
PluginManager.Current = new PluginManager();
@@ -73,6 +78,8 @@ namespace Umbraco.Tests.Publishing
var document = httpContext.Items["UmbracoXmlContextContent"] as XmlDocument;
Console.Write(document.OuterXml);
document.Save("umbraco.config");
updateContentCache.Unsubscribe();
}
public void CreateTestData()

View File

@@ -42,7 +42,7 @@ namespace Umbraco.Tests.TestHelpers
mvcViews.GetFiles().ForEach(x => x.Delete());
//Delete database file before continueing
string filePath = string.Concat(path, "\\test.sdf");
string filePath = string.Concat(path, "\\UmbracoPetaPocoTests.sdf");
if (File.Exists(filePath))
{
File.Delete(filePath);
@@ -50,6 +50,7 @@ namespace Umbraco.Tests.TestHelpers
//Get the connectionstring settings from config
var settings = ConfigurationManager.ConnectionStrings["umbracoDbDsn"];
ConfigurationManager.AppSettings.Set("umbracoDbDSN", @"datalayer=SQLCE4Umbraco.SqlCEHelper,SQLCE4Umbraco;data source=|DataDirectory|\UmbracoPetaPocoTests.sdf");
//Create the Sql CE database
var engine = new SqlCeEngine(settings.ConnectionString);
@@ -76,21 +77,21 @@ namespace Umbraco.Tests.TestHelpers
string path = TestHelper.CurrentAssemblyDirectory;
AppDomain.CurrentDomain.SetData("DataDirectory", null);
string filePath = string.Concat(path, "\\test.sdf");
string filePath = string.Concat(path, "\\UmbracoPetaPocoTests.sdf");
if (File.Exists(filePath))
{
File.Delete(filePath);
//File.Delete(filePath);
}
}
protected ApplicationContext ApplicationContext { get; private set; }
protected ApplicationContext ApplicationContext { get; set; }
protected ServiceContext ServiceContext
{
get { return ServiceContext.Current; }
}
protected DatabaseContext DatabaseContext { get; private set; }
protected DatabaseContext DatabaseContext { get; set; }
protected UmbracoContext GetUmbracoContext(string url, int templateId, RouteData routeData = null)
{

View File

@@ -1,5 +1,6 @@
using System;
using Umbraco.Core.Models;
using Umbraco.Core.Models.Membership;
namespace Umbraco.Tests.TestHelpers.Entities
{
@@ -15,7 +16,7 @@ namespace Umbraco.Tests.TestHelpers.Entities
Icon = ".sprTreeDoc3",
Thumbnail = "doc.png",
SortOrder = 1,
UserId = 0,
Creator = new Profile(0, "Administrator"),
DefaultTemplate = "~/masterpages/umbTextPage.master",
Trashed = false
};
@@ -44,7 +45,7 @@ namespace Umbraco.Tests.TestHelpers.Entities
Icon = ".sprTreeDoc3",
Thumbnail = "doc.png",
SortOrder = 1,
UserId = 0,
Creator = new Profile(0, "Administrator"),
DefaultTemplate = "",
Trashed = false
};
@@ -68,7 +69,7 @@ namespace Umbraco.Tests.TestHelpers.Entities
Icon = ".sprTreeDoc3",
Thumbnail = "doc.png",
SortOrder = 1,
UserId = 0,
Creator = new Profile(0, "Administrator"),
DefaultTemplate = "~/masterpages/umbSimplePage.master",
Trashed = false
};
@@ -93,7 +94,7 @@ namespace Umbraco.Tests.TestHelpers.Entities
Icon = ".sprTreeDoc3",
Thumbnail = "doc2.png",
SortOrder = 1,
UserId = 0,
Creator = new Profile(0, "Administrator"),
DefaultTemplate = "~/masterpages/umbSimplePage.master",
Trashed = false
};
@@ -118,7 +119,7 @@ namespace Umbraco.Tests.TestHelpers.Entities
Icon = ".sprTreeDoc3",
Thumbnail = "doc2.png",
SortOrder = 1,
UserId = 0,
Creator = new Profile(0, "Administrator"),
DefaultTemplate = "~/masterpages/umbSimplePage.master",
Trashed = false
};
@@ -143,7 +144,7 @@ namespace Umbraco.Tests.TestHelpers.Entities
Icon = ".sprTreeDoc3",
Thumbnail = "doc3.png",
SortOrder = 1,
UserId = 0,
Creator = new Profile(0, "Administrator"),
DefaultTemplate = "~/masterpages/umbSimplePage.master",
Trashed = false
};
@@ -163,7 +164,7 @@ namespace Umbraco.Tests.TestHelpers.Entities
Icon = ".sprTreeDoc3",
Thumbnail = "doc.png",
SortOrder = 1,
UserId = 0,
Creator = new Profile(0, "Administrator"),
Trashed = false
};

View File

@@ -52,11 +52,7 @@ namespace Umbraco.Web.Strategies
// note that some threads could read from it while we hold the lock, though
lock (XmlContentInternalSyncLock)
{
// modify a clone of the cache because even though we're into the write-lock
// we may have threads reading at the same time. why is this an option?
XmlDocument wip = UmbracoSettings.CloneXmlCacheOnPublish
? CloneXmlDoc(XmlContent)
: XmlContent;
XmlDocument wip = XmlContent;
ClearContextCache();
@@ -178,12 +174,6 @@ namespace Umbraco.Web.Strategies
return xmlContentCopy;
}
private XmlDocument CloneXmlDoc(XmlDocument xmlDoc)
{
var xmlCopy = (XmlDocument)xmlDoc.CloneNode(true);
return xmlCopy;
}
/// <summary>
/// Clear HTTPContext cache if any
/// </summary>
@@ -239,5 +229,10 @@ namespace Umbraco.Web.Strategies
}
set { _httpContext.Items[XmlContextContentItemKey] = value; }
}
internal void Unsubscribe()
{
PublishingStrategy.Published -= PublishingStrategy_Published;
}
}
}