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);
            }
        }
Ejemplo n.º 2
0
        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());
            }
        }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 4
0
        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"]);
        }
Ejemplo n.º 5
0
        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"]);
        }