< Summary

Information
Class: Anichron.Infrastructure.Configuration.DatabaseConfiguration
Assembly: Anichron.Infrastructure
File(s): /home/runner/work/anichron/anichron/src/Anichron.Infrastructure/Configuration/DatabaseConfiguration.cs
Tag: 228_36821334185
Line coverage
100%
Covered lines: 21
Uncovered lines: 0
Coverable lines: 21
Total lines: 38
Line coverage: 100%
Branch coverage
100%
Covered branches: 12
Total branches: 12
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
GetConnectionString(...)100%66100%
GetSecretOrConfig(...)100%66100%

File(s)

/home/runner/work/anichron/anichron/src/Anichron.Infrastructure/Configuration/DatabaseConfiguration.cs

#LineLine coverage
 1using Anichron.Infrastructure.Data;
 2using Microsoft.Extensions.Configuration;
 3using Npgsql;
 4using System.IO.Abstractions;
 5
 6namespace Anichron.Infrastructure.Configuration;
 7
 8public static class DatabaseConfiguration
 9{
 10    public static string GetConnectionString(IConfiguration configuration, IFileSystem fileSystem)
 1011    {
 12        const string sectionName = "POSTGRES_CONNECTION";
 1013        var section = configuration.GetSection(sectionName);
 14
 1015        var builder = new NpgsqlConnectionStringBuilder
 1016        {
 1017            Host = section["HOST"] ?? throw new InvalidOperationException("Postgres Host missing"),
 1018            Database = section["DBNAME"] ?? throw new InvalidOperationException("Postgres Database name missing"),
 1019            Port = int.TryParse(section["PORT"], out var p) ? p : PostgresConstants.DefaultPort,
 1020            Username = GetSecretOrConfig(section, "USER_FILE", "USER", fileSystem),
 1021            Password = GetSecretOrConfig(section, "PASSWORD_FILE", "PASSWORD", fileSystem),
 1022            Pooling = true,
 1023        };
 24
 725        return builder.ToString();
 726    }
 27
 28    private static string GetSecretOrConfig(
 29        IConfigurationSection section, string fileKey, string configKey, IFileSystem fileSystem)
 1530    {
 1531        var filePath = section[fileKey];
 1532        return !string.IsNullOrEmpty(filePath) && fileSystem.File.Exists(filePath)
 1533            ? fileSystem.File.ReadAllText(filePath).Trim()
 1534            : section[configKey]
 1535                ?? throw new InvalidOperationException(
 1536                    $"Configuration value for {configKey} or secret file {fileKey} not found.");
 1437    }
 38}