From c0d28efc7048ce4750bd253fd170af9a9e339f01 Mon Sep 17 00:00:00 2001 From: Olga Nemt Date: Wed, 19 Feb 2025 17:44:48 +0500 Subject: [PATCH] =?UTF-8?q?=D0=AE=D0=BD=D0=B8=D1=82-=D1=82=D0=B5=D1=81?= =?UTF-8?q?=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DD.Persistence.Test/ChangeLogTest.cs | 249 ++++++++++++++++++ .../DD.Persistence.Test.csproj | 1 + 2 files changed, 250 insertions(+) create mode 100644 DD.Persistence.Test/ChangeLogTest.cs diff --git a/DD.Persistence.Test/ChangeLogTest.cs b/DD.Persistence.Test/ChangeLogTest.cs new file mode 100644 index 0000000..d504dbe --- /dev/null +++ b/DD.Persistence.Test/ChangeLogTest.cs @@ -0,0 +1,249 @@ +using DD.Persistence.API.Services; +using DD.Persistence.Database.Entity; +using DD.Persistence.Models; +using DD.Persistence.Models.Common; +using DD.Persistence.Models.Requests; +using DD.Persistence.Repositories; +using DD.Persistence.Services; +using Microsoft.Extensions.Caching.Memory; +using Newtonsoft.Json.Linq; +using NSubstitute; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UuidExtensions; +using static NSubstitute.Arg; + +namespace DD.Persistence.Test; +public class ChangeLogTest +{ + private readonly IChangeLogCommitRepository changeLogCommitRepository = Substitute.For(); + private readonly IChangeLogRepository changeLogRepository = Substitute.For(); + private readonly IMemoryCache memoryCache = Substitute.For(); + private ChangeLogService service; + + public ChangeLogTest() + { + service = new ChangeLogService(memoryCache, changeLogCommitRepository, changeLogRepository); + } + [Fact] + public async Task AddRange() + { + var discriminatorId = Uuid7.Guid(); + var expectedCommitId = Uuid7.Guid(); + var comment = "Добавление нескольких значений"; + var commit = new ChangeLogCommitDto(expectedCommitId, comment); + var dtos = GenerateChangeLogValuesDto(2); + + changeLogCommitRepository.Add(Arg.Any(), Arg.Any()).Returns(Uuid7.Guid()); + changeLogRepository + .AddRange( + Arg.Any(), + Arg.Any(), + Arg.Any>(), + Arg.Any()) + .Returns(2); + + var addRangeResult = await service + .AddRange(discriminatorId, commit, dtos, CancellationToken.None); + + await changeLogCommitRepository.Received(1).Add(commit, CancellationToken.None); + await changeLogRepository.Received(1).AddRange(discriminatorId, commit, dtos, CancellationToken.None); + } + + [Fact] + public async Task UpdateRange() + { + var discriminatorId = Uuid7.Guid(); + var expectedCommitId = Uuid7.Guid(); + var comment = "Изменение нескольких значений"; + var commit = new ChangeLogCommitDto(expectedCommitId, comment); + var dtos = GenerateChangeLogValuesDto(2); + + changeLogCommitRepository.Add(Arg.Any(), Arg.Any()).Returns(Uuid7.Guid()); + changeLogRepository + .UpdateRange( + Arg.Any(), + Arg.Any>(), + Arg.Any()) + .Returns(2); + + var updateRangeResult = await service + .UpdateRange(commit, dtos, CancellationToken.None); + + await changeLogCommitRepository.Received(1).Add(commit, CancellationToken.None); + await changeLogRepository.Received(1).UpdateRange(commit, dtos, CancellationToken.None); + } + + [Fact] + public async Task MarkAsDeleted() + { + var discriminatorId = Uuid7.Guid(); + var expectedCommitId = Uuid7.Guid(); + var comment = "Удаление нескольких значений"; + var commit = new ChangeLogCommitDto(expectedCommitId, comment); + var dtos = GenerateChangeLogValuesDto(2); + var dtoIds = dtos.Select(d => d.Id); + + changeLogCommitRepository.Add(Arg.Any(), Arg.Any()).Returns(Uuid7.Guid()); + changeLogRepository + .MarkAsDeleted( + Arg.Any(), + Arg.Any>(), + Arg.Any(), + Arg.Any()) + .Returns(2); + + var markAsDeletedResult = await service + .MarkAsDeleted(dtoIds, commit, CancellationToken.None); + + await changeLogCommitRepository.Received(1).Add(commit, CancellationToken.None); + await changeLogRepository.Received(1).MarkAsDeleted(commit.Id, dtoIds, commit.Creation, CancellationToken.None); + } + + [Fact] + public async Task ClearAndAddRange() + { + var discriminatorId = Uuid7.Guid(); + var expectedCommitId = Uuid7.Guid(); + var comment = "Удаление и добавление нескольких значений"; + var commit = new ChangeLogCommitDto(expectedCommitId, comment); + var dtos = GenerateChangeLogValuesDto(2); + var dtoIds = dtos.Select(d => d.Id); + + changeLogCommitRepository.Add(Arg.Any(), Arg.Any()).Returns(Uuid7.Guid()); + changeLogRepository + .ClearAndAddRange( + Arg.Any(), + Arg.Any(), + Arg.Any>(), + Arg.Any()) + .Returns(2); + + var clearAndAddResult = await service + .ClearAndAddRange(discriminatorId, commit, dtos, CancellationToken.None); + + await changeLogCommitRepository.Received(1).Add(commit, CancellationToken.None); + await changeLogRepository.Received(1).ClearAndAddRange(discriminatorId, commit, dtos, CancellationToken.None); + } + + [Fact] + public async Task GetByDate() + { + var discriminatorId = Uuid7.Guid(); + var paginationRequest = new PaginationRequest() + { + Skip = 0, + Take = 1000 + }; + var dtos = GenerateChangeLogValuesDto(5); + var items = new PaginationContainer() + { + Take = paginationRequest.Take, + Skip = paginationRequest.Skip, + Items = dtos, + Count = 10 + }; + var momentDate = DateTime.UtcNow; + + changeLogRepository + .GetByDate( + Arg.Any(), + Arg.Any(), + Arg.Any(), + Arg.Any()) + .Returns(items); + + var actualItems = await service + .GetByDate(discriminatorId, momentDate, paginationRequest, CancellationToken.None); + + await changeLogRepository.Received(1).GetByDate(discriminatorId, momentDate, paginationRequest, CancellationToken.None); + + } + + [Fact] + public async Task GetChangeLogForInterval() + { + var discriminatorId = Uuid7.Guid(); + var dtos = GenerateChangeLogDto(5); +; + var dateBegin = DateTimeOffset.UtcNow.AddDays(-5); + var dateEnd = DateTimeOffset.UtcNow; + + changeLogRepository + .GetChangeLogForInterval( + Arg.Any(), + Arg.Any(), + Arg.Any(), + Arg.Any()) + .Returns(dtos); + + var actualItems = await service + .GetChangeLogForInterval(discriminatorId, dateBegin, dateEnd, CancellationToken.None); + + await changeLogRepository.Received(1).GetChangeLogForInterval(discriminatorId, dateBegin, dateEnd, CancellationToken.None); + + } + + [Fact] + public async Task GetDatesChange() + { + var discriminatorId = Uuid7.Guid(); + + var dateBegin = DateTimeOffset.UtcNow.AddDays(-5); + var dateEnd = DateTimeOffset.UtcNow; + + var dateOnlyBegin = new DateOnly(dateBegin.Year, dateBegin.Month, dateBegin.Day); + var dateOnlyEnd = new DateOnly(dateEnd.Year, dateEnd.Month, dateEnd.Day); + + var dtos = new List() { dateOnlyBegin, dateOnlyEnd }; + + changeLogRepository + .GetDatesChange( + Arg.Any(), + Arg.Any()) + .Returns(dtos); + + var actualItems = await service + .GetDatesChange(discriminatorId, CancellationToken.None); + + await changeLogRepository.Received(1).GetDatesChange(discriminatorId, CancellationToken.None); + + } + + + private IEnumerable GenerateChangeLogValuesDto(int count) + { + var items = new List(); + for (int i = 0; i < count; i++) + { + items.Add(new ChangeLogValuesDto() + { + + Id = Uuid7.Guid(), + Value = new Dictionary + { + { "1", 1 }, + { "2", 2 } + } + + }); + } + return items; + } + + private IEnumerable GenerateChangeLogDto(int count) + { + var items = new List(); + for (int i = 0; i < count; i++) + { + items.Add(new ChangeLogDto() + { + Id = Uuid7.Guid(), + }); + } + return items; + } +} diff --git a/DD.Persistence.Test/DD.Persistence.Test.csproj b/DD.Persistence.Test/DD.Persistence.Test.csproj index f71b186..07e0780 100644 --- a/DD.Persistence.Test/DD.Persistence.Test.csproj +++ b/DD.Persistence.Test/DD.Persistence.Test.csproj @@ -16,6 +16,7 @@ +