public GroupMemberExtractorTests() { var dataClient = Substitute.For <IFhirDataClient>(); dataClient.SearchAsync(new ResourceIdSearchOptions("Group", _sampleGroupId, null), _noneCancellationToken) .ReturnsForAnyArgs(x => { var resourceId = ((ResourceIdSearchOptions)x[0]).ResourceId; var testDataFile = _groupIdToTestDataFile.ContainsKey(resourceId) ? Path.Combine(_testDataFolder, _groupIdToTestDataFile[resourceId]) : TestDataConstants.EmptyBundleFile; var bundle = TestDataProvider.GetBundleFromFile(testDataFile); return(bundle); }); var fhirServerConfig = new FhirServerConfiguration { ServerUrl = "https://example.com", Authentication = AuthenticationType.None, }; var fhirServerOption = Options.Create(fhirServerConfig); _dataSource = new FhirApiDataSource(fhirServerOption); _referenceParser = new R4ReferenceParser(_dataSource, NullLogger <R4ReferenceParser> .Instance); _groupMemberExtractor = new GroupMemberExtractor(dataClient, _referenceParser, _nullGroupMemberExtractorLogger); }
/// <summary> /// Adds services for enabling a FHIR server. /// </summary> /// <param name="services">The services collection.</param> /// <param name="configurationRoot">An optional configuration root object. This method uses "FhirServer" section.</param> /// <param name="configureAction">An optional delegate to set <see cref="FhirServerConfiguration"/> properties after values have been loaded from configuration</param> /// <returns>A <see cref="IFhirServerBuilder"/> object.</returns> public static IFhirServerBuilder AddFhirServer( this IServiceCollection services, IConfiguration configurationRoot = null, Action <FhirServerConfiguration> configureAction = null) { EnsureArg.IsNotNull(services, nameof(services)); services.AddOptions(); services.AddMvc(options => { options.EnableEndpointRouting = false; options.RespectBrowserAcceptHeader = true; }) .AddNewtonsoftJson() .AddRazorRuntimeCompilation(); var fhirServerConfiguration = new FhirServerConfiguration(); configurationRoot?.GetSection(FhirServerConfigurationSectionName).Bind(fhirServerConfiguration); configureAction?.Invoke(fhirServerConfiguration); services.AddSingleton(Options.Options.Create(fhirServerConfiguration)); services.AddSingleton(Options.Options.Create(fhirServerConfiguration.Security)); services.AddSingleton(Options.Options.Create(fhirServerConfiguration.Features)); services.AddSingleton(Options.Options.Create(fhirServerConfiguration.CoreFeatures)); services.AddSingleton(Options.Options.Create(fhirServerConfiguration.Cors)); services.AddSingleton(Options.Options.Create(fhirServerConfiguration.Operations)); services.AddSingleton(Options.Options.Create(fhirServerConfiguration.Operations.Export)); services.AddSingleton(Options.Options.Create(fhirServerConfiguration.Operations.Reindex)); services.AddSingleton(Options.Options.Create(fhirServerConfiguration.Operations.ConvertData)); services.AddSingleton(Options.Options.Create(fhirServerConfiguration.Audit)); services.AddSingleton(Options.Options.Create(fhirServerConfiguration.Bundle)); services.AddSingleton(Options.Options.Create(fhirServerConfiguration.Throttling)); services.AddSingleton(Options.Options.Create(fhirServerConfiguration.ArtifactStore)); services.AddTransient <IStartupFilter, FhirServerStartupFilter>(); services.RegisterAssemblyModules(Assembly.GetExecutingAssembly(), fhirServerConfiguration); services.AddFhirServerBase(fhirServerConfiguration); services.AddHttpClient(Options.Options.DefaultName) .AddTransientHttpErrorPolicy(builder => builder.OrResult(m => m.StatusCode == HttpStatusCode.TooManyRequests) .WaitAndRetryAsync(5, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)))); var multipleRegisteredServices = services .GroupBy(x => (x.ServiceType, x.ImplementationType, x.ImplementationInstance, x.ImplementationFactory)) .Where(x => x.Count() > 1) .ToArray(); if (multipleRegisteredServices.Any()) { foreach (var service in multipleRegisteredServices) { Debug.WriteLine($"** IoC Config Warning: Service implementation '{service.Key.ImplementationType ?? service.Key.ImplementationInstance ?? service.Key.ImplementationFactory}' was registered multiple times."); } } return(new FhirServerBuilder(services)); }
/// <summary> /// Adds services for enabling a FHIR server. /// </summary> /// <param name="services">The services collection.</param> /// <param name="configurationRoot">An optional configuration root object. This method uses "FhirServer" section.</param> /// <param name="configureAction">An optional delegate to set <see cref="FhirServerConfiguration"/> properties after values have been loaded from configuration</param> /// <returns>A <see cref="IFhirServerBuilder"/> object.</returns> public static IFhirServerBuilder AddFhirServer( this IServiceCollection services, IConfiguration configurationRoot = null, Action <FhirServerConfiguration> configureAction = null) { EnsureArg.IsNotNull(services, nameof(services)); services.AddOptions(); services.AddMvc(options => { options.RespectBrowserAcceptHeader = true; }); var fhirServerConfiguration = new FhirServerConfiguration(); configurationRoot?.GetSection(FhirServerConfigurationSectionName).Bind(fhirServerConfiguration); configureAction?.Invoke(fhirServerConfiguration); services.AddSingleton(Options.Options.Create(fhirServerConfiguration)); services.AddSingleton(Options.Options.Create(fhirServerConfiguration.Security)); services.AddSingleton(Options.Options.Create(fhirServerConfiguration.Conformance)); services.AddSingleton(Options.Options.Create(fhirServerConfiguration.Features)); services.AddSingleton(Options.Options.Create(fhirServerConfiguration.Cors)); services.AddTransient <IStartupFilter, FhirServerStartupFilter>(); services.RegisterAssemblyModules(Assembly.GetExecutingAssembly(), fhirServerConfiguration); services.AddHttpClient(); return(new FhirServerBuilder(services)); }
public void GivenEmptyServerUrl_WhenInitialize_ArgumentExceptionShouldBeThrown() { // ServerUrl is string.empty var fhirServerConfig = new FhirServerConfiguration(); Assert.Throws <ArgumentException>(() => new FhirApiDataSource(Options.Create(fhirServerConfig))); fhirServerConfig.ServerUrl = ""; Assert.Throws <ArgumentException>(() => new FhirApiDataSource(Options.Create(fhirServerConfig))); }
private ITypedElement GetTestElement(string fileName) { var fhirConfiguration = new FhirServerConfiguration() { Version = FhirVersion.R4, }; var fhirParser = new FhirSerializer(Options.Create(fhirConfiguration)); return(fhirParser.DeserializeToElement(File.ReadAllText(fileName))); }
public void GivenServerUrl_WhenInitialize_ServerUrlShouldBeEndsWithSlash(string serverUrl, string expectedServerUrl) { var fhirServerConfig = new FhirServerConfiguration { ServerUrl = serverUrl, }; var dataSource = new FhirApiDataSource(Options.Create(fhirServerConfig)); Assert.Equal(expectedServerUrl, dataSource.FhirServerUrl); }
/// <summary> /// Adds services for enabling a FHIR server. /// </summary> /// <param name="services">The services collection.</param> /// <param name="configurationRoot">An optional configuration root object. This method uses "FhirServer" section.</param> /// <param name="configureAction">An optional delegate to set <see cref="FhirServerConfiguration"/> properties after values have been loaded from configuration</param> /// <returns>A <see cref="IFhirServerBuilder"/> object.</returns> public static IFhirServerBuilder AddFhirServer( this IServiceCollection services, IConfiguration configurationRoot = null, Action <FhirServerConfiguration> configureAction = null) { EnsureArg.IsNotNull(services, nameof(services)); services.AddOptions(); services.AddMvc(options => { options.EnableEndpointRouting = false; options.RespectBrowserAcceptHeader = true; }) .AddNewtonsoftJson() .AddRazorRuntimeCompilation(); var fhirServerConfiguration = new FhirServerConfiguration(); configurationRoot?.GetSection(FhirServerConfigurationSectionName).Bind(fhirServerConfiguration); configureAction?.Invoke(fhirServerConfiguration); services.AddSingleton(Options.Options.Create(fhirServerConfiguration)); services.AddSingleton(Options.Options.Create(fhirServerConfiguration.Security)); services.AddSingleton(Options.Options.Create(fhirServerConfiguration.Features)); services.AddSingleton(Options.Options.Create(fhirServerConfiguration.CoreFeatures)); services.AddSingleton(Options.Options.Create(fhirServerConfiguration.Cors)); services.AddSingleton(Options.Options.Create(fhirServerConfiguration.Operations)); services.AddSingleton(Options.Options.Create(fhirServerConfiguration.Operations.Export)); services.AddSingleton(Options.Options.Create(fhirServerConfiguration.Audit)); services.AddSingleton(Options.Options.Create(fhirServerConfiguration.Bundle)); services.AddTransient <IStartupFilter, FhirServerStartupFilter>(); services.RegisterAssemblyModules(Assembly.GetExecutingAssembly(), fhirServerConfiguration); services.AddFhirServerBase(fhirServerConfiguration); services.AddHttpClient(); var multipleRegisteredServices = services .GroupBy(x => (x.ServiceType, x.ImplementationType, x.ImplementationInstance, x.ImplementationFactory)) .Where(x => x.Count() > 1) .ToArray(); if (multipleRegisteredServices.Any()) { foreach (var service in multipleRegisteredServices) { Debug.WriteLine($"** IoC Config Warning: Service implementation '{service.Key.ImplementationType ?? service.Key.ImplementationInstance ?? service.Key.ImplementationFactory}' was registered multiple times."); } } return(new FhirServerBuilder(services)); }
public R4ReferenceParserTests() { var fhirServerConfig = new FhirServerConfiguration { ServerUrl = _serverUrl, Authentication = AuthenticationType.None, }; var fhirServerOption = Options.Create(fhirServerConfig); _dataSource = new FhirApiDataSource(fhirServerOption); _referenceParser = new R4ReferenceParser(_dataSource, _nullR4ReferenceParserLogger); }
public static ITypedElement GetBundleElementFromFile(string filePath) { var bundleContent = GetBundleFromFile(filePath); var fhirConfiguration = new FhirServerConfiguration() { Version = FhirVersion.R4, }; var fhirSerializer = new FhirSerializer(Options.Create(fhirConfiguration)); return(fhirSerializer.DeserializeToElement(bundleContent)); }
public void GivenDataSourceServerUrlEndsWithSlash_WhenParseReference_ParsedReferenceShouldBeReturned() { var fhirServerConfig = new FhirServerConfiguration { ServerUrl = "https://example.com/", Authentication = AuthenticationType.None, }; var fhirServerOption = Options.Create(fhirServerConfig); var dataSource = new FhirApiDataSource(fhirServerOption); var referenceParser = new R4ReferenceParser(dataSource, _nullR4ReferenceParserLogger); var fhirReference = referenceParser.Parse("https://example.com/Patient/123/_history/2"); Assert.NotNull(fhirReference); Assert.Equal("Patient", fhirReference.ResourceType); Assert.Equal("123", fhirReference.ResourceId); }
/// <summary> /// Adds services for enabling a FHIR server. /// </summary> /// <param name="services">The services collection.</param> /// <param name="configurationRoot">An optional configuration root object. This method uses "FhirServer" section.</param> /// <param name="configureAction">An optional delegate to set <see cref="FhirServerConfiguration"/> properties after values have been loaded from configuration</param> /// <returns>A <see cref="IFhirServerBuilder"/> object.</returns> public static IFhirServerBuilder AddFhirServer( this IServiceCollection services, IConfiguration configurationRoot = null, Action <FhirServerConfiguration> configureAction = null) { EnsureArg.IsNotNull(services, nameof(services)); services.AddOptions(); services.AddMvc(options => { options.EnableEndpointRouting = false; options.RespectBrowserAcceptHeader = true; }) .AddNewtonsoftJson() .AddRazorRuntimeCompilation(); var fhirServerConfiguration = new FhirServerConfiguration(); configurationRoot?.GetSection(FhirServerConfigurationSectionName).Bind(fhirServerConfiguration); configureAction?.Invoke(fhirServerConfiguration); services.AddSingleton(Options.Options.Create(fhirServerConfiguration)); services.AddSingleton(Options.Options.Create(fhirServerConfiguration.Security)); services.AddSingleton(Options.Options.Create(fhirServerConfiguration.Features)); services.AddSingleton(Options.Options.Create(fhirServerConfiguration.CoreFeatures)); services.AddSingleton(Options.Options.Create(fhirServerConfiguration.Cors)); services.AddSingleton(Options.Options.Create(fhirServerConfiguration.Operations)); services.AddSingleton(Options.Options.Create(fhirServerConfiguration.Operations.Export)); services.AddSingleton(Options.Options.Create(fhirServerConfiguration.Audit)); services.AddSingleton(Options.Options.Create(fhirServerConfiguration.Bundle)); services.AddTransient <IStartupFilter, FhirServerStartupFilter>(); services.RegisterAssemblyModules(Assembly.GetExecutingAssembly(), fhirServerConfiguration); services.AddFhirServerBase(fhirServerConfiguration); services.AddHttpClient(); return(new FhirServerBuilder(services)); }
public CorsModule(FhirServerConfiguration fhirServerConfiguration) { EnsureArg.IsNotNull(fhirServerConfiguration, nameof(fhirServerConfiguration)); _corsConfiguration = fhirServerConfiguration.Cors; }
public FhirModule(FhirServerConfiguration fhirServerConfiguration) { EnsureArg.IsNotNull(fhirServerConfiguration, nameof(fhirServerConfiguration)); _featureConfiguration = fhirServerConfiguration.Features; }
public override void Configure(IFunctionsHostBuilder builder) { var services = builder.Services; /* Hack to get IConfiguration */ var serviceProvider = builder.Services.BuildServiceProvider(); var configurationRoot = serviceProvider.GetService <IConfiguration>(); var env = serviceProvider.GetRequiredService <IHostEnvironment>(); var appDirectory = serviceProvider.GetRequiredService <IOptions <ExecutionContextOptions> >().Value.AppDirectory; var configBuilder = new ConfigurationBuilder() .SetBasePath(appDirectory) .AddJsonFile("appsettings.json"); var customConfig = configBuilder.AddConfiguration(configurationRoot).Build(); services.AddOptions(); services.Add <IConfiguration>(x => customConfig).Singleton().ReplaceService <IConfiguration>(); var fhirServerConfiguration = new FhirServerConfiguration(); customConfig?.GetSection(FhirServerConfigurationSectionName).Bind(fhirServerConfiguration); services.AddSingleton(Options.Create(fhirServerConfiguration)); services.AddSingleton(Options.Create(fhirServerConfiguration.Security)); services.AddSingleton(Options.Create(fhirServerConfiguration.Features)); services.AddSingleton(Options.Create(fhirServerConfiguration.CoreFeatures)); services.AddSingleton(Options.Create(fhirServerConfiguration.Cors)); services.AddSingleton(Options.Create(fhirServerConfiguration.Operations)); services.AddSingleton(Options.Create(fhirServerConfiguration.Operations.Export)); services.AddSingleton(Options.Create(fhirServerConfiguration.Operations.Reindex)); services.AddSingleton(Options.Create(fhirServerConfiguration.Audit)); services.AddSingleton(Options.Create(fhirServerConfiguration.Bundle)); services.AddSingleton(Options.Create(fhirServerConfiguration.Throttling)); new FhirModule(fhirServerConfiguration).Load(services); services.RemoveAll(typeof(IScoped <>)); services.AddTransient(typeof(IScoped <>), typeof(FunctionsScoped <>)); new MediationModule().Load(services); new PersistenceModule().Load(services); new SearchModule(fhirServerConfiguration).Load(services); new ValidationModule().Load(services); services.TryAddSingleton <IHttpContextAccessor, HttpContextAccessor>(); services.Add <QueryStringParser>().Singleton().AsService <IQueryStringParser>(); services.Add <FunctionsUrlResolver>().Singleton().ReplaceService <IUrlResolver>(); services.AddHttpClient(); services.Add <StartupExtension>().Transient().AsImplementedInterfaces(); string dataStore = customConfig["DataStore"]; if (dataStore.Equals("CosmosDb", StringComparison.InvariantCultureIgnoreCase)) { var fhirBuilder = new FunctionsFhirServerBuilder(services); fhirBuilder.AddCosmosDbCore(); } }
public static IServiceCollection AddFhirServerBase(this IServiceCollection services, FhirServerConfiguration fhirServerConfiguration) { EnsureArg.IsNotNull(services, nameof(services)); EnsureArg.IsNotNull(fhirServerConfiguration, nameof(fhirServerConfiguration)); services.RegisterAssemblyModules(Assembly.GetExecutingAssembly(), fhirServerConfiguration); services.RegisterAssemblyModules(typeof(InitializationModule).Assembly, fhirServerConfiguration); return(services); }
public SearchModule(FhirServerConfiguration configuration) { EnsureArg.IsNotNull(configuration, nameof(configuration)); _configuration = configuration; }
public SecurityModule(FhirServerConfiguration fhirServerConfiguration) { EnsureArg.IsNotNull(fhirServerConfiguration, nameof(fhirServerConfiguration)); _securityConfiguration = fhirServerConfiguration.Security; }
public ControlPlaneModule(FhirServerConfiguration fhirServerConfiguration) { EnsureArg.IsNotNull(fhirServerConfiguration, nameof(fhirServerConfiguration)); }