diff --git a/build/NuSpecs/UmbracoCms.Core.nuspec b/build/NuSpecs/UmbracoCms.Core.nuspec
index 009b47b89b..a747183c1c 100644
--- a/build/NuSpecs/UmbracoCms.Core.nuspec
+++ b/build/NuSpecs/UmbracoCms.Core.nuspec
@@ -1,8 +1,8 @@
-
+
UmbracoCms.Core
- 6.1.2
+ 6.2.0
Umbraco Cms Core Binaries
Morten Christensen
Umbraco HQ
@@ -14,57 +14,57 @@
Contains the core assemblies needed to run Umbraco Cms
en-US
umbraco
-
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/build/NuSpecs/UmbracoCms.nuspec b/build/NuSpecs/UmbracoCms.nuspec
index e84ebc8e2e..babaf5f845 100644
--- a/build/NuSpecs/UmbracoCms.nuspec
+++ b/build/NuSpecs/UmbracoCms.nuspec
@@ -1,4 +1,4 @@
-
+
UmbracoCms
diff --git a/src/Umbraco.Core/DatabaseContext.cs b/src/Umbraco.Core/DatabaseContext.cs
index 2f0efcbfc0..dbbc476ae9 100644
--- a/src/Umbraco.Core/DatabaseContext.cs
+++ b/src/Umbraco.Core/DatabaseContext.cs
@@ -112,7 +112,7 @@ namespace Umbraco.Core
public void ConfigureEmbeddedDatabaseConnection()
{
const string providerName = "System.Data.SqlServerCe.4.0";
- const string connectionString = @"Data Source=|DataDirectory|\Umbraco.sdf;Flush Interval=1;File Access Retry Timeout=10";
+ const string connectionString = @"Data Source=|DataDirectory|\Umbraco.sdf;Flush Interval=1;";
SaveConnectionString(connectionString, providerName);
diff --git a/src/Umbraco.Core/Models/Member.cs b/src/Umbraco.Core/Models/Member.cs
index b3baac8351..335beb9ee4 100644
--- a/src/Umbraco.Core/Models/Member.cs
+++ b/src/Umbraco.Core/Models/Member.cs
@@ -20,19 +20,26 @@ namespace Umbraco.Core.Models
private object _providerUserKey;
private Type _userTypeKey;
- public Member(string name, int parentId, IMemberType contentType, PropertyCollection properties) : base(name, parentId, contentType, properties)
+ public Member(string name, string email, string username, string password, int parentId, IMemberType contentType)
+ : base(name, parentId, contentType, new PropertyCollection())
{
Mandate.ParameterNotNull(contentType, "contentType");
_contentType = contentType;
+ _email = email;
+ _username = username;
+ _password = password;
}
- public Member(string name, IContentBase parent, IMemberType contentType, PropertyCollection properties)
- : base(name, parent, contentType, properties)
+ public Member(string name, string email, string username, string password, IContentBase parent, IMemberType contentType)
+ : base(name, parent, contentType, new PropertyCollection())
{
Mandate.ParameterNotNull(contentType, "contentType");
_contentType = contentType;
+ _email = email;
+ _username = username;
+ _password = password;
}
private static readonly PropertyInfo DefaultContentTypeAliasSelector = ExpressionHelper.GetPropertyInfo(x => x.ContentTypeAlias);
diff --git a/src/Umbraco.Core/Models/MemberType.cs b/src/Umbraco.Core/Models/MemberType.cs
index ed7d5cd3ab..2b32681392 100644
--- a/src/Umbraco.Core/Models/MemberType.cs
+++ b/src/Umbraco.Core/Models/MemberType.cs
@@ -114,5 +114,26 @@ namespace Umbraco.Core.Models
MemberTypePropertyTypes.Add(propertyTypeAlias, tuple);
}
}
+
+ ///
+ /// Method to call when Entity is being saved
+ ///
+ /// Created date is set and a Unique key is assigned
+ internal override void AddingEntity()
+ {
+ base.AddingEntity();
+
+ if (Key == Guid.Empty)
+ Key = Guid.NewGuid();
+ }
+
+ ///
+ /// Method to call when Entity is being updated
+ ///
+ /// Modified Date is set and a new Version guid is set
+ internal override void UpdatingEntity()
+ {
+ base.UpdatingEntity();
+ }
}
}
\ No newline at end of file
diff --git a/src/Umbraco.Core/Models/Rdbms/PropertyTypeGroupReadOnlyDto.cs b/src/Umbraco.Core/Models/Rdbms/PropertyTypeGroupReadOnlyDto.cs
index 9f66813560..01736a270d 100644
--- a/src/Umbraco.Core/Models/Rdbms/PropertyTypeGroupReadOnlyDto.cs
+++ b/src/Umbraco.Core/Models/Rdbms/PropertyTypeGroupReadOnlyDto.cs
@@ -18,5 +18,8 @@ namespace Umbraco.Core.Models.Rdbms
[Column("PropertyGroupSortOrder")]
public int SortOrder { get; set; }
+
+ [Column("contenttypeNodeId")]
+ public int ContentTypeNodeId { get; set; }
}
}
\ No newline at end of file
diff --git a/src/Umbraco.Core/Models/Rdbms/PropertyTypeReadOnlyDto.cs b/src/Umbraco.Core/Models/Rdbms/PropertyTypeReadOnlyDto.cs
index 78e250a8b5..2f48035ba5 100644
--- a/src/Umbraco.Core/Models/Rdbms/PropertyTypeReadOnlyDto.cs
+++ b/src/Umbraco.Core/Models/Rdbms/PropertyTypeReadOnlyDto.cs
@@ -17,7 +17,7 @@ namespace Umbraco.Core.Models.Rdbms
[Column("contentTypeId")]
public int ContentTypeId { get; set; }
- [Column("propertyTypeGroupId")]
+ [Column("PropertyTypesGroupId")]
public int? PropertyTypeGroupId { get; set; }
[Column("Alias")]
diff --git a/src/Umbraco.Core/Persistence/Factories/MemberReadOnlyFactory.cs b/src/Umbraco.Core/Persistence/Factories/MemberReadOnlyFactory.cs
index eb6e2c787d..16879a7871 100644
--- a/src/Umbraco.Core/Persistence/Factories/MemberReadOnlyFactory.cs
+++ b/src/Umbraco.Core/Persistence/Factories/MemberReadOnlyFactory.cs
@@ -18,17 +18,13 @@ namespace Umbraco.Core.Persistence.Factories
public IMember BuildEntity(MemberReadOnlyDto dto)
{
var properties = CreateProperties(_memberTypes[dto.ContentTypeAlias], dto.Properties, dto.CreateDate);
- var propertyCollection = new PropertyCollection(properties);
- var member = new Member(dto.Text, dto.ParentId, _memberTypes[dto.ContentTypeAlias], propertyCollection)
+ var member = new Member(dto.Text, dto.Email, dto.LoginName, dto.Password, dto.ParentId, _memberTypes[dto.ContentTypeAlias])
{
Id = dto.NodeId,
CreateDate = dto.CreateDate,
UpdateDate = dto.UpdateDate,
Name = dto.Text,
- Email = dto.Email,
- Username = dto.LoginName,
- Password = dto.Password,
ProviderUserKey = dto.UniqueId,
Trashed = dto.Trashed,
Key = dto.UniqueId.Value,
@@ -37,7 +33,8 @@ namespace Umbraco.Core.Persistence.Factories
Path = dto.Path,
SortOrder = dto.SortOrder,
Version = dto.VersionId,
- ContentTypeAlias = dto.ContentTypeAlias
+ ContentTypeAlias = dto.ContentTypeAlias,
+ Properties = new PropertyCollection(properties)
};
member.SetProviderUserKeyType(typeof(Guid));
@@ -61,7 +58,7 @@ namespace Umbraco.Core.Persistence.Factories
? propertyType.CreatePropertyFromValue(null)
: propertyType.CreatePropertyFromRawValue(propertyDataDto.GetValue,
propertyDataDto.VersionId,
- propertyDataDto.Id);
+ propertyDataDto.PropertyDataId.Value);
//on initial construction we don't want to have dirty properties tracked
property.CreateDate = createDate;
property.UpdateDate = createDate;
diff --git a/src/Umbraco.Core/Persistence/Factories/MemberTypeReadOnlyFactory.cs b/src/Umbraco.Core/Persistence/Factories/MemberTypeReadOnlyFactory.cs
index e9e7fe19c4..4884a18d98 100644
--- a/src/Umbraco.Core/Persistence/Factories/MemberTypeReadOnlyFactory.cs
+++ b/src/Umbraco.Core/Persistence/Factories/MemberTypeReadOnlyFactory.cs
@@ -55,51 +55,73 @@ namespace Umbraco.Core.Persistence.Factories
private PropertyGroupCollection GetPropertyTypeGroupCollection(MemberTypeReadOnlyDto dto, MemberType memberType)
{
- var propertyTypeGroupCollection = new PropertyGroupCollection();
- foreach (var propertyTypeGroup in dto.PropertyTypeGroups.Where(x => x.Id.HasValue))
+ var propertyGroups = new PropertyGroupCollection();
+ foreach (var groupDto in dto.PropertyTypeGroups.Where(x => x.Id.HasValue))
{
- //Find PropertyTypes that belong to the current PropertyTypeGroup
- var groupId = propertyTypeGroup.Id.Value;
- var propertyTypesByGroup =
- dto.PropertyTypes.Where(
- x => x.Id.HasValue && x.PropertyTypeGroupId.HasValue && x.PropertyTypeGroupId.Value.Equals(groupId));
- //Create PropertyTypeCollection for passing into the PropertyTypeGroup, and loop through the above result to create PropertyTypes
- var propertyTypeCollection = new PropertyTypeCollection();
- foreach (var propTypeDto in propertyTypesByGroup)
+ var group = new PropertyGroup();
+ //Only assign an Id if the PropertyGroup belongs to this ContentType
+ if (groupDto.ContentTypeNodeId == memberType.Id)
{
- //Internal dictionary for adding "MemberCanEdit" and "VisibleOnProfile" properties to each PropertyType
- memberType.MemberTypePropertyTypes.Add(propTypeDto.Alias,
- new Tuple(propTypeDto.CanEdit, propTypeDto.ViewOnProfile, propTypeDto.Id.Value));
- //PropertyType Collection
- propertyTypeCollection.Add(new PropertyType(propTypeDto.ControlId,
- propTypeDto.DbType.EnumParse(true))
- {
- Alias = propTypeDto.Alias,
- DataTypeDefinitionId = propTypeDto.DataTypeId,
- Description = propTypeDto.Description,
- HelpText = propTypeDto.HelpText,
- Id = propTypeDto.Id.Value,
- Mandatory = propTypeDto.Mandatory,
- Name = propTypeDto.Name,
- SortOrder = propTypeDto.SortOrder,
- ValidationRegExp = propTypeDto.ValidationRegExp,
- PropertyGroupId = new Lazy(() => propTypeDto.PropertyTypeGroupId.Value),
- CreateDate = dto.CreateDate,
- UpdateDate = dto.CreateDate
- });
+ group.Id = groupDto.Id.Value;
+
+ if (groupDto.ParentGroupId.HasValue)
+ group.ParentId = groupDto.ParentGroupId.Value;
+ }
+ else
+ {
+ //If the PropertyGroup is inherited, we add a reference to the group as a Parent.
+ group.ParentId = groupDto.Id;
}
- var group = new PropertyGroup(propertyTypeCollection) {Id = groupId};
- propertyTypeGroupCollection.Add(@group);
+ group.Name = groupDto.Text;
+ group.SortOrder = groupDto.SortOrder;
+ group.PropertyTypes = new PropertyTypeCollection();
+
+ //Because we are likely to have a group with no PropertyTypes we need to ensure that these are excluded
+ var localGroupDto = groupDto;
+ var typeDtos = dto.PropertyTypes.Where(x => x.Id.HasValue && x.Id > 0 && x.PropertyTypeGroupId.HasValue && x.PropertyTypeGroupId.Value == localGroupDto.Id.Value);
+ foreach (var typeDto in typeDtos)
+ {
+ //Internal dictionary for adding "MemberCanEdit" and "VisibleOnProfile" properties to each PropertyType
+ memberType.MemberTypePropertyTypes.Add(typeDto.Alias,
+ new Tuple(typeDto.CanEdit, typeDto.ViewOnProfile, typeDto.Id.Value));
+
+ var tempGroupDto = groupDto;
+ var propertyType = new PropertyType(typeDto.ControlId,
+ typeDto.DbType.EnumParse(true))
+ {
+ Alias = typeDto.Alias,
+ DataTypeDefinitionId = typeDto.DataTypeId,
+ Description = typeDto.Description,
+ Id = typeDto.Id.Value,
+ Name = typeDto.Name,
+ HelpText = typeDto.HelpText,
+ Mandatory = typeDto.Mandatory,
+ SortOrder = typeDto.SortOrder,
+ ValidationRegExp = typeDto.ValidationRegExp,
+ PropertyGroupId = new Lazy(() => tempGroupDto.Id.Value),
+ CreateDate = memberType.CreateDate,
+ UpdateDate = memberType.UpdateDate
+ };
+ //on initial construction we don't want to have dirty properties tracked
+ // http://issues.umbraco.org/issue/U4-1946
+ propertyType.ResetDirtyProperties(false);
+ group.PropertyTypes.Add(propertyType);
+ }
+ //on initial construction we don't want to have dirty properties tracked
+ // http://issues.umbraco.org/issue/U4-1946
+ group.ResetDirtyProperties(false);
+ propertyGroups.Add(group);
}
- return propertyTypeGroupCollection;
+
+ return propertyGroups;
}
private List GetPropertyTypes(MemberTypeReadOnlyDto dto, MemberType memberType)
{
//Find PropertyTypes that does not belong to a PropertyTypeGroup
var propertyTypes = new List();
- foreach (var propertyType in dto.PropertyTypes.Where(x => x.PropertyTypeGroupId.HasValue == false && x.Id.HasValue))
+ foreach (var propertyType in dto.PropertyTypes.Where(x => (x.PropertyTypeGroupId.HasValue == false || x.PropertyTypeGroupId.Value == 0) && x.Id.HasValue))
{
//Internal dictionary for adding "MemberCanEdit" and "VisibleOnProfile" properties to each PropertyType
memberType.MemberTypePropertyTypes.Add(propertyType.Alias,
diff --git a/src/Umbraco.Core/Persistence/Relators/PropertyDataRelator.cs b/src/Umbraco.Core/Persistence/Relators/PropertyDataRelator.cs
index 49c5e671e6..4eabe8c669 100644
--- a/src/Umbraco.Core/Persistence/Relators/PropertyDataRelator.cs
+++ b/src/Umbraco.Core/Persistence/Relators/PropertyDataRelator.cs
@@ -15,6 +15,8 @@ namespace Umbraco.Core.Persistence.Relators
if (a == null)
return Current;
+ p.VersionId = a.VersionId;
+
// Is this the same MemberReadOnlyDto as the current one we're processing
if (Current != null && Current.UniqueId == a.UniqueId)
{
diff --git a/src/Umbraco.Core/Persistence/Relators/PropertyTypePropertyGroupRelator.cs b/src/Umbraco.Core/Persistence/Relators/PropertyTypePropertyGroupRelator.cs
index e16a61db6f..a9129498c5 100644
--- a/src/Umbraco.Core/Persistence/Relators/PropertyTypePropertyGroupRelator.cs
+++ b/src/Umbraco.Core/Persistence/Relators/PropertyTypePropertyGroupRelator.cs
@@ -1,4 +1,5 @@
using System.Collections.Generic;
+using System.Linq;
using Umbraco.Core.Models.Rdbms;
namespace Umbraco.Core.Persistence.Relators
@@ -21,7 +22,7 @@ namespace Umbraco.Core.Persistence.Relators
// Yes, just add this PropertyTypeReadOnlyDto to the current MemberTypeReadOnlyDto's collection
Current.PropertyTypes.Add(p);
- if(g.Id.HasValue)
+ if (g.Id.HasValue && Current.PropertyTypeGroups != null && Current.PropertyTypeGroups.Any(x => x.Id == g.Id.Value) == false)
Current.PropertyTypeGroups.Add(g);
// Return null to indicate we're not done with this MemberTypeReadOnlyDto yet
diff --git a/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs
index 856ede87d1..caa92f94ef 100644
--- a/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/MemberRepository.cs
@@ -229,10 +229,8 @@ namespace Umbraco.Core.Persistence.Repositories
dto.NodeId = nodeDto.NodeId;
Database.Insert(dto);
- //TODO ContentType for the Member entity
-
//Create the PropertyData for this version - cmsPropertyData
- /*var propertyFactory = new PropertyFactory(entity.ContentType, entity.Version, entity.Id);
+ var propertyFactory = new PropertyFactory(entity.ContentType, entity.Version, entity.Id);
var propertyDataDtos = propertyFactory.BuildDto(((Member)entity).Properties);
var keyDictionary = new Dictionary();
@@ -247,7 +245,7 @@ namespace Umbraco.Core.Persistence.Repositories
foreach (var property in ((Member)entity).Properties)
{
property.Id = keyDictionary[property.PropertyTypeId];
- }*/
+ }
((Member)entity).ResetDirtyProperties();
}
@@ -300,7 +298,7 @@ namespace Umbraco.Core.Persistence.Repositories
//TODO ContentType for the Member entity
//Create the PropertyData for this version - cmsPropertyData
- /*var propertyFactory = new PropertyFactory(entity.ContentType, entity.Version, entity.Id);
+ var propertyFactory = new PropertyFactory(entity.ContentType, entity.Version, entity.Id);
var propertyDataDtos = propertyFactory.BuildDto(((Member)entity).Properties);
var keyDictionary = new Dictionary();
@@ -325,7 +323,7 @@ namespace Umbraco.Core.Persistence.Repositories
{
property.Id = keyDictionary[property.PropertyTypeId];
}
- }*/
+ }
((ICanBeDirty)entity).ResetDirtyProperties();
}
diff --git a/src/Umbraco.Core/Persistence/Repositories/MemberTypeRepository.cs b/src/Umbraco.Core/Persistence/Repositories/MemberTypeRepository.cs
index 305f828c2d..9ee215d4f7 100644
--- a/src/Umbraco.Core/Persistence/Repositories/MemberTypeRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/MemberTypeRepository.cs
@@ -101,10 +101,10 @@ namespace Umbraco.Core.Persistence.Repositories
sql.Select("umbracoNode.*", "cmsContentType.*", "cmsPropertyType.id AS PropertyTypeId", "cmsPropertyType.Alias",
"cmsPropertyType.Name", "cmsPropertyType.Description", "cmsPropertyType.helpText", "cmsPropertyType.mandatory",
"cmsPropertyType.validationRegExp", "cmsPropertyType.dataTypeId", "cmsPropertyType.sortOrder AS PropertyTypeSortOrder",
- "cmsPropertyType.propertyTypeGroupId", "cmsMemberType.memberCanEdit", "cmsMemberType.viewOnProfile",
+ "cmsPropertyType.propertyTypeGroupId AS PropertyTypesGroupId", "cmsMemberType.memberCanEdit", "cmsMemberType.viewOnProfile",
"cmsDataType.controlId", "cmsDataType.dbType", "cmsPropertyTypeGroup.id AS PropertyTypeGroupId",
- "cmsPropertyTypeGroup.text AS PropertyGroupName", "cmsPropertyTypeGroup.parentGroupId",
- "cmsPropertyTypeGroup.sortorder AS PropertyGroupSortOrder")
+ "cmsPropertyTypeGroup.text AS PropertyGroupName", "cmsPropertyTypeGroup.parentGroupId",
+ "cmsPropertyTypeGroup.sortorder AS PropertyGroupSortOrder", "cmsPropertyTypeGroup.contenttypeNodeId")
.From()
.InnerJoin().On(left => left.NodeId, right => right.NodeId)
.LeftJoin().On(left => left.ContentTypeId, right => right.NodeId)
diff --git a/src/Umbraco.Core/Services/MemberService.cs b/src/Umbraco.Core/Services/MemberService.cs
index 237e7286c0..914ef70e60 100644
--- a/src/Umbraco.Core/Services/MemberService.cs
+++ b/src/Umbraco.Core/Services/MemberService.cs
@@ -200,13 +200,13 @@ namespace Umbraco.Core.Services
///
/// Creates a new Member
///
- ///
///
+ ///
///
///
///
///
- public IMember CreateMember(string username, string email, string password, string memberTypeAlias, int userId = 0)
+ public IMember CreateMember(string email, string username, string password, string memberTypeAlias, int userId = 0)
{
var uow = _uowProvider.GetUnitOfWork();
IMemberType memberType;
@@ -220,14 +220,10 @@ namespace Umbraco.Core.Services
if (memberType == null)
throw new Exception(string.Format("No MemberType matching the passed in Alias: '{0}' was found", memberTypeAlias));
- var member = new Member(email, -1, memberType, new PropertyCollection());
+ var member = new Member(email, email, username, password, -1, memberType);
using (var repository = _repositoryFactory.CreateMemberRepository(uow))
{
- member.Username = username;
- member.Email = email;
- member.Password = password;
-
repository.AddOrUpdate(member);
uow.Commit();
}
diff --git a/src/Umbraco.Tests/App.config b/src/Umbraco.Tests/App.config
index 78ddfe8dcb..d86051cdee 100644
--- a/src/Umbraco.Tests/App.config
+++ b/src/Umbraco.Tests/App.config
@@ -26,7 +26,7 @@
-
+
diff --git a/src/Umbraco.Tests/BusinessLogic/BaseTest.cs b/src/Umbraco.Tests/BusinessLogic/BaseTest.cs
index 73d51e7816..692e0d6586 100644
--- a/src/Umbraco.Tests/BusinessLogic/BaseTest.cs
+++ b/src/Umbraco.Tests/BusinessLogic/BaseTest.cs
@@ -53,7 +53,7 @@ namespace Umbraco.Tests.BusinessLogic
private void InitializeDatabase()
{
- ConfigurationManager.AppSettings.Set(Core.Configuration.GlobalSettings.UmbracoConnectionName, @"datalayer=SQLCE4Umbraco.SqlCEHelper,SQLCE4Umbraco;data source=|DataDirectory|\UmbracoPetaPocoTests.sdf;Flush Interval=1;File Access Retry Timeout=10");
+ ConfigurationManager.AppSettings.Set(Core.Configuration.GlobalSettings.UmbracoConnectionName, @"datalayer=SQLCE4Umbraco.SqlCEHelper,SQLCE4Umbraco;data source=|DataDirectory|\UmbracoPetaPocoTests.sdf;Flush Interval=1;");
ClearDatabase();
diff --git a/src/Umbraco.Tests/Migrations/Upgrades/SqlCeDataUpgradeTest.cs b/src/Umbraco.Tests/Migrations/Upgrades/SqlCeDataUpgradeTest.cs
index 9f8a3be793..f75a215763 100644
--- a/src/Umbraco.Tests/Migrations/Upgrades/SqlCeDataUpgradeTest.cs
+++ b/src/Umbraco.Tests/Migrations/Upgrades/SqlCeDataUpgradeTest.cs
@@ -57,7 +57,7 @@ namespace Umbraco.Tests.Migrations.Upgrades
public override UmbracoDatabase GetConfiguredDatabase()
{
- return new UmbracoDatabase("Datasource=|DataDirectory|UmbracoPetaPocoTests.sdf;Flush Interval=1;File Access Retry Timeout=10", "System.Data.SqlServerCe.4.0");
+ return new UmbracoDatabase("Datasource=|DataDirectory|UmbracoPetaPocoTests.sdf;Flush Interval=1;", "System.Data.SqlServerCe.4.0");
}
public override DatabaseProviders GetDatabaseProvider()
diff --git a/src/Umbraco.Tests/Migrations/Upgrades/SqlCeUpgradeTest.cs b/src/Umbraco.Tests/Migrations/Upgrades/SqlCeUpgradeTest.cs
index 3dfc059358..238256499c 100644
--- a/src/Umbraco.Tests/Migrations/Upgrades/SqlCeUpgradeTest.cs
+++ b/src/Umbraco.Tests/Migrations/Upgrades/SqlCeUpgradeTest.cs
@@ -63,7 +63,7 @@ namespace Umbraco.Tests.Migrations.Upgrades
public override UmbracoDatabase GetConfiguredDatabase()
{
- return new UmbracoDatabase("Datasource=|DataDirectory|UmbracoPetaPocoTests.sdf;Flush Interval=1;File Access Retry Timeout=10", "System.Data.SqlServerCe.4.0");
+ return new UmbracoDatabase("Datasource=|DataDirectory|UmbracoPetaPocoTests.sdf;Flush Interval=1;", "System.Data.SqlServerCe.4.0");
}
public override DatabaseProviders GetDatabaseProvider()
diff --git a/src/Umbraco.Tests/Migrations/Upgrades/ValidateOlderSchemaTest.cs b/src/Umbraco.Tests/Migrations/Upgrades/ValidateOlderSchemaTest.cs
index 1abb496fe9..3824cf1837 100644
--- a/src/Umbraco.Tests/Migrations/Upgrades/ValidateOlderSchemaTest.cs
+++ b/src/Umbraco.Tests/Migrations/Upgrades/ValidateOlderSchemaTest.cs
@@ -100,7 +100,7 @@ namespace Umbraco.Tests.Migrations.Upgrades
public UmbracoDatabase GetConfiguredDatabase()
{
- return new UmbracoDatabase("Datasource=|DataDirectory|UmbracoPetaPocoTests.sdf;Flush Interval=1;File Access Retry Timeout=10", "System.Data.SqlServerCe.4.0");
+ return new UmbracoDatabase("Datasource=|DataDirectory|UmbracoPetaPocoTests.sdf;Flush Interval=1;", "System.Data.SqlServerCe.4.0");
}
public string GetDatabaseSpecificSqlScript()
diff --git a/src/Umbraco.Tests/Persistence/DatabaseContextTests.cs b/src/Umbraco.Tests/Persistence/DatabaseContextTests.cs
index 9132db95c2..25fe36cbf7 100644
--- a/src/Umbraco.Tests/Persistence/DatabaseContextTests.cs
+++ b/src/Umbraco.Tests/Persistence/DatabaseContextTests.cs
@@ -69,7 +69,7 @@ namespace Umbraco.Tests.Persistence
//Get the connectionstring settings from config
var settings = ConfigurationManager.ConnectionStrings[Core.Configuration.GlobalSettings.UmbracoConnectionName];
- //by default the conn string is: Datasource=|DataDirectory|UmbracoPetaPocoTests.sdf;Flush Interval=1;File Access Retry Timeout=10
+ //by default the conn string is: Datasource=|DataDirectory|UmbracoPetaPocoTests.sdf;Flush Interval=1;
//we'll just replace the sdf file with our custom one:
//Create the Sql CE database
var engine = new SqlCeEngine(settings.ConnectionString.Replace("UmbracoPetaPocoTests", "DatabaseContextTests"));
diff --git a/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs
index 6aa9609807..451110e0b1 100644
--- a/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs
+++ b/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs
@@ -4,31 +4,23 @@ using NUnit.Framework;
using Umbraco.Core;
using Umbraco.Core.Models;
using Umbraco.Core.Models.Rdbms;
-using Umbraco.Core.ObjectResolution;
using Umbraco.Core.Persistence;
using Umbraco.Core.Persistence.Caching;
-using Umbraco.Core.Persistence.Mappers;
using Umbraco.Core.Persistence.Querying;
using Umbraco.Core.Persistence.Repositories;
-using Umbraco.Core.Persistence.SqlSyntax;
using Umbraco.Core.Persistence.UnitOfWork;
-using Umbraco.Core.Publishing;
-using Umbraco.Core.Services;
using Umbraco.Tests.TestHelpers;
+using Umbraco.Tests.TestHelpers.Entities;
namespace Umbraco.Tests.Persistence.Repositories
{
- [TestFixture, NUnit.Framework.Ignore]
- public class MemberRepositoryTest : MemberRepositoryBaseTest
+ [TestFixture]
+ public class MemberRepositoryTest : BaseDatabaseFactoryTest
{
- #region Overrides of MemberRepositoryBaseTest
-
[SetUp]
public override void Initialize()
{
base.Initialize();
-
- SqlSyntaxContext.SqlSyntaxProvider = SqlServerSyntax.Provider;
}
[TearDown]
@@ -37,18 +29,6 @@ namespace Umbraco.Tests.Persistence.Repositories
base.TearDown();
}
- public override string ConnectionString
- {
- get { return @"server=.\SQLEXPRESS;database=EmptyForTest;user id=umbraco;password=umbraco"; }
- }
-
- public override string ProviderName
- {
- get { return "System.Data.SqlClient"; }
- }
-
- #endregion
-
private MemberRepository CreateRepository(IDatabaseUnitOfWork unitOfWork, out MemberTypeRepository memberTypeRepository)
{
memberTypeRepository = new MemberTypeRepository(unitOfWork, NullCacheProvider.Current);
@@ -70,10 +50,11 @@ namespace Umbraco.Tests.Persistence.Repositories
Assert.That(repository, Is.Not.Null);
}
- [Test]
+ [Test, NUnit.Framework.Ignore]
public void MemberRepository_Can_Get_Member_By_Id()
{
- var unitOfWork = UnitOfWorkProvider.GetUnitOfWork();
+ var provider = new PetaPocoUnitOfWorkProvider();
+ var unitOfWork = provider.GetUnitOfWork();
MemberTypeRepository memberTypeRepository;
using (var repository = CreateRepository(unitOfWork, out memberTypeRepository))
{
@@ -84,10 +65,11 @@ namespace Umbraco.Tests.Persistence.Repositories
}
}
- [Test]
+ [Test, NUnit.Framework.Ignore]
public void MemberRepository_Can_Get_Specific_Members()
{
- var unitOfWork = UnitOfWorkProvider.GetUnitOfWork();
+ var provider = new PetaPocoUnitOfWorkProvider();
+ var unitOfWork = provider.GetUnitOfWork();
MemberTypeRepository memberTypeRepository;
using (var repository = CreateRepository(unitOfWork, out memberTypeRepository))
{
@@ -100,10 +82,11 @@ namespace Umbraco.Tests.Persistence.Repositories
}
}
- [Test]
+ [Test, NUnit.Framework.Ignore]
public void MemberRepository_Can_Get_All_Members()
{
- var unitOfWork = UnitOfWorkProvider.GetUnitOfWork();
+ var provider = new PetaPocoUnitOfWorkProvider();
+ var unitOfWork = provider.GetUnitOfWork();
MemberTypeRepository memberTypeRepository;
using (var repository = CreateRepository(unitOfWork, out memberTypeRepository))
{
@@ -116,11 +99,12 @@ namespace Umbraco.Tests.Persistence.Repositories
}
}
- [Test]
+ [Test, NUnit.Framework.Ignore]
public void MemberRepository_Can_Perform_GetByQuery_With_Key()
{
// Arrange
- var unitOfWork = UnitOfWorkProvider.GetUnitOfWork();
+ var provider = new PetaPocoUnitOfWorkProvider();
+ var unitOfWork = provider.GetUnitOfWork();
MemberTypeRepository memberTypeRepository;
using (var repository = CreateRepository(unitOfWork, out memberTypeRepository))
{
@@ -135,11 +119,12 @@ namespace Umbraco.Tests.Persistence.Repositories
}
}
- [Test]
+ [Test, NUnit.Framework.Ignore]
public void MemberRepository_Can_Perform_GetByQuery_With_Property_Value()
{
// Arrange
- var unitOfWork = UnitOfWorkProvider.GetUnitOfWork();
+ var provider = new PetaPocoUnitOfWorkProvider();
+ var unitOfWork = provider.GetUnitOfWork();
MemberTypeRepository memberTypeRepository;
using (var repository = CreateRepository(unitOfWork, out memberTypeRepository))
{
@@ -155,11 +140,12 @@ namespace Umbraco.Tests.Persistence.Repositories
}
}
- [Test]
+ [Test, NUnit.Framework.Ignore]
public void MemberRepository_Can_Perform_GetByQuery_With_Property_Alias_And_Value()
{
// Arrange
- var unitOfWork = UnitOfWorkProvider.GetUnitOfWork();
+ var provider = new PetaPocoUnitOfWorkProvider();
+ var unitOfWork = provider.GetUnitOfWork();
MemberTypeRepository memberTypeRepository;
using (var repository = CreateRepository(unitOfWork, out memberTypeRepository))
{
@@ -174,6 +160,34 @@ namespace Umbraco.Tests.Persistence.Repositories
}
}
+ [Test]
+ public void MemberRepository_Can_Persist_Member()
+ {
+ IMember sut;
+ var provider = new PetaPocoUnitOfWorkProvider();
+ var unitOfWork = provider.GetUnitOfWork();
+ MemberTypeRepository memberTypeRepository;
+ using (var repository = CreateRepository(unitOfWork, out memberTypeRepository))
+ {
+ var memberType = MockedContentTypes.CreateSimpleMemberType();
+ memberTypeRepository.AddOrUpdate(memberType);
+ unitOfWork.Commit();
+
+ var member = MockedMember.CreateSimpleContent(memberType, "Johnny Hefty", "johnny@example.com", "123", "hefty", -1);
+ repository.AddOrUpdate(member);
+ unitOfWork.Commit();
+
+ sut = repository.Get(member.Id);
+
+ Assert.That(sut, Is.Not.Null);
+ Assert.That(sut.ContentType.PropertyGroups.Count(), Is.EqualTo(1));
+ Assert.That(sut.ContentType.PropertyTypes.Count(), Is.EqualTo(12));
+
+ Assert.That(sut.Properties.Count(), Is.EqualTo(12));
+ Assert.That(sut.Properties.Any(x => x.HasIdentity == false || x.Id == 0), Is.False);
+ }
+ }
+
[Test]
public void Can_Create_Correct_Subquery()
{
@@ -252,60 +266,4 @@ namespace Umbraco.Tests.Persistence.Repositories
get { return new Guid(Constants.ObjectTypes.Member); }
}
}
-
- [TestFixture]
- public abstract class MemberRepositoryBaseTest
- {
- [SetUp]
- public virtual void Initialize()
- {
- TestHelper.SetupLog4NetForTests();
- TestHelper.InitializeContentDirectories();
-
- string path = TestHelper.CurrentAssemblyDirectory;
- AppDomain.CurrentDomain.SetData("DataDirectory", path);
-
- RepositoryResolver.Current = new RepositoryResolver(
- new RepositoryFactory());
-
- MappingResolver.Current = new MappingResolver(
- () => PluginManager.Current.ResolveAssignedMapperTypes());
-
-
- var dbFactory = new DefaultDatabaseFactory(ConnectionString, ProviderName);
- UnitOfWorkProvider = new PetaPocoUnitOfWorkProvider(dbFactory);
-
- ApplicationContext.Current = new ApplicationContext(
- //assign the db context
- new DatabaseContext(new DefaultDatabaseFactory()),
- //assign the service context
- new ServiceContext(UnitOfWorkProvider, new FileUnitOfWorkProvider(), new PublishingStrategy()),
- //disable cache
- false)
- {
- IsReady = true
- };
-
- Resolution.Freeze();
- }
-
- [TearDown]
- public virtual void TearDown()
- {
- SqlSyntaxContext.SqlSyntaxProvider = null;
- AppDomain.CurrentDomain.SetData("DataDirectory", null);
-
- //reset the app context
- ApplicationContext.Current = null;
-
- RepositoryResolver.Reset();
- MappingResolver.Reset();
- }
-
- public abstract string ConnectionString { get; }
-
- public abstract string ProviderName { get; }
-
- public PetaPocoUnitOfWorkProvider UnitOfWorkProvider { get; set; }
- }
}
\ No newline at end of file
diff --git a/src/Umbraco.Tests/Persistence/Repositories/MemberTypeRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/MemberTypeRepositoryTest.cs
index cc4553cce5..e7a7285f7d 100644
--- a/src/Umbraco.Tests/Persistence/Repositories/MemberTypeRepositoryTest.cs
+++ b/src/Umbraco.Tests/Persistence/Repositories/MemberTypeRepositoryTest.cs
@@ -1,24 +1,22 @@
using System.Linq;
using NUnit.Framework;
+using Umbraco.Core.Models;
using Umbraco.Core.Persistence;
using Umbraco.Core.Persistence.Caching;
using Umbraco.Core.Persistence.Repositories;
-using Umbraco.Core.Persistence.SqlSyntax;
using Umbraco.Core.Persistence.UnitOfWork;
+using Umbraco.Tests.TestHelpers;
+using Umbraco.Tests.TestHelpers.Entities;
namespace Umbraco.Tests.Persistence.Repositories
{
- [TestFixture, NUnit.Framework.Ignore]
- public class MemberTypeRepositoryTest : MemberRepositoryBaseTest
+ [TestFixture]
+ public class MemberTypeRepositoryTest : BaseDatabaseFactoryTest
{
- #region Overrides of MemberRepositoryBaseTest
-
[SetUp]
public override void Initialize()
{
base.Initialize();
-
- SqlSyntaxContext.SqlSyntaxProvider = SqlServerSyntax.Provider;
}
[TearDown]
@@ -27,18 +25,6 @@ namespace Umbraco.Tests.Persistence.Repositories
base.TearDown();
}
- public override string ConnectionString
- {
- get { return @"server=.\SQLEXPRESS;database=Kloud-Website-Production;user id=umbraco;password=umbraco"; }
- }
-
- public override string ProviderName
- {
- get { return "System.Data.SqlClient"; }
- }
-
- #endregion
-
private MemberTypeRepository CreateRepository(IDatabaseUnitOfWork unitOfWork)
{
return new MemberTypeRepository(unitOfWork, NullCacheProvider.Current);
@@ -59,9 +45,33 @@ namespace Umbraco.Tests.Persistence.Repositories
}
[Test]
+ public void MemberRepository_Can_Persist_Member()
+ {
+ IMemberType sut;
+ var provider = new PetaPocoUnitOfWorkProvider();
+ var unitOfWork = provider.GetUnitOfWork();
+ using (var repository = CreateRepository(unitOfWork))
+ {
+ var memberType = MockedContentTypes.CreateSimpleMemberType();
+ repository.AddOrUpdate(memberType);
+ unitOfWork.Commit();
+
+ sut = repository.Get(memberType.Id);
+
+ Assert.That(sut, Is.Not.Null);
+ Assert.That(sut.PropertyGroups.Count(), Is.EqualTo(1));
+ Assert.That(sut.PropertyTypes.Count(), Is.EqualTo(12));
+
+ Assert.That(sut.PropertyGroups.Any(x => x.HasIdentity == false || x.Id == 0), Is.False);
+ Assert.That(sut.PropertyTypes.Any(x => x.HasIdentity == false || x.Id == 0), Is.False);
+ }
+ }
+
+ [Test, NUnit.Framework.Ignore]
public void MemberTypeRepository_Can_Get_MemberType_By_Id()
{
- var unitOfWork = UnitOfWorkProvider.GetUnitOfWork();
+ var provider = new PetaPocoUnitOfWorkProvider();
+ var unitOfWork = provider.GetUnitOfWork();
using (var repository = CreateRepository(unitOfWork))
{
diff --git a/src/Umbraco.Tests/Persistence/SqlCeTableByTableTest.cs b/src/Umbraco.Tests/Persistence/SqlCeTableByTableTest.cs
index 7147dea975..54b427e2eb 100644
--- a/src/Umbraco.Tests/Persistence/SqlCeTableByTableTest.cs
+++ b/src/Umbraco.Tests/Persistence/SqlCeTableByTableTest.cs
@@ -35,12 +35,12 @@ namespace Umbraco.Tests.Persistence
}
//Create the Sql CE database
- var engine = new SqlCeEngine("Datasource=|DataDirectory|test.sdf;Flush Interval=1;File Access Retry Timeout=10");
+ var engine = new SqlCeEngine("Datasource=|DataDirectory|test.sdf;Flush Interval=1;");
engine.CreateDatabase();
SqlSyntaxContext.SqlSyntaxProvider = SqlCeSyntax.Provider;
- _database = new Database("Datasource=|DataDirectory|test.sdf;Flush Interval=1;File Access Retry Timeout=10",
+ _database = new Database("Datasource=|DataDirectory|test.sdf;Flush Interval=1;",
"System.Data.SqlServerCe.4.0");
}
diff --git a/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs b/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs
index a8c68d727f..82a332bc4c 100644
--- a/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs
+++ b/src/Umbraco.Tests/TestHelpers/BaseDatabaseFactoryTest.cs
@@ -107,7 +107,7 @@ namespace Umbraco.Tests.TestHelpers
///
protected virtual string GetDbConnectionString()
{
- return @"Datasource=|DataDirectory|UmbracoPetaPocoTests.sdf;Flush Interval=1;File Access Retry Timeout=10";
+ return @"Datasource=|DataDirectory|UmbracoPetaPocoTests.sdf;Flush Interval=1;";
}
///
diff --git a/src/Umbraco.Tests/TestHelpers/Entities/MockedContentTypes.cs b/src/Umbraco.Tests/TestHelpers/Entities/MockedContentTypes.cs
index f3f09e5fae..cc22ce913b 100644
--- a/src/Umbraco.Tests/TestHelpers/Entities/MockedContentTypes.cs
+++ b/src/Umbraco.Tests/TestHelpers/Entities/MockedContentTypes.cs
@@ -265,5 +265,32 @@ namespace Umbraco.Tests.TestHelpers.Entities
return mediaType;
}
+
+ public static MemberType CreateSimpleMemberType()
+ {
+ var contentType = new MemberType(-1)
+ {
+ Alias = "simple",
+ Name = "Simple Page",
+ Description = "ContentType used for simple text pages",
+ Icon = ".sprTreeDoc3",
+ Thumbnail = "doc.png",
+ SortOrder = 1,
+ CreatorId = 0,
+ Trashed = false
+ };
+
+ var contentCollection = new PropertyTypeCollection();
+ contentCollection.Add(new PropertyType(new Guid(), DataTypeDatabaseType.Ntext) { Alias = "title", Name = "Title", Description = "", HelpText = "", Mandatory = false, SortOrder = 1, DataTypeDefinitionId = -88 });
+ contentCollection.Add(new PropertyType(new Guid(), DataTypeDatabaseType.Ntext) { Alias = "bodyText", Name = "Body Text", Description = "", HelpText = "", Mandatory = false, SortOrder = 2, DataTypeDefinitionId = -87 });
+ contentCollection.Add(new PropertyType(new Guid(), DataTypeDatabaseType.Ntext) { Alias = "author", Name = "Author", Description = "Name of the author", HelpText = "", Mandatory = false, SortOrder = 3, DataTypeDefinitionId = -88 });
+
+ contentType.PropertyGroups.Add(new PropertyGroup(contentCollection) { Name = "Content", SortOrder = 1 });
+
+ //ensure that nothing is marked as dirty
+ contentType.ResetDirtyProperties(false);
+
+ return contentType;
+ }
}
}
\ No newline at end of file
diff --git a/src/Umbraco.Tests/TestHelpers/Entities/MockedMember.cs b/src/Umbraco.Tests/TestHelpers/Entities/MockedMember.cs
new file mode 100644
index 0000000000..2e019b5ae5
--- /dev/null
+++ b/src/Umbraco.Tests/TestHelpers/Entities/MockedMember.cs
@@ -0,0 +1,27 @@
+using Umbraco.Core.Models;
+using Umbraco.Core.Models.Membership;
+
+namespace Umbraco.Tests.TestHelpers.Entities
+{
+ public class MockedMember
+ {
+ public static Member CreateSimpleContent(IMemberType contentType, string name, string email, string password, string username, int parentId)
+ {
+ var member = new Member(name, email, username, password, parentId, contentType)
+ {
+ CreatorId = 0,
+ Email = email,
+ Password = password,
+ Username = username
+ };
+
+ member.SetValue("title", name + " member");
+ member.SetValue("bodyText", "This is a subpage");
+ member.SetValue("author", "John Doe");
+
+ member.ResetDirtyProperties(false);
+
+ return member;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Umbraco.Tests/TestHelpers/TestHelper.cs b/src/Umbraco.Tests/TestHelpers/TestHelper.cs
index 0ba2a08654..552a18339d 100644
--- a/src/Umbraco.Tests/TestHelpers/TestHelper.cs
+++ b/src/Umbraco.Tests/TestHelpers/TestHelper.cs
@@ -49,7 +49,7 @@ namespace Umbraco.Tests.TestHelpers
///
public static void InitializeDatabase()
{
- ConfigurationManager.AppSettings.Set(Core.Configuration.GlobalSettings.UmbracoConnectionName, @"datalayer=SQLCE4Umbraco.SqlCEHelper,SQLCE4Umbraco;data source=|DataDirectory|\UmbracoPetaPocoTests.sdf;Flush Interval=1;File Access Retry Timeout=10");
+ ConfigurationManager.AppSettings.Set(Core.Configuration.GlobalSettings.UmbracoConnectionName, @"datalayer=SQLCE4Umbraco.SqlCEHelper,SQLCE4Umbraco;data source=|DataDirectory|\UmbracoPetaPocoTests.sdf;Flush Interval=1;");
ClearDatabase();
diff --git a/src/Umbraco.Tests/Umbraco.Tests.csproj b/src/Umbraco.Tests/Umbraco.Tests.csproj
index 924701054a..a11556edba 100644
--- a/src/Umbraco.Tests/Umbraco.Tests.csproj
+++ b/src/Umbraco.Tests/Umbraco.Tests.csproj
@@ -305,6 +305,7 @@
+
diff --git a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
index 02ddb3454b..31a874cc4f 100644
--- a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
+++ b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj
@@ -46,6 +46,7 @@
..\
true
+ true
bin\
diff --git a/src/Umbraco.Web/Security/Providers/MembersMembershipProvider.cs b/src/Umbraco.Web/Security/Providers/MembersMembershipProvider.cs
index 0f7d255f74..b02ed4ecf2 100644
--- a/src/Umbraco.Web/Security/Providers/MembersMembershipProvider.cs
+++ b/src/Umbraco.Web/Security/Providers/MembersMembershipProvider.cs
@@ -323,8 +323,8 @@ namespace Umbraco.Web.Security.Providers
"Cannot create member as a member with the same email address exists: " + email);
return null;
}
-
- var member = MemberService.CreateMember(username, email, password, DefaultMemberTypeAlias);
+
+ var member = MemberService.CreateMember(email, username, password, DefaultMemberTypeAlias);
member.IsApproved = isApproved;
member.PasswordQuestion = passwordQuestion;
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/users/EditUser.aspx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/users/EditUser.aspx.cs
index 132917d737..392a885d69 100644
--- a/src/Umbraco.Web/umbraco.presentation/umbraco/users/EditUser.aspx.cs
+++ b/src/Umbraco.Web/umbraco.presentation/umbraco/users/EditUser.aspx.cs
@@ -65,6 +65,11 @@ namespace umbraco.cms.presentation.user
protected void Page_Load(object sender, EventArgs e)
{
+ //if the current user is not an admin they cannot edit a user at all
+ if (CurrentUser.IsAdmin() == false)
+ {
+ throw new UserAuthorizationException("Access denied");
+ }
int UID = int.Parse(Request.QueryString["id"]);
u = BusinessLogic.User.GetUser(UID);