public void GivenAnInvalidResource_WhenValidatingMemberMatch_ThenInvalidShouldBeReturned() { var contextAccessor = Substitute.For <RequestContextAccessor <IFhirRequestContext> >(); var profileValidator = Substitute.For <IProfileValidator>(); var config = Substitute.For <IOptions <CoreFeatureConfiguration> >(); config.Value.Returns(new CoreFeatureConfiguration()); contextAccessor.RequestContext.RequestHeaders.Returns(new Dictionary <string, StringValues>()); var validator = new MemberMatchResourceValidator( new ModelAttributeValidator(), new NarrativeHtmlSanitizer(NullLogger <NarrativeHtmlSanitizer> .Instance), profileValidator, contextAccessor, config); var defaultCoverage = Samples.GetDefaultCoverage().ToPoco <Coverage>(); var defaultPatient = Samples.GetDefaultPatient().ToPoco <Patient>(); defaultCoverage.Status = null; var createMemberMatchRequest = new MemberMatchRequest(defaultPatient.ToResourceElement(), defaultCoverage.ToResourceElement()); var result = validator.Validate(createMemberMatchRequest); Assert.False(result.IsValid); Assert.True(result.Errors.Count >= 1); Assert.NotEmpty(result.Errors.Where(e => e.ErrorMessage.Contains("min. cardinality 1 cannot be null"))); }
public void GivenAResourceWithInvalidId_WhenValidatingMemberMatch_ThenInvalidShouldBeReturned(string id, string maliciousNarrative) { var contextAccessor = Substitute.For <RequestContextAccessor <IFhirRequestContext> >(); var profileValidator = Substitute.For <IProfileValidator>(); var config = Substitute.For <IOptions <CoreFeatureConfiguration> >(); config.Value.Returns(new CoreFeatureConfiguration()); contextAccessor.RequestContext.RequestHeaders.Returns(new Dictionary <string, StringValues>()); var validator = new MemberMatchResourceValidator( new ModelAttributeValidator(), new NarrativeHtmlSanitizer(NullLogger <NarrativeHtmlSanitizer> .Instance), profileValidator, contextAccessor, config); var defaultCoverage = Samples.GetDefaultCoverage().ToPoco <Coverage>(); var defaultPatient = Samples.GetDefaultPatient().ToPoco <Patient>(); defaultCoverage.Text.Div = maliciousNarrative; defaultPatient.Text.Div = maliciousNarrative; var coverageResource = defaultCoverage.ToResourceElement() .UpdateId(id); var patientResource = defaultPatient.ToResourceElement() .UpdateId(id); var createResourceRequest = new MemberMatchRequest(patientResource, coverageResource); var result = validator.Validate(createResourceRequest); Assert.False(result.IsValid); Assert.True(result.Errors.Count >= 2); Assert.NotEmpty(result.Errors.Where(e => e.ErrorMessage.Contains("XHTML content should be contained within a single <div> element"))); Assert.NotEmpty(result.Errors.Where(e => e.ErrorMessage.Contains("Id must be any combination of upper or lower case ASCII letters"))); }
public void GivenConfigOrHeader_WhenValidatingMemberMatch_ThenProfileValidationShouldOrShouldntBeCalled(bool configValue, bool?headerValue, bool shouldCallProfileValidation) { var contextAccessor = Substitute.For <RequestContextAccessor <IFhirRequestContext> >(); var profileValidator = Substitute.For <IProfileValidator>(); var config = Substitute.For <IOptions <CoreFeatureConfiguration> >(); config.Value.Returns(new CoreFeatureConfiguration() { ProfileValidationOnCreate = configValue }); var headers = new Dictionary <string, StringValues>(); if (headerValue != null) { headers.Add(KnownHeaders.ProfileValidation, new StringValues(headerValue.Value.ToString())); } contextAccessor.RequestContext.RequestHeaders.Returns(headers); var validator = new MemberMatchResourceValidator( new ModelAttributeValidator(), new NarrativeHtmlSanitizer(NullLogger <NarrativeHtmlSanitizer> .Instance), profileValidator, contextAccessor, config); var createMemberMatchRequest = new MemberMatchRequest(Samples.GetDefaultCoverage().ToPoco <Coverage>().ToResourceElement(), Samples.GetDefaultPatient().ToPoco <Patient>().ToResourceElement()); validator.Validate(createMemberMatchRequest); if (shouldCallProfileValidation) { profileValidator.Received().TryValidate(Arg.Any <ITypedElement>(), Arg.Any <string>()); } else { profileValidator.DidNotReceive().TryValidate(Arg.Any <ITypedElement>(), Arg.Any <string>()); } }