mirror of https://github.com/Squidex/squidex.git
8 changed files with 138 additions and 28 deletions
@ -0,0 +1,117 @@ |
|||||
|
// ==========================================================================
|
||||
|
// Squidex Headless CMS
|
||||
|
// ==========================================================================
|
||||
|
// Copyright (c) Squidex UG (haftungsbeschränkt)
|
||||
|
// All rights reserved. Licensed under the MIT license.
|
||||
|
// ==========================================================================
|
||||
|
|
||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Security.Claims; |
||||
|
using System.Threading.Tasks; |
||||
|
using FakeItEasy; |
||||
|
using Squidex.Domain.Apps.Core.Apps; |
||||
|
using Squidex.Domain.Apps.Entities.Apps; |
||||
|
using Squidex.Domain.Apps.Entities.Assets.Repositories; |
||||
|
using Squidex.Domain.Apps.Entities.Tags; |
||||
|
using Squidex.Infrastructure; |
||||
|
using Xunit; |
||||
|
|
||||
|
namespace Squidex.Domain.Apps.Entities.Assets |
||||
|
{ |
||||
|
public class AssetQueryServiceTests |
||||
|
{ |
||||
|
private readonly ITagService tagService = A.Fake<ITagService>(); |
||||
|
private readonly IAssetRepository assetRepository = A.Fake<IAssetRepository>(); |
||||
|
private readonly IAppEntity app = A.Fake<IAppEntity>(); |
||||
|
private readonly Guid appId = Guid.NewGuid(); |
||||
|
private readonly string appName = "my-app"; |
||||
|
private readonly ClaimsPrincipal user; |
||||
|
private readonly ClaimsIdentity identity = new ClaimsIdentity(); |
||||
|
private readonly QueryContext context; |
||||
|
private readonly AssetQueryService sut; |
||||
|
|
||||
|
public AssetQueryServiceTests() |
||||
|
{ |
||||
|
user = new ClaimsPrincipal(identity); |
||||
|
|
||||
|
A.CallTo(() => app.Id).Returns(appId); |
||||
|
A.CallTo(() => app.Name).Returns(appName); |
||||
|
A.CallTo(() => app.LanguagesConfig).Returns(LanguagesConfig.English); |
||||
|
|
||||
|
context = QueryContext.Create(app, user); |
||||
|
|
||||
|
A.CallTo(() => tagService.DenormalizeTagsAsync(appId, TagGroups.Assets, A<HashSet<string>>.That.IsSameSequenceAs("id1", "id2", "id3"))) |
||||
|
.Returns(new Dictionary<string, string> |
||||
|
{ |
||||
|
["id1"] = "name1", |
||||
|
["id2"] = "name2", |
||||
|
["id3"] = "name3" |
||||
|
}); |
||||
|
|
||||
|
sut = new AssetQueryService(tagService, assetRepository); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_find_asset_by_id_and_resolve_tags() |
||||
|
{ |
||||
|
var id = Guid.NewGuid(); |
||||
|
|
||||
|
A.CallTo(() => assetRepository.FindAssetAsync(id)) |
||||
|
.Returns(CreateAsset(id, "id1", "id2", "id3")); |
||||
|
|
||||
|
var result = await sut.FindAssetAsync(context, id); |
||||
|
|
||||
|
Assert.Equal(HashSet.Of("name1", "name2", "name3"), result.Tags); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_load_assets_from_ids_and_resolve_tags() |
||||
|
{ |
||||
|
var id1 = Guid.NewGuid(); |
||||
|
var id2 = Guid.NewGuid(); |
||||
|
|
||||
|
var ids = HashSet.Of(id1, id2); |
||||
|
|
||||
|
A.CallTo(() => assetRepository.QueryAsync(appId, A<HashSet<Guid>>.That.IsSameSequenceAs(ids))) |
||||
|
.Returns(ResultList.Create(8, |
||||
|
CreateAsset(id1, "id1", "id2", "id3"), |
||||
|
CreateAsset(id2))); |
||||
|
|
||||
|
var result = await sut.QueryAsync(context, Query.Empty.WithIds(ids)); |
||||
|
|
||||
|
Assert.Equal(8, result.Total); |
||||
|
Assert.Equal(2, result.Count); |
||||
|
|
||||
|
Assert.Equal(HashSet.Of("name1", "name2", "name3"), result[0].Tags); |
||||
|
Assert.Empty(result[1].Tags); |
||||
|
} |
||||
|
|
||||
|
[Fact] |
||||
|
public async Task Should_load_assets_with_query_and_resolve_tags() |
||||
|
{ |
||||
|
A.CallTo(() => assetRepository.QueryAsync(appId, "my-query")) |
||||
|
.Returns(ResultList.Create(8, |
||||
|
CreateAsset(Guid.NewGuid(), "id1", "id2"), |
||||
|
CreateAsset(Guid.NewGuid(), "id2", "id3"))); |
||||
|
|
||||
|
var result = await sut.QueryAsync(context, Query.Empty.WithODataQuery("my-query")); |
||||
|
|
||||
|
Assert.Equal(8, result.Total); |
||||
|
Assert.Equal(2, result.Count); |
||||
|
|
||||
|
Assert.Equal(HashSet.Of("name1", "name2"), result[0].Tags); |
||||
|
Assert.Equal(HashSet.Of("name2", "name3"), result[1].Tags); |
||||
|
} |
||||
|
|
||||
|
private IAssetEntity CreateAsset(Guid id, params string[] tags) |
||||
|
{ |
||||
|
var asset = A.Fake<IAssetEntity>(); |
||||
|
|
||||
|
A.CallTo(() => asset.Id).Returns(id); |
||||
|
A.CallTo(() => asset.Tags).Returns(HashSet.Of(tags)); |
||||
|
|
||||
|
return asset; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue