private void VerifyScalableBitmapImageConstraints(int templateCode, ScalableBitmapImageElementConstraints constraints)
        {
            VerifyBinaryConstraints(templateCode, constraints);

            if (constraints.SupportedFileFormats.Any(x => !ScalableBitmapImageFileFormats.Contains(x)))
            {
                throw new TemplateValidationException(templateCode, TemplateElementValidationError.UnsupportedImageFileFormat);
            }

            if (!SizeRangeIsConsistent(constraints.ImageSizeRange))
            {
                throw new TemplateValidationException(templateCode, TemplateElementValidationError.InvalidImageSizeRange);
            }
        }
Ejemplo n.º 2
0
        public async Task CorrectJsonShouldBePassedToS3PutObjectForScalableBitmapImageElementWithoutAnchor()
        {
            const int      TemplateCode = 100;
            const Language Language     = Language.Ru;
            var            constraints  = new ScalableBitmapImageElementConstraints();

            var templateDescriptor = new TemplateDescriptor
            {
                Id         = TemplateId,
                VersionId  = TemplateVersionId,
                Properties = new JObject(),
                Elements   = new[]
                {
                    new ElementDescriptor(
                        ElementDescriptorType.ScalableBitmapImage,
                        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.ScalableBitmapImage,
                        TemplateCode = TemplateCode,
                        Constraints  = new ConstraintSet(new[]
                        {
                            new ConstraintSetItem(Language, constraints)
                        }),
                        Value = new ScalableBitmapImageElementValue
                        {
                            Raw = fileKey
                        }
                    }
                }
            };

            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.Equal(nameof(Anchor.Middle).ToLower(), valueJson["anchor"]);
        }
        public async Task CorrectJsonShouldBePassedToS3PutObjectForScalableBitmapImageElementWithoutAnchor()
        {
            const int      TemplateCode = 100;
            const Language Language     = Language.Ru;
            var            constraints  = new ScalableBitmapImageElementConstraints
            {
                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.ScalableBitmapImage,
                        TemplateCode,
                        new JObject(),
                        new ConstraintSet(new[]
                    {
                        new ConstraintSetItem(Language, constraints)
                    }))
                }
            };

            _objectsStorageReaderMock.Setup(m => m.IsObjectExists(ObjectId))
            .ReturnsAsync(false);
            _templatesStorageReaderMock.Setup(m => m.GetTemplateDescriptor(TemplateId, TemplateVersionId))
            .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 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 requests = new List <PutObjectRequest>();

            _s3ClientMock.Setup(m => m.PutObjectAsync(It.IsAny <PutObjectRequest>()))
            .Callback <PutObjectRequest>(request => requests.Add(request))
            .ReturnsAsync(new PutObjectResponse());

            var objectDescriptor = new ObjectDescriptor
            {
                Language          = Language,
                TemplateId        = TemplateId,
                TemplateVersionId = TemplateVersionId,
                Properties        = new JObject(),
                Elements          = new[]
                {
                    new ObjectElementDescriptor
                    {
                        Type         = ElementDescriptorType.ScalableBitmapImage,
                        TemplateCode = TemplateCode,
                        Constraints  = new ConstraintSet(new[]
                        {
                            new ConstraintSetItem(Language, constraints)
                        }),
                        Value = new ScalableBitmapImageElementValue
                        {
                            Raw = fileKey
                        }
                    }
                }
            };

            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.Equal(nameof(Anchor.Middle).ToLower(), valueJson["anchor"]);
        }