using DD.Persistence.Database.Model; using DD.Persistence.Database.Postgres.Repositories; using DD.Persistence.Database.Repositories; using DD.Persistence.Models.Common; using DD.Persistence.Models.Requests; using DD.Persistence.Models; using DD.Persistence.Repositories; using Shouldly; using System.Text.Json; using UuidExtensions; namespace DD.Persistence.Repository.Test; public class ChangeLogRepositoryTest : IClassFixture { private readonly PersistencePostgresContext context; private readonly IChangeLogRepository repo; public ChangeLogRepositoryTest(RepositoryTestFixture fixture) { context = fixture.GetDbContext(); repo = new ChangeLogRepository(context); } //Task MarkAsDeleted(Guid idEditor, IEnumerable ids, string comment, CancellationToken token); //Task MarkAsDeleted(Guid idEditor, Guid idDiscriminator, string comment, CancellationToken token); //Task ClearAndAddRange(Guid idDiscriminator, ChangeLogCommitDto commitDto, CancellationToken token); private async Task ChangeLogItem(Guid idDiscriminator) { var idAuthor = Uuid7.Guid(); var changeLogItems = new List() { new ChangeLogValuesDto(){ Id = Uuid7.Guid(), Value = new Dictionary(){ { "1", 1 }, { "2", 2 }, { "3", 3 } } } }; var commit = new ChangeLogCommitDto(idAuthor, "Комментарий 1", changeLogItems); return commit; } [Fact] public async Task AddRangeReturnSuccess() { //act var idDiscriminator = Uuid7.Guid(); var commit = await ChangeLogItem(idDiscriminator); var result = await repo.AddRange(idDiscriminator, commit, CancellationToken.None); //assert Assert.Equal(2, result); } [Fact] public async Task UpdateRangeReturnSuccess() { var idDiscriminator = Uuid7.Guid(); var commit1 = await ChangeLogItem(idDiscriminator); var commit2 = await ChangeLogItem(idDiscriminator); var items = await repo.GetGtDate(idDiscriminator, DateTimeOffset.UtcNow.AddDays(-1), CancellationToken.None); if (items == null) Assert.Fail("Не найдены элементы changeLog"); var updated = items.ToArray(); foreach (var item in updated) { item.Value.Add("4", 4); } //act var commit = new ChangeLogCommitDto(Uuid7.Guid(), "Комментарий 2", updated); result = await repo.UpdateRange(commit, CancellationToken.None); //assert //изменены 2 старые записи, //добавлены 2 новые записи //добавлен общий коммит //итого = 2+2+1 = 5 Assert.Equal(5, result); } [Fact] public async Task ClearAndAddRangeReturnSuccess() { var idDiscriminator = Uuid7.Guid(); await ChangeLogItem(idDiscriminator); await ChangeLogItem(idDiscriminator); await ChangeLogItem(idDiscriminator); //act var result = await repo.ClearAndAddRange(idDiscriminator, commit, CancellationToken.None); //assert Assert.Equal(2, result); } }