diff --git a/backend/tests/Tnsu.ApprovalRoute.IntegrationTests/RequestTypePostgresTests.cs b/backend/tests/Tnsu.ApprovalRoute.IntegrationTests/RequestTypePostgresTests.cs new file mode 100644 index 0000000..43f4131 --- /dev/null +++ b/backend/tests/Tnsu.ApprovalRoute.IntegrationTests/RequestTypePostgresTests.cs @@ -0,0 +1,40 @@ +using Microsoft.EntityFrameworkCore; +using Tnsu.ApprovalRoute.Domain.Entities; +using Tnsu.ApprovalRoute.Infrastructure.Persistence; + +namespace Tnsu.ApprovalRoute.IntegrationTests; + +public class RequestTypePostgresTests +{ + private static string ConnectionString => + Environment.GetEnvironmentVariable("TEST_POSTGRES_CONNECTION") + ?? "Host=localhost;Port=5435;Database=tnsu_approval_route;Username=tnsu_approval_route;Password=tnsu_approval_route"; + + [Fact] + public async Task CanInsertAndReadBack_RealPostgres() + { + var options = new DbContextOptionsBuilder() + .UseNpgsql(ConnectionString) + .UseSnakeCaseNamingConvention() + .Options; + + await using var db = new ApprovalRouteDbContext(options); + await db.Database.MigrateAsync(); + + // Транзакция без коммита — тест не оставляет данных в базе после себя. + await using var transaction = await db.Database.BeginTransactionAsync(); + + var entity = new RequestType { Name = "Integration test type", PageUrl = "/integration-test" }; + db.RequestTypes.Add(entity); + await db.SaveChangesAsync(); + + db.ChangeTracker.Clear(); + var loaded = await db.RequestTypes.AsNoTracking().FirstOrDefaultAsync(x => x.Id == entity.Id); + + Assert.NotNull(loaded); + Assert.Equal("Integration test type", loaded.Name); + Assert.Equal("/integration-test", loaded.PageUrl); + + await transaction.RollbackAsync(); + } +}