mirror of https://github.com/Squidex/squidex.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
131 lines
4.7 KiB
131 lines
4.7 KiB
// ==========================================================================
|
|
// Squidex Headless CMS
|
|
// ==========================================================================
|
|
// Copyright (c) Squidex UG (haftungsbeschraenkt)
|
|
// All rights reserved. Licensed under the MIT license.
|
|
// ==========================================================================
|
|
|
|
using Squidex.Domain.Apps.Core;
|
|
using Squidex.Domain.Apps.Core.Apps;
|
|
using Squidex.Domain.Apps.Core.Contents;
|
|
using Squidex.Domain.Apps.Core.Schemas;
|
|
using Squidex.Domain.Apps.Entities;
|
|
using Squidex.Domain.Apps.Entities.TestHelpers;
|
|
using Squidex.Infrastructure;
|
|
using Squidex.Infrastructure.Json.Objects;
|
|
using Squidex.Infrastructure.Reflection;
|
|
using Squidex.Infrastructure.States;
|
|
|
|
namespace Squidex.Shared;
|
|
|
|
public abstract class ContentSnapshotStoreTests : SnapshotStoreTests<WriteContent>
|
|
{
|
|
public GivenContext Context { get; } = new GivenContext();
|
|
|
|
protected ContentSnapshotStoreTests()
|
|
{
|
|
Context.Schema = Context.Schema.AddReferences(0, "myReferences", Partitioning.Invariant);
|
|
}
|
|
|
|
protected override WriteContent CreateEntity(DomainId id, int version)
|
|
{
|
|
return Cleanup(Context.CreateWriteContent() with
|
|
{
|
|
Id = id,
|
|
CurrentVersion = new ContentVersion(Status.Published,
|
|
new ContentData()
|
|
.AddField("myString",
|
|
new ContentFieldData()
|
|
.AddInvariant("Hello Squidex"))
|
|
.AddField("myReferences",
|
|
new ContentFieldData()
|
|
.AddInvariant(
|
|
JsonValue.Array(
|
|
DomainId.NewGuid(),
|
|
DomainId.NewGuid(),
|
|
DomainId.NewGuid())))),
|
|
Version = version,
|
|
});
|
|
}
|
|
|
|
[Fact]
|
|
public async Task Should_remove_by_app()
|
|
{
|
|
var sut = await CreateSutAsync();
|
|
|
|
if (sut is not IDeleter deleter)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var app1 = Context.App with { Id = DomainId.NewGuid() };
|
|
var app2 = Context.App with { Id = DomainId.NewGuid() };
|
|
|
|
A.CallTo(() => Context.AppProvider.GetAppWithSchemaAsync(app1.Id, Context.SchemaId.Id, true, default))
|
|
.Returns((app1, Context.Schema));
|
|
|
|
A.CallTo(() => Context.AppProvider.GetAppWithSchemaAsync(app2.Id, Context.SchemaId.Id, true, default))
|
|
.Returns((app2, Context.Schema));
|
|
|
|
var content1 = CreateEntity(DomainId.NewGuid(), 1) with { AppId = app1.NamedId() };
|
|
var content2 = CreateEntity(DomainId.NewGuid(), 1) with { AppId = app2.NamedId() };
|
|
|
|
await sut.WriteManyAsync([
|
|
new SnapshotWriteJob<WriteContent>(content1.Id, content1, 0),
|
|
new SnapshotWriteJob<WriteContent>(content2.Id, content2, 0),
|
|
], default);
|
|
|
|
await deleter.DeleteAppAsync(app1, default);
|
|
|
|
var all = await sut.ReadAllAsync(default).ToListAsync(default);
|
|
|
|
var byApp1 = all.Where(x => x.Value.AppId.Id == app1.Id);
|
|
var byApp2 = all.Where(x => x.Value.AppId.Id == app2.Id);
|
|
|
|
Assert.Empty(byApp1);
|
|
Assert.NotEmpty(byApp2);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task Should_remove_by_schema()
|
|
{
|
|
var sut = await CreateSutAsync();
|
|
|
|
if (sut is not IDeleter deleter)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var schema1 = Context.Schema with { Id = DomainId.NewGuid() };
|
|
var schema2 = Context.Schema with { Id = DomainId.NewGuid() };
|
|
|
|
A.CallTo(() => Context.AppProvider.GetAppWithSchemaAsync(Context.App.Id, schema1.Id, true, default))
|
|
.Returns((Context.App, schema1));
|
|
|
|
A.CallTo(() => Context.AppProvider.GetAppWithSchemaAsync(Context.App.Id, schema2.Id, true, default))
|
|
.Returns((Context.App, schema2));
|
|
|
|
var content1 = CreateEntity(DomainId.NewGuid(), 1) with { SchemaId = schema1.NamedId() };
|
|
var content2 = CreateEntity(DomainId.NewGuid(), 1) with { SchemaId = schema2.NamedId() };
|
|
|
|
await sut.WriteManyAsync([
|
|
new SnapshotWriteJob<WriteContent>(content1.Id, content1, 0),
|
|
new SnapshotWriteJob<WriteContent>(content2.Id, content2, 0),
|
|
], default);
|
|
|
|
await deleter.DeleteSchemaAsync(Context.App, schema1, default);
|
|
|
|
var all = await sut.ReadAllAsync(default).ToListAsync(default);
|
|
|
|
var bySchema1 = all.Where(x => x.Value.SchemaId.Id == schema1.Id);
|
|
var bySchema2 = all.Where(x => x.Value.SchemaId.Id == schema2.Id);
|
|
|
|
Assert.Empty(bySchema1);
|
|
Assert.NotEmpty(bySchema2);
|
|
}
|
|
|
|
protected override WriteContent Cleanup(WriteContent expected)
|
|
{
|
|
return SimpleMapper.Map(expected, new WriteContent());
|
|
}
|
|
}
|
|
|