Merge remote-tracking branch 'origin/netcore/netcore' into netcore/feature/more-files-from-infrastructure-to-core
# Conflicts: # src/Umbraco.Tests.UnitTests/Umbraco.Core/PropertyEditors/ConvertersTests.cs
This commit is contained in:
@@ -0,0 +1,279 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Extensions.Logging.Abstractions;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Umbraco.Core.Configuration;
|
||||
using Umbraco.Core.Migrations;
|
||||
using Umbraco.Core.Migrations.Install;
|
||||
using Umbraco.Core.Migrations.Upgrade;
|
||||
using Umbraco.Core.Persistence.DatabaseModelDefinitions;
|
||||
using Umbraco.Core.Persistence.Dtos;
|
||||
using Umbraco.Core.Services;
|
||||
using Umbraco.Tests.Common.Builders;
|
||||
using Umbraco.Tests.Integration.Testing;
|
||||
using Umbraco.Tests.TestHelpers;
|
||||
using Umbraco.Tests.Testing;
|
||||
|
||||
namespace Umbraco.Tests.Migrations
|
||||
{
|
||||
[TestFixture]
|
||||
[UmbracoTest(Database = UmbracoTestOptions.Database.NewEmptyPerTest)]
|
||||
public class AdvancedMigrationTests : UmbracoIntegrationTest
|
||||
{
|
||||
private ILoggerFactory _loggerFactory = NullLoggerFactory.Instance;
|
||||
|
||||
private IUmbracoVersion UmbracoVersion => GetRequiredService<IUmbracoVersion>();
|
||||
|
||||
[Test]
|
||||
public void CreateTableOfTDto()
|
||||
{
|
||||
var builder = Mock.Of<IMigrationBuilder>();
|
||||
Mock.Get(builder)
|
||||
.Setup(x => x.Build(It.IsAny<Type>(), It.IsAny<IMigrationContext>()))
|
||||
.Returns<Type, IMigrationContext>((t, c) =>
|
||||
{
|
||||
if (t != typeof(CreateTableOfTDtoMigration))
|
||||
throw new NotSupportedException();
|
||||
return new CreateTableOfTDtoMigration(c);
|
||||
});
|
||||
|
||||
using (var scope = ScopeProvider.CreateScope())
|
||||
{
|
||||
var upgrader = new Upgrader(
|
||||
new MigrationPlan("test")
|
||||
.From(string.Empty)
|
||||
.To<CreateTableOfTDtoMigration>("done"));
|
||||
|
||||
upgrader.Execute(ScopeProvider, builder, Mock.Of<IKeyValueService>(), _loggerFactory.CreateLogger<Upgrader>(), _loggerFactory);
|
||||
|
||||
var helper = new DatabaseSchemaCreator(scope.Database, LoggerFactory.CreateLogger<DatabaseSchemaCreator>(), LoggerFactory, UmbracoVersion);
|
||||
var exists = helper.TableExists("umbracoUser");
|
||||
Assert.IsTrue(exists);
|
||||
|
||||
scope.Complete();
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void DeleteKeysAndIndexesOfTDto()
|
||||
{
|
||||
var builder = Mock.Of<IMigrationBuilder>();
|
||||
Mock.Get(builder)
|
||||
.Setup(x => x.Build(It.IsAny<Type>(), It.IsAny<IMigrationContext>()))
|
||||
.Returns<Type, IMigrationContext>((t, c) =>
|
||||
{
|
||||
switch (t.Name)
|
||||
{
|
||||
case "CreateTableOfTDtoMigration":
|
||||
return new CreateTableOfTDtoMigration(c);
|
||||
case "DeleteKeysAndIndexesMigration":
|
||||
return new DeleteKeysAndIndexesMigration(c);
|
||||
default:
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
});
|
||||
|
||||
using (var scope = ScopeProvider.CreateScope())
|
||||
{
|
||||
var upgrader = new Upgrader(
|
||||
new MigrationPlan("test")
|
||||
.From(string.Empty)
|
||||
.To<CreateTableOfTDtoMigration>("a")
|
||||
.To<DeleteKeysAndIndexesMigration>("done"));
|
||||
|
||||
upgrader.Execute(ScopeProvider, builder, Mock.Of<IKeyValueService>(), _loggerFactory.CreateLogger<Upgrader>(), _loggerFactory);
|
||||
scope.Complete();
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void CreateKeysAndIndexesOfTDto()
|
||||
{
|
||||
var builder = Mock.Of<IMigrationBuilder>();
|
||||
Mock.Get(builder)
|
||||
.Setup(x => x.Build(It.IsAny<Type>(), It.IsAny<IMigrationContext>()))
|
||||
.Returns<Type, IMigrationContext>((t, c) =>
|
||||
{
|
||||
switch (t.Name)
|
||||
{
|
||||
case "CreateTableOfTDtoMigration":
|
||||
return new CreateTableOfTDtoMigration(c);
|
||||
case "DeleteKeysAndIndexesMigration":
|
||||
return new DeleteKeysAndIndexesMigration(c);
|
||||
case "CreateKeysAndIndexesOfTDtoMigration":
|
||||
return new CreateKeysAndIndexesOfTDtoMigration(c);
|
||||
default:
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
});
|
||||
|
||||
using (var scope = ScopeProvider.CreateScope())
|
||||
{
|
||||
var upgrader = new Upgrader(
|
||||
new MigrationPlan("test")
|
||||
.From(string.Empty)
|
||||
.To<CreateTableOfTDtoMigration>("a")
|
||||
.To<DeleteKeysAndIndexesMigration>("b")
|
||||
.To<CreateKeysAndIndexesOfTDtoMigration>("done"));
|
||||
|
||||
upgrader.Execute(ScopeProvider, builder, Mock.Of<IKeyValueService>(), _loggerFactory.CreateLogger<Upgrader>(), _loggerFactory);
|
||||
scope.Complete();
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void CreateKeysAndIndexes()
|
||||
{
|
||||
var builder = Mock.Of<IMigrationBuilder>();
|
||||
Mock.Get(builder)
|
||||
.Setup(x => x.Build(It.IsAny<Type>(), It.IsAny<IMigrationContext>()))
|
||||
.Returns<Type, IMigrationContext>((t, c) =>
|
||||
{
|
||||
switch (t.Name)
|
||||
{
|
||||
case "CreateTableOfTDtoMigration":
|
||||
return new CreateTableOfTDtoMigration(c);
|
||||
case "DeleteKeysAndIndexesMigration":
|
||||
return new DeleteKeysAndIndexesMigration(c);
|
||||
case "CreateKeysAndIndexesMigration":
|
||||
return new CreateKeysAndIndexesMigration(c);
|
||||
default:
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
});
|
||||
|
||||
using (var scope = ScopeProvider.CreateScope())
|
||||
{
|
||||
var upgrader = new Upgrader(
|
||||
new MigrationPlan("test")
|
||||
.From(string.Empty)
|
||||
.To<CreateTableOfTDtoMigration>("a")
|
||||
.To<DeleteKeysAndIndexesMigration>("b")
|
||||
.To<CreateKeysAndIndexesMigration>("done"));
|
||||
|
||||
upgrader.Execute(ScopeProvider, builder, Mock.Of<IKeyValueService>(), _loggerFactory.CreateLogger<Upgrader>(), _loggerFactory);
|
||||
scope.Complete();
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void CreateColumn()
|
||||
{
|
||||
var builder = Mock.Of<IMigrationBuilder>();
|
||||
Mock.Get(builder)
|
||||
.Setup(x => x.Build(It.IsAny<Type>(), It.IsAny<IMigrationContext>()))
|
||||
.Returns<Type, IMigrationContext>((t, c) =>
|
||||
{
|
||||
switch (t.Name)
|
||||
{
|
||||
case "CreateTableOfTDtoMigration":
|
||||
return new CreateTableOfTDtoMigration(c);
|
||||
case "CreateColumnMigration":
|
||||
return new CreateColumnMigration(c);
|
||||
default:
|
||||
throw new NotSupportedException();
|
||||
}
|
||||
});
|
||||
|
||||
using (var scope = ScopeProvider.CreateScope())
|
||||
{
|
||||
var upgrader = new Upgrader(
|
||||
new MigrationPlan("test")
|
||||
.From(string.Empty)
|
||||
.To<CreateTableOfTDtoMigration>("a")
|
||||
.To<CreateColumnMigration>("done"));
|
||||
|
||||
upgrader.Execute(ScopeProvider, builder, Mock.Of<IKeyValueService>(), _loggerFactory.CreateLogger<Upgrader>(), _loggerFactory);
|
||||
scope.Complete();
|
||||
}
|
||||
}
|
||||
|
||||
public class CreateTableOfTDtoMigration : MigrationBase
|
||||
{
|
||||
public CreateTableOfTDtoMigration(IMigrationContext context)
|
||||
: base(context)
|
||||
{ }
|
||||
|
||||
public override void Migrate()
|
||||
{
|
||||
// creates User table with keys, indexes, etc
|
||||
Create.Table<UserDto>().Do();
|
||||
}
|
||||
}
|
||||
|
||||
public class DeleteKeysAndIndexesMigration : MigrationBase
|
||||
{
|
||||
public DeleteKeysAndIndexesMigration(IMigrationContext context)
|
||||
: base(context)
|
||||
{ }
|
||||
|
||||
public override void Migrate()
|
||||
{
|
||||
// drops User table keys and indexes
|
||||
//Execute.DropKeysAndIndexes("umbracoUser");
|
||||
|
||||
// drops *all* tables keys and indexes
|
||||
var tables = SqlSyntax.GetTablesInSchema(Context.Database).ToList();
|
||||
foreach (var table in tables)
|
||||
Delete.KeysAndIndexes(table, false, true).Do();
|
||||
foreach (var table in tables)
|
||||
Delete.KeysAndIndexes(table, true, false).Do();
|
||||
}
|
||||
}
|
||||
|
||||
public class CreateKeysAndIndexesOfTDtoMigration : MigrationBase
|
||||
{
|
||||
public CreateKeysAndIndexesOfTDtoMigration(IMigrationContext context)
|
||||
: base(context)
|
||||
{ }
|
||||
|
||||
public override void Migrate()
|
||||
{
|
||||
// creates Node table keys and indexes
|
||||
Create.KeysAndIndexes<UserDto>().Do();
|
||||
}
|
||||
}
|
||||
|
||||
public class CreateKeysAndIndexesMigration : MigrationBase
|
||||
{
|
||||
public CreateKeysAndIndexesMigration(IMigrationContext context)
|
||||
: base(context)
|
||||
{ }
|
||||
|
||||
public override void Migrate()
|
||||
{
|
||||
// creates *all* tables keys and indexes
|
||||
foreach (var x in DatabaseSchemaCreator.OrderedTables)
|
||||
{
|
||||
// ok - for tests, restrict to Node
|
||||
if (x != typeof(UserDto)) continue;
|
||||
|
||||
Create.KeysAndIndexes(x).Do();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class CreateColumnMigration : MigrationBase
|
||||
{
|
||||
public CreateColumnMigration(IMigrationContext context)
|
||||
: base(context)
|
||||
{ }
|
||||
|
||||
public override void Migrate()
|
||||
{
|
||||
// cannot delete the column without this, of course
|
||||
Delete.KeysAndIndexes("umbracoUser").Do();
|
||||
|
||||
Delete.Column("id").FromTable("umbracoUser").Do();
|
||||
|
||||
var table = DefinitionFactory.GetTableDefinition(typeof(UserDto), SqlSyntax);
|
||||
var column = table.Columns.First(x => x.Name == "id");
|
||||
var create = SqlSyntax.Format(column); // returns [id] INTEGER NOT NULL IDENTITY(1060,1)
|
||||
Database.Execute($"ALTER TABLE {SqlSyntax.GetQuotedTableName("umbracoUser")} ADD " + create);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Microsoft.Extensions.Logging;
|
||||
@@ -30,15 +30,21 @@ namespace Umbraco.Tests.Integration.Umbraco.Infrastructure.Persistence.Repositor
|
||||
private Content _subpage2;
|
||||
private Relation _relation;
|
||||
private Relation _relation2;
|
||||
|
||||
private IContentTypeService ContentTypeService => GetRequiredService<IContentTypeService>();
|
||||
|
||||
private IContentService ContentService => GetRequiredService<IContentService>();
|
||||
|
||||
private IMediaTypeService MediaTypeService => GetRequiredService<IMediaTypeService>();
|
||||
|
||||
private IMediaService MediaService => GetRequiredService<IMediaService>();
|
||||
|
||||
private IMemberTypeService MemberTypeService => GetRequiredService<IMemberTypeService>();
|
||||
private IMemberService MemberService => GetRequiredService<IMemberService>();
|
||||
|
||||
private IMemberService GetMemberService() => GetRequiredService<IMemberService>();
|
||||
|
||||
private IRelationService RelationService => GetRequiredService<IRelationService>();
|
||||
|
||||
private IFileService FileService => GetRequiredService<IFileService>();
|
||||
|
||||
[SetUp]
|
||||
@@ -57,13 +63,12 @@ namespace Umbraco.Tests.Integration.Umbraco.Infrastructure.Persistence.Repositor
|
||||
public void Can_Perform_Add_On_RelationRepository()
|
||||
{
|
||||
// Arrange
|
||||
using (var scope = ScopeProvider.CreateScope())
|
||||
using (IScope scope = ScopeProvider.CreateScope())
|
||||
{
|
||||
RelationTypeRepository repositoryType;
|
||||
var repository = CreateRepository(ScopeProvider, out repositoryType);
|
||||
RelationRepository repository = CreateRepository(ScopeProvider, out RelationTypeRepository repositoryType);
|
||||
|
||||
// Act
|
||||
var relationType = repositoryType.Get(1);
|
||||
IRelationType relationType = repositoryType.Get(1);
|
||||
var relation = new Relation(_textpage.Id, _subpage.Id, relationType);
|
||||
repository.Save(relation);
|
||||
|
||||
@@ -78,18 +83,17 @@ namespace Umbraco.Tests.Integration.Umbraco.Infrastructure.Persistence.Repositor
|
||||
public void Can_Perform_Update_On_RelationRepository()
|
||||
{
|
||||
// Arrange
|
||||
using (var scope = ScopeProvider.CreateScope())
|
||||
using (IScope scope = ScopeProvider.CreateScope())
|
||||
{
|
||||
RelationTypeRepository repositoryType;
|
||||
var repository = CreateRepository(ScopeProvider, out repositoryType);
|
||||
RelationRepository repository = CreateRepository(ScopeProvider, out RelationTypeRepository repositoryType);
|
||||
|
||||
// Act
|
||||
var relation = repository.Get(1);
|
||||
IRelation relation = repository.Get(1);
|
||||
relation.Comment = "This relation has been updated";
|
||||
repository.Save(relation);
|
||||
|
||||
|
||||
var relationUpdated = repository.Get(1);
|
||||
IRelation relationUpdated = repository.Get(1);
|
||||
|
||||
// Assert
|
||||
Assert.That(relationUpdated, Is.Not.Null);
|
||||
@@ -102,13 +106,12 @@ namespace Umbraco.Tests.Integration.Umbraco.Infrastructure.Persistence.Repositor
|
||||
public void Can_Perform_Delete_On_RelationRepository()
|
||||
{
|
||||
// Arrange
|
||||
using (var scope = ScopeProvider.CreateScope())
|
||||
using (IScope scope = ScopeProvider.CreateScope())
|
||||
{
|
||||
RelationTypeRepository repositoryType;
|
||||
var repository = CreateRepository(ScopeProvider, out repositoryType);
|
||||
RelationRepository repository = CreateRepository(ScopeProvider, out RelationTypeRepository repositoryType);
|
||||
|
||||
// Act
|
||||
var relation = repository.Get(2);
|
||||
IRelation relation = repository.Get(2);
|
||||
repository.Delete(relation);
|
||||
|
||||
|
||||
@@ -123,13 +126,12 @@ namespace Umbraco.Tests.Integration.Umbraco.Infrastructure.Persistence.Repositor
|
||||
public void Can_Perform_Get_On_RelationRepository()
|
||||
{
|
||||
// Arrange
|
||||
using (var scope = ScopeProvider.CreateScope())
|
||||
using (IScope scope = ScopeProvider.CreateScope())
|
||||
{
|
||||
RelationTypeRepository repositoryType;
|
||||
var repository = CreateRepository(ScopeProvider, out repositoryType);
|
||||
RelationRepository repository = CreateRepository(ScopeProvider, out RelationTypeRepository repositoryType);
|
||||
|
||||
// Act
|
||||
var relation = repository.Get(1);
|
||||
IRelation relation = repository.Get(1);
|
||||
|
||||
// Assert
|
||||
Assert.That(relation, Is.Not.Null);
|
||||
@@ -144,13 +146,12 @@ namespace Umbraco.Tests.Integration.Umbraco.Infrastructure.Persistence.Repositor
|
||||
public void Can_Perform_GetAll_On_RelationRepository()
|
||||
{
|
||||
// Arrange
|
||||
using (var scope = ScopeProvider.CreateScope())
|
||||
using (IScope scope = ScopeProvider.CreateScope())
|
||||
{
|
||||
RelationTypeRepository repositoryType;
|
||||
var repository = CreateRepository(ScopeProvider, out repositoryType);
|
||||
RelationRepository repository = CreateRepository(ScopeProvider, out RelationTypeRepository repositoryType);
|
||||
|
||||
// Act
|
||||
var relations = repository.GetMany();
|
||||
IEnumerable<IRelation> relations = repository.GetMany();
|
||||
|
||||
// Assert
|
||||
Assert.That(relations, Is.Not.Null);
|
||||
@@ -164,13 +165,12 @@ namespace Umbraco.Tests.Integration.Umbraco.Infrastructure.Persistence.Repositor
|
||||
public void Can_Perform_GetAll_With_Params_On_RelationRepository()
|
||||
{
|
||||
// Arrange
|
||||
using (var scope = ScopeProvider.CreateScope())
|
||||
using (IScope scope = ScopeProvider.CreateScope())
|
||||
{
|
||||
RelationTypeRepository repositoryType;
|
||||
var repository = CreateRepository(ScopeProvider, out repositoryType);
|
||||
RelationRepository repository = CreateRepository(ScopeProvider, out RelationTypeRepository repositoryType);
|
||||
|
||||
// Act
|
||||
var relations = repository.GetMany(1, 2);
|
||||
IEnumerable<IRelation> relations = repository.GetMany(1, 2);
|
||||
|
||||
// Assert
|
||||
Assert.That(relations, Is.Not.Null);
|
||||
@@ -183,18 +183,18 @@ namespace Umbraco.Tests.Integration.Umbraco.Infrastructure.Persistence.Repositor
|
||||
[Test]
|
||||
public void Get_Paged_Parent_Entities_By_Child_Id()
|
||||
{
|
||||
CreateTestDataForPagingTests(out var createdContent, out var createdMembers, out var createdMedia);
|
||||
CreateTestDataForPagingTests(out List<IContent> createdContent, out List<IMember> createdMembers, out List<IMedia> createdMedia);
|
||||
|
||||
using (var scope = ScopeProvider.CreateScope())
|
||||
using (IScope scope = ScopeProvider.CreateScope())
|
||||
{
|
||||
var repository = CreateRepository(ScopeProvider, out var relationTypeRepository);
|
||||
RelationRepository repository = CreateRepository(ScopeProvider, out var relationTypeRepository);
|
||||
|
||||
// Get parent entities for child id
|
||||
var parents = repository.GetPagedParentEntitiesByChildId(createdMedia[0].Id, 0, 11, out var totalRecords).ToList();
|
||||
Assert.AreEqual(6, totalRecords);
|
||||
Assert.AreEqual(6, parents.Count);
|
||||
|
||||
//add the next page
|
||||
// add the next page
|
||||
parents.AddRange(repository.GetPagedParentEntitiesByChildId(createdMedia[0].Id, 1, 11, out totalRecords));
|
||||
Assert.AreEqual(6, totalRecords);
|
||||
Assert.AreEqual(6, parents.Count);
|
||||
@@ -207,7 +207,7 @@ namespace Umbraco.Tests.Integration.Umbraco.Infrastructure.Persistence.Repositor
|
||||
Assert.AreEqual(0, mediaEntities.Count);
|
||||
Assert.AreEqual(3, memberEntities.Count);
|
||||
|
||||
//only of a certain type
|
||||
// only of a certain type
|
||||
parents.AddRange(repository.GetPagedParentEntitiesByChildId(createdMedia[0].Id, 0, 100, out totalRecords, UmbracoObjectTypes.Document.GetGuid()));
|
||||
Assert.AreEqual(3, totalRecords);
|
||||
|
||||
@@ -222,17 +222,17 @@ namespace Umbraco.Tests.Integration.Umbraco.Infrastructure.Persistence.Repositor
|
||||
[Test]
|
||||
public void Get_Paged_Parent_Child_Entities_With_Same_Entity_Relation()
|
||||
{
|
||||
//Create a media item and create a relationship between itself (parent -> child)
|
||||
var imageType = MediaTypeBuilder.CreateImageMediaType("myImage");
|
||||
// Create a media item and create a relationship between itself (parent -> child)
|
||||
MediaType imageType = MediaTypeBuilder.CreateImageMediaType("myImage");
|
||||
MediaTypeService.Save(imageType);
|
||||
var media = MediaBuilder.CreateMediaImage(imageType, -1);
|
||||
Media media = MediaBuilder.CreateMediaImage(imageType, -1);
|
||||
MediaService.Save(media);
|
||||
var relType = RelationService.GetRelationTypeByAlias(Constants.Conventions.RelationTypes.RelatedMediaAlias);
|
||||
IRelationType relType = RelationService.GetRelationTypeByAlias(Constants.Conventions.RelationTypes.RelatedMediaAlias);
|
||||
RelationService.Relate(media.Id, media.Id, relType);
|
||||
|
||||
using (var scope = ScopeProvider.CreateScope())
|
||||
using (IScope scope = ScopeProvider.CreateScope())
|
||||
{
|
||||
var repository = CreateRepository(ScopeProvider, out var relationTypeRepository);
|
||||
RelationRepository repository = CreateRepository(ScopeProvider, out var relationTypeRepository);
|
||||
|
||||
// Get parent entities for child id
|
||||
var parents = repository.GetPagedParentEntitiesByChildId(media.Id, 0, 10, out var totalRecords).ToList();
|
||||
@@ -251,16 +251,16 @@ namespace Umbraco.Tests.Integration.Umbraco.Infrastructure.Persistence.Repositor
|
||||
{
|
||||
CreateTestDataForPagingTests(out var createdContent, out var createdMembers, out _);
|
||||
|
||||
using (var scope = ScopeProvider.CreateScope())
|
||||
using (IScope scope = ScopeProvider.CreateScope())
|
||||
{
|
||||
var repository = CreateRepository(ScopeProvider, out _);
|
||||
RelationRepository repository = CreateRepository(ScopeProvider, out _);
|
||||
|
||||
// Get parent entities for child id
|
||||
var parents = repository.GetPagedChildEntitiesByParentId(createdContent[0].Id, 0, 6, out var totalRecords).ToList();
|
||||
Assert.AreEqual(3, totalRecords);
|
||||
Assert.AreEqual(3, parents.Count);
|
||||
|
||||
//add the next page
|
||||
// add the next page
|
||||
parents.AddRange(repository.GetPagedChildEntitiesByParentId(createdContent[0].Id, 1, 6, out totalRecords));
|
||||
Assert.AreEqual(3, totalRecords);
|
||||
Assert.AreEqual(3, parents.Count);
|
||||
@@ -273,7 +273,7 @@ namespace Umbraco.Tests.Integration.Umbraco.Infrastructure.Persistence.Repositor
|
||||
Assert.AreEqual(3, mediaEntities.Count);
|
||||
Assert.AreEqual(0, memberEntities.Count);
|
||||
|
||||
//only of a certain type
|
||||
// only of a certain type
|
||||
parents.AddRange(repository.GetPagedChildEntitiesByParentId(createdContent[0].Id, 0, 100, out totalRecords, UmbracoObjectTypes.Media.GetGuid()));
|
||||
Assert.AreEqual(3, totalRecords);
|
||||
|
||||
@@ -287,9 +287,9 @@ namespace Umbraco.Tests.Integration.Umbraco.Infrastructure.Persistence.Repositor
|
||||
|
||||
private void CreateTestDataForPagingTests(out List<IContent> createdContent, out List<IMember> createdMembers, out List<IMedia> createdMedia)
|
||||
{
|
||||
//Create content
|
||||
// Create content
|
||||
createdContent = new List<IContent>();
|
||||
var contentType = ContentTypeBuilder.CreateBasicContentType("blah");
|
||||
ContentType contentType = ContentTypeBuilder.CreateBasicContentType("blah");
|
||||
ContentTypeService.Save(contentType);
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
@@ -298,33 +298,42 @@ namespace Umbraco.Tests.Integration.Umbraco.Infrastructure.Persistence.Repositor
|
||||
createdContent.Add(c1);
|
||||
}
|
||||
|
||||
//Create media
|
||||
// Create media
|
||||
createdMedia = new List<IMedia>();
|
||||
var imageType = MediaTypeBuilder.CreateImageMediaType("myImage");
|
||||
MediaType imageType = MediaTypeBuilder.CreateImageMediaType("myImage");
|
||||
MediaTypeService.Save(imageType);
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
var c1 = MediaBuilder.CreateMediaImage(imageType, -1);
|
||||
Media c1 = MediaBuilder.CreateMediaImage(imageType, -1);
|
||||
MediaService.Save(c1);
|
||||
createdMedia.Add(c1);
|
||||
}
|
||||
|
||||
// Create members
|
||||
var memberType = MemberTypeBuilder.CreateSimpleMemberType("simple");
|
||||
MemberType memberType = MemberTypeBuilder.CreateSimpleMemberType("simple");
|
||||
MemberTypeService.Save(memberType);
|
||||
createdMembers = MemberBuilder.CreateSimpleMembers(memberType, 3).ToList();
|
||||
MemberService.Save(createdMembers);
|
||||
GetMemberService().Save(createdMembers);
|
||||
|
||||
var relType = RelationService.GetRelationTypeByAlias(Constants.Conventions.RelationTypes.RelatedMediaAlias);
|
||||
IRelationType relType = RelationService.GetRelationTypeByAlias(Constants.Conventions.RelationTypes.RelatedMediaAlias);
|
||||
|
||||
// Relate content to media
|
||||
foreach (var content in createdContent)
|
||||
foreach (var media in createdMedia)
|
||||
foreach (IContent content in createdContent)
|
||||
{
|
||||
foreach (IMedia media in createdMedia)
|
||||
{
|
||||
RelationService.Relate(content.Id, media.Id, relType);
|
||||
}
|
||||
}
|
||||
|
||||
// Relate members to media
|
||||
foreach (var member in createdMembers)
|
||||
foreach (var media in createdMedia)
|
||||
foreach (IMember member in createdMembers)
|
||||
{
|
||||
foreach (IMedia media in createdMedia)
|
||||
{
|
||||
RelationService.Relate(member.Id, media.Id, relType);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -333,8 +342,7 @@ namespace Umbraco.Tests.Integration.Umbraco.Infrastructure.Persistence.Repositor
|
||||
// Arrange
|
||||
using (var scope = ScopeProvider.CreateScope())
|
||||
{
|
||||
RelationTypeRepository repositoryType;
|
||||
var repository = CreateRepository(ScopeProvider, out repositoryType);
|
||||
var repository = CreateRepository(ScopeProvider, out RelationTypeRepository repositoryType);
|
||||
|
||||
// Act
|
||||
var exists = repository.Exists(2);
|
||||
@@ -352,8 +360,7 @@ namespace Umbraco.Tests.Integration.Umbraco.Infrastructure.Persistence.Repositor
|
||||
// Arrange
|
||||
using (var scope = ScopeProvider.CreateScope())
|
||||
{
|
||||
RelationTypeRepository repositoryType;
|
||||
var repository = CreateRepository(ScopeProvider, out repositoryType);
|
||||
var repository = CreateRepository(ScopeProvider, out RelationTypeRepository repositoryType);
|
||||
|
||||
// Act
|
||||
var query = scope.SqlContext.Query<IRelation>().Where(x => x.ParentId == _textpage.Id);
|
||||
@@ -368,14 +375,13 @@ namespace Umbraco.Tests.Integration.Umbraco.Infrastructure.Persistence.Repositor
|
||||
public void Can_Perform_GetByQuery_On_RelationRepository()
|
||||
{
|
||||
// Arrange
|
||||
using (var scope = ScopeProvider.CreateScope())
|
||||
using (IScope scope = ScopeProvider.CreateScope())
|
||||
{
|
||||
RelationTypeRepository repositoryType;
|
||||
var repository = CreateRepository(ScopeProvider, out repositoryType);
|
||||
RelationRepository repository = CreateRepository(ScopeProvider, out RelationTypeRepository repositoryType);
|
||||
|
||||
// Act
|
||||
var query = scope.SqlContext.Query<IRelation>().Where(x => x.RelationTypeId == _relateContent.Id);
|
||||
var relations = repository.Get(query);
|
||||
global::Umbraco.Core.Persistence.Querying.IQuery<IRelation> query = scope.SqlContext.Query<IRelation>().Where(x => x.RelationTypeId == _relateContent.Id);
|
||||
IEnumerable<IRelation> relations = repository.Get(query);
|
||||
|
||||
// Assert
|
||||
Assert.That(relations, Is.Not.Null);
|
||||
@@ -389,12 +395,11 @@ namespace Umbraco.Tests.Integration.Umbraco.Infrastructure.Persistence.Repositor
|
||||
public void Can_Delete_Content_And_Verify_Relation_Is_Removed()
|
||||
{
|
||||
// Arrange
|
||||
using (var scope = ScopeProvider.CreateScope())
|
||||
using (IScope scope = ScopeProvider.CreateScope())
|
||||
{
|
||||
RelationTypeRepository repositoryType;
|
||||
var repository = CreateRepository(ScopeProvider, out repositoryType);
|
||||
RelationRepository repository = CreateRepository(ScopeProvider, out RelationTypeRepository repositoryType);
|
||||
|
||||
var content = ContentService.GetById(_subpage.Id);
|
||||
IContent content = ContentService.GetById(_subpage.Id);
|
||||
ContentService.Delete(content, 0);
|
||||
|
||||
// Act
|
||||
@@ -410,17 +415,20 @@ namespace Umbraco.Tests.Integration.Umbraco.Infrastructure.Persistence.Repositor
|
||||
public void CreateTestData()
|
||||
{
|
||||
_relateContent = new RelationType(
|
||||
"Relate Content on Copy", "relateContentOnCopy", true,
|
||||
"Relate Content on Copy",
|
||||
"relateContentOnCopy",
|
||||
true,
|
||||
Constants.ObjectTypes.Document,
|
||||
new Guid("C66BA18E-EAF3-4CFF-8A22-41B16D66A972"));
|
||||
|
||||
_relateContentType = new RelationType("Relate ContentType on Copy",
|
||||
_relateContentType = new RelationType(
|
||||
"Relate ContentType on Copy",
|
||||
"relateContentTypeOnCopy",
|
||||
true,
|
||||
Constants.ObjectTypes.DocumentType,
|
||||
new Guid("A2CB7800-F571-4787-9638-BC48539A0EFB"));
|
||||
|
||||
using (var scope = ScopeProvider.CreateScope())
|
||||
using (IScope scope = ScopeProvider.CreateScope())
|
||||
{
|
||||
var accessor = (IScopeAccessor)ScopeProvider;
|
||||
var relationTypeRepository = new RelationTypeRepository(accessor, AppCaches.Disabled, Mock.Of<ILogger<RelationTypeRepository>>());
|
||||
@@ -430,22 +438,22 @@ namespace Umbraco.Tests.Integration.Umbraco.Infrastructure.Persistence.Repositor
|
||||
relationTypeRepository.Save(_relateContent);
|
||||
relationTypeRepository.Save(_relateContentType);
|
||||
|
||||
var template = TemplateBuilder.CreateTextPageTemplate();
|
||||
Template template = TemplateBuilder.CreateTextPageTemplate();
|
||||
FileService.SaveTemplate(template);
|
||||
//Create and Save ContentType "umbTextpage" -> (NodeDto.NodeIdSeed)
|
||||
// Create and Save ContentType "umbTextpage" -> (NodeDto.NodeIdSeed)
|
||||
_contentType = ContentTypeBuilder.CreateSimpleContentType("umbTextpage", "Textpage", defaultTemplateId: template.Id);
|
||||
|
||||
ContentTypeService.Save(_contentType);
|
||||
|
||||
//Create and Save Content "Homepage" based on "umbTextpage" -> (NodeDto.NodeIdSeed + 1)
|
||||
// Create and Save Content "Homepage" based on "umbTextpage" -> (NodeDto.NodeIdSeed + 1)
|
||||
_textpage = ContentBuilder.CreateSimpleContent(_contentType);
|
||||
ContentService.Save(_textpage, 0);
|
||||
|
||||
//Create and Save Content "Text Page 1" based on "umbTextpage" -> (NodeDto.NodeIdSeed + 2)
|
||||
// Create and Save Content "Text Page 1" based on "umbTextpage" -> (NodeDto.NodeIdSeed + 2)
|
||||
_subpage = ContentBuilder.CreateSimpleContent(_contentType, "Text Page 1", _textpage.Id);
|
||||
ContentService.Save(_subpage, 0);
|
||||
|
||||
//Create and Save Content "Text Page 1" based on "umbTextpage" -> (NodeDto.NodeIdSeed + 3)
|
||||
// Create and Save Content "Text Page 1" based on "umbTextpage" -> (NodeDto.NodeIdSeed + 3)
|
||||
_subpage2 = ContentBuilder.CreateSimpleContent(_contentType, "Text Page 2", _textpage.Id);
|
||||
ContentService.Save(_subpage2, 0);
|
||||
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Moq;
|
||||
using NUnit.Framework;
|
||||
using Umbraco.Core.Cache;
|
||||
using Umbraco.Core.Models;
|
||||
using Umbraco.Core.Persistence.Repositories.Implement;
|
||||
using Umbraco.Core.Scoping;
|
||||
using Umbraco.Core.Services;
|
||||
using Umbraco.Tests.Integration.Testing;
|
||||
using Umbraco.Tests.Testing;
|
||||
|
||||
namespace Umbraco.Tests.Integration.Umbraco.Infrastructure.Services
|
||||
{
|
||||
[TestFixture]
|
||||
[Apartment(ApartmentState.STA)]
|
||||
[UmbracoTest(Database = UmbracoTestOptions.Database.NewSchemaPerTest)]
|
||||
public class RedirectUrlServiceTests : UmbracoIntegrationTestWithContent
|
||||
{
|
||||
private IContent _testPage;
|
||||
private IContent _altTestPage;
|
||||
private const string Url = "blah";
|
||||
private const string CultureA = "en";
|
||||
private const string CultureB = "de";
|
||||
|
||||
private IRedirectUrlService RedirectUrlService => GetRequiredService<IRedirectUrlService>();
|
||||
|
||||
public override void CreateTestData()
|
||||
{
|
||||
base.CreateTestData();
|
||||
|
||||
using (IScope scope = ScopeProvider.CreateScope())
|
||||
{
|
||||
var repository = new RedirectUrlRepository((IScopeAccessor)ScopeProvider, AppCaches.Disabled, Mock.Of<ILogger<RedirectUrlRepository>>());
|
||||
IContent rootContent = ContentService.GetRootContent().First();
|
||||
var subPages = ContentService.GetPagedChildren(rootContent.Id, 0, 2, out _).ToList();
|
||||
_testPage = subPages[0];
|
||||
_altTestPage = subPages[1];
|
||||
|
||||
repository.Save(new RedirectUrl
|
||||
{
|
||||
ContentKey = _testPage.Key,
|
||||
Url = Url,
|
||||
Culture = CultureA
|
||||
});
|
||||
repository.Save(new RedirectUrl
|
||||
{
|
||||
ContentKey = _altTestPage.Key,
|
||||
Url = Url,
|
||||
Culture = CultureB
|
||||
});
|
||||
scope.Complete();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
[Test]
|
||||
public void Can_Get_Most_Recent_RedirectUrl()
|
||||
{
|
||||
IRedirectUrl redirect = RedirectUrlService.GetMostRecentRedirectUrl(Url);
|
||||
Assert.AreEqual(redirect.ContentId, _altTestPage.Id);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Can_Get_Most_Recent_RedirectUrl_With_Culture()
|
||||
{
|
||||
IRedirectUrl redirect = RedirectUrlService.GetMostRecentRedirectUrl(Url, CultureA);
|
||||
Assert.AreEqual(redirect.ContentId, _testPage.Id);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user