From 24091991fa524e1d962b02fd604d4301eefa25ba Mon Sep 17 00:00:00 2001 From: Morten Christensen Date: Wed, 4 Sep 2013 14:47:42 +0200 Subject: [PATCH] Updating MemberRepository test fixture. All tests ignored while using local db for testing. --- .../Repositories/MemberRepositoryTest.cs | 248 +++++++++++++++++- 1 file changed, 238 insertions(+), 10 deletions(-) diff --git a/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs b/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs index 76108692c1..288afe4fa9 100644 --- a/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs +++ b/src/Umbraco.Tests/Persistence/Repositories/MemberRepositoryTest.cs @@ -1,8 +1,13 @@ using System; +using System.Linq; 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.Mappers; +using Umbraco.Core.Persistence.Querying; using Umbraco.Core.Persistence.SqlSyntax; using Umbraco.Core.Persistence.UnitOfWork; using Umbraco.Core.Publishing; @@ -12,10 +17,8 @@ using Umbraco.Tests.TestHelpers; namespace Umbraco.Tests.Persistence.Repositories { [TestFixture, NUnit.Framework.Ignore] - public abstract class MemberRepositoryTest : MemberRepositoryBaseTest + public class MemberRepositoryTest : MemberRepositoryBaseTest { - private Database _database; - #region Overrides of MemberRepositoryBaseTest [SetUp] @@ -24,9 +27,6 @@ namespace Umbraco.Tests.Persistence.Repositories base.Initialize(); SqlSyntaxContext.SqlSyntaxProvider = SqlServerSyntax.Provider; - - _database = new Database(@"server=.\SQLEXPRESS;database=EmptyForTest;user id=umbraco;password=umbraco", - "System.Data.SqlClient"); } [TearDown] @@ -35,14 +35,230 @@ namespace Umbraco.Tests.Persistence.Repositories base.TearDown(); } - public override Database Database + public override string ConnectionString { - get { return _database; } + get { return @"server=.\SQLEXPRESS;database=EmptyForTest;user id=umbraco;password=umbraco"; } + } + + public override string ProviderName + { + get { return "System.Data.SqlClient"; } } #endregion + [Test] + public void MemberRepository_Can_Get_Member_By_Id() + { + var unitOfWork = UnitOfWorkProvider.GetUnitOfWork(); + var repository = RepositoryResolver.Current.Factory.CreateMemberRepository(unitOfWork); + var member = repository.Get(1341); + + Assert.That(member, Is.Not.Null); + } + + [Test] + public void MemberRepository_Can_Get_Specific_Members() + { + var unitOfWork = UnitOfWorkProvider.GetUnitOfWork(); + var repository = RepositoryResolver.Current.Factory.CreateMemberRepository(unitOfWork); + + var members = repository.GetAll(1341, 1383); + + Assert.That(members, Is.Not.Null); + Assert.That(members.Any(x => x == null), Is.False); + Assert.That(members.Count(), Is.EqualTo(2)); + } + + [Test] + public void MemberRepository_Can_Get_All_Members() + { + var unitOfWork = UnitOfWorkProvider.GetUnitOfWork(); + var repository = RepositoryResolver.Current.Factory.CreateMemberRepository(unitOfWork); + + var members = repository.GetAll(); + + Assert.That(members, Is.Not.Null); + Assert.That(members.Any(x => x == null), Is.False); + Assert.That(members.Count(), Is.EqualTo(6)); + } + + [Test] + public void MemberRepository_Can_Perform_GetByQuery_With_Key() + { + // Arrange + var unitOfWork = UnitOfWorkProvider.GetUnitOfWork(); + var repository = RepositoryResolver.Current.Factory.CreateMemberRepository(unitOfWork); + + // Act + var query = Query.Builder.Where(x => x.Key == new Guid("A6B9CA6B-0615-42CA-B5F5-338417EC76BE")); + var result = repository.GetByQuery(query); + + // Assert + Assert.That(result.Count(), Is.EqualTo(1)); + Assert.That(result.First().Id, Is.EqualTo(1341)); + } + + [Test] + public void MemberRepository_Can_Perform_GetByQuery_With_Property_Value() + { + // Arrange + var unitOfWork = UnitOfWorkProvider.GetUnitOfWork(); + var repository = RepositoryResolver.Current.Factory.CreateMemberRepository(unitOfWork); + + // Act + var query = Query.Builder.Where(x => ((Member)x).ShortStringPropertyValue.EndsWith("piquet_h")); + var result = repository.GetByQuery(query); + + // Assert + Assert.That(result.Any(x => x == null), Is.False); + Assert.That(result.Count(), Is.EqualTo(1)); + Assert.That(result.First().Id, Is.EqualTo(1341)); + } + + [Test] + public void MemberRepository_Can_Perform_GetByQuery_With_Property_Alias_And_Value() + { + // Arrange + var unitOfWork = UnitOfWorkProvider.GetUnitOfWork(); + var repository = RepositoryResolver.Current.Factory.CreateMemberRepository(unitOfWork); + + // Act + var query = Query.Builder.Where(x => ((Member)x).LongStringPropertyValue.Contains("1095") && ((Member)x).PropertyTypeAlias == "headshot"); + var result = repository.GetByQuery(query); + + // Assert + Assert.That(result.Any(x => x == null), Is.False); + Assert.That(result.Count(), Is.EqualTo(5)); + } + + [Test] + public void Can_Create_Correct_Subquery() + { + var query = Query.Builder.Where(x => + ((Member) x).LongStringPropertyValue.Contains("1095") && + ((Member) x).PropertyTypeAlias == "headshot"); + + var sqlSubquery = GetSubquery(); + var translator = new SqlTranslator(sqlSubquery, query); + var subquery = translator.Translate(); + var sql = GetBaseQuery(false) + .Append(new Sql("WHERE umbracoNode.id IN (" + subquery.SQL + ")", subquery.Arguments)) + .OrderByDescending(x => x.VersionDate) + .OrderBy(x => x.SortOrder); + + Console.WriteLine(sql.SQL); + Assert.That(sql.SQL, Is.Not.Empty); + } + + private Sql GetBaseQuery(bool isCount) + { + if (isCount) + { + var sqlCount = new Sql() + .Select("COUNT(*)") + .From() + .InnerJoin().On(left => left.NodeId, right => right.NodeId) + .InnerJoin().On(left => left.NodeId, right => right.ContentTypeId) + .InnerJoin().On(left => left.NodeId, right => right.NodeId) + .InnerJoin().On(left => left.NodeId, right => right.NodeId) + .Where(x => x.NodeObjectType == NodeObjectTypeId); + return sqlCount; + } + + var sql = new Sql(); + sql.Select("umbracoNode.*", "cmsContent.contentType", "cmsContentType.alias AS ContentTypeAlias", "cmsContentVersion.VersionId", + "cmsContentVersion.VersionDate", "cmsContentVersion.LanguageLocale", "cmsMember.Email", + "cmsMember.LoginName", "cmsMember.Password", "cmsPropertyData.id AS PropertyDataId", "cmsPropertyData.propertytypeid", + "cmsPropertyData.dataDate", "cmsPropertyData.dataInt", "cmsPropertyData.dataNtext", "cmsPropertyData.dataNvarchar", + "cmsPropertyType.id", "cmsPropertyType.Alias", "cmsPropertyType.Description", + "cmsPropertyType.Name", "cmsPropertyType.mandatory", "cmsPropertyType.validationRegExp", + "cmsPropertyType.helpText", "cmsPropertyType.sortOrder AS PropertyTypeSortOrder", "cmsPropertyType.propertyTypeGroupId", + "cmsPropertyType.dataTypeId", "cmsDataType.controlId", "cmsDataType.dbType") + .From() + .InnerJoin().On(left => left.NodeId, right => right.NodeId) + .InnerJoin().On(left => left.NodeId, right => right.ContentTypeId) + .InnerJoin().On(left => left.NodeId, right => right.NodeId) + .InnerJoin().On(left => left.NodeId, right => right.NodeId) + .LeftJoin().On(left => left.ContentTypeId, right => right.ContentTypeId) + .LeftJoin().On(left => left.DataTypeId, right => right.DataTypeId) + .LeftJoin().On(left => left.PropertyTypeId, right => right.Id) + .Append("AND cmsPropertyData.versionId = cmsContentVersion.VersionId") + .Where(x => x.NodeObjectType == NodeObjectTypeId); + return sql; + } + + private Sql GetSubquery() + { + var sql = new Sql(); + sql.Select("umbracoNode.id") + .From() + .InnerJoin().On(left => left.NodeId, right => right.NodeId) + .InnerJoin().On(left => left.NodeId, right => right.ContentTypeId) + .InnerJoin().On(left => left.NodeId, right => right.NodeId) + .InnerJoin().On(left => left.NodeId, right => right.NodeId) + .LeftJoin().On(left => left.ContentTypeId, right => right.ContentTypeId) + .LeftJoin().On(left => left.DataTypeId, right => right.DataTypeId) + .LeftJoin().On(left => left.PropertyTypeId, right => right.Id) + .Append("AND cmsPropertyData.versionId = cmsContentVersion.VersionId") + .Where(x => x.NodeObjectType == NodeObjectTypeId); + return sql; + } + + private Guid NodeObjectTypeId + { + get { return new Guid(Constants.ObjectTypes.Member); } + } + } + + [TestFixture, NUnit.Framework.Ignore] + public class MemberTypeRepositoryTest : MemberRepositoryBaseTest + { + #region Overrides of MemberRepositoryBaseTest + + [SetUp] + public override void Initialize() + { + base.Initialize(); + + SqlSyntaxContext.SqlSyntaxProvider = SqlServerSyntax.Provider; + } + + [TearDown] + public override void TearDown() + { + 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 + + [Test] + public void MemberTypeRepository_Can_Get_MemberType_By_Id() + { + var unitOfWork = UnitOfWorkProvider.GetUnitOfWork(); + var repository = RepositoryResolver.Current.Factory.CreateMemberTypeRepository(unitOfWork); + + var memberType = repository.Get(1340); + + Assert.That(memberType, Is.Not.Null); + Assert.That(memberType.PropertyTypes.Count(), Is.EqualTo(13)); + Assert.That(memberType.PropertyGroups.Any(), Is.False); + + repository.AddOrUpdate(memberType); + unitOfWork.Commit(); + Assert.That(memberType.PropertyTypes.Any(x => x.HasIdentity == false), Is.False); + } } [TestFixture] @@ -59,12 +275,19 @@ namespace Umbraco.Tests.Persistence.Repositories 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(new PetaPocoUnitOfWorkProvider(), new FileUnitOfWorkProvider(), new PublishingStrategy()), + new ServiceContext(UnitOfWorkProvider, new FileUnitOfWorkProvider(), new PublishingStrategy()), //disable cache false) { @@ -84,8 +307,13 @@ namespace Umbraco.Tests.Persistence.Repositories ApplicationContext.Current = null; RepositoryResolver.Reset(); + MappingResolver.Reset(); } - public abstract Database Database { get; } + public abstract string ConnectionString { get; } + + public abstract string ProviderName { get; } + + public PetaPocoUnitOfWorkProvider UnitOfWorkProvider { get; set; } } } \ No newline at end of file