public void InternalHasValidationResult_GenerateIdentifier()
        {
            // Arrange
            var pidUriTemplateFlattened = new PidUriTemplateFlattenedBuilder().GenerateSampleData().Build();
            var resource           = CreateResource(null, pidUriTemplateFlattened.Id);
            var expectedidentifier = "https://pid.bayer.com/DINOS/4113458a-12a2-4f26-9ff7-1d8fb18b25ec";

            var consumerGroup = new ConsumerGroupBuilder()
                                .GenerateSampleData()
                                .WithId($"{Graph.Metadata.Constants.Entity.IdPrefix}{new Guid()}")
                                .WithPidUriTemplate(pidUriTemplateFlattened.Id)
                                .BuildResultDTO();

            _consumerGroupService.Setup(s => s.GetEntity(It.IsAny <string>())).Returns(consumerGroup);
            _pidUriTemplateService.Setup(t => t.GetFlatIdentifierTemplateById(It.IsAny <string>())).Returns(pidUriTemplateFlattened);
            _pidUriGenerationService.Setup(g => g.GenerateIdentifierFromTemplate(It.IsAny <PidUriTemplateFlattened>(), It.IsAny <Entity>())).Returns(expectedidentifier);

            SetupPidUriTemplateService();
            SetupPidUriGenerationService();

            EntityValidationFacade validationFacade = new EntityValidationFacade(ResourceCrudAction.Create, resource, null, null, _metadata, consumerGroup.Id);

            // Act
            _validator.HasValidationResult(validationFacade, GetPidUriProperty(resource));

            // Assert
            Entity pidUri = validationFacade.RequestResource.Properties.SingleOrDefault(p => p.Key == Graph.Metadata.Constants.EnterpriseCore.PidUri).Value[0];

            Assert.Equal(expectedidentifier, pidUri.Id);
        }
        public void InternalHasValidationResult_CustomIdentifier_Successfully()
        {
            // Arrange
            var resource = CreateResource("https://pid.bayer.com/custom-valid-identifer");
            var pidUriTemplateFlattened = new PidUriTemplateFlattenedBuilder().GenerateSampleData().Build();

            SetupPidUriTemplateService(new List <PidUriTemplateFlattened>()
            {
                pidUriTemplateFlattened
            });
            SetupPidUriGenerationService();

            EntityValidationFacade validationFacade = new EntityValidationFacade(ResourceCrudAction.Create, resource, null, null, _metadata, null);

            // Act
            _validator.HasValidationResult(validationFacade, GetPidUriProperty(resource));

            // Assert
            Assert.Contains(Graph.Metadata.Constants.EnterpriseCore.PidUri, validationFacade.RequestResource.Properties);
            Assert.Equal(0, validationFacade.ValidationResults.Count);

            Entity pidUri = validationFacade.RequestResource.Properties.SingleOrDefault(p => p.Key == Graph.Metadata.Constants.EnterpriseCore.PidUri).Value[0];

            Assert.Equal("https://pid.bayer.com/custom-valid-identifer", pidUri.Id);
            Assert.DoesNotContain(Graph.Metadata.Constants.Identifier.HasUriTemplate, pidUri.Properties);
        }
        public void InternalHasValidationResult_CreateValidationResult_MatchTemplateFailed()
        {
            // Arrange
            var pidUriTemplateFlattened = new PidUriTemplateFlattenedBuilder().GenerateSampleData().Build();
            var resource        = CreateResource("https://pid.bayer.com/Indigo/4113458a-12a2-4f26-9ff7-1d8fb18b25ec", pidUriTemplateFlattened.Id);
            var expectedMessage = RegistrationService.Common.Constants.Messages.PidUriTemplate.MatchedFailed;

            var consumerGroup = new ConsumerGroupBuilder()
                                .GenerateSampleData()
                                .BuildResultDTO();

            _consumerGroupService.Setup(s => s.GetEntity(It.IsAny <string>())).Returns(consumerGroup);
            _pidUriTemplateService.Setup(t => t.GetFlatIdentifierTemplateById(It.IsAny <string>())).Returns(pidUriTemplateFlattened);

            SetupPidUriTemplateService();
            SetupPidUriGenerationService();

            EntityValidationFacade validationFacade = new EntityValidationFacade(ResourceCrudAction.Create, resource, null, null, _metadata, null);

            // Act
            _validator.HasValidationResult(validationFacade, GetPidUriProperty(resource));

            // Assert
            AssertValidationResult(validationFacade, expectedMessage);
        }
        public void InternalHasValidationResult_CreateValidationResult_ForbiddenTemplate()
        {
            // Arrange
            var pidUriTemplateFlattened = new PidUriTemplateFlattenedBuilder().GenerateSampleData().Build();
            var resource        = CreateResource(null, pidUriTemplateFlattened.Id);
            var expectedMessage = RegistrationService.Common.Constants.Messages.PidUriTemplate.ForbiddenTemplate;

            var consumerGroup = new ConsumerGroupBuilder()
                                .GenerateSampleData()
                                .WithPidUriTemplate("https://pid.bayer.com/kos/19050#9e8fb007-9cfd-4cf9-9084-2412cd999999")
                                .BuildResultDTO();

            _consumerGroupService.Setup(s => s.GetEntity(It.IsAny <string>())).Returns(consumerGroup);
            _pidUriTemplateService.Setup(t => t.GetFlatIdentifierTemplateById(It.IsAny <string>())).Returns(pidUriTemplateFlattened);

            SetupPidUriTemplateService();
            SetupPidUriGenerationService();

            EntityValidationFacade validationFacade = new EntityValidationFacade(ResourceCrudAction.Create, resource, null, null, _metadata, null);

            // Act
            _validator.HasValidationResult(validationFacade, GetPidUriProperty(resource));

            // Assert
            AssertValidationResult(validationFacade, expectedMessage);
        }
        public void InternalHasValidationResult_CreateValidationResult_IdentifierMatchForbiddenTemplate()
        {
            // Arrange
            var resource                = CreateResource("https://pid.bayer.com/DINOS/4113458a-12a2-4f26-9ff7-1d8fb18b25ec");
            var expectedMessage         = Graph.Metadata.Constants.Messages.Identifier.MatchForbiddenTemplate;
            var pidUriTemplateFlattened = new PidUriTemplateFlattenedBuilder().GenerateSampleData().Build();

            var consumerGroup = new ConsumerGroupBuilder()
                                .GenerateSampleData()
                                .WithPidUriTemplate("https://pid.bayer.com/kos/19050#9e8fb007-9cfd-4cf9-9084-2412cd999999")
                                .BuildResultDTO();

            _consumerGroupService.Setup(s => s.GetEntity(It.IsAny <string>())).Returns(consumerGroup);

            SetupPidUriTemplateService(new List <PidUriTemplateFlattened>()
            {
                pidUriTemplateFlattened
            });
            SetupPidUriGenerationService();

            EntityValidationFacade validationFacade = new EntityValidationFacade(ResourceCrudAction.Create, resource, null, null, _metadata, null);

            // Act
            _validator.HasValidationResult(validationFacade, GetPidUriProperty(resource));

            // Assert
            AssertValidationResult(validationFacade, expectedMessage);
        }
        public void InternalHasValidationResult_CreateValidationResult_IdentifierMatchValidTemplate()
        {
            // Arrange
            var resource = CreateResource("https://pid.bayer.com/DINOS/4113458a-12a2-4f26-9ff7-1d8fb18b25ec", "https://pid.bayer.com/kos/19050#14d9eeb8-d85d-446d-9703-3a0f43482f5a");

            var pidUriTemplateFlattened = new PidUriTemplateFlattenedBuilder().GenerateSampleData().Build();

            var consumerGroup = new ConsumerGroupBuilder()
                                .GenerateSampleData()
                                .WithId($"{Graph.Metadata.Constants.Entity.IdPrefix}{new Guid()}")
                                .BuildResultDTO();

            _consumerGroupService.Setup(s => s.GetEntity(It.IsAny <string>())).Returns(consumerGroup);

            SetupPidUriTemplateService(new List <PidUriTemplateFlattened>()
            {
                pidUriTemplateFlattened
            });
            SetupPidUriGenerationService();

            EntityValidationFacade validationFacade = new EntityValidationFacade(ResourceCrudAction.Create, resource, null, null, _metadata, consumerGroup.Id);

            // Act
            _validator.HasValidationResult(validationFacade, GetPidUriProperty(resource));

            // Assert
            Entity identifier = validationFacade.RequestResource.Properties[Graph.Metadata.Constants.EnterpriseCore.PidUri].FirstOrDefault();

            Assert.Contains(Graph.Metadata.Constants.Identifier.HasUriTemplate, identifier.Properties);
            var template = identifier.Properties[Graph.Metadata.Constants.Identifier.HasUriTemplate];

            Assert.Contains("https://pid.bayer.com/kos/19050#14d9eeb8-d85d-446d-9703-3a0f43482f5a", template);
        }