Files
Cleanuparr/code/backend/Cleanuparr.Persistence.Tests/Providers/PostgresDatabaseProviderTests.cs
T

77 lines
2.5 KiB
C#

using Cleanuparr.Domain.Enums;
using Cleanuparr.Persistence.Providers;
using Cleanuparr.Shared.Enums;
using Npgsql;
using Shouldly;
using Xunit;
namespace Cleanuparr.Persistence.Tests.Providers;
public class PostgresDatabaseProviderTests
{
private readonly PostgresDatabaseProvider _provider = new();
[Fact]
public void Kind_is_postgres()
{
_provider.Kind.ShouldBe(DatabaseProvider.Postgres);
}
[Fact]
public void GetSchema_maps_each_context()
{
_provider.GetSchema(DbContextKind.Data).ShouldBe("data");
_provider.GetSchema(DbContextKind.Events).ShouldBe("events");
_provider.GetSchema(DbContextKind.Users).ShouldBe("users");
}
[Fact]
public void GetUnresolvedEventFilter_uses_false()
{
_provider.GetUnresolvedEventFilter().ShouldBe("is_resolved = false");
}
[Fact]
public void BuildConnectionString_from_discrete_values()
{
string result = PostgresDatabaseProvider.BuildConnectionString("db-host", "5432", "cleanuparr", "s3cret", "cleanuparr", null);
NpgsqlConnectionStringBuilder parsed = new(result);
parsed.Host.ShouldBe("db-host");
parsed.Port.ShouldBe(5432);
parsed.Username.ShouldBe("cleanuparr");
parsed.Password.ShouldBe("s3cret");
parsed.Database.ShouldBe("cleanuparr");
}
[Fact]
public void BuildConnectionString_escapes_special_password()
{
string result = PostgresDatabaseProvider.BuildConnectionString("h", "5432", "u", "pa;ss=word", "d", null);
NpgsqlConnectionStringBuilder parsed = new(result);
parsed.Password.ShouldBe("pa;ss=word");
}
[Fact]
public void BuildConnectionString_merges_extra_params()
{
string result = PostgresDatabaseProvider.BuildConnectionString("h", "5432", "u", "p", "d", "SSL Mode=Require;Minimum Pool Size=5");
NpgsqlConnectionStringBuilder parsed = new(result);
parsed.SslMode.ShouldBe(SslMode.Require);
parsed.MinPoolSize.ShouldBe(5);
}
[Fact]
public void BuildConnectionString_invalid_extra_params_throws()
{
Should.Throw<Exception>(() =>
PostgresDatabaseProvider.BuildConnectionString("h", "5432", "u", "p", "d", "this is not valid"));
}
[Fact]
public void GetTimelineBucketExpr_month_uses_date_trunc_in_utc()
{
_provider.GetTimelineBucketExpr(TimelineBucketSize.Month)
.ShouldBe("to_char(date_trunc('month', \"timestamp\" AT TIME ZONE 'UTC'), 'YYYY-MM-DD')");
}
}