Browse Source

Tests improved and fixed.

pull/596/head
Sebastian 5 years ago
parent
commit
1bc85b2fad
  1. 4
      backend/src/Squidex.Domain.Apps.Entities/Assets/AssetCommandMiddleware.cs
  2. 13
      backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/ValidateContent/Validators/AssetsValidatorTests.cs
  3. 46
      backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/ValidateContent/Validators/ReferencesValidatorTests.cs
  4. 48
      backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/ValidateContent/Validators/UniqueValidatorTests.cs
  5. 5
      backend/tests/Squidex.Domain.Apps.Entities.Tests/Apps/DefaultAppLogStoreTests.cs
  6. 2
      backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetCommandMiddlewareTests.cs
  7. 4
      backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/Queries/ConvertDataTests.cs
  8. 10
      frontend/package-lock.json

4
backend/src/Squidex.Domain.Apps.Entities/Assets/AssetCommandMiddleware.cs

@ -58,12 +58,10 @@ namespace Squidex.Domain.Apps.Entities.Assets
{ {
await EnrichWithHashAndUploadAsync(createAsset, tempFile); await EnrichWithHashAndUploadAsync(createAsset, tempFile);
var ctx = contextProvider.Context.Clone().WithoutAssetEnrichment();
if (!createAsset.Duplicate) if (!createAsset.Duplicate)
{ {
var existing = var existing =
await assetQuery.FindByHashAsync(ctx, await assetQuery.FindByHashAsync(contextProvider.Context,
createAsset.FileHash, createAsset.FileHash,
createAsset.File.FileName, createAsset.File.FileName,
createAsset.File.FileSize); createAsset.File.FileSize);

13
backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/ValidateContent/Validators/AssetsValidatorTests.cs

@ -286,10 +286,17 @@ namespace Squidex.Domain.Apps.Core.Operations.ValidateContent.Validators
private IValidator Validator(AssetsFieldProperties properties) private IValidator Validator(AssetsFieldProperties properties)
{ {
return new AssetsValidator(properties.IsRequired, properties, ids => return new AssetsValidator(properties.IsRequired, properties, FoundAssets());
}
private CheckAssets FoundAssets()
{
return ids =>
{ {
return Task.FromResult<IReadOnlyList<IAssetInfo>>(new List<IAssetInfo> { document, image1, image2 }); var result = new List<IAssetInfo> { document, image1, image2 };
});
return Task.FromResult<IReadOnlyList<IAssetInfo>>(result);
};
} }
} }
} }

46
backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/ValidateContent/Validators/ReferencesValidatorTests.cs

@ -32,7 +32,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ValidateContent.Validators
{ {
var properties = new ReferencesFieldProperties { SchemaId = schemaId1 }; var properties = new ReferencesFieldProperties { SchemaId = schemaId1 };
var sut = Validator(properties, FoundReferences((schemaId2, ref2, Status.Published))); var sut = Validator(properties, schemaId2, (ref2, Status.Published));
await sut.ValidateAsync(CreateValue(ref2), errors, action: ValidationAction.Publish); await sut.ValidateAsync(CreateValue(ref2), errors, action: ValidationAction.Publish);
@ -44,7 +44,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ValidateContent.Validators
{ {
var properties = new ReferencesFieldProperties(); var properties = new ReferencesFieldProperties();
var sut = Validator(properties, FoundReferences((schemaId2, ref2, Status.Published))); var sut = Validator(properties, schemaId2, (ref2, Status.Published));
await sut.ValidateAsync(CreateValue(ref2), errors); await sut.ValidateAsync(CreateValue(ref2), errors);
@ -56,7 +56,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ValidateContent.Validators
{ {
var properties = new ReferencesFieldProperties { SchemaId = schemaId1 }; var properties = new ReferencesFieldProperties { SchemaId = schemaId1 };
var sut = Validator(properties, FoundReferences((schemaId1, ref2, Status.Published))); var sut = Validator(properties, schemaId1, (ref2, Status.Published));
await sut.ValidateAsync(CreateValue(ref2), errors); await sut.ValidateAsync(CreateValue(ref2), errors);
@ -68,7 +68,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ValidateContent.Validators
{ {
var properties = new ReferencesFieldProperties(); var properties = new ReferencesFieldProperties();
var sut = Validator(properties, FoundReferences()); var sut = Validator(properties);
await sut.ValidateAsync(null, errors); await sut.ValidateAsync(null, errors);
@ -80,7 +80,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ValidateContent.Validators
{ {
var properties = new ReferencesFieldProperties(); var properties = new ReferencesFieldProperties();
var sut = Validator(properties, FoundReferences()); var sut = Validator(properties);
await sut.ValidateAsync(CreateValue(), errors); await sut.ValidateAsync(CreateValue(), errors);
@ -92,7 +92,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ValidateContent.Validators
{ {
var properties = new ReferencesFieldProperties { AllowDuplicates = true }; var properties = new ReferencesFieldProperties { AllowDuplicates = true };
var sut = Validator(properties, FoundReferences((schemaId1, ref1, Status.Published))); var sut = Validator(properties, schemaId1, (ref1, Status.Published));
await sut.ValidateAsync(CreateValue(ref1, ref1), errors); await sut.ValidateAsync(CreateValue(ref1, ref1), errors);
@ -104,7 +104,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ValidateContent.Validators
{ {
var properties = new ReferencesFieldProperties { IsRequired = true }; var properties = new ReferencesFieldProperties { IsRequired = true };
var sut = Validator(properties, FoundReferences()); var sut = Validator(properties, schemaId1);
await sut.ValidateAsync(CreateValue(), errors); await sut.ValidateAsync(CreateValue(), errors);
@ -117,7 +117,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ValidateContent.Validators
{ {
var properties = new ReferencesFieldProperties { MustBePublished = true, IsRequired = true }; var properties = new ReferencesFieldProperties { MustBePublished = true, IsRequired = true };
var sut = Validator(properties, FoundReferences((schemaId1, ref1, Status.Published))); var sut = Validator(properties, schemaId1, (ref1, Status.Published));
await sut.ValidateAsync(CreateValue(), errors); await sut.ValidateAsync(CreateValue(), errors);
@ -130,7 +130,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ValidateContent.Validators
{ {
var properties = new ReferencesFieldProperties(); var properties = new ReferencesFieldProperties();
var sut = Validator(properties, FoundReferences()); var sut = Validator(properties);
await sut.ValidateAsync(CreateValue(ref1), errors); await sut.ValidateAsync(CreateValue(ref1), errors);
@ -143,7 +143,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ValidateContent.Validators
{ {
var properties = new ReferencesFieldProperties { SchemaId = schemaId1 }; var properties = new ReferencesFieldProperties { SchemaId = schemaId1 };
var sut = Validator(properties, FoundReferences((schemaId2, ref2, Status.Draft))); var sut = Validator(properties, schemaId2, (ref2, Status.Draft));
await sut.ValidateAsync(CreateValue(ref2), errors); await sut.ValidateAsync(CreateValue(ref2), errors);
@ -156,7 +156,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ValidateContent.Validators
{ {
var properties = new ReferencesFieldProperties { MinItems = 2 }; var properties = new ReferencesFieldProperties { MinItems = 2 };
var sut = Validator(properties, FoundReferences((schemaId2, ref2, Status.Draft))); var sut = Validator(properties, schemaId2, (ref2, Status.Draft));
await sut.ValidateAsync(CreateValue(ref2), errors); await sut.ValidateAsync(CreateValue(ref2), errors);
@ -169,7 +169,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ValidateContent.Validators
{ {
var properties = new ReferencesFieldProperties { MinItems = 2, MustBePublished = true }; var properties = new ReferencesFieldProperties { MinItems = 2, MustBePublished = true };
var sut = Validator(properties, FoundReferences((schemaId1, ref1, Status.Published), (schemaId1, ref2, Status.Draft))); var sut = Validator(properties, schemaId1, (ref1, Status.Published), (ref2, Status.Draft));
await sut.ValidateAsync(CreateValue(ref1, ref2), errors); await sut.ValidateAsync(CreateValue(ref1, ref2), errors);
@ -182,7 +182,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ValidateContent.Validators
{ {
var properties = new ReferencesFieldProperties { MaxItems = 1 }; var properties = new ReferencesFieldProperties { MaxItems = 1 };
var sut = Validator(properties, FoundReferences((schemaId1, ref1, Status.Published), (schemaId1, ref2, Status.Draft))); var sut = Validator(properties, schemaId1, (ref1, Status.Published), (ref2, Status.Draft));
await sut.ValidateAsync(CreateValue(ref1, ref2), errors); await sut.ValidateAsync(CreateValue(ref1, ref2), errors);
@ -195,7 +195,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ValidateContent.Validators
{ {
var properties = new ReferencesFieldProperties(); var properties = new ReferencesFieldProperties();
var sut = Validator(properties, FoundReferences((schemaId1, ref1, Status.Published))); var sut = Validator(properties, schemaId1, (ref1, Status.Published));
await sut.ValidateAsync(CreateValue(ref1, ref1), errors); await sut.ValidateAsync(CreateValue(ref1, ref1), errors);
@ -208,14 +208,24 @@ namespace Squidex.Domain.Apps.Core.Operations.ValidateContent.Validators
return ids.ToList(); return ids.ToList();
} }
private static CheckContentsByIds FoundReferences(params (DomainId SchemaId, DomainId Id, Status Status)[] references) private IValidator Validator(ReferencesFieldProperties properties)
{ {
return x => Task.FromResult<IReadOnlyList<(DomainId SchemaId, DomainId Id, Status Status)>>(references.ToList()); return new ReferencesValidator(properties.IsRequired, properties, FoundReferences(schemaId1));
} }
private IValidator Validator(ReferencesFieldProperties properties, CheckContentsByIds found) private IValidator Validator(ReferencesFieldProperties properties, DomainId schemaId, params (DomainId Id, Status Status)[] references)
{ {
return new ReferencesValidator(properties.IsRequired, properties, found); return new ReferencesValidator(properties.IsRequired, properties, FoundReferences(schemaId, references));
}
private static CheckContentsByIds FoundReferences(DomainId schemaId, params (DomainId Id, Status Status)[] references)
{
return x =>
{
var result = references.Select(x => (schemaId, x.Id, x.Status)).ToList();
return Task.FromResult<IReadOnlyList<(DomainId SchemaId, DomainId Id, Status Status)>>(result);
};
} }
} }
} }

48
backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/ValidateContent/Validators/UniqueValidatorTests.cs

@ -19,15 +19,14 @@ namespace Squidex.Domain.Apps.Core.Operations.ValidateContent.Validators
{ {
public class UniqueValidatorTests : IClassFixture<TranslationsFixture> public class UniqueValidatorTests : IClassFixture<TranslationsFixture>
{ {
private readonly DomainId schemaId = DomainId.NewGuid();
private readonly List<string> errors = new List<string>(); private readonly List<string> errors = new List<string>();
[Fact] [Fact]
public async Task Should_add_error_if_string_value_not_found() public async Task Should_add_error_if_other_content_with_string_value_found()
{ {
var filter = string.Empty; var filter = string.Empty;
var sut = new UniqueValidator(Check(DomainId.NewGuid(), f => filter = f)); var sut = new UniqueValidator(FoundDuplicates(DomainId.NewGuid(), f => filter = f));
await sut.ValidateAsync("hi", errors, updater: c => c.Nested("property").Nested("iv")); await sut.ValidateAsync("hi", errors, updater: c => c.Nested("property").Nested("iv"));
@ -38,11 +37,11 @@ namespace Squidex.Domain.Apps.Core.Operations.ValidateContent.Validators
} }
[Fact] [Fact]
public async Task Should_add_error_if_double_value_not_found() public async Task Should_add_error_if_other_content_with_double_value_found()
{ {
var filter = string.Empty; var filter = string.Empty;
var sut = new UniqueValidator(Check(DomainId.NewGuid(), f => filter = f)); var sut = new UniqueValidator(FoundDuplicates(DomainId.NewGuid(), f => filter = f));
await sut.ValidateAsync(12.5, errors, updater: c => c.Nested("property").Nested("iv")); await sut.ValidateAsync(12.5, errors, updater: c => c.Nested("property").Nested("iv"));
@ -53,9 +52,23 @@ namespace Squidex.Domain.Apps.Core.Operations.ValidateContent.Validators
} }
[Fact] [Fact]
public async Task Should_not_add_error_if_string_value_not_found_but_in_optimized_mode() public async Task Should_not_check_uniqueness_if_localized_string()
{ {
var sut = new UniqueValidator(Check(DomainId.NewGuid())); var filter = string.Empty;
var sut = new UniqueValidator(FoundDuplicates(DomainId.NewGuid(), f => filter = f));
await sut.ValidateAsync(12.5, errors, updater: c => c.Nested("property").Nested("de"));
Assert.Empty(errors);
Assert.Empty(filter);
}
[Fact]
public async Task Should_not_add_error_if_value_is_null()
{
var sut = new UniqueValidator(FoundDuplicates(DomainId.NewGuid()));
await sut.ValidateAsync(null, errors); await sut.ValidateAsync(null, errors);
@ -63,11 +76,11 @@ namespace Squidex.Domain.Apps.Core.Operations.ValidateContent.Validators
} }
[Fact] [Fact]
public async Task Should_not_add_error_if_string_value_found_with_same_content_id() public async Task Should_not_add_error_if_same_content_with_string_value_found()
{ {
var ctx = ValidationTestExtensions.CreateContext(); var ctx = ValidationTestExtensions.CreateContext().Nested("property").Nested("iv");
var sut = new UniqueValidator(Check(ctx.ContentId)); var sut = new UniqueValidator(FoundDuplicates(ctx.ContentId));
await sut.ValidateAsync("hi", ctx, ValidationTestExtensions.CreateFormatter(errors)); await sut.ValidateAsync("hi", ctx, ValidationTestExtensions.CreateFormatter(errors));
@ -75,24 +88,29 @@ namespace Squidex.Domain.Apps.Core.Operations.ValidateContent.Validators
} }
[Fact] [Fact]
public async Task Should_not_add_error_if_double_value_found_with_same_content_id() public async Task Should_not_add_error_if_same_content_with_double_value_found()
{ {
var ctx = ValidationTestExtensions.CreateContext(); var ctx = ValidationTestExtensions.CreateContext().Nested("property").Nested("iv");
var sut = new UniqueValidator(Check(ctx.ContentId)); var sut = new UniqueValidator(FoundDuplicates(ctx.ContentId));
await sut.ValidateAsync(12.5, ctx, ValidationTestExtensions.CreateFormatter(errors)); await sut.ValidateAsync(12.5, ctx, ValidationTestExtensions.CreateFormatter(errors));
Assert.Empty(errors); Assert.Empty(errors);
} }
private CheckUniqueness Check(DomainId id, Action<string>? filter = null) private CheckUniqueness FoundDuplicates(DomainId id, Action<string>? filter = null)
{ {
return filterNode => return filterNode =>
{ {
filter?.Invoke(filterNode.ToString()); filter?.Invoke(filterNode.ToString());
return Task.FromResult<IReadOnlyList<(DomainId, DomainId, Status)>>(new List<(DomainId, DomainId, Status)> { (schemaId, id, Status.Published) }); var foundIds = new List<(DomainId, DomainId, Status)>
{
(id, id, Status.Draft)
};
return Task.FromResult<IReadOnlyList<(DomainId, DomainId, Status)>>(foundIds);
}; };
} }
} }

5
backend/tests/Squidex.Domain.Apps.Entities.Tests/Apps/DefaultAppLogStoreTests.cs

@ -7,6 +7,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization;
using System.IO; using System.IO;
using System.Threading.Tasks; using System.Threading.Tasks;
using FakeItEasy; using FakeItEasy;
@ -48,8 +49,8 @@ namespace Squidex.Domain.Apps.Entities.Apps
Assert.NotNull(recordedRequest); Assert.NotNull(recordedRequest);
Assert.Contains(request.Bytes.ToString(), recordedRequest!.Properties.Values); Assert.Contains(request.Bytes.ToString(CultureInfo.InvariantCulture), recordedRequest!.Properties.Values);
Assert.Contains(request.Costs.ToString(), recordedRequest!.Properties.Values); Assert.Contains(request.Costs.ToString(CultureInfo.InvariantCulture), recordedRequest!.Properties.Values);
Assert.Contains(request.ElapsedMs.ToString(), recordedRequest!.Properties.Values); Assert.Contains(request.ElapsedMs.ToString(), recordedRequest!.Properties.Values);
Assert.Contains(request.RequestMethod, recordedRequest!.Properties.Values); Assert.Contains(request.RequestMethod, recordedRequest!.Properties.Values);
Assert.Contains(request.RequestPath, recordedRequest!.Properties.Values); Assert.Contains(request.RequestPath, recordedRequest!.Properties.Values);

2
backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetCommandMiddlewareTests.cs

@ -291,7 +291,7 @@ namespace Squidex.Domain.Apps.Entities.Assets
FileSize = fileSize FileSize = fileSize
}; };
A.CallTo(() => assetQuery.FindByHashAsync(A<Context>.That.Matches(x => x.ShouldEnrichAsset()), A<string>._, A<string>._, A<long>._)) A.CallTo(() => assetQuery.FindByHashAsync(requestContext, A<string>._, fileName, fileSize))
.Returns(duplicate); .Returns(duplicate);
} }

4
backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/Queries/ConvertDataTests.cs

@ -90,7 +90,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries
.Returns(new List<DomainId> { id2 }); .Returns(new List<DomainId> { id2 });
A.CallTo(() => contentRepository.QueryIdsAsync(appId.Id, A<HashSet<DomainId>>.That.Is(id1, id2), SearchScope.All)) A.CallTo(() => contentRepository.QueryIdsAsync(appId.Id, A<HashSet<DomainId>>.That.Is(id1, id2), SearchScope.All))
.Returns(new List<(DomainId, DomainId)> { (id2, id2) }); .Returns(new List<(DomainId, DomainId, Status)> { (id2, id2, Status.Published) });
var ctx = new Context(Mocks.FrontendUser(), Mocks.App(appId)); var ctx = new Context(Mocks.FrontendUser(), Mocks.App(appId));
@ -128,7 +128,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries
.Returns(new List<DomainId>()); .Returns(new List<DomainId>());
A.CallTo(() => contentRepository.QueryIdsAsync(appId.Id, A<HashSet<DomainId>>.That.Is(id1, id2), SearchScope.All)) A.CallTo(() => contentRepository.QueryIdsAsync(appId.Id, A<HashSet<DomainId>>.That.Is(id1, id2), SearchScope.All))
.Returns(new List<(DomainId, DomainId)>()); .Returns(new List<(DomainId, DomainId, Status)>());
var ctx = new Context(Mocks.FrontendUser(), Mocks.App(appId)); var ctx = new Context(Mocks.FrontendUser(), Mocks.App(appId));

10
frontend/package-lock.json

@ -1342,7 +1342,7 @@
"dependencies": { "dependencies": {
"jsesc": { "jsesc": {
"version": "1.3.0", "version": "1.3.0",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
"integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
"dev": true "dev": true
} }
@ -2848,7 +2848,7 @@
}, },
"css-color-names": { "css-color-names": {
"version": "0.0.4", "version": "0.0.4",
"resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", "resolved": "http://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
"integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=",
"dev": true "dev": true
}, },
@ -8547,7 +8547,7 @@
}, },
"onetime": { "onetime": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
"integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
"dev": true "dev": true
}, },
@ -12322,7 +12322,7 @@
}, },
"rgba-regex": { "rgba-regex": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", "resolved": "http://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz",
"integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=",
"dev": true "dev": true
}, },
@ -14267,7 +14267,7 @@
"dependencies": { "dependencies": {
"json5": { "json5": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", "resolved": "http://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
"integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
"dev": true, "dev": true,
"requires": { "requires": {

Loading…
Cancel
Save