Browse Source

Migration and tests fixed

pull/208/head
Sebastian Stehle 8 years ago
parent
commit
aa4a156b71
  1. 10
      src/Squidex.Domain.Apps.Entities.MongoDb/Apps/MongoAppRepository.cs
  2. 2
      src/Squidex.Domain.Apps.Entities/Apps/Repositories/IAppRepository.cs
  3. 2
      src/Squidex/Config/Domain/SerializationServices.cs
  4. 5
      src/Squidex/Config/Domain/WriteServices.cs
  5. 28
      tests/Squidex.Domain.Apps.Core.Tests/Model/Apps/AppPatternsTests.cs
  6. 4
      tools/Migrate_01/Migration01_FromCqrs.cs
  7. 71
      tools/Migrate_01/Migration02_AddPatterns.cs

10
src/Squidex.Domain.Apps.Entities.MongoDb/Apps/MongoAppRepository.cs

@ -10,6 +10,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using MongoDB.Bson;
using MongoDB.Driver;
using Squidex.Domain.Apps.Entities.Apps.Repositories;
using Squidex.Domain.Apps.Entities.Apps.State;
@ -46,6 +47,15 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Apps
return appEntity != null ? Guid.Parse(appEntity["_id"].AsString) : Guid.Empty;
}
public async Task<IReadOnlyList<Guid>> QueryAppIdsAsync()
{
var appEntities =
await Collection.Find(new BsonDocument()).Only(x => x.Id)
.ToListAsync();
return appEntities.Select(x => Guid.Parse(x["_id"].AsString)).ToList();
}
public async Task<IReadOnlyList<Guid>> QueryUserAppIdsAsync(string userId)
{
var appEntities =

2
src/Squidex.Domain.Apps.Entities/Apps/Repositories/IAppRepository.cs

@ -16,6 +16,8 @@ namespace Squidex.Domain.Apps.Entities.Apps.Repositories
{
Task<Guid> FindAppIdByNameAsync(string name);
Task<IReadOnlyList<Guid>> QueryAppIdsAsync();
Task<IReadOnlyList<Guid>> QueryUserAppIdsAsync(string userId);
}
}

2
src/Squidex/Config/Domain/SerializationServices.cs

@ -29,7 +29,7 @@ namespace Squidex.Config.Domain
{
private static readonly TypeNameRegistry TypeNameRegistry =
new TypeNameRegistry()
.MapUnmapped(typeof(Migration01).Assembly)
.MapUnmapped(typeof(Migration01_FromCqrs).Assembly)
.MapUnmapped(typeof(SquidexCoreModel).Assembly)
.MapUnmapped(typeof(SquidexEvents).Assembly)
.MapUnmapped(typeof(SquidexInfrastructure).Assembly);

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

@ -64,7 +64,10 @@ namespace Squidex.Config.Domain
services.AddSingletonAs<RuleCommandMiddleware>()
.As<ICommandMiddleware>();
services.AddTransientAs<Migration01>()
services.AddTransientAs<Migration01_FromCqrs>()
.As<IMigration>();
services.AddTransientAs<Migration02_AddPatterns>()
.As<IMigration>();
services.AddTransientAs<AppDomainObject>()

28
tests/Squidex.Domain.Apps.Core.Tests/Model/Apps/AppPatternsTests.cs

@ -17,61 +17,61 @@ namespace Squidex.Domain.Apps.Core.Model.Apps
{
public class AppPatternsTests
{
private readonly AppPatterns defaultPatterns;
private readonly AppPatterns patterns_1;
private readonly Guid firstId = Guid.NewGuid();
private readonly Guid id = Guid.NewGuid();
public AppPatternsTests()
{
defaultPatterns = AppPatterns.Empty.Add(firstId, "Default", "Default Pattern", "Message");
patterns_1 = AppPatterns.Empty.Add(firstId, "Default", "Default Pattern", "Message");
}
[Fact]
public void Should_add_pattern()
{
var patterns = defaultPatterns.Add(id, "NewPattern", "New Pattern", "Message");
var patterns_2 = patterns_1.Add(id, "NewPattern", "New Pattern", "Message");
patterns[id].ShouldBeEquivalentTo(new AppPattern(id, "NewPattern", "New Pattern", "Message"));
patterns_2[id].ShouldBeEquivalentTo(new AppPattern("NewPattern", "New Pattern", "Message"));
}
[Fact]
public void Should_throw_exception_if_add_pattern_with_same_id()
{
var patterns = defaultPatterns.Add(id, "NewPattern", "New Pattern", "Message");
var patterns_2 = patterns_1.Add(id, "NewPattern", "New Pattern", "Message");
Assert.Throws<ArgumentException>(() => patterns.Add(id, "NewPattern", "New Pattern", "Message"));
Assert.Throws<ArgumentException>(() => patterns_2.Add(id, "NewPattern", "New Pattern", "Message"));
}
[Fact]
public void Should_update_pattern()
{
var patterns = defaultPatterns.Update(firstId, "UpdatePattern", "Update Pattern", "Message");
var patterns_2 = patterns_1.Update(firstId, "UpdatePattern", "Update Pattern", "Message");
patterns[firstId].ShouldBeEquivalentTo(new AppPattern(firstId, "UpdatePattern", "Update Pattern", "Message"));
patterns_2[firstId].ShouldBeEquivalentTo(new AppPattern("UpdatePattern", "Update Pattern", "Message"));
}
[Fact]
public void Should_return_same_patterns_if_pattern_not_found()
{
var patterns = defaultPatterns.Update(id, "NewPattern", "NewPattern", "Message");
var patterns_2 = patterns_1.Update(id, "NewPattern", "NewPattern", "Message");
Assert.Same(defaultPatterns, patterns);
Assert.Same(patterns_1, patterns_2);
}
[Fact]
public void Should_remove_pattern()
{
var patterns = defaultPatterns.Remove(firstId);
var patterns_2 = patterns_1.Remove(firstId);
Assert.Empty(patterns);
Assert.Empty(patterns_2);
}
[Fact]
public void Should_do_nothing_if_remove_pattern_not_found()
{
var patterns = defaultPatterns.Remove(id);
var patterns_2 = patterns_1.Remove(id);
Assert.NotSame(defaultPatterns, patterns);
Assert.NotSame(patterns_1, patterns_2);
}
}
}

4
tools/Migrate_01/Migration01.cs → tools/Migrate_01/Migration01_FromCqrs.cs

@ -23,7 +23,7 @@ using Squidex.Infrastructure.States;
namespace Migrate_01
{
public sealed class Migration01 : IMigration
public sealed class Migration01_FromCqrs : IMigration
{
private readonly FieldRegistry fieldRegistry;
private readonly IEventStore eventStore;
@ -34,7 +34,7 @@ namespace Migrate_01
public int ToVersion { get; } = 1;
public Migration01(
public Migration01_FromCqrs(
FieldRegistry fieldRegistry,
IEventDataFormatter eventDataFormatter,
IEventStore eventStore,

71
tools/Migrate_01/Migration02_AddPatterns.cs

@ -0,0 +1,71 @@
// ==========================================================================
// Migration02_AddPatterns.cs
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex Group
// All rights reserved.
// ==========================================================================
using System;
using System.Threading.Tasks;
using Squidex.Domain.Apps.Entities.Apps;
using Squidex.Domain.Apps.Entities.Apps.Commands;
using Squidex.Domain.Apps.Entities.Apps.Repositories;
using Squidex.Infrastructure;
using Squidex.Infrastructure.Migrations;
using Squidex.Infrastructure.States;
namespace Migrate_01
{
public sealed class Migration02_AddPatterns : IMigration
{
private readonly InitialPatterns initialPatterns;
private readonly IStateFactory stateFactory;
private readonly IAppRepository appRepository;
public int FromVersion { get; } = 1;
public int ToVersion { get; } = 2;
public Migration02_AddPatterns(
InitialPatterns initialPatterns,
IStateFactory stateFactory,
IAppRepository appRepository)
{
this.initialPatterns = initialPatterns;
this.appRepository = appRepository;
this.stateFactory = stateFactory;
}
public async Task UpdateAsync()
{
var ids = await appRepository.QueryAppIdsAsync();
foreach (var id in ids)
{
var app = await stateFactory.CreateAsync<AppDomainObject>(id);
if (app.State.Patterns.Count == 0)
{
foreach (var pattern in initialPatterns.Values)
{
var command =
new AddPattern
{
Actor = app.State.CreatedBy,
AppId = new NamedId<Guid>(app.State.Id, app.State.Name),
Name = pattern.Name,
PatternId = Guid.NewGuid(),
Pattern = pattern.Pattern,
Message = pattern.Message
};
app.AddPattern(command);
}
await app.WriteStateAsync(app.Version + initialPatterns.Count);
}
}
}
}
}
Loading…
Cancel
Save