VEU.WathBody/3-app/2-cli/Server.WatchBody.Core.Tests/AthleteRepositoryTests.cs

239 lines
8.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Kit.Helpers.SqlHelperAbstract;
using Server.WatchBody.Core.Dal.Src.Domain;
using Server.WatchBody.Core.Dal.Src.Repository;
using Server.WatchBody.Core.Dal.Ref.Repository;
using Xunit;
namespace Server.WatchBody.Core.Tests;
// Тесты AthleteRepository / AthleteProfileRepository по repository_tests\AthleteRepository.md
// и AthleteProfileRepository.md (d-tst: тест → репозиторий → фейк-транспорт).
public class AthleteRepositoryTests
{
[Fact]
public void Insert_1Основной_Scalar7_ПараметрыИмяХэш()
{
var expArgs = new ConnectionString().PrepareExecute("src.athlete_insert")
.AsStoredProcedure()
.AddParameter("p_name", "TEST-Атлет")
.AddParameter("p_api_key_hash", "TEST-hash-1")
.BuildParams();
var cs = ConnectionStringTest.Scalar(expArgs, 7);
var result = new AthleteRepository(cs).Insert(
new Athlete { Name = "TEST-Атлет", ApiKeyHash = "TEST-hash-1" });
Assert.Equal(7, result);
Assert.Single(cs.Requests);
}
[Fact]
public void Update_1Основной_Scalar1_ВсеПоля()
{
var expArgs = new ConnectionString().PrepareExecute("src.athlete_update")
.AsStoredProcedure()
.AddParameter("p_id", 1)
.AddParameter("p_name", "TEST-Атлет-новый")
.AddParameter("p_api_key_hash", "TEST-hash-новый")
.AddParameter("p_is_blocked", true)
.BuildParams();
var cs = ConnectionStringTest.Scalar(expArgs, 1);
var result = new AthleteRepository(cs).Update(
new Athlete { Id = 1, Name = "TEST-Атлет-новый", ApiKeyHash = "TEST-hash-новый", IsBlocked = true });
Assert.Equal(1, result);
}
[Fact]
public void Select_1Основной_ФильтрХэш_1Сущность()
{
var expArgs = new ConnectionString().PrepareExecute("src.athlete_select")
.AsStoredProcedure()
.AddParameter("p_api_key_hash", "TEST-hash-1")
.AddParameter("p_is_blocked", DBNull.Value)
.BuildParams();
var table = TestInfra.Table(TestInfra.AthleteCols,
[1, "TEST-Атлет", "TEST-hash-1", false, new DateTime(2026, 10, 17)]);
var cs = new ConnectionStringTest(expArgs, table);
var rows = new AthleteRepository(cs).Select(
new AthleteFilter { ApiKeyHash = "TEST-hash-1", IsBlocked = null }).ToList();
var a = Assert.Single(rows);
Assert.Equal(1, a.Id);
Assert.Equal("TEST-Атлет", a.Name);
Assert.False(a.IsBlocked);
}
[Fact]
public void Select_2Граничный_ПустаяТаблица_ПустаяКоллекция()
{
var expArgs = new ConnectionString().PrepareExecute("src.athlete_select")
.AsStoredProcedure()
.AddParameter("p_api_key_hash", DBNull.Value)
.AddParameter("p_is_blocked", DBNull.Value)
.BuildParams();
var cs = new ConnectionStringTest(expArgs, TestInfra.Table(TestInfra.AthleteCols));
var rows = new AthleteRepository(cs).Select(new AthleteFilter());
Assert.Empty(rows);
}
[Fact]
public void Get_1Основной_Сущность()
{
var expArgs = new ConnectionString().PrepareExecute("src.athlete_get")
.AsStoredProcedure()
.AddParameter("p_id", 1)
.BuildParams();
var table = TestInfra.Table(TestInfra.AthleteCols,
[1, "TEST-Атлет", "TEST-hash-1", false, new DateTime(2026, 10, 17)]);
var cs = new ConnectionStringTest(expArgs, table);
var a = new AthleteRepository(cs).Get(1);
Assert.NotNull(a);
Assert.Equal("TEST-Атлет", a.Name);
}
[Fact]
public void Get_2Граничный_ПустаяТаблица_Null()
{
var expArgs = new ConnectionString().PrepareExecute("src.athlete_get")
.AsStoredProcedure()
.AddParameter("p_id", 999)
.BuildParams();
var cs = new ConnectionStringTest(expArgs, TestInfra.Table(TestInfra.AthleteCols));
Assert.Null(new AthleteRepository(cs).Get(999));
}
}
public class AthleteProfileRepositoryTests
{
[Fact]
public void Upsert_1Основной_HrMaxNull_КакDbNull()
{
var expArgs = new ConnectionString().PrepareExecute("src.athlete_profile_upsert")
.AsStoredProcedure()
.AddParameter("p_athlete_id", 1)
.AddParameter("p_sex", "m")
.AddParameter("p_birth_year", 1978)
.AddParameter("p_weight_kg", 158.0m)
.AddParameter("p_hr_max", DBNull.Value)
.BuildParams();
var cs = ConnectionStringTest.Scalar(expArgs, 3);
var result = new AthleteProfileRepository(cs).Upsert(
new AthleteProfile { AthleteId = 1, Sex = "m", BirthYear = 1978, WeightKg = 158.0m, HrMax = null });
Assert.Equal(3, result);
}
[Fact]
public void Get_1Основной_Сущность()
{
var expArgs = new ConnectionString().PrepareExecute("src.athlete_profile_get")
.AsStoredProcedure()
.AddParameter("p_athlete_id", 1)
.BuildParams();
var table = TestInfra.Table(TestInfra.ProfileCols,
[10, 1, "m", 1978, 158.0m, DBNull.Value, new DateTime(2026, 10, 17)]);
var cs = new ConnectionStringTest(expArgs, table);
var p = new AthleteProfileRepository(cs).Get(1);
Assert.NotNull(p);
Assert.Equal(158.0m, p.WeightKg);
Assert.Null(p.HrMax);
}
[Fact]
public void Get_2Граничный_ПустаяТаблица_Null()
{
var expArgs = new ConnectionString().PrepareExecute("src.athlete_profile_get")
.AsStoredProcedure()
.AddParameter("p_athlete_id", 2)
.BuildParams();
var cs = new ConnectionStringTest(expArgs, TestInfra.Table(TestInfra.ProfileCols));
Assert.Null(new AthleteProfileRepository(cs).Get(2));
}
}
public class ExerciseGroupRepositoryTests
{
[Fact]
public void Select_1Основной_2Сущности()
{
var expArgs = new ConnectionString().PrepareExecute("ref.exercise_group_select")
.AsStoredProcedure()
.BuildParams();
var table = TestInfra.Table(TestInfra.GroupCols,
[1, "push", "Жимовые"], [3, "legs", "Ноги"]);
var cs = new ConnectionStringTest(expArgs, table);
var rows = new ExerciseGroupRepository(cs).Select().ToList();
Assert.Equal(2, rows.Count);
Assert.Equal("push", rows[0].Code);
}
[Fact]
public void Select_2Граничный_ПустаяТаблица()
{
var expArgs = new ConnectionString().PrepareExecute("ref.exercise_group_select")
.AsStoredProcedure()
.BuildParams();
var cs = new ConnectionStringTest(expArgs, TestInfra.Table(TestInfra.GroupCols));
Assert.Empty(new ExerciseGroupRepository(cs).Select());
}
}
public class MigrationRepositoryTests
{
[Fact]
public void Insert_1Основной()
{
var expArgs = new ConnectionString().PrepareExecute("src.migration_insert")
.AsStoredProcedure()
.AddParameter("p_filename", "TEST-0001.sql")
.BuildParams();
var cs = ConnectionStringTest.Scalar(expArgs, 1);
Assert.Equal(1, new MigrationRepository(cs).Insert("TEST-0001.sql"));
}
[Fact]
public void Select_1Основной_Сущность()
{
var expArgs = new ConnectionString().PrepareExecute("src.migration_select")
.AsStoredProcedure()
.AddParameter("p_filename", "TEST-0001.sql")
.BuildParams();
var table = TestInfra.Table(TestInfra.MigrationCols, [1, "TEST-0001.sql", new DateTime(2026, 10, 17)]);
var cs = new ConnectionStringTest(expArgs, table);
var m = new MigrationRepository(cs).Select("TEST-0001.sql");
Assert.NotNull(m);
Assert.Equal("TEST-0001.sql", m.Filename);
}
[Fact]
public void Select_2Граничный_ПустаяТаблица_Null()
{
var expArgs = new ConnectionString().PrepareExecute("src.migration_select")
.AsStoredProcedure()
.AddParameter("p_filename", "TEST-нет.sql")
.BuildParams();
var cs = new ConnectionStringTest(expArgs, TestInfra.Table(TestInfra.MigrationCols));
Assert.Null(new MigrationRepository(cs).Select("TEST-нет.sql"));
}
}