chore: add hrynco common library solution

- add the standalone HrynCo.Common solution and projects
- include the shared common library source and tests
- add package metadata and a repo gitignore
This commit is contained in:
Anatolii Grynchuk
2026-05-01 00:17:34 +03:00
commit 85b362e8cd
38 changed files with 1452 additions and 0 deletions
+99
View File
@@ -0,0 +1,99 @@
namespace HrynCo.Common.Tests;
using HrynCo.Common.HealthChecks;
using HrynCo.Common.HealthChecks.Defaults;
using HrynCo.Common.HealthChecks.Interfaces;
using FluentAssertions;
using Microsoft.Extensions.Diagnostics.HealthChecks;
using Xunit;
public sealed class HealthChecksTests
{
[Fact]
public async Task CompositeHealthCheck_ShouldUseConfigurationCheckWhenConfiguredForConfigOnly()
{
var configCheck = new FakeConfigurationCheck();
var serviceCheck = new FakeServiceHealthCheck();
var healthCheck = new CompositeHealthCheck(configCheck, serviceCheck, configOnly: true);
HealthCheckResult result = await healthCheck.CheckHealthAsync(new HealthCheckContext(), default);
result.Status.Should().Be(HealthStatus.Healthy);
configCheck.Called.Should().BeTrue();
serviceCheck.Called.Should().BeFalse();
}
[Fact]
public async Task CompositeHealthCheck_ShouldUseServiceCheckWhenNotConfigOnly()
{
var configCheck = new FakeConfigurationCheck();
var serviceCheck = new FakeServiceHealthCheck();
var healthCheck = new CompositeHealthCheck(configCheck, serviceCheck, configOnly: false);
HealthCheckResult result = await healthCheck.CheckHealthAsync(new HealthCheckContext(), default);
result.Status.Should().Be(HealthStatus.Healthy);
configCheck.Called.Should().BeFalse();
serviceCheck.Called.Should().BeTrue();
}
[Fact]
public async Task DbServiceHealthCheck_ShouldReturnHealthyWhenConnectionSucceeds()
{
var check = new DbServiceHealthCheck(new FakeDatabaseConnectionChecker(true));
HealthCheckResult result = await check.CheckHealthAsync(default);
result.Status.Should().Be(HealthStatus.Healthy);
}
[Fact]
public async Task DbServiceHealthCheck_ShouldReturnUnhealthyWhenConnectionFails()
{
var check = new DbServiceHealthCheck(new FakeDatabaseConnectionChecker(false));
HealthCheckResult result = await check.CheckHealthAsync(default);
result.Status.Should().Be(HealthStatus.Unhealthy);
}
private sealed class FakeConfigurationCheck : IConfigurationCheck
{
public bool Called { get; private set; }
public Task<HealthCheckResult> CheckConfigurationAsync(CancellationToken cancellationToken)
{
_ = cancellationToken;
Called = true;
return Task.FromResult(HealthCheckResult.Healthy("config"));
}
}
private sealed class FakeServiceHealthCheck : IServiceHealthCheck
{
public bool Called { get; private set; }
public Task<HealthCheckResult> CheckHealthAsync(CancellationToken cancellationToken)
{
_ = cancellationToken;
Called = true;
return Task.FromResult(HealthCheckResult.Healthy("service"));
}
}
private sealed class FakeDatabaseConnectionChecker : IDatabaseConnectionChecker
{
private readonly bool _canConnect;
public FakeDatabaseConnectionChecker(bool canConnect)
{
_canConnect = canConnect;
}
public Task<bool> CanConnectAsync(CancellationToken cancellationToken)
{
_ = cancellationToken;
return Task.FromResult(_canConnect);
}
}
}