persistence/DD.Persistence.Repository.Test/ChangeLogRepositoryTest.cs
2025-02-13 12:43:37 +05:00

125 lines
4.4 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 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<RepositoryTestFixture>
{
private readonly PersistencePostgresContext context;
private readonly IChangeLogRepository repo;
public ChangeLogRepositoryTest(RepositoryTestFixture fixture)
{
context = fixture.GetDbContext();
repo = new ChangeLogRepository(context);
}
//Task<int> MarkAsDeleted(Guid idEditor, IEnumerable<Guid> ids, string comment, CancellationToken token);
//Task<int> MarkAsDeleted(Guid idEditor, Guid idDiscriminator, string comment, CancellationToken token);
//Task<int> ClearAndAddRange(Guid idDiscriminator, ChangeLogCommitDto commitDto, CancellationToken token);
private async Task<ChangeLogCommitDto> ChangeLogItem(Guid idDiscriminator)
{
var idAuthor = Uuid7.Guid();
var changeLogItems = new List<ChangeLogValuesDto>()
{
new ChangeLogValuesDto(){
Id = Uuid7.Guid(),
Value = new Dictionary<string, object>(){
{ "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 result = await repo.AddRange(idDiscriminator, commit1, CancellationToken.None);
var commit2 = await ChangeLogItem(idDiscriminator);
result = await repo.AddRange(idDiscriminator, commit2, CancellationToken.None);
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();
var commit1 = await ChangeLogItem(idDiscriminator);
var result = await repo.AddRange(idDiscriminator, commit1, CancellationToken.None);
var commit2 = await ChangeLogItem(idDiscriminator);
result = await repo.AddRange(idDiscriminator, commit2, CancellationToken.None);
var commit3 = await ChangeLogItem(idDiscriminator);
result = await repo.AddRange(idDiscriminator, commit3, CancellationToken.None);
//act
var commit4 = await ChangeLogItem(idDiscriminator);
var items = await repo.GetGtDate(idDiscriminator, DateTimeOffset.UtcNow.AddDays(-1), CancellationToken.None);
commit4.ChangeLogItems = items;
result = await repo.ClearAndAddRange(idDiscriminator, commit4, CancellationToken.None);
//assert
//добавлены 3 записи и 3 коммита к ним,
//добавлена 1 новая запись и 1 коммит к ней
Assert.Equal(8, result);
var paginationRequest = new PaginationRequest();
var items2 = await repo.GetByDate(idDiscriminator, DateTimeOffset.UtcNow.AddMinutes(-10), paginationRequest, CancellationToken.None);
}
}