Browse Source

Migration added.

pull/282/head
Sebastian 8 years ago
parent
commit
671d03b08c
  1. 5
      src/Squidex.Domain.Apps.Entities.MongoDb/Contents/MongoContentRepository.cs
  2. 1
      src/Squidex.Domain.Apps.Entities/Contents/ContentVersionLoader.cs
  3. 2
      src/Squidex.Domain.Apps.Entities/DomainObjectState.cs
  4. 5
      src/Squidex/Config/Domain/EntitiesServices.cs
  5. 2
      tests/RunCoverage.ps1
  6. 42
      tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentQueryServiceTests.cs
  7. 1
      tools/Migrate_01/Migrate_01.csproj
  8. 4
      tools/Migrate_01/MigrationPath.cs
  9. 32
      tools/Migrate_01/Migrations/DeleteArchiveCollection.cs
  10. 2
      tools/Migrate_01/Migrations/RebuildAssets.cs
  11. 2
      tools/Migrate_01/Migrations/RebuildContents.cs

5
src/Squidex.Domain.Apps.Entities.MongoDb/Contents/MongoContentRepository.cs

@ -152,5 +152,10 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Contents
callback(c); callback(c);
}); });
} }
public Task DeleteArchiveAsync()
{
return Database.DropCollectionAsync("States_Contents_Archive");
}
} }
} }

1
src/Squidex.Domain.Apps.Entities/Contents/ContentVersionLoader.cs

@ -38,6 +38,7 @@ namespace Squidex.Domain.Apps.Entities.Contents
if (content.Version < version) if (content.Version < version)
{ {
content = content.Apply(e); content = content.Apply(e);
content.Version++;
} }
}); });

2
src/Squidex.Domain.Apps.Entities/DomainObjectState.cs

@ -40,7 +40,7 @@ namespace Squidex.Domain.Apps.Entities
public Instant LastModified { get; set; } public Instant LastModified { get; set; }
[JsonProperty] [JsonProperty]
public long Version { get; set; } public long Version { get; set; } = EtagVersion.Empty;
public T Clone() public T Clone()
{ {

5
src/Squidex/Config/Domain/EntitiesServices.cs

@ -161,13 +161,16 @@ namespace Squidex.Config.Domain
services.AddTransientAs<MigrationPath>() services.AddTransientAs<MigrationPath>()
.As<IMigrationPath>(); .As<IMigrationPath>();
services.AddTransientAs<AddPatterns>()
.As<IMigration>();
services.AddTransientAs<ConvertEventStore>() services.AddTransientAs<ConvertEventStore>()
.As<IMigration>(); .As<IMigration>();
services.AddTransientAs<ConvertEventStoreAppId>() services.AddTransientAs<ConvertEventStoreAppId>()
.As<IMigration>(); .As<IMigration>();
services.AddTransientAs<AddPatterns>() services.AddTransientAs<DeleteArchiveCollection>()
.As<IMigration>(); .As<IMigration>();
services.AddTransientAs<RebuildContents>() services.AddTransientAs<RebuildContents>()

2
tests/RunCoverage.ps1

@ -76,6 +76,6 @@ if ($all -Or $web) {
-oldStyle -oldStyle
} }
&"$folderHome\.nuget\packages\ReportGenerator\3.1.1\tools\ReportGenerator.exe" ` &"$folderHome\.nuget\packages\ReportGenerator\3.1.2\tools\ReportGenerator.exe" `
-reports:"$folderWorking\$folderReports\*.xml" ` -reports:"$folderWorking\$folderReports\*.xml" `
-targetdir:"$folderWorking\$folderReports\Output" -targetdir:"$folderWorking\$folderReports\Output"

42
tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentQueryServiceTests.cs

@ -147,25 +147,37 @@ namespace Squidex.Domain.Apps.Entities.Contents
} }
[Fact] [Fact]
public async Task Should_return_contents_with_ids_from_repository_and_transform() public async Task Should_return_contents_with_ids_from_repository()
{ {
await TestManyIdRequest(true, false, new HashSet<Guid> { Guid.NewGuid() }, Status.Draft, Status.Published); await TestManyIdRequest(true, false, new HashSet<Guid> { Guid.NewGuid() }, Status.Draft, Status.Published);
} }
[Fact] [Fact]
public async Task Should_return_non_archived_contents_from_repository_and_transform() public async Task Should_return_contents_with_ids_from_repository_and_transform_as_non_frontend()
{
await TestManyIdRequest(false, false, new HashSet<Guid> { Guid.NewGuid() }, Status.Published);
}
[Fact]
public async Task Should_return_non_archived_contents_from_repository()
{ {
await TestManyRequest(true, false, Status.Draft, Status.Published); await TestManyRequest(true, false, Status.Draft, Status.Published);
} }
[Fact] [Fact]
public async Task Should_return_archived_contents_from_repository_and_transform() public async Task Should_return_non_archived_contents_from_repository_and_transform_as_non_frontend()
{
await TestManyRequest(false, false, Status.Published);
}
[Fact]
public async Task Should_return_archived_contents_from_repository()
{ {
await TestManyRequest(true, true, Status.Archived); await TestManyRequest(true, true, Status.Archived);
} }
[Fact] [Fact]
public async Task Should_return_draft_contents_from_repository_and_transform() public async Task Should_return_draft_contents_from_repository()
{ {
await TestManyRequest(false, false, Status.Published); await TestManyRequest(false, false, Status.Published);
} }
@ -189,6 +201,17 @@ namespace Squidex.Domain.Apps.Entities.Contents
Assert.Equal(content.Id, result[0].Id); Assert.Equal(content.Id, result[0].Id);
Assert.Equal(123, result.Total); Assert.Equal(123, result.Total);
if (!isFrontend)
{
A.CallTo(() => scriptEngine.Transform(A<ScriptContext>.Ignored, A<string>.Ignored))
.MustHaveHappened(Repeated.Exactly.Times(result.Count));
}
else
{
A.CallTo(() => scriptEngine.Transform(A<ScriptContext>.Ignored, A<string>.Ignored))
.MustNotHaveHappened();
}
} }
private async Task TestManyIdRequest(bool isFrontend, bool archive, HashSet<Guid> ids, params Status[] status) private async Task TestManyIdRequest(bool isFrontend, bool archive, HashSet<Guid> ids, params Status[] status)
@ -204,6 +227,17 @@ namespace Squidex.Domain.Apps.Entities.Contents
Assert.Equal(content.Id, result[0].Id); Assert.Equal(content.Id, result[0].Id);
Assert.Equal(123, result.Total); Assert.Equal(123, result.Total);
if (!isFrontend)
{
A.CallTo(() => scriptEngine.Transform(A<ScriptContext>.Ignored, A<string>.Ignored))
.MustHaveHappened(Repeated.Exactly.Times(result.Count));
}
else
{
A.CallTo(() => scriptEngine.Transform(A<ScriptContext>.Ignored, A<string>.Ignored))
.MustNotHaveHappened();
}
} }
private void SetupClaims(bool isFrontend) private void SetupClaims(bool isFrontend)

1
tools/Migrate_01/Migrate_01.csproj

@ -4,6 +4,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\src\Squidex.Domain.Apps.Core.Model\Squidex.Domain.Apps.Core.Model.csproj" /> <ProjectReference Include="..\..\src\Squidex.Domain.Apps.Core.Model\Squidex.Domain.Apps.Core.Model.csproj" />
<ProjectReference Include="..\..\src\Squidex.Domain.Apps.Entities.MongoDb\Squidex.Domain.Apps.Entities.MongoDb.csproj" />
<ProjectReference Include="..\..\src\Squidex.Domain.Apps.Entities\Squidex.Domain.Apps.Entities.csproj" /> <ProjectReference Include="..\..\src\Squidex.Domain.Apps.Entities\Squidex.Domain.Apps.Entities.csproj" />
<ProjectReference Include="..\..\src\Squidex.Domain.Apps.Events\Squidex.Domain.Apps.Events.csproj" /> <ProjectReference Include="..\..\src\Squidex.Domain.Apps.Events\Squidex.Domain.Apps.Events.csproj" />
<ProjectReference Include="..\..\src\Squidex.Infrastructure.MongoDb\Squidex.Infrastructure.MongoDb.csproj" /> <ProjectReference Include="..\..\src\Squidex.Infrastructure.MongoDb\Squidex.Infrastructure.MongoDb.csproj" />

4
tools/Migrate_01/MigrationPath.cs

@ -15,7 +15,7 @@ namespace Migrate_01
{ {
public sealed class MigrationPath : IMigrationPath public sealed class MigrationPath : IMigrationPath
{ {
private const int CurrentVersion = 7; private const int CurrentVersion = 8;
private readonly IServiceProvider serviceProvider; private readonly IServiceProvider serviceProvider;
public MigrationPath(IServiceProvider serviceProvider) public MigrationPath(IServiceProvider serviceProvider)
@ -56,6 +56,8 @@ namespace Migrate_01
migrations.Add(serviceProvider.GetRequiredService<AddPatterns>()); migrations.Add(serviceProvider.GetRequiredService<AddPatterns>());
} }
migrations.Add(serviceProvider.GetRequiredService<DeleteArchiveCollection>());
return (CurrentVersion, migrations); return (CurrentVersion, migrations);
} }
} }

32
tools/Migrate_01/Migrations/DeleteArchiveCollection.cs

@ -0,0 +1,32 @@
// ==========================================================================
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex UG (haftungsbeschraenkt)
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using System.Threading.Tasks;
using Squidex.Domain.Apps.Entities.Contents.Repositories;
using Squidex.Domain.Apps.Entities.MongoDb.Contents;
using Squidex.Infrastructure.Migrations;
namespace Migrate_01.Migrations
{
public sealed class DeleteArchiveCollection : IMigration
{
private readonly IContentRepository contentRepository;
public DeleteArchiveCollection(IContentRepository contentRepository)
{
this.contentRepository = contentRepository;
}
public async Task UpdateAsync()
{
if (contentRepository is MongoContentRepository mongoContentRepository)
{
await mongoContentRepository.DeleteArchiveAsync();
}
}
}
}

2
tools/Migrate_01/Migrations/RebuildAssets.cs

@ -10,7 +10,7 @@ using Squidex.Infrastructure.Migrations;
namespace Migrate_01 namespace Migrate_01
{ {
public class RebuildAssets : IMigration public sealed class RebuildAssets : IMigration
{ {
private readonly Rebuilder rebuilder; private readonly Rebuilder rebuilder;

2
tools/Migrate_01/Migrations/RebuildContents.cs

@ -10,7 +10,7 @@ using Squidex.Infrastructure.Migrations;
namespace Migrate_01.Migrations namespace Migrate_01.Migrations
{ {
public class RebuildContents : IMigration public sealed class RebuildContents : IMigration
{ {
private readonly Rebuilder rebuilder; private readonly Rebuilder rebuilder;

Loading…
Cancel
Save