Esempio n. 1
0
        public void InternalHasValidationResult_SingleKeywordAlreadyInCorrectFormat()
        {
            const string keyword      = "https://pid.bayer.com/kos/19050#11111111-1111-1111-1111-111111111111";
            const string type         = COLID.Graph.Metadata.Constants.Keyword.Type;
            var          entityResult = new BaseEntityResultCTO()
            {
                Entity = new BaseEntityResultDTO()
                {
                    Id = keyword
                }
            };

            string createdKeywordId;

            // Arrange
            _entityServiceMock.Setup(m => m.CheckIfPropertyValueExists(_labelUri, It.IsAny <string>(), type, out createdKeywordId)).Returns(true).Verifiable();
            _entityServiceMock.Setup(m => m.CreateEntity(It.IsAny <BaseEntityRequestDTO>())).ReturnsAsync(entityResult).Verifiable();

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

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

            // Assert
            Assert.Contains(Graph.Metadata.Constants.Resource.Keyword, validationFacade.RequestResource.Properties);
            Assert.Single(validationFacade.RequestResource.Properties[Graph.Metadata.Constants.Resource.Keyword]);
            Assert.Equal(keyword, validationFacade.RequestResource.Properties[Graph.Metadata.Constants.Resource.Keyword].First());
            Assert.Equal(0, validationFacade.ValidationResults.Count);

            _entityServiceMock.Verify(m => m.CheckIfPropertyValueExists(_labelUri, keyword, type, out createdKeywordId), Times.Never);
            _entityServiceMock.Verify(m => m.CreateEntity(It.IsAny <BaseEntityRequestDTO>()), Times.Never);
        }
Esempio n. 2
0
        public void InternalHasValidationResult_OneKeywordNotUrlFormatAndExists(string validKeywordId, string validKeyword)
        {
            const string type = COLID.Graph.Metadata.Constants.Keyword.Type;

            var keywordList = new List <dynamic>()
            {
                validKeywordId, validKeyword
            };
            string     existingKeywordId = "https://pid.bayer.com/kos/19050#33333333-3333-3333-3333-333333333333";
            const bool keywordExists     = true;

            // Arrange
            _entityServiceMock.Setup(m => m.CheckIfPropertyValueExists(_labelUri, It.IsAny <string>(), type, out existingKeywordId)).Returns(keywordExists).Verifiable();
            _entityServiceMock.Setup(m => m.CreateEntity(It.IsAny <BaseEntityRequestDTO>())).ReturnsAsync(It.IsAny <BaseEntityResultCTO>()).Verifiable();

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

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

            // Assert
            Assert.Contains(Graph.Metadata.Constants.Resource.Keyword, validationFacade.RequestResource.Properties);
            Assert.Equal(2, validationFacade.RequestResource.Properties[Graph.Metadata.Constants.Resource.Keyword].Count);
            Assert.Contains(validKeywordId, validationFacade.RequestResource.Properties[Graph.Metadata.Constants.Resource.Keyword]);
            Assert.Contains(existingKeywordId, validationFacade.RequestResource.Properties[Graph.Metadata.Constants.Resource.Keyword]);
            Assert.DoesNotContain(validKeyword, validationFacade.RequestResource.Properties[Graph.Metadata.Constants.Resource.Keyword]);
            Assert.Equal(0, validationFacade.ValidationResults.Count);

            string val;

            _entityServiceMock.Verify(m => m.CheckIfPropertyValueExists(_labelUri, validKeywordId, type, out val), Times.Never);
            _entityServiceMock.Verify(m => m.CheckIfPropertyValueExists(_labelUri, validKeyword, type, out existingKeywordId), Times.Once);
            _entityServiceMock.Verify(m => m.CreateEntity(It.IsAny <BaseEntityRequestDTO>()), Times.Never);
        }
Esempio n. 3
0
        public void InternalHasValidationResult_NoKeywordInResource()
        {
            // Arrange
            string createdKeywordId;

            _keywordServiceMock.Setup(m => m.CheckIfKeywordExists(It.IsAny <string>(), out createdKeywordId)).Returns(true).Verifiable();
            _keywordServiceMock.Setup(m => m.CreateKeyword(It.IsAny <string>())).Returns(It.IsAny <string>()).Verifiable();

            var resource = new ResourceBuilder()
                           .GenerateSampleData()
                           .WithPidUri($"https://pid.bayer.com/kos/0308eeb4-ed33-43b8-abf7-599a57cbd718")
                           .Build();

            resource.Properties.Remove(Graph.Metadata.Constants.Resource.Keyword);

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

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

            // Assert
            Assert.DoesNotContain(Graph.Metadata.Constants.Resource.Keyword, validationFacade.RequestResource.Properties);
            Assert.Equal(0, validationFacade.ValidationResults.Count);

            _keywordServiceMock.Verify(m => m.CheckIfKeywordExists(It.IsAny <string>(), out createdKeywordId), Times.Never);
            _keywordServiceMock.Verify(m => m.CreateKeyword(It.IsAny <string>()), Times.Never);
        }
        public void InternalHasValidationResult_ForbiddenConsumerGroup()
        {
            // Arrange
            var deprecatedCG = new ConsumerGroupBuilder()
                               .GenerateSampleData()
                               .WithId($"https://pid.bayer.com/kos/{Guid.NewGuid()}")
                               .WithLifecycleStatus(Graph.Metadata.Constants.ConsumerGroup.LifecycleStatus.Deprecated)
                               .BuildResultDTO();
            var activeCG = new ConsumerGroupBuilder()
                           .GenerateSampleData()
                           .WithId($"https://pid.bayer.com/kos/{Guid.NewGuid()}")
                           .BuildResultDTO();

            IList <ConsumerGroupResultDTO> activeConsumerGroups = new List <ConsumerGroupResultDTO> {
                activeCG
            };

            _consumerGroupServiceMock.Setup(m => m.GetActiveEntities()).Returns(activeConsumerGroups).Verifiable();

            var resource         = CreateResourceWithConsumerGroup(deprecatedCG.Id);
            var validationFacade = new EntityValidationFacade(ResourceCrudAction.Create, resource, null, null, _metadata, null);

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

            //// Assert
            Assert.Contains(Graph.Metadata.Constants.Resource.HasConsumerGroup, validationFacade.RequestResource.Properties);
            Assert.Equal(1, validationFacade.RequestResource.Properties[Graph.Metadata.Constants.Resource.HasConsumerGroup].Count);
            Assert.Equal(deprecatedCG.Id, validationFacade.RequestResource.Properties[Graph.Metadata.Constants.Resource.HasConsumerGroup][0]);
            Assert.Equal(1, validationFacade.ValidationResults.Count);
        }
Esempio n. 5
0
        protected override void InternalHasValidationResult(EntityValidationFacade validationFacade, KeyValuePair <string, List <dynamic> > properties)
        {
            // If there are already critical errors that apply to the property, no further validation is performed.
            if (validationFacade.ValidationResults.Any(v => v.Node == validationFacade.RequestResource.Id && v.Path == properties.Key && v.ResultSeverity == ValidationResultSeverity.Violation))
            {
                return;
            }

            // Only consumer groups that are active and for which the current user has the appropriate rights will be returned.
            // Therefore, the next step checks if a forbidden consumer group is used.
            var activeConsumerGroups = _consumerGroupService.GetActiveEntities();

            foreach (var propertyValue in properties.Value)
            {
                if (propertyValue is null)
                {
                    continue;
                }

                if (activeConsumerGroups.All(cg => cg.Id != propertyValue))
                {
                    validationFacade.ValidationResults.Add(new ValidationResultProperty(validationFacade.RequestResource.Id, properties.Key, propertyValue, string.Format(Common.Constants.Messages.Resource.ForbiddenConsumerGroup, propertyValue), ValidationResultSeverity.Violation));
                }
            }
            ;
        }
Esempio n. 6
0
        protected override void InternalHasValidationResult(EntityValidationFacade validationFacade, KeyValuePair <string, List <dynamic> > properties)
        {
            // If there are already critical errors that apply to the property, no further validation is performed.
            if (properties.Value == null ||
                validationFacade.ValidationResults.Any(v => v.Node == validationFacade.RequestResource.Id &&
                                                       v.Path == properties.Key && v.ResultSeverity == ValidationResultSeverity.Violation))
            {
                return;
            }

            foreach (var propertyValue in properties.Value)
            {
                if (propertyValue is Entity propertyEntity)
                {
                    if (!_attachmentService.Exists(propertyEntity.Id.ToString()))
                    {
                        var validationResultProperty = new ValidationResultProperty(validationFacade.RequestResource.Id,
                                                                                    properties.Key, propertyEntity.Id,
                                                                                    string.Format(Common.Constants.Messages.Attachment.NotExists, propertyEntity.Id),
                                                                                    ValidationResultSeverity.Violation);

                        validationFacade.ValidationResults.Add(validationResultProperty);
                    }
                }
            }
            ;
        }
Esempio n. 7
0
        public void InternalHasValidationResult_OneKeywordNotUrlFormatAndNotExists(string validKeywordId, string invalidKeywordId)
        {
            var keywordList = new List <dynamic>()
            {
                validKeywordId, invalidKeywordId
            };
            string       existingKeywordId = string.Empty;
            const bool   keywordExists     = false;
            const string createdKeywordId  = "https://pid.bayer.com/kos/19050#44444444-4444-4444-4444-444444444444";

            // Arrange
            _keywordServiceMock.Setup(m => m.CheckIfKeywordExists(It.IsAny <string>(), out existingKeywordId)).Returns(keywordExists).Verifiable();
            _keywordServiceMock.Setup(m => m.CreateKeyword(It.IsAny <string>())).Returns(createdKeywordId).Verifiable();

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

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

            // Assert
            Assert.Contains(Graph.Metadata.Constants.Resource.Keyword, validationFacade.RequestResource.Properties);
            Assert.Equal(2, validationFacade.RequestResource.Properties[Graph.Metadata.Constants.Resource.Keyword].Count);
            Assert.Contains(validKeywordId, validationFacade.RequestResource.Properties[Graph.Metadata.Constants.Resource.Keyword]);
            Assert.Contains(createdKeywordId, validationFacade.RequestResource.Properties[Graph.Metadata.Constants.Resource.Keyword]);
            Assert.DoesNotContain(invalidKeywordId, validationFacade.RequestResource.Properties[Graph.Metadata.Constants.Resource.Keyword]);
            Assert.Equal(0, validationFacade.ValidationResults.Count);

            string val;

            _keywordServiceMock.Verify(m => m.CheckIfKeywordExists(validKeywordId, out val), Times.Never);
            _keywordServiceMock.Verify(m => m.CheckIfKeywordExists(invalidKeywordId, out existingKeywordId), Times.Once);
            _keywordServiceMock.Verify(m => m.CreateKeyword(validKeywordId), Times.Never);
            _keywordServiceMock.Verify(m => m.CreateKeyword(invalidKeywordId), Times.Once);
        }
        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_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_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);
        }
        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);
        }
Esempio n. 12
0
        protected override void InternalHasValidationResult(EntityValidationFacade validationFacade, KeyValuePair <string, List <dynamic> > properties)
        {
            if (IsIgnoredProperty(validationFacade.ResourceCrudAction, properties))
            {
                return;
            }

            foreach (var person in properties.Value)
            {
                try
                {
                    bool exists = _remoteAppDataService.CheckPerson(person).GetAwaiter().GetResult();

                    if (!exists)
                    {
                        var metadataProperty = validationFacade.MetadataProperties.FirstOrDefault(m => m.Key == properties.Key);
                        var criticalError    = metadataProperty.IsTechnicalMetadataProperty() ? ValidationResultSeverity.Violation : ValidationResultSeverity.Warning;
                        validationFacade.ValidationResults.Add(new ValidationResultProperty(validationFacade.RequestResource.Id, properties.Key, person, string.Format(Common.Constants.Messages.Person.PersonNotFound, person), criticalError));
                        continue;
                    }
                }
                catch (ArgumentException)
                {
                    continue;
                }
            }
        }
        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_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);
        }
        protected override void InternalHasValidationResult(EntityValidationFacade validationFacade, KeyValuePair <string, List <dynamic> > property)
        {
            var metadataProperty = validationFacade.MetadataProperties.FirstOrDefault(t => t.Properties.GetValueOrNull(Graph.Metadata.Constants.EnterpriseCore.PidUri, true) == property.Key);

            // No key check needed
            string range = metadataProperty?.Properties.GetValueOrNull(Graph.Metadata.Constants.Shacl.Range, true);

            var taxonomies           = _taxonomyService.GetTaxonomiesAsPlainList(range);
            var taxonomiesDictionary = taxonomies.ToDictionary(t => t.Id, t => t);

            IList <dynamic> values = property.Value.ToList();

            foreach (var taxonomy in taxonomies)
            {
                values = CheckParent(taxonomy, values, taxonomiesDictionary);
            }

            foreach (var value in values)
            {
                if (taxonomies.All(t => t != null && t.Id != value))
                {
                    validationFacade.ValidationResults.Add(new ValidationResultProperty(validationFacade.RequestResource.Id,
                                                                                        property.Key, value, string.Format(Common.Constants.Messages.Taxonomy.InvalidSelection, value), ValidationResultSeverity.Violation));
                }
            }

            validationFacade.RequestResource.Properties[property.Key] = values.ToList();
        }
Esempio n. 16
0
        public void InternalHasValidationResult_MultipleKeywordsAlreadyInCorrectFormat()
        {
            var keywordList = new List <dynamic>()
            {
                "https://pid.bayer.com/kos/19050#11111111-1111-1111-1111-111111111111",
                "https://pid.bayer.com/kos/19050#22222222-2222-2222-2222-222222222222",
            };
            string createdKeywordId;

            // Arrange
            _keywordServiceMock.Setup(m => m.CheckIfKeywordExists(It.IsAny <string>(), out createdKeywordId)).Returns(true).Verifiable();
            _keywordServiceMock.Setup(m => m.CreateKeyword(It.IsAny <string>())).Returns(It.IsAny <string>()).Verifiable();

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

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

            // Assert
            Assert.Contains(Graph.Metadata.Constants.Resource.Keyword, validationFacade.RequestResource.Properties);
            Assert.Equal(2, validationFacade.RequestResource.Properties[Graph.Metadata.Constants.Resource.Keyword].Count);
            Assert.Equal(keywordList[0], validationFacade.RequestResource.Properties[Graph.Metadata.Constants.Resource.Keyword][0]);
            Assert.Equal(keywordList[1], validationFacade.RequestResource.Properties[Graph.Metadata.Constants.Resource.Keyword][1]);
            Assert.Equal(0, validationFacade.ValidationResults.Count);

            _keywordServiceMock.Verify(m => m.CheckIfKeywordExists(It.IsAny <string>(), out createdKeywordId), Times.Never);
            _keywordServiceMock.Verify(m => m.CreateKeyword(It.IsAny <string>()), Times.Never);
        }
Esempio n. 17
0
        public void InternalHasValidationResult_CreateValidationResult_PersonNotExists(string author)
        {
            // Arrange
            var resource        = CreateResource(author);
            var expectedMessage = string.Format(RegistrationService.Common.Constants.Messages.Person.PersonNotFound, author);

            SetupRemoteAppDataService(false);

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

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

            // Assert
            Assert.Contains(Graph.Metadata.Constants.Resource.Author, validationFacade.RequestResource.Properties);
            Assert.Equal(1, validationFacade.ValidationResults.Count);

            string currentAuthor = validationFacade.RequestResource.Properties.SingleOrDefault(p => p.Key == Graph.Metadata.Constants.Resource.Author).Value[0];

            Assert.Equal(author, currentAuthor);

            var validationResult = validationFacade.ValidationResults.FirstOrDefault();

            Assert.Equal(expectedMessage, validationResult.Message);
            Assert.Equal(ValidationResultSeverity.Violation, validationResult.ResultSeverity);
        }
        public async void CreateResource_Success_WithPreviousVersion()
        {
            // Arrange
            var requestBuilder = new ResourceBuilder()
                                 .GenerateSampleData();

            var request  = requestBuilder.BuildRequestDto();
            var resource = requestBuilder.Build();

            request.HasPreviousVersion = Graph.Metadata.Constants.Entity.IdPrefix + Guid.NewGuid();

            var resourceCto      = new ResourcesCTO(null, null);
            var validationFacade = new EntityValidationFacade(ResourceCrudAction.Create, resource, resourceCto, request.HasPreviousVersion, _metadata, null);

            var preProcessServiceResult = Task.FromResult(new Tuple <ValidationResult, bool, EntityValidationFacade>(null, false, validationFacade));

            _mockPreProcessService.Setup(t => t.ValidateAndPreProcessResource(It.IsAny <string>(), request, It.IsAny <ResourcesCTO>(), ResourceCrudAction.Create, It.IsAny <bool>(), It.IsAny <string>())).Returns(preProcessServiceResult);

            // Act
            var result = await _service.CreateResource(request);

            // Assert
            Assert.NotNull(result);
            _mockResourceRepo.Verify(t => t.Create(validationFacade.RequestResource, It.IsAny <IList <MetadataProperty> >()), Times.Once);
            _mockResourceLinkingService.Verify(t => t.LinkResourceIntoList(validationFacade.RequestResource.PidUri, It.IsAny <Uri>()), Times.Once);
        }
Esempio n. 19
0
 protected override void InternalHasValidationResult(EntityValidationFacade validationFacade, KeyValuePair <string, List <dynamic> > property)
 {
     // In any case the edit date will be overwritten with the current date.
     validationFacade.RequestResource.Properties[property.Key] = new List <dynamic>()
     {
         DateTime.UtcNow.ToString("o")
     };
 }
        private KeyValuePair <string, List <dynamic> > GetKeyValuePair(string key, EntityValidationFacade validationFacade)
        {
            if (!validationFacade.RequestResource.Properties.ContainsKey(key))
            {
                return(new KeyValuePair <string, List <dynamic> >(key, new List <dynamic>()));
            }

            return(new KeyValuePair <string, List <dynamic> >(key, validationFacade.RequestResource.Properties[key]));
        }
        /// <summary>
        /// While publishing a resource, ensure property is on the right resource
        /// </summary>
        private void UpdatePropertyFromRepositoryResource(string propertyName, EntityValidationFacade validationFacade)
        {
            var repoResource = validationFacade.ResourcesCTO.GetDraftOrPublishedVersion();

            if (repoResource.Properties.TryGetValue(propertyName, out var values))
            {
                validationFacade.RequestResource.Properties.AddOrUpdate(propertyName, values);
            }
        }
        private void AssertValidationResult(EntityValidationFacade validationFacade, string expectedMessage)
        {
            Assert.Contains(Graph.Metadata.Constants.EnterpriseCore.PidUri, validationFacade.RequestResource.Properties);
            Assert.Equal(1, validationFacade.ValidationResults.Count);

            var validationResult = validationFacade.ValidationResults.FirstOrDefault();

            Assert.Equal(expectedMessage, validationResult.Message);
            Assert.Equal(ValidationResultSeverity.Violation, validationResult.ResultSeverity);
        }
        protected override void InternalHasValidationResult(EntityValidationFacade validationFacade, KeyValuePair <string, List <dynamic> > properties)
        {
            var newValue = validationFacade.ResourceCrudAction == ResourceCrudAction.Publish ? Graph.Metadata.Constants.Resource.ColidEntryLifecycleStatus.Published : Graph.Metadata.Constants.Resource.ColidEntryLifecycleStatus.Draft;

            // Setting life cycle status to current crud operation
            validationFacade.RequestResource.Properties[properties.Key] = new List <dynamic>()
            {
                newValue
            };
        }
Esempio n. 24
0
        private void AssertValidationFacade(EntityValidationFacade validationFacade, string email)
        {
            Assert.Contains(Graph.Metadata.Constants.Resource.Author, validationFacade.RequestResource.Properties);
            Assert.Equal(0, validationFacade.ValidationResults.Count);

            var lastChangeUserValue = GetLastChangeUserProperty(validationFacade.RequestResource).Value;

            Assert.Single(lastChangeUserValue);
            Assert.Contains(lastChangeUserValue, u => u == email);
        }
Esempio n. 25
0
        public void InternalHasValidationResult_Failed_SingleKeywordIsNull()
        {
            const string keyword = null;

            // Arrange
            var resource         = CreateResourceWithKeyword(keyword);
            var validationFacade = new EntityValidationFacade(ResourceCrudAction.Create, resource, null, null, _metadata, null);

            // Act AND ASSERT
            Assert.Throws <ArgumentNullException>(() => _validator.HasValidationResult(validationFacade, GetKeywordProperty(resource)));
        }
 protected override void InternalHasValidationResult(EntityValidationFacade validationFacade, KeyValuePair <string, List <dynamic> > property)
 {
     if (!_userInfoService.HasApiToApiPrivileges())
     {
         // Set user email as author
         validationFacade.RequestResource.Properties[property.Key] = new List <dynamic>()
         {
             _userInfoService.GetEmail()
         };
     }
 }
        public void Validate(string key, EntityValidationFacade validationFacade)
        {
            var validators = GetValidators();

            foreach (var validator in validators)
            {
                validator.HasValidationResult(validationFacade, GetKeyValuePair(key, validationFacade));
            }

            HandleOverwriteProperties(GetKeyValuePair(key, validationFacade), validationFacade);
        }
        public void HasValidationResult(EntityValidationFacade validationFacade, KeyValuePair <string, List <dynamic> > property)
        {
            var metadataProperty = validationFacade.MetadataProperties.FirstOrDefault(t => t.Key == property.Key);

            if (metadataProperty == null || !IsMatch(property.Key, metadataProperty))
            {
                return;
            }

            InternalHasValidationResult(validationFacade, property);
        }
Esempio n. 29
0
        protected override void InternalHasValidationResult(EntityValidationFacade validationFacade, KeyValuePair <string, List <dynamic> > properties)
        {
            var mainEndpoints = properties.Value;

            foreach (var endpoint in mainEndpoints)
            {
                if (endpoint.Properties.TryGetValue(Graph.Metadata.Constants.Resource.DistributionEndpoints.DistributionEndpointLifecycleStatus, out List <dynamic> lifecycleStatus) && lifecycleStatus.Any(s => s == Common.Constants.DistributionEndpoint.LifeCycleStatus.Deprecated))
                {
                    validationFacade.ValidationResults.Add(new ValidationResultProperty(endpoint.Id, Graph.Metadata.Constants.Resource.DistributionEndpoints.DistributionEndpointLifecycleStatus, null, Common.Constants.Messages.DistributionEndpoint.InvalidLifecycleStatus, ValidationResultSeverity.Violation));
                }
            }
        }
        public void InternalHasValidationResult_CreateValidationResult_ContainsEmptyPidUri(string pidUriString)
        {
            // Arrange
            var resource = CreateResource(pidUriString);

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

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

            // Assert
            Assert.DoesNotContain(Graph.Metadata.Constants.EnterpriseCore.PidUri, validationFacade.RequestResource.Properties);
        }