|
|
@ -7,6 +7,7 @@ |
|
|
|
|
|
|
|
|
using System; |
|
|
using System; |
|
|
using System.Collections.Generic; |
|
|
using System.Collections.Generic; |
|
|
|
|
|
using System.Linq; |
|
|
using System.Security.Claims; |
|
|
using System.Security.Claims; |
|
|
using System.Threading.Tasks; |
|
|
using System.Threading.Tasks; |
|
|
using FakeItEasy; |
|
|
using FakeItEasy; |
|
|
@ -29,13 +30,12 @@ namespace Squidex.Domain.Apps.Entities.Assets |
|
|
private readonly IAssetRepository assetRepository = A.Fake<IAssetRepository>(); |
|
|
private readonly IAssetRepository assetRepository = A.Fake<IAssetRepository>(); |
|
|
private readonly IAppEntity app = A.Fake<IAppEntity>(); |
|
|
private readonly IAppEntity app = A.Fake<IAppEntity>(); |
|
|
private readonly NamedId<Guid> appId = NamedId.Of(Guid.NewGuid(), "my-app"); |
|
|
private readonly NamedId<Guid> appId = NamedId.Of(Guid.NewGuid(), "my-app"); |
|
|
private readonly ClaimsIdentity identity = new ClaimsIdentity(); |
|
|
|
|
|
private readonly QueryContext context; |
|
|
private readonly QueryContext context; |
|
|
private readonly AssetQueryService sut; |
|
|
private readonly AssetQueryService sut; |
|
|
|
|
|
|
|
|
public AssetQueryServiceTests() |
|
|
public AssetQueryServiceTests() |
|
|
{ |
|
|
{ |
|
|
var user = new ClaimsPrincipal(identity); |
|
|
var user = new ClaimsPrincipal(new ClaimsIdentity()); |
|
|
|
|
|
|
|
|
A.CallTo(() => app.Id).Returns(appId.Id); |
|
|
A.CallTo(() => app.Id).Returns(appId.Id); |
|
|
A.CallTo(() => app.Name).Returns(appId.Name); |
|
|
A.CallTo(() => app.Name).Returns(appId.Name); |
|
|
@ -43,14 +43,6 @@ namespace Squidex.Domain.Apps.Entities.Assets |
|
|
|
|
|
|
|
|
context = QueryContext.Create(app, user); |
|
|
context = QueryContext.Create(app, user); |
|
|
|
|
|
|
|
|
A.CallTo(() => tagService.DenormalizeTagsAsync(appId.Id, TagGroups.Assets, A<HashSet<string>>.That.IsSameSequenceAs("id1", "id2", "id3"))) |
|
|
|
|
|
.Returns(new Dictionary<string, string> |
|
|
|
|
|
{ |
|
|
|
|
|
["id1"] = "name1", |
|
|
|
|
|
["id2"] = "name2", |
|
|
|
|
|
["id3"] = "name3" |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
var options = Options.Create(new AssetOptions { DefaultPageSize = 30 }); |
|
|
var options = Options.Create(new AssetOptions { DefaultPageSize = 30 }); |
|
|
|
|
|
|
|
|
sut = new AssetQueryService(tagService, assetEnricher, assetRepository, options); |
|
|
sut = new AssetQueryService(tagService, assetEnricher, assetRepository, options); |
|
|
@ -65,68 +57,85 @@ namespace Squidex.Domain.Apps.Entities.Assets |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
[Fact] |
|
|
[Fact] |
|
|
public async Task Should_find_asset_by_id_and_resolve_tags() |
|
|
public async Task Should_find_asset_by_id_and_enrich_it() |
|
|
{ |
|
|
{ |
|
|
var id = Guid.NewGuid(); |
|
|
var found = new AssetEntity { Id = Guid.NewGuid() }; |
|
|
|
|
|
|
|
|
|
|
|
var enriched = new AssetEntity(); |
|
|
|
|
|
|
|
|
A.CallTo(() => assetRepository.FindAssetAsync(id, false)) |
|
|
A.CallTo(() => assetRepository.FindAssetAsync(found.Id, false)) |
|
|
.Returns(CreateAsset(id, "id1", "id2", "id3")); |
|
|
.Returns(found); |
|
|
|
|
|
|
|
|
var result = await sut.FindAssetAsync(id); |
|
|
A.CallTo(() => assetEnricher.EnrichAsync(found)) |
|
|
|
|
|
.Returns(enriched); |
|
|
|
|
|
|
|
|
Assert.Equal(HashSet.Of("name1", "name2", "name3"), result.Tags); |
|
|
var result = await sut.FindAssetAsync(found.Id); |
|
|
|
|
|
|
|
|
|
|
|
Assert.Same(enriched, result); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
[Fact] |
|
|
[Fact] |
|
|
public async Task Should_find_asset_by_hash_and_resolve_tags() |
|
|
public async Task Should_find_assets_by_hash_and_and_enrich_it() |
|
|
{ |
|
|
{ |
|
|
var id = Guid.NewGuid(); |
|
|
var found = new AssetEntity { Id = Guid.NewGuid() }; |
|
|
|
|
|
|
|
|
|
|
|
var enriched = new AssetEntity(); |
|
|
|
|
|
|
|
|
A.CallTo(() => assetRepository.QueryByHashAsync(appId.Id, "hash")) |
|
|
A.CallTo(() => assetRepository.QueryByHashAsync(appId.Id, "hash")) |
|
|
.Returns(new List<IAssetEntity> { CreateAsset(id, "id1", "id2", "id3") }); |
|
|
.Returns(new List<IAssetEntity> { found }); |
|
|
|
|
|
|
|
|
|
|
|
A.CallTo(() => assetEnricher.EnrichAsync(A<IEnumerable<IAssetEntity>>.That.IsSameSequenceAs(found))) |
|
|
|
|
|
.Returns(new List<IEnrichedAssetEntity> { enriched }); |
|
|
|
|
|
|
|
|
var result = await sut.QueryByHashAsync(appId.Id, "hash"); |
|
|
var result = await sut.QueryByHashAsync(appId.Id, "hash"); |
|
|
|
|
|
|
|
|
Assert.Equal(HashSet.Of("name1", "name2", "name3"), result[0].Tags); |
|
|
Assert.Same(enriched, result.Single()); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
[Fact] |
|
|
[Fact] |
|
|
public async Task Should_load_assets_from_ids_and_resolve_tags() |
|
|
public async Task Should_load_assets_from_ids_and_resolve_tags() |
|
|
{ |
|
|
{ |
|
|
var id1 = Guid.NewGuid(); |
|
|
var found1 = new AssetEntity { Id = Guid.NewGuid() }; |
|
|
var id2 = Guid.NewGuid(); |
|
|
var found2 = new AssetEntity { Id = Guid.NewGuid() }; |
|
|
|
|
|
|
|
|
|
|
|
var enriched1 = new AssetEntity(); |
|
|
|
|
|
var enriched2 = new AssetEntity(); |
|
|
|
|
|
|
|
|
var ids = HashSet.Of(id1, id2); |
|
|
var ids = HashSet.Of(found1.Id, found2.Id); |
|
|
|
|
|
|
|
|
A.CallTo(() => assetRepository.QueryAsync(appId.Id, A<HashSet<Guid>>.That.IsSameSequenceAs(ids))) |
|
|
A.CallTo(() => assetRepository.QueryAsync(appId.Id, A<HashSet<Guid>>.That.IsSameSequenceAs(ids))) |
|
|
.Returns(ResultList.Create(8, |
|
|
.Returns(ResultList.Create(8, found1, found2)); |
|
|
CreateAsset(id1, "id1", "id2", "id3"), |
|
|
|
|
|
CreateAsset(id2))); |
|
|
A.CallTo(() => assetEnricher.EnrichAsync(A<IEnumerable<IAssetEntity>>.That.IsSameSequenceAs(found1, found2))) |
|
|
|
|
|
.Returns(new List<IEnrichedAssetEntity> { enriched1, enriched2 }); |
|
|
|
|
|
|
|
|
var result = await sut.QueryAsync(context, Q.Empty.WithIds(ids)); |
|
|
var result = await sut.QueryAsync(context, Q.Empty.WithIds(ids)); |
|
|
|
|
|
|
|
|
Assert.Equal(8, result.Total); |
|
|
Assert.Equal(8, result.Total); |
|
|
Assert.Equal(2, result.Count); |
|
|
|
|
|
|
|
|
|
|
|
Assert.Equal(HashSet.Of("name1", "name2", "name3"), result[0].Tags); |
|
|
Assert.Equal(new[] { enriched1, enriched2 }, result.ToArray()); |
|
|
Assert.Empty(result[1].Tags); |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
[Fact] |
|
|
[Fact] |
|
|
public async Task Should_load_assets_with_query_and_resolve_tags() |
|
|
public async Task Should_load_assets_with_query_and_resolve_tags() |
|
|
{ |
|
|
{ |
|
|
|
|
|
var found1 = new AssetEntity { Id = Guid.NewGuid() }; |
|
|
|
|
|
var found2 = new AssetEntity { Id = Guid.NewGuid() }; |
|
|
|
|
|
|
|
|
|
|
|
var enriched1 = new AssetEntity(); |
|
|
|
|
|
var enriched2 = new AssetEntity(); |
|
|
|
|
|
|
|
|
A.CallTo(() => assetRepository.QueryAsync(appId.Id, A<Query>.Ignored)) |
|
|
A.CallTo(() => assetRepository.QueryAsync(appId.Id, A<Query>.Ignored)) |
|
|
.Returns(ResultList.Create(8, |
|
|
.Returns(ResultList.Create(8, found1, found2)); |
|
|
CreateAsset(Guid.NewGuid(), "id1", "id2"), |
|
|
|
|
|
CreateAsset(Guid.NewGuid(), "id2", "id3"))); |
|
|
A.CallTo(() => assetEnricher.EnrichAsync(A<IEnumerable<IAssetEntity>>.That.IsSameSequenceAs(found1, found2))) |
|
|
|
|
|
.Returns(new List<IEnrichedAssetEntity> { enriched1, enriched2 }); |
|
|
|
|
|
|
|
|
var result = await sut.QueryAsync(context, Q.Empty); |
|
|
var result = await sut.QueryAsync(context, Q.Empty); |
|
|
|
|
|
|
|
|
Assert.Equal(8, result.Total); |
|
|
Assert.Equal(8, result.Total); |
|
|
Assert.Equal(2, result.Count); |
|
|
|
|
|
|
|
|
|
|
|
Assert.Equal(HashSet.Of("name1", "name2"), result[0].Tags); |
|
|
Assert.Equal(new[] { enriched1, enriched2 }, result.ToArray()); |
|
|
Assert.Equal(HashSet.Of("name2", "name3"), result[1].Tags); |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
[Fact] |
|
|
[Fact] |
|
|
@ -172,15 +181,5 @@ namespace Squidex.Domain.Apps.Entities.Assets |
|
|
A.CallTo(() => assetRepository.QueryAsync(appId.Id, A<Query>.That.Is("Skip: 20; Take: 200; Sort: lastModified Descending"))) |
|
|
A.CallTo(() => assetRepository.QueryAsync(appId.Id, A<Query>.That.Is("Skip: 20; Take: 200; Sort: lastModified Descending"))) |
|
|
.MustHaveHappened(); |
|
|
.MustHaveHappened(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private static 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; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |