Browse Source

Tests for content query service.

pull/107/head
Sebastian Stehle 9 years ago
parent
commit
04ce9d3c6a
  1. 4
      src/Squidex.Domain.Apps.Read/Contents/Edm/EdmModelBuilder.cs
  2. 5
      src/Squidex.Domain.Apps.Read/Contents/Edm/EdmModelExtensions.cs
  3. 129
      tests/Squidex.Domain.Apps.Read.Tests/Contents/ContentQueryServiceTests.cs
  4. 8
      tests/Squidex.Domain.Apps.Read.Tests/Contents/GraphQLTests.cs

4
src/Squidex.Domain.Apps.Read/Contents/Edm/EdmModelBuilder.cs

@ -18,14 +18,14 @@ using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Read.Contents.Edm
{
public sealed class EdmModelBuilder : CachingProviderBase
public class EdmModelBuilder : CachingProviderBase
{
public EdmModelBuilder(IMemoryCache cache)
: base(cache)
{
}
public IEdmModel BuildEdmModel(ISchemaEntity schema, IAppEntity app)
public virtual IEdmModel BuildEdmModel(ISchemaEntity schema, IAppEntity app)
{
Guard.NotNull(schema, nameof(schema));

5
src/Squidex.Domain.Apps.Read/Contents/Edm/EdmModelExtensions.cs

@ -17,6 +17,11 @@ namespace Squidex.Domain.Apps.Read.Contents.Edm
{
public static ODataUriParser ParseQuery(this IEdmModel model, string query)
{
if (!model.EntityContainer.EntitySets().Any())
{
return null;
}
query = query ?? string.Empty;
var path = model.EntityContainer.EntitySets().First().Path.Path.Split('.').Last();

129
tests/Squidex.Domain.Apps.Read.Tests/Contents/ContentQueryServiceTests.cs

@ -0,0 +1,129 @@
// ==========================================================================
// ContentQueryServiceTests.cs
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex Group
// All rights reserved.
// ==========================================================================
using System;
using System.Security.Claims;
using System.Threading.Tasks;
using FakeItEasy;
using Squidex.Domain.Apps.Core.Contents;
using Squidex.Domain.Apps.Core.Scripting;
using Squidex.Domain.Apps.Read.Apps;
using Squidex.Domain.Apps.Read.Contents.Edm;
using Squidex.Domain.Apps.Read.Contents.Repositories;
using Squidex.Domain.Apps.Read.Schemas;
using Squidex.Domain.Apps.Read.Schemas.Services;
using Squidex.Infrastructure;
using Xunit;
using System.Collections.Generic;
using Microsoft.OData.UriParser;
namespace Squidex.Domain.Apps.Read.Contents
{
public class ContentQueryServiceTests
{
private readonly IContentRepository contentRepository = A.Fake<IContentRepository>();
private readonly IScriptEngine scriptEngine = A.Fake<IScriptEngine>();
private readonly ISchemaProvider schemas = A.Fake<ISchemaProvider>();
private readonly ISchemaEntity schema = A.Fake<ISchemaEntity>();
private readonly IContentEntity content = A.Fake<IContentEntity>();
private readonly IAppEntity app = A.Fake<IAppEntity>();
private readonly Guid appId = Guid.NewGuid();
private readonly Guid schemaId = Guid.NewGuid();
private readonly Guid contentId = Guid.NewGuid();
private readonly NamedContentData data = new NamedContentData();
private readonly NamedContentData transformedData = new NamedContentData();
private readonly ClaimsPrincipal user = new ClaimsPrincipal();
private readonly EdmModelBuilder modelBuilder = A.Fake<EdmModelBuilder>();
private readonly ContentQueryService sut;
public ContentQueryServiceTests()
{
A.CallTo(() => app.Id).Returns(appId);
A.CallTo(() => content.Id).Returns(contentId);
A.CallTo(() => content.Data).Returns(data);
sut = new ContentQueryService(contentRepository, schemas, scriptEngine, modelBuilder);
}
[Fact]
public async Task Should_return_schema_from_id_if_string_is_guid()
{
A.CallTo(() => schemas.FindSchemaByIdAsync(schemaId, false)).Returns(schema);
var result = await sut.FindSchemaAsync(app, schemaId.ToString());
Assert.Equal(schema, result);
}
[Fact]
public async Task Should_return_schema_from_name_if_string_not_guid()
{
A.CallTo(() => schemas.FindSchemaByNameAsync(appId, "my-schema")).Returns(schema);
var result = await sut.FindSchemaAsync(app, "my-schema");
Assert.Equal(schema, result);
}
[Fact]
public async Task Should_throw_if_schema_not_found()
{
A.CallTo(() => schemas.FindSchemaByNameAsync(appId, "my-schema")).Returns(Task.FromResult<ISchemaEntity>(null));
await Assert.ThrowsAsync<DomainObjectNotFoundException>(() => sut.FindSchemaAsync(app, "my-schema"));
}
[Fact]
public async Task Should_return_content_from_repository_and_transform()
{
A.CallTo(() => schemas.FindSchemaByIdAsync(schemaId, false)).Returns(Task.FromResult(schema));
A.CallTo(() => contentRepository.FindContentAsync(app, schema, contentId)).Returns(content);
A.CallTo(() => schema.ScriptQuery).Returns("<script-query>");
A.CallTo(() => scriptEngine.Transform(A<ScriptContext>.That.Matches(x => x.User == user && x.ContentId == contentId && ReferenceEquals(x.Data, data)), "<script-query>")).Returns(transformedData);
var result = await sut.FindContentAsync(app, schemaId.ToString(), user, contentId);
Assert.Equal(schema, result.Schema);
Assert.Equal(data, result.Content.Data);
Assert.Equal(content.Id, result.Content.Id);
}
[Fact]
public async Task Should_throw_if_content_to_find_does_not_exist()
{
A.CallTo(() => schemas.FindSchemaByIdAsync(schemaId, false)).Returns(Task.FromResult(schema));
A.CallTo(() => contentRepository.FindContentAsync(app, schema, contentId)).Returns(Task.FromResult<IContentEntity>(null));
await Assert.ThrowsAsync<DomainObjectNotFoundException>(async () => await sut.FindContentAsync(app, schemaId.ToString(), user, contentId));
}
[Fact]
public async Task Should_return_contents_from_repository_and_transform()
{
var ids = new HashSet<Guid>();
A.CallTo(() => schemas.FindSchemaByIdAsync(schemaId, false)).Returns(Task.FromResult(schema));
A.CallTo(() => contentRepository.QueryAsync(app, schema, false, ids, A<ODataUriParser>.Ignored)).Returns(Task.FromResult<IReadOnlyList<IContentEntity>>(new List<IContentEntity> { content }));
A.CallTo(() => contentRepository.CountAsync(app, schema, false, ids, A<ODataUriParser>.Ignored)).Returns(123);
A.CallTo(() => schema.ScriptQuery).Returns("<script-query>");
A.CallTo(() => scriptEngine.Transform(A<ScriptContext>.That.Matches(x => x.User == user && x.ContentId == contentId && ReferenceEquals(x.Data, data)), "<script-query>")).Returns(transformedData);
var result = await sut.QueryWithCountAsync(app, schemaId.ToString(), user, ids, null);
Assert.Equal(123, result.Total);
Assert.Equal(schema, result.Schema);
Assert.Equal(data, result.Items[0].Data);
Assert.Equal(content.Id, result.Items[0].Id);
}
}
}

8
tests/Squidex.Domain.Apps.Read.Tests/Contents/GraphQLTests.cs

@ -355,7 +355,7 @@ namespace Squidex.Domain.Apps.Read.Contents
}}
}}";
A.CallTo(() => contentQuery.FindContentAsync(app, schema.ToString(), user, contentId))
A.CallTo(() => contentQuery.FindContentAsync(app, schema.Id.ToString(), user, contentId))
.Returns(Task.FromResult((schema, content)));
var result = await sut.QueryAsync(app, user, new GraphQLQuery { Query = query });
@ -439,7 +439,7 @@ namespace Squidex.Domain.Apps.Read.Contents
var refContents = new List<IContentEntity> { contentRef };
A.CallTo(() => contentQuery.FindContentAsync(app, schema.ToString(), user, contentId))
A.CallTo(() => contentQuery.FindContentAsync(app, schema.Id.ToString(), user, contentId))
.Returns(Task.FromResult((schema, content)));
A.CallTo(() => contentQuery.QueryWithCountAsync(app, schema.Id.ToString(), user, A<HashSet<Guid>>.That.Matches(x => x.Contains(contentRefId)), null))
@ -499,7 +499,7 @@ namespace Squidex.Domain.Apps.Read.Contents
var refAssets = new List<IAssetEntity> { assetRef };
A.CallTo(() => contentQuery.FindContentAsync(app, schema.ToString(), user, contentId))
A.CallTo(() => contentQuery.FindContentAsync(app, schema.Id.ToString(), user, contentId))
.Returns(Task.FromResult((schema, content)));
A.CallTo(() => assetRepository.QueryAsync(app.Id, null, A<HashSet<Guid>>.That.Matches(x => x.Contains(assetRefId)), null, int.MaxValue, 0))
@ -558,7 +558,7 @@ namespace Squidex.Domain.Apps.Read.Contents
}}
}}";
A.CallTo(() => contentQuery.FindContentAsync(app, schema.ToString(), user, contentId))
A.CallTo(() => contentQuery.FindContentAsync(app, schema.Id.ToString(), user, contentId))
.Returns(Task.FromResult((schema, content)));
var result = await sut.QueryAsync(app, user, new GraphQLQuery { Query = query });

Loading…
Cancel
Save