mirror of https://github.com/Squidex/squidex.git
2 changed files with 203 additions and 4 deletions
@ -0,0 +1,194 @@ |
|||||
|
// ==========================================================================
|
||||
|
// Squidex Headless CMS
|
||||
|
// ==========================================================================
|
||||
|
// Copyright (c) Squidex UG (haftungsbeschraenkt)
|
||||
|
// All rights reserved. Licensed under the MIT license.
|
||||
|
// ==========================================================================
|
||||
|
|
||||
|
using System.Threading.Tasks; |
||||
|
using FakeItEasy; |
||||
|
using Squidex.Domain.Apps.Core; |
||||
|
using Squidex.Domain.Apps.Core.Schemas; |
||||
|
using Squidex.Domain.Apps.Entities.TestHelpers; |
||||
|
using Squidex.Infrastructure; |
||||
|
using Xunit; |
||||
|
|
||||
|
namespace Squidex.Domain.Apps.Entities |
||||
|
{ |
||||
|
public class AppProviderExtensionsTests |
||||
|
{ |
||||
|
private readonly IAppProvider appProvider = A.Fake<IAppProvider>(); |
||||
|
private readonly NamedId<DomainId> appId = NamedId.Of(DomainId.NewGuid(), "my-app"); |
||||
|
private readonly NamedId<DomainId> schemaId = NamedId.Of(DomainId.NewGuid(), "my-schema"); |
||||
|
private readonly NamedId<DomainId> componentId1 = NamedId.Of(DomainId.NewGuid(), "my-schema"); |
||||
|
private readonly NamedId<DomainId> componentId2 = NamedId.Of(DomainId.NewGuid(), "my-schema"); |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_do_nothing_if_no_component_found() |
||||
|
{ |
||||
|
var schema = Mocks.Schema(appId, schemaId); |
||||
|
|
||||
|
var components = await appProvider.GetComponentsAsync(schema); |
||||
|
|
||||
|
Assert.Empty(components); |
||||
|
|
||||
|
A.CallTo(() => appProvider.GetSchemaAsync(A<DomainId>._, A<DomainId>._, false)) |
||||
|
.MustNotHaveHappened(); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_resolve_self_as_component() |
||||
|
{ |
||||
|
var schema = |
||||
|
Mocks.Schema(appId, schemaId, |
||||
|
new Schema(schemaId.Name) |
||||
|
.AddComponent(1, "1", Partitioning.Invariant, new ComponentFieldProperties |
||||
|
{ |
||||
|
SchemaId = schemaId.Id |
||||
|
})); |
||||
|
|
||||
|
var components = await appProvider.GetComponentsAsync(schema); |
||||
|
|
||||
|
Assert.Single(components); |
||||
|
Assert.Same(schema.SchemaDef, components[schemaId.Id]); |
||||
|
|
||||
|
A.CallTo(() => appProvider.GetSchemaAsync(A<DomainId>._, A<DomainId>._, false)) |
||||
|
.MustNotHaveHappened(); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_resolve_from_component() |
||||
|
{ |
||||
|
var component = Mocks.Schema(appId, componentId1); |
||||
|
|
||||
|
A.CallTo(() => appProvider.GetSchemaAsync(appId.Id, componentId1.Id, false)) |
||||
|
.Returns(component); |
||||
|
|
||||
|
var schema = |
||||
|
Mocks.Schema(appId, schemaId, |
||||
|
new Schema(schemaId.Name) |
||||
|
.AddComponent(1, "1", Partitioning.Invariant, new ComponentFieldProperties |
||||
|
{ |
||||
|
SchemaId = componentId1.Id |
||||
|
})); |
||||
|
|
||||
|
var components = await appProvider.GetComponentsAsync(schema); |
||||
|
|
||||
|
Assert.Single(components); |
||||
|
Assert.Same(component.SchemaDef, components[componentId1.Id]); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_resolve_from_components() |
||||
|
{ |
||||
|
var component = Mocks.Schema(appId, componentId1); |
||||
|
|
||||
|
A.CallTo(() => appProvider.GetSchemaAsync(appId.Id, componentId1.Id, false)) |
||||
|
.Returns(component); |
||||
|
|
||||
|
var schema = |
||||
|
Mocks.Schema(appId, schemaId, |
||||
|
new Schema(schemaId.Name) |
||||
|
.AddComponents(1, "1", Partitioning.Invariant, new ComponentsFieldProperties |
||||
|
{ |
||||
|
SchemaId = componentId1.Id |
||||
|
})); |
||||
|
|
||||
|
var components = await appProvider.GetComponentsAsync(schema); |
||||
|
|
||||
|
Assert.Single(components); |
||||
|
Assert.Same(component.SchemaDef, components[componentId1.Id]); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_resolve_from_array() |
||||
|
{ |
||||
|
var component = Mocks.Schema(appId, componentId1); |
||||
|
|
||||
|
A.CallTo(() => appProvider.GetSchemaAsync(appId.Id, componentId1.Id, false)) |
||||
|
.Returns(component); |
||||
|
|
||||
|
var schema = |
||||
|
Mocks.Schema(appId, schemaId, |
||||
|
new Schema(schemaId.Name) |
||||
|
.AddArray(1, "1", Partitioning.Invariant, a => a |
||||
|
.AddComponent(2, "2", new ComponentFieldProperties |
||||
|
{ |
||||
|
SchemaId = componentId1.Id |
||||
|
}))); |
||||
|
|
||||
|
var components = await appProvider.GetComponentsAsync(schema); |
||||
|
|
||||
|
Assert.Single(components); |
||||
|
Assert.Same(component.SchemaDef, components[componentId1.Id]); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_resolve_self_referencing_component() |
||||
|
{ |
||||
|
var component = |
||||
|
Mocks.Schema(appId, componentId1, |
||||
|
new Schema(componentId1.Name) |
||||
|
.AddComponent(1, "1", Partitioning.Invariant, new ComponentFieldProperties |
||||
|
{ |
||||
|
SchemaId = componentId1.Id |
||||
|
})); |
||||
|
|
||||
|
A.CallTo(() => appProvider.GetSchemaAsync(appId.Id, componentId1.Id, false)) |
||||
|
.Returns(component); |
||||
|
|
||||
|
var schema = |
||||
|
Mocks.Schema(appId, schemaId, |
||||
|
new Schema(schemaId.Name) |
||||
|
.AddComponent(1, "1", Partitioning.Invariant, new ComponentFieldProperties |
||||
|
{ |
||||
|
SchemaId = componentId1.Id |
||||
|
})); |
||||
|
|
||||
|
var components = await appProvider.GetComponentsAsync(schema); |
||||
|
|
||||
|
Assert.Single(components); |
||||
|
Assert.Same(component.SchemaDef, components[componentId1.Id]); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_resolve_component_of_component() |
||||
|
{ |
||||
|
var component1 = |
||||
|
Mocks.Schema(appId, componentId1, |
||||
|
new Schema(componentId1.Name) |
||||
|
.AddComponent(1, "1", Partitioning.Invariant, new ComponentFieldProperties |
||||
|
{ |
||||
|
SchemaId = componentId2.Id |
||||
|
})); |
||||
|
|
||||
|
var component2 = |
||||
|
Mocks.Schema(appId, componentId2, |
||||
|
new Schema(componentId2.Name) |
||||
|
.AddComponent(1, "1", Partitioning.Invariant, new ComponentFieldProperties |
||||
|
{ |
||||
|
SchemaId = componentId2.Id |
||||
|
})); |
||||
|
|
||||
|
A.CallTo(() => appProvider.GetSchemaAsync(appId.Id, componentId1.Id, false)) |
||||
|
.Returns(component1); |
||||
|
|
||||
|
A.CallTo(() => appProvider.GetSchemaAsync(appId.Id, componentId2.Id, false)) |
||||
|
.Returns(component2); |
||||
|
|
||||
|
var schema = |
||||
|
Mocks.Schema(appId, schemaId, |
||||
|
new Schema(schemaId.Name) |
||||
|
.AddComponent(1, "1", Partitioning.Invariant, new ComponentFieldProperties |
||||
|
{ |
||||
|
SchemaId = componentId1.Id |
||||
|
})); |
||||
|
|
||||
|
var components = await appProvider.GetComponentsAsync(schema); |
||||
|
|
||||
|
Assert.Equal(2, components.Count); |
||||
|
Assert.Same(component1.SchemaDef, components[componentId1.Id]); |
||||
|
Assert.Same(component2.SchemaDef, components[componentId2.Id]); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue