using DynamicCrud.Tests.Fixtures; using ServicesDAO.Repositories; using Xunit; namespace DynamicCrud.Tests; public class ReadOperationsTests : IClassFixture { private readonly DbContextFixture _fixture; public ReadOperationsTests(DbContextFixture fixture) { _fixture = fixture; } public static IEnumerable AllModels => ModelRegistry.All.Keys.Select(k => new object[] { k }); [Theory] [MemberData(nameof(AllModels))] public async Task GetAll_AllModels_RespectsLimit(string modelName) { var entityType = ModelRegistry.Resolve(modelName)!; using var ctx = _fixture.CreateContext(); var repo = RepoHelper.Create(ctx, entityType); var records = await RepoHelper.GetAll(repo, limit: 5); Assert.NotNull(records); Assert.True(records.Count() <= 5, $"[{modelName}] GetAll superó el límite de 5"); } [Theory] [MemberData(nameof(AllModels))] public async Task GetPaginated_AllModels_Succeeds(string modelName) { var entityType = ModelRegistry.Resolve(modelName)!; using var ctx = _fixture.CreateContext(); var repo = RepoHelper.Create(ctx, entityType); var (records, total) = await RepoHelper.GetPaginated(repo, page: 1, pageSize: 5); Assert.NotNull(records); Assert.True(total >= 0, $"[{modelName}] total no puede ser negativo"); } [Theory] [MemberData(nameof(AllModels))] public async Task Search_AllModels_NoFilters_ReturnsResults(string modelName) { var entityType = ModelRegistry.Resolve(modelName)!; using var ctx = _fixture.CreateContext(); var repo = RepoHelper.Create(ctx, entityType); var records = await RepoHelper.Search(repo); Assert.NotNull(records); } }