private void VerifyCompositeBitmapImageConstraints(int templateCode, CompositeBitmapImageElementConstraints compositeBitmapImageElementConstraints) { VerifyBinaryConstraints(templateCode, compositeBitmapImageElementConstraints); if (compositeBitmapImageElementConstraints.SizeSpecificImageMaxSize <= 0) { throw new TemplateValidationException(templateCode, TemplateElementValidationError.NegativeSizeSpecificImageMaxSize); } if (compositeBitmapImageElementConstraints.SupportedFileFormats.Any(x => !CompositeBitmapImageFileFormats.Contains(x))) { throw new TemplateValidationException(templateCode, TemplateElementValidationError.UnsupportedImageFileFormat); } if (!SizeRangeIsConsistent(compositeBitmapImageElementConstraints.ImageSizeRange)) { throw new TemplateValidationException(templateCode, TemplateElementValidationError.InvalidImageSizeRange); } }
public static void ValidateSizeSpecificBitmapImageHeader( int templateCode, CompositeBitmapImageElementConstraints constraints, FileFormat fileFormat, Stream inputStream, ImageSize targetImageSize) { var imageInfo = ValidateBitmapImageFormat(templateCode, constraints, fileFormat, inputStream); var imageSize = new ImageSize { Width = imageInfo.Width, Height = imageInfo.Height }; if (imageSize != targetImageSize) { throw new InvalidBinaryException(templateCode, new SizeSpecificImageTargetSizeNotEqualToActualSizeError(imageSize)); } if (constraints.SizeSpecificImageIsSquare && imageSize.Width != imageSize.Height) { throw new InvalidBinaryException(templateCode, new SizeSpecificImageIsNotSquareError()); } }
private void VerifyCompositeBitmapImageConstraints(int templateCode, CompositeBitmapImageElementConstraints compositeBitmapImageElementConstraints) { bool SizeRangeIsConsistent(ImageSizeRange range) { return(range.Min.Width < range.Max.Width && range.Min.Height < range.Max.Height && range.Min.Width > 0 && range.Min.Height > 0); } VerifyBinaryConstraints(templateCode, compositeBitmapImageElementConstraints); if (compositeBitmapImageElementConstraints.SizeSpecificImageMaxSize <= 0) { throw new TemplateValidationException(templateCode, TemplateElementValidationError.NegativeSizeSpecificImageMaxSize); } if (compositeBitmapImageElementConstraints.SupportedFileFormats.Any(x => !CompositeBitmapImageFileFormats.Contains(x))) { throw new TemplateValidationException(templateCode, TemplateElementValidationError.UnsupportedImageFileFormat); } if (!SizeRangeIsConsistent(compositeBitmapImageElementConstraints.ImageSizeRange)) { throw new TemplateValidationException(templateCode, TemplateElementValidationError.InvalidImageSizeRange); } }
public async Task CorrectJsonShouldBePassedToS3PutObjectForCompositeBitmapImageElement() { const int TemplateCode = 100; const Language Language = Language.Ru; var constraints = new CompositeBitmapImageElementConstraints(); var templateDescriptor = new TemplateDescriptor { Id = TemplateId, VersionId = TemplateVersionId, Properties = new JObject(), Elements = new[] { new ElementDescriptor( ElementDescriptorType.CompositeBitmapImage, TemplateCode, new JObject(), new ConstraintSet(new[] { new ConstraintSetItem(Language, constraints) })) } }; _objectsStorageReaderMock.Setup(m => m.IsObjectExists(It.IsAny <long>())) .ReturnsAsync(() => false); _templatesStorageReaderMock.Setup(m => m.GetTemplateDescriptor(It.IsAny <long>(), It.IsAny <string>())) .ReturnsAsync(() => templateDescriptor); _templatesStorageReaderMock.Setup(m => m.GetTemplateLatestVersion(It.IsAny <long>())) .ReturnsAsync(() => TemplateVersionId); _objectsStorageReaderMock.Setup(m => m.GetObjectLatestVersions(It.IsAny <long>())) .ReturnsAsync(() => new[] { new VersionedObjectDescriptor <string>( ObjectId.AsS3ObjectKey(Tokens.ObjectPostfix), ObjectVersionId, DateTime.UtcNow) }); var response = new GetObjectMetadataResponse(); var metadataWrapper = MetadataCollectionWrapper.For(response.Metadata); metadataWrapper.Write(MetadataElement.ExpiresAt, DateTime.UtcNow.AddDays(1)); _cephS3ClientMock.Setup(m => m.GetObjectMetadataAsync(It.IsAny <string>(), It.IsAny <string>())) .ReturnsAsync(() => response); var requests = new List <PutObjectRequest>(); _s3ClientMock.Setup(m => m.PutObjectAsync(It.IsAny <PutObjectRequest>())) .Callback <PutObjectRequest>(request => requests.Add(request)) .ReturnsAsync(new PutObjectResponse()); var fileKey = Guid.NewGuid().AsS3ObjectKey("key.raw"); var objectDescriptor = new ObjectDescriptor { Language = Language, TemplateId = TemplateId, TemplateVersionId = TemplateVersionId, Properties = new JObject(), Elements = new[] { new ObjectElementDescriptor { Type = ElementDescriptorType.CompositeBitmapImage, TemplateCode = TemplateCode, Constraints = new ConstraintSet(new[] { new ConstraintSetItem(Language, constraints) }), Value = new CompositeBitmapImageElementValue { Raw = fileKey, CropArea = new CropArea(), SizeSpecificImages = Array.Empty <SizeSpecificImage>() } } } }; await _objectsManagementService.Create(ObjectId, AuthorInfo, objectDescriptor); var elementContent = requests[0].ContentBody; var elementJson = JObject.Parse(elementContent); var valueJson = elementJson["value"]; Assert.Equal(fileKey, valueJson["raw"]); Assert.NotNull(valueJson["filename"]); Assert.NotNull(valueJson["filesize"]); Assert.NotNull(valueJson["cropArea"]); Assert.NotNull(valueJson["sizeSpecificImages"]); }
public static void ValidateCompositeBitmapImageOriginalHeader(int templateCode, CompositeBitmapImageElementConstraints constraints, FileFormat fileFormat, Stream inputStream) { var imageInfo = ValidateBitmapImageFormat(templateCode, constraints, fileFormat, inputStream); var imageSize = new ImageSize { Width = imageInfo.Width, Height = imageInfo.Height }; if (!constraints.ImageSizeRange.Includes(imageSize)) { throw new InvalidBinaryException(templateCode, new ImageSizeOutOfRangeError(imageSize)); } }
public async Task CorrectJsonShouldBePassedToS3PutObjectForCompositeBitmapImageElement() { const int TemplateCode = 100; const Language Language = Language.Ru; var constraints = new CompositeBitmapImageElementConstraints { SupportedFileFormats = new List <FileFormat> { FileFormat.Png }, ImageSizeRange = new ImageSizeRange { Min = ImageSize.Empty, Max = new ImageSize { Width = 500, Height = 500 } } }; var templateDescriptor = new TemplateDescriptor { Id = TemplateId, VersionId = TemplateVersionId, Properties = new JObject(), Elements = new[] { new ElementDescriptor( ElementDescriptorType.CompositeBitmapImage, TemplateCode, new JObject(), new ConstraintSet(new[] { new ConstraintSetItem(Language, constraints) })) } }; _objectsStorageReaderMock.Setup(m => m.IsObjectExists(It.IsAny <long>())) .ReturnsAsync(() => false); _templatesStorageReaderMock.Setup(m => m.GetTemplateDescriptor(It.IsAny <long>(), It.IsAny <string>())) .ReturnsAsync(() => templateDescriptor); _objectsStorageReaderMock.Setup(m => m.GetObjectLatestVersion(It.IsAny <long>())) .ReturnsAsync( new VersionedObjectDescriptor <string>( ObjectId.AsS3ObjectKey(Tokens.ObjectPostfix), ObjectVersionId, DateTime.UtcNow) ); var response = new GetObjectMetadataResponse(); var metadataWrapper = MetadataCollectionWrapper.For(response.Metadata); metadataWrapper.Write(MetadataElement.ExpiresAt, DateTime.UtcNow.AddDays(1)); _cephS3ClientMock.Setup(m => m.GetObjectMetadataAsync(It.IsAny <string>(), It.IsAny <string>())) .ReturnsAsync(() => response); var requests = new List <PutObjectRequest>(); _s3ClientMock.Setup(m => m.PutObjectAsync(It.IsAny <PutObjectRequest>())) .Callback <PutObjectRequest>(request => requests.Add(request)) .ReturnsAsync(new PutObjectResponse()); var memoryStream = new MemoryStream(); using (var stream = File.OpenRead(Path.Combine("images", "64x48.png"))) { await stream.CopyToAsync(memoryStream); memoryStream.Position = 0; } var fileKey = Guid.NewGuid().AsS3ObjectKey("key.raw"); var getObjectResponse = new GetObjectResponse { ResponseStream = memoryStream }; metadataWrapper = MetadataCollectionWrapper.For(getObjectResponse.Metadata); metadataWrapper.Write(MetadataElement.Filename, "file name.png"); _s3ClientMock.Setup(m => m.GetObjectAsync(It.IsAny <string>(), fileKey, It.IsAny <CancellationToken>())) .ReturnsAsync(getObjectResponse); var objectDescriptor = new ObjectDescriptor { Language = Language, TemplateId = TemplateId, TemplateVersionId = TemplateVersionId, Properties = new JObject(), Elements = new[] { new ObjectElementDescriptor { Type = ElementDescriptorType.CompositeBitmapImage, TemplateCode = TemplateCode, Constraints = new ConstraintSet(new[] { new ConstraintSetItem(Language, constraints) }), Value = new CompositeBitmapImageElementValue { Raw = fileKey, CropArea = new CropArea(), SizeSpecificImages = Array.Empty <SizeSpecificImage>() } } } }; await _objectsManagementService.Create(ObjectId, AuthorInfo, objectDescriptor); var elementContent = requests[0].ContentBody; var elementJson = JObject.Parse(elementContent); var valueJson = elementJson["value"]; Assert.Equal(fileKey, valueJson["raw"]); Assert.NotNull(valueJson["filename"]); Assert.NotNull(valueJson["filesize"]); Assert.NotNull(valueJson["cropArea"]); Assert.NotNull(valueJson["sizeSpecificImages"]); }