public void ReadQueryTest(Common.Enums.FhirVersion fhirVersion, string resourceName, string resourceId)
        {
            //Setup
            var IOperationOutcomeSupportMock = IOperationOutcomeSupport_MockFactory.Get();
            var IFhirResourceNameSupportMock = IFhirResourceNameSupport_MockFactory.Get(resourceName);
            var IFhirResourceIdSupportMock   = IFhirResourceIdSupport_MockFactory.Get(resourceId);

            FhirUriFactory FhirUriFactory = GetFhirUriFactory(resourceName);

            ValidateQueryService ValidateQueryService = new ValidateQueryService(IOperationOutcomeSupportMock.Object, IFhirResourceNameSupportMock.Object, IFhirResourceIdSupportMock.Object, FhirUriFactory);

            var ReadQuery = new ReadQuery(
                HttpVerb.GET,
                fhirVersion,
                new Uri($"{TestData.BaseUrlServer}/{resourceName}/{resourceId}"),
                new Dictionary <string, Microsoft.Extensions.Primitives.StringValues>(),
                new Dictionary <string, Microsoft.Extensions.Primitives.StringValues>(),
                resourceName,
                resourceId);

            //Act
            bool Result = ValidateQueryService.IsValid(ReadQuery, out Common.FhirTools.FhirResource? IsNotValidOperationOutCome);

            //Assert
            Assert.True(Result);
            Assert.Null(IsNotValidOperationOutCome);
        }
Exemple #2
0
        private static FhirUriFactory GetFhirUriFactory(string ServersBaseServiceRoot, string[] validResourceNameList)
        {
            Mock <IServiceBaseUrlConfi>         IServiceBaseUrlMock              = IServiceBaseUrl_MockFactory.Get(ServersBaseServiceRoot, ServersBaseServiceRoot);
            Mock <IR4ValidateResourceName>      IR4ValidateResourceNameMock      = IR4ValidateResourceName_MockFactory.Get(validResourceNameList);
            Mock <IStu3ValidateResourceName>    IStu3ValidateResourceNameMock    = IStu3ValidateResourceName_MockFactory.Get(validResourceNameList);
            Mock <IValidateResourceNameFactory> IValidateResourceNameFactoryMock = IValidateResourceNameFactory_MockFactory.Get(IStu3ValidateResourceNameMock.Object, IR4ValidateResourceNameMock.Object);

            FhirUriFactory FhirUriFactory = new FhirUriFactory(IServiceBaseUrlMock.Object, IValidateResourceNameFactoryMock.Object);

            return(FhirUriFactory);
        }
        private static FhirUriFactory GetFhirUriFactory(string resourceName)
        {
            var ValidResourceNames = new string[] { resourceName };
            Mock <IServiceBaseUrlConfi>         IServiceBaseUrlMock              = IServiceBaseUrl_MockFactory.Get(TestData.BaseUrlServer, TestData.BaseUrlServer);
            Mock <IR4ValidateResourceName>      IR4ValidateResourceNameMock      = IR4ValidateResourceName_MockFactory.Get(ValidResourceNames);
            Mock <IStu3ValidateResourceName>    IStu3ValidateResourceNameMock    = IStu3ValidateResourceName_MockFactory.Get(ValidResourceNames);
            Mock <IValidateResourceNameFactory> IValidateResourceNameFactoryMock = IValidateResourceNameFactory_MockFactory.Get(IStu3ValidateResourceNameMock.Object, IR4ValidateResourceNameMock.Object);
            FhirUriFactory FhirUriFactory = new FhirUriFactory(IServiceBaseUrlMock.Object, IValidateResourceNameFactoryMock.Object);

            return(FhirUriFactory);
        }
Exemple #4
0
        public void TestFhirUri_ResourceIdOnly(FhirVersion fhirVersion, string serversBase, string resourceId)
        {
            // Prepare
            FhirUriFactory FhirUriFactory = GetFhirUriFactory(serversBase, new string[] { });

            string RequestUrl = resourceId;

            //Act
            if (FhirUriFactory.TryParse(RequestUrl, fhirVersion, out IFhirUri? IFhirUri, out string ErrorMessage))
            {
                //Assert
                if (IFhirUri is object)
                {
                    if (resourceId.StartsWith('#'))
                    {
                        Assert.True(IFhirUri.IsContained);
                    }
                    else
                    {
                        Assert.False(IFhirUri.IsContained);
                    }

                    Assert.Equal(string.Empty, IFhirUri.ResourseName);
                    Assert.False(IFhirUri.IsRelativeToServer);
                    Assert.Equal(resourceId.TrimStart('#'), IFhirUri.ResourceId);
                    Assert.Null(IFhirUri.UriPrimaryServiceRoot);
                    Assert.False(IFhirUri.IsHistoryReferance);
                    Assert.Equal(string.Empty, IFhirUri.VersionId);
                    Assert.Null(IFhirUri.PrimaryServiceRootRemote);
                    Assert.Equal(new Uri(serversBase), IFhirUri.PrimaryServiceRootServers);
                    Assert.False(IFhirUri.IsCompartment);
                    Assert.False(IFhirUri.ErrorInParseing);
                    Assert.False(IFhirUri.IsMetaData);
                    Assert.False(IFhirUri.IsOperation);
                    Assert.False(IFhirUri.IsCompartment);
                    Assert.False(IFhirUri.IsUrn);
                    Assert.False(IFhirUri.IsFormDataSearch);
                    Assert.Equal(RequestUrl, IFhirUri.OriginalString);
                    Assert.Equal(string.Empty, IFhirUri.CompartmentalisedResourseName);
                    Assert.Equal(fhirVersion, IFhirUri.FhirVersion);
                    Assert.Equal(string.Empty, IFhirUri.OperationName);
                    Assert.Null(IFhirUri.OperationType);
                    Assert.Equal(string.Empty, IFhirUri.Query);
                    Assert.Equal(string.Empty, IFhirUri.Urn);
                    Assert.Null(IFhirUri.UrnType);
                    Assert.Equal(string.Empty, IFhirUri.ParseErrorMessage);
                }
            }
            else
            {
                Assert.Equal("some error message", ErrorMessage);
            }
        }
Exemple #5
0
        public void TestFhirUri__urn_uuid_invalid(FhirVersion fhirVersion, string serversBase, string resourceName, string uuid)
        {
            // Prepare
            FhirUriFactory FhirUriFactory = GetFhirUriFactory(serversBase, new string[] { resourceName });

            string RequestUrl = uuid;

            //Act
            if (FhirUriFactory.TryParse(RequestUrl, fhirVersion, out IFhirUri? IFhirUri, out string ErrorMessage))
            {
                Assert.False(true);
            }
            else
            {
                Assert.True(!string.IsNullOrWhiteSpace(ErrorMessage));
                Assert.Null(IFhirUri);
            }
        }
Exemple #6
0
        public void TestFhirUri_RubbishOnTheEnd(FhirVersion fhirVersion, string serversBase, string requestBase, string resourceName)
        {
            // Prepare
            FhirUriFactory FhirUriFactory = GetFhirUriFactory(serversBase, new string[] { resourceName });

            string RequestUrl = $"{requestBase}/{resourceName}/10/Rubbish";

            //Act
            if (FhirUriFactory.TryParse(RequestUrl, fhirVersion, out IFhirUri? IFhirUri, out string ErrorMessage))
            {
                Assert.False(true);
            }
            else
            {
                Assert.True(!string.IsNullOrWhiteSpace(ErrorMessage));
                Assert.Null(IFhirUri);
            }
        }
Exemple #7
0
        public void TestFhirUri_OperationResourceInstance(FhirVersion fhirVersion, string serversBase, string requestBase, string resourceName, string resourceId, string operationName, string query)
        {
            // Prepare
            FhirUriFactory FhirUriFactory = GetFhirUriFactory(serversBase, new string[] { resourceName });

            string RequestUrl = $"{requestBase}/{resourceName}/{resourceId}/${operationName}?{query}";

            //Act
            if (FhirUriFactory.TryParse(RequestUrl, fhirVersion, out IFhirUri? IFhirUri, out string ErrorMessage))
            {
                //Assert
                if (IFhirUri is object)
                {
                    Assert.Equal(operationName, IFhirUri.OperationName);
                    Assert.Equal(OperationScope.Instance, IFhirUri.OperationType);
                    Assert.Equal(resourceName, IFhirUri.ResourseName);
                    Assert.Equal(resourceId, IFhirUri.ResourceId);
                    Assert.False(IFhirUri.IsContained);
                    Assert.True(IFhirUri.IsRelativeToServer);
                    Assert.Equal(new Uri(serversBase), IFhirUri.UriPrimaryServiceRoot);
                    Assert.False(IFhirUri.IsHistoryReferance);
                    Assert.Equal(string.Empty, IFhirUri.VersionId);
                    Assert.Null(IFhirUri.PrimaryServiceRootRemote);
                    Assert.Equal(new Uri(serversBase), IFhirUri.PrimaryServiceRootServers);
                    Assert.False(IFhirUri.IsCompartment);
                    Assert.False(IFhirUri.ErrorInParseing);
                    Assert.False(IFhirUri.IsMetaData);
                    Assert.False(IFhirUri.IsCompartment);
                    Assert.False(IFhirUri.IsUrn);
                    Assert.False(IFhirUri.IsFormDataSearch);
                    Assert.Equal(RequestUrl, IFhirUri.OriginalString);
                    Assert.Equal(string.Empty, IFhirUri.CompartmentalisedResourseName);
                    Assert.Equal(fhirVersion, IFhirUri.FhirVersion);
                    Assert.Equal(query, IFhirUri.Query);
                    Assert.Equal(string.Empty, IFhirUri.Urn);
                    Assert.Null(IFhirUri.UrnType);
                    Assert.Equal(string.Empty, IFhirUri.ParseErrorMessage);
                }
            }
            else
            {
                Assert.Equal("some error message", ErrorMessage);
            }
        }
Exemple #8
0
        public void TestFhirUriCanonical(FhirVersion fhirVersion, string resourceName, string resourceId, string CanonicalVersionId)
        {
            // Prepare
            FhirUriFactory FhirUriFactory = GetFhirUriFactory(TestData.BaseUrlServer, new string[] { resourceName });


            string RequestUrl = $"{resourceName}/{resourceId}|{CanonicalVersionId}";

            //Act
            if (FhirUriFactory.TryParse(RequestUrl, fhirVersion, out IFhirUri? IFhirUri, out string ErrorMessage))
            {
                //Assert
                if (IFhirUri is object)
                {
                    Assert.Equal(resourceName, IFhirUri.ResourseName);
                    Assert.Equal(resourceId, IFhirUri.ResourceId);
                    Assert.Equal(string.Empty, IFhirUri.VersionId);
                    Assert.Equal(CanonicalVersionId, IFhirUri.CanonicalVersionId);

                    Assert.Equal(new Uri(TestData.BaseUrlServer), IFhirUri.PrimaryServiceRootServers);
                    Assert.False(IFhirUri.IsCompartment);
                    Assert.False(IFhirUri.ErrorInParseing);
                    Assert.False(IFhirUri.IsMetaData);
                    Assert.False(IFhirUri.IsOperation);
                    Assert.False(IFhirUri.IsCompartment);
                    Assert.False(IFhirUri.IsUrn);
                    Assert.False(IFhirUri.IsFormDataSearch);
                    Assert.Equal(RequestUrl, IFhirUri.OriginalString);
                    Assert.Equal(string.Empty, IFhirUri.CompartmentalisedResourseName);
                    Assert.Equal(fhirVersion, IFhirUri.FhirVersion);
                    Assert.Equal(string.Empty, IFhirUri.OperationName);
                    Assert.Null(IFhirUri.OperationType);
                    Assert.Equal(string.Empty, IFhirUri.Query);
                    Assert.Equal(string.Empty, IFhirUri.Urn);
                    Assert.Null(IFhirUri.UrnType);
                    Assert.Equal(string.Empty, IFhirUri.ParseErrorMessage);
                }
            }
            else
            {
                Assert.Equal("some error message", ErrorMessage);
            }
        }
Exemple #9
0
        public void TestFhirUri_Compartment(FhirVersion fhirVersion, string serversBase, string requestBase, string resourceName, string resourceId, string compartmentName, string query)
        {
            // Prepare
            //hit: the resource is unknown because we do not pass it into the GetFhirUriFactory below, we only pass in the resourceName and not the compatmentName
            FhirUriFactory FhirUriFactory;

            if (compartmentName == "Unknown")
            {
                FhirUriFactory = GetFhirUriFactory(serversBase, new string[] { resourceName });
            }
            else
            {
                FhirUriFactory = GetFhirUriFactory(serversBase, new string[] { resourceName, compartmentName });
            }

            string RequestUrl;

            if (string.IsNullOrWhiteSpace(query))
            {
                RequestUrl = $"{requestBase}/{resourceName}/{resourceId}/{compartmentName}";
            }
            else
            {
                RequestUrl = $"{requestBase}/{resourceName}/{resourceId}/{compartmentName}?{query}";
            }


            //Act
            if (FhirUriFactory.TryParse(RequestUrl, fhirVersion, out IFhirUri? IFhirUri, out string ErrorMessage))
            {
                //Assert
                if (IFhirUri is object)
                {
                    Assert.Equal(string.Empty, IFhirUri.OperationName);
                    Assert.Null(IFhirUri.OperationType);
                    Assert.Equal(resourceName, IFhirUri.ResourseName);
                    Assert.Equal(resourceId, IFhirUri.ResourceId);
                    Assert.False(IFhirUri.IsContained);
                    Assert.True(IFhirUri.IsRelativeToServer);
                    Assert.Equal(new Uri(serversBase), IFhirUri.UriPrimaryServiceRoot);
                    Assert.False(IFhirUri.IsHistoryReferance);
                    Assert.Equal(string.Empty, IFhirUri.VersionId);
                    Assert.Null(IFhirUri.PrimaryServiceRootRemote);
                    Assert.Equal(new Uri(serversBase), IFhirUri.PrimaryServiceRootServers);
                    Assert.True(IFhirUri.IsCompartment);
                    Assert.Equal(compartmentName, IFhirUri.CompartmentalisedResourseName);
                    Assert.False(IFhirUri.ErrorInParseing);
                    Assert.False(IFhirUri.IsMetaData);
                    Assert.False(IFhirUri.IsUrn);
                    Assert.False(IFhirUri.IsFormDataSearch);
                    Assert.Equal(RequestUrl, IFhirUri.OriginalString);
                    Assert.Equal(compartmentName, IFhirUri.CompartmentalisedResourseName);
                    Assert.True(IFhirUri.IsCompartment);
                    Assert.Equal(fhirVersion, IFhirUri.FhirVersion);

                    Assert.Equal(string.Empty, IFhirUri.Urn);
                    Assert.Null(IFhirUri.UrnType);
                    Assert.Equal(string.Empty, IFhirUri.ParseErrorMessage);

                    if (string.IsNullOrWhiteSpace(query))
                    {
                        Assert.Equal(string.Empty, IFhirUri.Query);
                    }
                    else
                    {
                        Assert.Equal(query, IFhirUri.Query);
                    }
                }
            }
            else
            {
                if (string.IsNullOrWhiteSpace(query))
                {
                    Assert.Equal("The URI has extra unknown content near the end of : 'Unknown'. The full URI was: 'http://base/stuff/Patient/10/Unknown'", ErrorMessage);
                }
                else
                {
                    Assert.Equal("The URI has extra unknown content near the end of : 'Unknown'. The full URI was: 'http://base/stuff/Patient/10/Unknown?query_one=one, query_two=two'", ErrorMessage);
                }
            }
        }
Exemple #10
0
        public void TestFhirUri_ResourceNameValidForFhirVersion(FhirVersion fhirVersion, string serversBase, string resourceNameR4, string resourceNameStu3, string resourceId)
        {
            // Prepare
            Mock <IServiceBaseUrlConfi>         IServiceBaseUrlMock              = IServiceBaseUrl_MockFactory.Get(serversBase, serversBase);
            Mock <IR4ValidateResourceName>      IR4ValidateResourceNameMock      = IR4ValidateResourceName_MockFactory.Get(new string[] { resourceNameR4 });
            Mock <IStu3ValidateResourceName>    IStu3ValidateResourceNameMock    = IStu3ValidateResourceName_MockFactory.Get(new string[] { resourceNameStu3 });
            Mock <IValidateResourceNameFactory> IValidateResourceNameFactoryMock = IValidateResourceNameFactory_MockFactory.Get(IStu3ValidateResourceNameMock.Object, IR4ValidateResourceNameMock.Object);

            FhirUriFactory FhirUriFactory = new FhirUriFactory(IServiceBaseUrlMock.Object, IValidateResourceNameFactoryMock.Object);

            string RequestUrl;

            if (fhirVersion == FhirVersion.Stu3)
            {
                RequestUrl = $"{resourceNameStu3}/{resourceId}";
            }
            else
            {
                RequestUrl = $"{resourceNameR4}/{resourceId}";
            }


            //Act
            if (FhirUriFactory.TryParse(RequestUrl, fhirVersion, out IFhirUri? IFhirUri, out string ErrorMessage))
            {
                //Assert
                if (IFhirUri is object)
                {
                    if (fhirVersion == FhirVersion.Stu3)
                    {
                        Assert.Equal(resourceNameStu3, IFhirUri.ResourseName);
                    }
                    else
                    {
                        Assert.Equal(resourceNameR4, IFhirUri.ResourseName);
                    }
                    Assert.Equal(fhirVersion, IFhirUri.FhirVersion);
                    Assert.False(IFhirUri.IsContained);
                    Assert.Equal(resourceId.TrimStart('#'), IFhirUri.ResourceId);
                    Assert.True(IFhirUri.IsRelativeToServer);
                    Assert.Equal(new Uri(serversBase), IFhirUri.UriPrimaryServiceRoot);
                    Assert.False(IFhirUri.IsHistoryReferance);
                    Assert.Equal(string.Empty, IFhirUri.VersionId);
                    Assert.Null(IFhirUri.PrimaryServiceRootRemote);
                    Assert.Equal(new Uri(serversBase), IFhirUri.PrimaryServiceRootServers);
                    Assert.False(IFhirUri.IsCompartment);
                    Assert.False(IFhirUri.ErrorInParseing);
                    Assert.False(IFhirUri.IsMetaData);
                    Assert.False(IFhirUri.IsOperation);
                    Assert.False(IFhirUri.IsCompartment);
                    Assert.False(IFhirUri.IsUrn);
                    Assert.False(IFhirUri.IsFormDataSearch);
                    Assert.Equal(RequestUrl, IFhirUri.OriginalString);
                    Assert.Equal(string.Empty, IFhirUri.CompartmentalisedResourseName);

                    Assert.Equal(string.Empty, IFhirUri.OperationName);
                    Assert.Null(IFhirUri.OperationType);
                    Assert.Equal(string.Empty, IFhirUri.Query);
                    Assert.Equal(string.Empty, IFhirUri.Urn);
                    Assert.Null(IFhirUri.UrnType);
                    Assert.Equal(string.Empty, IFhirUri.ParseErrorMessage);
                }
                else
                {
                    Assert.Equal("some error message", ErrorMessage);
                }
            }
        }