From 64290a25f12491152a05f92b073c5461435c8602 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Tue, 15 Jun 2021 19:10:03 +0200 Subject: [PATCH] Fix for image assets. --- .../ValidateContent/IAssetInfo.cs | 2 ++ .../ValidateContent/Validators/AssetsValidator.cs | 13 +++++-------- .../Assets/IAssetEntity.cs | 2 -- .../Validators/AssetsValidatorTests.cs | 13 ++++++++++++- .../TestHelpers/TestAssets.cs | 14 ++++++++++++++ .../framework/angular/forms/file-drop.directive.ts | 9 +-------- 6 files changed, 34 insertions(+), 19 deletions(-) diff --git a/backend/src/Squidex.Domain.Apps.Core.Operations/ValidateContent/IAssetInfo.cs b/backend/src/Squidex.Domain.Apps.Core.Operations/ValidateContent/IAssetInfo.cs index 092ffb11b..6cc7943eb 100644 --- a/backend/src/Squidex.Domain.Apps.Core.Operations/ValidateContent/IAssetInfo.cs +++ b/backend/src/Squidex.Domain.Apps.Core.Operations/ValidateContent/IAssetInfo.cs @@ -20,6 +20,8 @@ namespace Squidex.Domain.Apps.Core.ValidateContent string FileHash { get; } + string MimeType { get; } + string Slug { get; } AssetMetadata Metadata { get; } diff --git a/backend/src/Squidex.Domain.Apps.Core.Operations/ValidateContent/Validators/AssetsValidator.cs b/backend/src/Squidex.Domain.Apps.Core.Operations/ValidateContent/Validators/AssetsValidator.cs index cc709ca20..307d3627f 100644 --- a/backend/src/Squidex.Domain.Apps.Core.Operations/ValidateContent/Validators/AssetsValidator.cs +++ b/backend/src/Squidex.Domain.Apps.Core.Operations/ValidateContent/Validators/AssetsValidator.cs @@ -1,4 +1,4 @@ -// ========================================================================== +// ========================================================================== // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex UG (haftungsbeschraenkt) @@ -76,12 +76,9 @@ namespace Squidex.Domain.Apps.Core.ValidateContent.Validators foundIds.Add(asset.AssetId); ValidateCommon(asset, path, addError); + ValidateIsImage(asset, path, addError); - if (asset.Type != AssetType.Image) - { - ValidateNonImage(path, addError); - } - else + if (asset.Type == AssetType.Image) { ValidateImage(asset, path, addError); } @@ -123,9 +120,9 @@ namespace Squidex.Domain.Apps.Core.ValidateContent.Validators } } - private void ValidateNonImage(ImmutableQueue path, AddError addError) + private void ValidateIsImage(IAssetInfo asset, ImmutableQueue path, AddError addError) { - if (properties.MustBeImage) + if (properties.MustBeImage && asset.Type != AssetType.Image && asset.MimeType != "image/svg+xml") { addError(path, T.Get("contents.validation.image")); } diff --git a/backend/src/Squidex.Domain.Apps.Entities/Assets/IAssetEntity.cs b/backend/src/Squidex.Domain.Apps.Entities/Assets/IAssetEntity.cs index d88a815b0..90eaa4185 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Assets/IAssetEntity.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Assets/IAssetEntity.cs @@ -22,8 +22,6 @@ namespace Squidex.Domain.Apps.Entities.Assets DomainId ParentId { get; } - string MimeType { get; } - bool IsProtected { get; } long FileVersion { get; } diff --git a/backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/ValidateContent/Validators/AssetsValidatorTests.cs b/backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/ValidateContent/Validators/AssetsValidatorTests.cs index 6b59bc6ef..305e29d6a 100644 --- a/backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/ValidateContent/Validators/AssetsValidatorTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/ValidateContent/Validators/AssetsValidatorTests.cs @@ -25,6 +25,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ValidateContent.Validators private readonly IAssetInfo document = TestAssets.Document(DomainId.NewGuid()); private readonly IAssetInfo image1 = TestAssets.Image(DomainId.NewGuid()); private readonly IAssetInfo image2 = TestAssets.Image(DomainId.NewGuid()); + private readonly IAssetInfo imageSvg = TestAssets.Svg(DomainId.NewGuid()); [Fact] public async Task Should_not_add_error_if_assets_are_valid() @@ -66,6 +67,16 @@ namespace Squidex.Domain.Apps.Core.Operations.ValidateContent.Validators Assert.Empty(errors); } + [Fact] + public async Task Should_not_add_error_if_asset_is_an_image() + { + var sut = Validator(new AssetsFieldProperties { MustBeImage = true }); + + await sut.ValidateAsync(CreateValue(imageSvg.AssetId, image1.AssetId), errors); + + Assert.Empty(errors); + } + [Fact] public async Task Should_add_error_if_references_are_required() { @@ -240,7 +251,7 @@ namespace Squidex.Domain.Apps.Core.Operations.ValidateContent.Validators { return ids => { - var result = new List { document, image1, image2 }; + var result = new List { document, image1, image2, imageSvg }; return Task.FromResult>(result); }; diff --git a/backend/tests/Squidex.Domain.Apps.Core.Tests/TestHelpers/TestAssets.cs b/backend/tests/Squidex.Domain.Apps.Core.Tests/TestHelpers/TestAssets.cs index 645106b28..b82ae0439 100644 --- a/backend/tests/Squidex.Domain.Apps.Core.Tests/TestHelpers/TestAssets.cs +++ b/backend/tests/Squidex.Domain.Apps.Core.Tests/TestHelpers/TestAssets.cs @@ -21,6 +21,8 @@ namespace Squidex.Domain.Apps.Core.TestHelpers public string FileHash { get; set; } + public string MimeType { get; set; } + public string Slug { get; set; } public long FileSize { get; set; } @@ -61,5 +63,17 @@ namespace Squidex.Domain.Apps.Core.TestHelpers .SetPixelHeight(600) }; } + + public static AssetInfo Svg(DomainId id) + { + return new AssetInfo + { + AssetId = id, + FileName = "MyImage.png", + FileSize = 1024 * 8, + Type = AssetType.Unknown, + MimeType = "image/svg+xml" + }; + } } } diff --git a/frontend/app/framework/angular/forms/file-drop.directive.ts b/frontend/app/framework/angular/forms/file-drop.directive.ts index a7237da4a..c402f5257 100644 --- a/frontend/app/framework/angular/forms/file-drop.directive.ts +++ b/frontend/app/framework/angular/forms/file-drop.directive.ts @@ -8,13 +8,6 @@ import { Directive, ElementRef, EventEmitter, HostListener, Input, Output, Renderer2 } from '@angular/core'; import { Types } from '@app/framework/internal'; -const ImageTypes: ReadonlyArray = [ - 'image/jpeg', - 'image/png', - 'image/jpg', - 'image/gif', -]; - @Directive({ selector: '[sqxDropFile]', }) @@ -204,7 +197,7 @@ export class FileDropDirective { } private isImage(file: { type: string }) { - return !this.onlyImages || ImageTypes.indexOf(file.type) >= 0; + return !this.onlyImages || file.type.indexOf('image/') === 0; } }