From 6873a32667e60fd0d723c8599b612b0e53bbc907 Mon Sep 17 00:00:00 2001 From: Olga Nemt Date: Fri, 27 Dec 2024 13:35:18 +0500 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=BD=D0=B6=D0=B5=D0=BA=D1=82=20=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D0=BE=D0=B9=20=D1=84=D0=B0=D0=B1=D1=80=D0=B8=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=BA=D0=BB=D0=B8=D0=B5=D0=BD=D1=82=D0=BE=D0=B2=20?= =?UTF-8?q?=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=BE=20PersistenceClientFactory?= =?UTF-8?q?=20=D0=B2=20=D0=B8=D0=BD=D1=82=D0=B5=D0=B3=D1=80=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D0=BE=D0=BD=D0=BD=D1=8B=D1=85=20=D1=82=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D0=B0=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Clients/Interfaces/ITimeSeriesClient.cs | 2 +- .../Refit/IRefitTechMessagesClient.cs | 2 +- .../Refit/IRefitTimeSeriesClient.cs | 4 +- .../Refit/IRefitTimestampedSetClient.cs | 2 +- .../Clients/TechMessagesClient.cs | 4 +- .../Clients/TimeSeriesClient.cs | 6 +- .../Clients/TimestampedSetClient.cs | 4 +- .../Clients/WitsDataClient.cs | 4 +- DD.Persistence.Client/DependencyInjection.cs | 11 +- .../PersistenceClientFactory.cs | 238 ++++----- .../Controllers/TechMessagesControllerTest.cs | 461 +++++++++--------- .../TimeSeriesBaseControllerTest.cs | 22 +- .../TimestampedSetControllerTest.cs | 11 +- .../Controllers/WitsDataControllerTest.cs | 15 +- 14 files changed, 399 insertions(+), 387 deletions(-) diff --git a/DD.Persistence.Client/Clients/Interfaces/ITimeSeriesClient.cs b/DD.Persistence.Client/Clients/Interfaces/ITimeSeriesClient.cs index 26bbfa6..db619e5 100644 --- a/DD.Persistence.Client/Clients/Interfaces/ITimeSeriesClient.cs +++ b/DD.Persistence.Client/Clients/Interfaces/ITimeSeriesClient.cs @@ -6,7 +6,7 @@ namespace DD.Persistence.Client.Clients.Interfaces; /// Клиент для работы с временными данными /// /// -public interface ITimeSeriesClient : IDisposable where TDto : class, new() +public interface ITimeSeriesClient : IDisposable where TDto : class, ITimeSeriesAbstractDto { /// /// Добавление записей diff --git a/DD.Persistence.Client/Clients/Interfaces/Refit/IRefitTechMessagesClient.cs b/DD.Persistence.Client/Clients/Interfaces/Refit/IRefitTechMessagesClient.cs index 2638600..1fe63c1 100644 --- a/DD.Persistence.Client/Clients/Interfaces/Refit/IRefitTechMessagesClient.cs +++ b/DD.Persistence.Client/Clients/Interfaces/Refit/IRefitTechMessagesClient.cs @@ -5,7 +5,7 @@ using Refit; namespace DD.Persistence.Client.Clients.Interfaces.Refit { - public interface IRefitTechMessagesClient : IDisposable + public interface IRefitTechMessagesClient : IRefitClient, IDisposable { private const string BaseRoute = "/api/techMessages"; diff --git a/DD.Persistence.Client/Clients/Interfaces/Refit/IRefitTimeSeriesClient.cs b/DD.Persistence.Client/Clients/Interfaces/Refit/IRefitTimeSeriesClient.cs index 2edc8fe..832cfde 100644 --- a/DD.Persistence.Client/Clients/Interfaces/Refit/IRefitTimeSeriesClient.cs +++ b/DD.Persistence.Client/Clients/Interfaces/Refit/IRefitTimeSeriesClient.cs @@ -2,8 +2,8 @@ using DD.Persistence.Models; using Refit; namespace DD.Persistence.Client.Clients.Interfaces.Refit; -public interface IRefitTimeSeriesClient : IDisposable - where TDto : class, new() +public interface IRefitTimeSeriesClient : IRefitClient, IDisposable + where TDto : class, ITimeSeriesAbstractDto { private const string BaseRoute = "/api/dataSaub"; diff --git a/DD.Persistence.Client/Clients/Interfaces/Refit/IRefitTimestampedSetClient.cs b/DD.Persistence.Client/Clients/Interfaces/Refit/IRefitTimestampedSetClient.cs index 14db284..6211d2d 100644 --- a/DD.Persistence.Client/Clients/Interfaces/Refit/IRefitTimestampedSetClient.cs +++ b/DD.Persistence.Client/Clients/Interfaces/Refit/IRefitTimestampedSetClient.cs @@ -3,7 +3,7 @@ using Refit; namespace DD.Persistence.Client.Clients.Interfaces.Refit; -public interface IRefitTimestampedSetClient : IDisposable +public interface IRefitTimestampedSetClient : IRefitClient, IDisposable { private const string baseUrl = "/api/TimestampedSet/{idDiscriminator}"; diff --git a/DD.Persistence.Client/Clients/TechMessagesClient.cs b/DD.Persistence.Client/Clients/TechMessagesClient.cs index c981569..e23c961 100644 --- a/DD.Persistence.Client/Clients/TechMessagesClient.cs +++ b/DD.Persistence.Client/Clients/TechMessagesClient.cs @@ -11,9 +11,9 @@ public class TechMessagesClient : BaseClient, ITechMessagesClient { private readonly IRefitTechMessagesClient refitTechMessagesClient; - public TechMessagesClient(IRefitTechMessagesClient refitTechMessagesClient, ILogger logger) : base(logger) + public TechMessagesClient(IRefitClientFactory refitTechMessagesClientFactory, ILogger logger) : base(logger) { - this.refitTechMessagesClient = refitTechMessagesClient; + this.refitTechMessagesClient = refitTechMessagesClientFactory.Create(); } public async Task> GetPage(PaginationRequest request, CancellationToken token) diff --git a/DD.Persistence.Client/Clients/TimeSeriesClient.cs b/DD.Persistence.Client/Clients/TimeSeriesClient.cs index 2c15938..c75ec81 100644 --- a/DD.Persistence.Client/Clients/TimeSeriesClient.cs +++ b/DD.Persistence.Client/Clients/TimeSeriesClient.cs @@ -5,13 +5,13 @@ using DD.Persistence.Client.Clients.Interfaces.Refit; using DD.Persistence.Models; namespace DD.Persistence.Client.Clients; -public class TimeSeriesClient : BaseClient, ITimeSeriesClient where TDto : class, new() +public class TimeSeriesClient : BaseClient, ITimeSeriesClient where TDto : class, ITimeSeriesAbstractDto { private readonly IRefitTimeSeriesClient timeSeriesClient; - public TimeSeriesClient(IRefitTimeSeriesClient refitTechMessagesClient, ILogger> logger) : base(logger) + public TimeSeriesClient(IRefitClientFactory> refitTechMessagesClientFactory, ILogger> logger) : base(logger) { - this.timeSeriesClient = refitTechMessagesClient; + this.timeSeriesClient = refitTechMessagesClientFactory.Create(); } public async Task AddRange(IEnumerable dtos, CancellationToken token) diff --git a/DD.Persistence.Client/Clients/TimestampedSetClient.cs b/DD.Persistence.Client/Clients/TimestampedSetClient.cs index 38828b6..7d1ba56 100644 --- a/DD.Persistence.Client/Clients/TimestampedSetClient.cs +++ b/DD.Persistence.Client/Clients/TimestampedSetClient.cs @@ -9,9 +9,9 @@ public class TimestampedSetClient : BaseClient, ITimestampedSetClient { private readonly IRefitTimestampedSetClient refitTimestampedSetClient; - public TimestampedSetClient(IRefitTimestampedSetClient refitTimestampedSetClient, ILogger logger) : base(logger) + public TimestampedSetClient(IRefitClientFactory refitTimestampedSetClientFactory, ILogger logger) : base(logger) { - this.refitTimestampedSetClient = refitTimestampedSetClient; + this.refitTimestampedSetClient = refitTimestampedSetClientFactory.Create(); } public async Task AddRange(Guid idDiscriminator, IEnumerable sets, CancellationToken token) diff --git a/DD.Persistence.Client/Clients/WitsDataClient.cs b/DD.Persistence.Client/Clients/WitsDataClient.cs index 3251194..e2703dc 100644 --- a/DD.Persistence.Client/Clients/WitsDataClient.cs +++ b/DD.Persistence.Client/Clients/WitsDataClient.cs @@ -9,9 +9,9 @@ public class WitsDataClient : BaseClient, IWitsDataClient { private readonly IRefitWitsDataClient refitWitsDataClient; - public WitsDataClient(IRefitWitsDataClient refitWitsDataClient, ILogger logger) : base(logger) + public WitsDataClient(IRefitClientFactory refitWitsDataClientFactory, ILogger logger) : base(logger) { - this.refitWitsDataClient = refitWitsDataClient; + this.refitWitsDataClient = refitWitsDataClientFactory.Create(); } public async Task AddRange(IEnumerable dtos, CancellationToken token) diff --git a/DD.Persistence.Client/DependencyInjection.cs b/DD.Persistence.Client/DependencyInjection.cs index 53791bb..eced892 100644 --- a/DD.Persistence.Client/DependencyInjection.cs +++ b/DD.Persistence.Client/DependencyInjection.cs @@ -1,5 +1,6 @@ using DD.Persistence.Client.Clients; using DD.Persistence.Client.Clients.Interfaces; +using DD.Persistence.Models; using Microsoft.Extensions.DependencyInjection; namespace DD.Persistence.Client; @@ -16,14 +17,14 @@ public static class DependencyInjection /// public static IServiceCollection AddPersistenceClients(this IServiceCollection services) { - services.AddSingleton(typeof(IRefitClientFactory<>), typeof(RefitClientFactory<>)); + services.AddTransient(typeof(IRefitClientFactory<>), typeof(RefitClientFactory<>)); services.AddTransient(); services.AddTransient(); services.AddTransient(); - //services.AddTransient(); - //services.AddTransient, TimeSeriesClient<>>(); - //services.AddTransient(); - //services.AddTransient(); + services.AddTransient(); + services.AddTransient, TimeSeriesClient>(); + services.AddTransient(); + services.AddTransient(); return services; } } diff --git a/DD.Persistence.Client/PersistenceClientFactory.cs b/DD.Persistence.Client/PersistenceClientFactory.cs index c48424c..99660e9 100644 --- a/DD.Persistence.Client/PersistenceClientFactory.cs +++ b/DD.Persistence.Client/PersistenceClientFactory.cs @@ -1,146 +1,146 @@ -using Microsoft.Extensions.Configuration; -using DD.Persistence.Client.Clients.Interfaces; -using DD.Persistence.Client.Clients; -using DD.Persistence.Client.Helpers; -using Refit; -using DD.Persistence.Factories; -using DD.Persistence.Client.Clients.Interfaces.Refit; -using Microsoft.Extensions.Logging; -using Microsoft.Extensions.DependencyInjection; -using System.Text.Json; +//using Microsoft.Extensions.Configuration; +//using DD.Persistence.Client.Clients.Interfaces; +//using DD.Persistence.Client.Clients; +//using DD.Persistence.Client.Helpers; +//using Refit; +//using DD.Persistence.Factories; +//using DD.Persistence.Client.Clients.Interfaces.Refit; +//using Microsoft.Extensions.Logging; +//using Microsoft.Extensions.DependencyInjection; +//using System.Text.Json; -namespace DD.Persistence.Client -{ - /// - /// Фабрика клиентов для доступа к Persistence - сервису - /// - public class PersistenceClientFactory - { - private static readonly JsonSerializerOptions JsonSerializerOptions = new() - { - PropertyNamingPolicy = JsonNamingPolicy.CamelCase, - PropertyNameCaseInsensitive = true - }; - private static readonly RefitSettings RefitSettings = new(new SystemTextJsonContentSerializer(JsonSerializerOptions)); - private readonly IServiceProvider provider; - private HttpClient httpClient; - public PersistenceClientFactory(IHttpClientFactory httpClientFactory, IServiceProvider provider, IConfiguration configuration) - { - this.provider = provider; +//namespace DD.Persistence.Client +//{ +// /// +// /// Фабрика клиентов для доступа к Persistence - сервису +// /// +// public class PersistenceClientFactory +// { +// private static readonly JsonSerializerOptions JsonSerializerOptions = new() +// { +// PropertyNamingPolicy = JsonNamingPolicy.CamelCase, +// PropertyNameCaseInsensitive = true +// }; +// private static readonly RefitSettings RefitSettings = new(new SystemTextJsonContentSerializer(JsonSerializerOptions)); +// private readonly IServiceProvider provider; +// private HttpClient httpClient; +// public PersistenceClientFactory(IHttpClientFactory httpClientFactory, IServiceProvider provider, IConfiguration configuration) +// { +// this.provider = provider; - httpClient = httpClientFactory.CreateClient(); +// httpClient = httpClientFactory.CreateClient(); - httpClient.Authorize(configuration); - } +// httpClient.Authorize(configuration); +// } - public PersistenceClientFactory(IHttpClientFactory httpClientFactory, IAuthTokenFactory authTokenFactory, IServiceProvider provider, IConfiguration configuration) - { - this.provider = provider; +// public PersistenceClientFactory(IHttpClientFactory httpClientFactory, IAuthTokenFactory authTokenFactory, IServiceProvider provider, IConfiguration configuration) +// { +// this.provider = provider; - httpClient = httpClientFactory.CreateClient(); +// httpClient = httpClientFactory.CreateClient(); - var token = authTokenFactory.GetToken(); - httpClient.Authorize(token); - } +// var token = authTokenFactory.GetToken(); +// httpClient.Authorize(token); +// } - /// - /// Получить клиент для работы с уставками - /// - /// - //public ISetpointClient GetSetpointClient() - //{ - // var logger = provider.GetRequiredService>(); +// /// +// /// Получить клиент для работы с уставками +// /// +// /// +// //public ISetpointClient GetSetpointClient() +// //{ +// // var logger = provider.GetRequiredService>(); - // var restClient = RestService.For(httpClient, RefitSettings); - // var client = new SetpointClient(restClient, logger); +// // var restClient = RestService.For(httpClient, RefitSettings); +// // var client = new SetpointClient(restClient, logger); - // return client; - //} +// // return client; +// //} - /// - /// Получить клиент для работы с технологическими сообщениями - /// - /// - public ITechMessagesClient GetTechMessagesClient() - { - var logger = provider.GetRequiredService>(); +// /// +// /// Получить клиент для работы с технологическими сообщениями +// /// +// /// +// //public ITechMessagesClient GetTechMessagesClient() +// //{ +// // var logger = provider.GetRequiredService>(); - var restClient = RestService.For(httpClient, RefitSettings); - var client = new TechMessagesClient(restClient, logger); +// // var restClient = RestService.For(httpClient, RefitSettings); +// // var client = new TechMessagesClient(restClient, logger); - return client; - } +// // return client; +// //} - /// - /// Получить клиент для работы с временными данными - /// - /// - /// - public ITimeSeriesClient GetTimeSeriesClient() - where TDto : class, new() - { - var logger = provider.GetRequiredService>>(); +// /// +// /// Получить клиент для работы с временными данными +// /// +// /// +// /// +// //public ITimeSeriesClient GetTimeSeriesClient() +// // where TDto : class, new() +// //{ +// // var logger = provider.GetRequiredService>>(); - var restClient = RestService.For>(httpClient, RefitSettings); - var client = new TimeSeriesClient(restClient, logger); +// // var restClient = RestService.For>(httpClient, RefitSettings); +// // var client = new TimeSeriesClient(restClient, logger); - return client; - } +// // return client; +// //} - /// - /// Получить клиент для работы с данными с отметкой времени - /// - /// - public ITimestampedSetClient GetTimestampedSetClient() - { - var logger = provider.GetRequiredService>(); +// /// +// /// Получить клиент для работы с данными с отметкой времени +// /// +// /// +// //public ITimestampedSetClient GetTimestampedSetClient() +// //{ +// // var logger = provider.GetRequiredService>(); - var restClient = RestService.For(httpClient, RefitSettings); - var client = new TimestampedSetClient(restClient, logger); +// // var restClient = RestService.For(httpClient, RefitSettings); +// // var client = new TimestampedSetClient(restClient, logger); - return client; - } +// // return client; +// //} - /// - /// Получить клиент для работы с записями ChangeLog - /// - /// - //public IChangeLogClient GetChangeLogClient() - //{ - // var logger = provider.GetRequiredService>(); +// /// +// /// Получить клиент для работы с записями ChangeLog +// /// +// /// +// //public IChangeLogClient GetChangeLogClient() +// //{ +// // var logger = provider.GetRequiredService>(); - // var restClient = RestService.For(httpClient, RefitSettings); - // var client = new ChangeLogClient(restClient, logger); +// // var restClient = RestService.For(httpClient, RefitSettings); +// // var client = new ChangeLogClient(restClient, logger); - // return client; - //} +// // return client; +// //} - /// - /// Получить клиент для работы c параметрами Wits - /// - /// - public IWitsDataClient GetWitsDataClient() - { - var logger = provider.GetRequiredService>(); +// /// +// /// Получить клиент для работы c параметрами Wits +// /// +// /// +// //public IWitsDataClient GetWitsDataClient() +// //{ +// // var logger = provider.GetRequiredService>(); - var restClient = RestService.For(httpClient, RefitSettings); - var client = new WitsDataClient(restClient, logger); +// // var restClient = RestService.For(httpClient, RefitSettings); +// // var client = new WitsDataClient(restClient, logger); - return client; - } +// // return client; +// //} - /// - /// Получить клиент для работы c системами - /// - /// - //public IDataSourceSystemClient GetDataSourceSystemClient() - //{ - // var logger = provider.GetRequiredService>(); +// /// +// /// Получить клиент для работы c системами +// /// +// /// +// //public IDataSourceSystemClient GetDataSourceSystemClient() +// //{ +// // var logger = provider.GetRequiredService>(); - // var restClient = RestService.For(httpClient, RefitSettings); - // var client = new DataSourceSystemClient(restClient, logger); +// // var restClient = RestService.For(httpClient, RefitSettings); +// // var client = new DataSourceSystemClient(restClient, logger); - // return client; - //} - } -} +// // return client; +// //} +// } +//} diff --git a/DD.Persistence.IntegrationTests/Controllers/TechMessagesControllerTest.cs b/DD.Persistence.IntegrationTests/Controllers/TechMessagesControllerTest.cs index bdcddb9..51afc02 100644 --- a/DD.Persistence.IntegrationTests/Controllers/TechMessagesControllerTest.cs +++ b/DD.Persistence.IntegrationTests/Controllers/TechMessagesControllerTest.cs @@ -1,38 +1,41 @@ -using Microsoft.Extensions.Caching.Memory; -using Microsoft.Extensions.DependencyInjection; -using DD.Persistence.Client; +using DD.Persistence.Client; +using DD.Persistence.Client.Clients; using DD.Persistence.Client.Clients.Interfaces; +using DD.Persistence.Client.Clients.Interfaces.Refit; using DD.Persistence.Database.Entity; using DD.Persistence.Models; using DD.Persistence.Models.Enumerations; using DD.Persistence.Models.Requests; -using System.Net; +using Microsoft.Extensions.Caching.Memory; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; using Xunit; namespace DD.Persistence.IntegrationTests.Controllers { - public class TechMessagesControllerTest : BaseIntegrationTest - { - private static readonly string SystemCacheKey = $"{typeof(Database.Entity.DataSourceSystem).FullName}CacheKey"; - private readonly ITechMessagesClient techMessagesClient; - private readonly IMemoryCache memoryCache; - public TechMessagesControllerTest(WebAppFactoryFixture factory) : base(factory) - { - var scope = factory.Services.CreateScope(); - var persistenceClientFactory = scope.ServiceProvider - .GetRequiredService(); + public class TechMessagesControllerTest : BaseIntegrationTest + { + private static readonly string SystemCacheKey = $"{typeof(Database.Entity.DataSourceSystem).FullName}CacheKey"; + private readonly ITechMessagesClient techMessagesClient; + private readonly IMemoryCache memoryCache; + public TechMessagesControllerTest(WebAppFactoryFixture factory) : base(factory) + { + var refitClientFactory = scope.ServiceProvider + .GetRequiredService>(); + var logger = scope.ServiceProvider.GetRequiredService>(); - techMessagesClient = persistenceClientFactory.GetTechMessagesClient(); - memoryCache = scope.ServiceProvider.GetRequiredService(); - } + techMessagesClient = scope.ServiceProvider + .GetRequiredService(); + memoryCache = scope.ServiceProvider.GetRequiredService(); + } - [Fact] - public async Task GetPage_returns_success() - { - //arrange - memoryCache.Remove(SystemCacheKey); - dbContext.CleanupDbSet(); - dbContext.CleanupDbSet(); + [Fact] + public async Task GetPage_returns_success() + { + //arrange + memoryCache.Remove(SystemCacheKey); + dbContext.CleanupDbSet(); + dbContext.CleanupDbSet(); var requestDto = new PaginationRequest() { @@ -44,235 +47,235 @@ namespace DD.Persistence.IntegrationTests.Controllers //act var response = await techMessagesClient.GetPage(requestDto, CancellationToken.None); - //assert - Assert.NotNull(response); - Assert.Empty(response.Items); - Assert.Equal(requestDto.Skip, response.Skip); - Assert.Equal(requestDto.Take, response.Take); - } + //assert + Assert.NotNull(response); + Assert.Empty(response.Items); + Assert.Equal(requestDto.Skip, response.Skip); + Assert.Equal(requestDto.Take, response.Take); + } - [Fact] - public async Task GetPage_AfterSave_returns_success() - { - //arrange - var dtos = await InsertRange(Guid.NewGuid()); - var dtosCount = dtos.Count(); - var requestDto = new PaginationRequest() - { - Skip = 0, - Take = 2, - SortSettings = nameof(TechMessage.CategoryId) - }; + [Fact] + public async Task GetPage_AfterSave_returns_success() + { + //arrange + var dtos = await InsertRange(Guid.NewGuid()); + var dtosCount = dtos.Count(); + var requestDto = new PaginationRequest() + { + Skip = 0, + Take = 2, + SortSettings = nameof(TechMessage.CategoryId) + }; //act var response = await techMessagesClient.GetPage(requestDto, CancellationToken.None); - //assert - Assert.NotNull(response); - Assert.Equal(dtosCount, response.Count); - } - - [Fact] - public async Task InsertRange_returns_success() - { - await InsertRange(Guid.NewGuid()); - } - - [Fact] - public async Task InsertRange_returns_BadRequest() - { - //arrange - const string exceptionMessage = "Ошибка валидации, формата или маршрутизации запроса"; - var systemId = Guid.NewGuid(); - var dtos = new List() - { - new TechMessageDto() - { - EventId = Guid.NewGuid(), - CategoryId = -1, // < 0 - Timestamp = DateTimeOffset.UtcNow, - Text = string.Empty, // length < 0 - EventState = EventState.Triggered - } - }; - - try - { - //act - var response = await techMessagesClient.AddRange(systemId, dtos, CancellationToken.None); - } - catch (Exception ex) - { - //assert - Assert.Equal(exceptionMessage, ex.Message); - } - } - - [Fact] - public async Task GetSystems_returns_success() - { - //arrange - memoryCache.Remove(SystemCacheKey); - dbContext.CleanupDbSet(); - dbContext.CleanupDbSet(); - - //act - var response = await techMessagesClient.GetSystems(CancellationToken.None); - - //assert - Assert.NotNull(response); - Assert.Empty(response); - } - - [Fact] - public async Task GetSystems_AfterSave_returns_success() - { - //arrange - await InsertRange(Guid.NewGuid()); - - //act - var response = await techMessagesClient.GetSystems(CancellationToken.None); - - //assert - Assert.NotNull(response); - var expectedSystemCount = 1; - Assert.Equal(expectedSystemCount, response!.Count()); - } - - [Fact] - public async Task GetStatistics_returns_success() - { - //arrange - memoryCache.Remove(SystemCacheKey); - dbContext.CleanupDbSet(); - dbContext.CleanupDbSet(); - - var categoryIds = new [] { 1, 2 }; - var systemIds = new [] { Guid.NewGuid() }; - - //act - var response = await techMessagesClient.GetStatistics(systemIds, categoryIds, CancellationToken.None); - - //assert - Assert.NotNull(response); - Assert.Empty(response); - } - - [Fact] - public async Task GetStatistics_AfterSave_returns_success() - { - //arrange - var categoryIds = new[] { 1 }; - var systemId = Guid.NewGuid(); - var dtos = await InsertRange(systemId); - var filteredDtos = dtos.Where(e => categoryIds.Contains(e.CategoryId)); - - //act - var response = await techMessagesClient.GetStatistics([systemId], categoryIds, CancellationToken.None); - - //assert - Assert.NotNull(response); - Assert.NotEmpty(response); - var categories = response - .FirstOrDefault()!.Categories - .Count(); - Assert.Equal(filteredDtos.Count(), categories); - } - - [Fact] - public async Task GetDatesRange_returns_NoContent() - { - //arrange - memoryCache.Remove(SystemCacheKey); - dbContext.CleanupDbSet(); - dbContext.CleanupDbSet(); - - //act - var response = await techMessagesClient.GetDatesRangeAsync(CancellationToken.None); - //assert - Assert.Null(response); - } + Assert.NotNull(response); + Assert.Equal(dtosCount, response.Count); + } - [Fact] - public async Task GetDatesRange_AfterSave_returns_success() - { - //arrange - await InsertRange(Guid.NewGuid()); + [Fact] + public async Task InsertRange_returns_success() + { + await InsertRange(Guid.NewGuid()); + } + + [Fact] + public async Task InsertRange_returns_BadRequest() + { + //arrange + const string exceptionMessage = "Ошибка валидации, формата или маршрутизации запроса"; + var systemId = Guid.NewGuid(); + var dtos = new List() + { + new TechMessageDto() + { + EventId = Guid.NewGuid(), + CategoryId = -1, // < 0 + Timestamp = DateTimeOffset.UtcNow, + Text = string.Empty, // length < 0 + EventState = EventState.Triggered + } + }; + + try + { + //act + var response = await techMessagesClient.AddRange(systemId, dtos, CancellationToken.None); + } + catch (Exception ex) + { + //assert + Assert.Equal(exceptionMessage, ex.Message); + } + } + + [Fact] + public async Task GetSystems_returns_success() + { + //arrange + memoryCache.Remove(SystemCacheKey); + dbContext.CleanupDbSet(); + dbContext.CleanupDbSet(); + + //act + var response = await techMessagesClient.GetSystems(CancellationToken.None); + + //assert + Assert.NotNull(response); + Assert.Empty(response); + } + + [Fact] + public async Task GetSystems_AfterSave_returns_success() + { + //arrange + await InsertRange(Guid.NewGuid()); + + //act + var response = await techMessagesClient.GetSystems(CancellationToken.None); + + //assert + Assert.NotNull(response); + var expectedSystemCount = 1; + Assert.Equal(expectedSystemCount, response!.Count()); + } + + [Fact] + public async Task GetStatistics_returns_success() + { + //arrange + memoryCache.Remove(SystemCacheKey); + dbContext.CleanupDbSet(); + dbContext.CleanupDbSet(); + + var categoryIds = new[] { 1, 2 }; + var systemIds = new[] { Guid.NewGuid() }; + + //act + var response = await techMessagesClient.GetStatistics(systemIds, categoryIds, CancellationToken.None); + + //assert + Assert.NotNull(response); + Assert.Empty(response); + } + + [Fact] + public async Task GetStatistics_AfterSave_returns_success() + { + //arrange + var categoryIds = new[] { 1 }; + var systemId = Guid.NewGuid(); + var dtos = await InsertRange(systemId); + var filteredDtos = dtos.Where(e => categoryIds.Contains(e.CategoryId)); + + //act + var response = await techMessagesClient.GetStatistics([systemId], categoryIds, CancellationToken.None); + + //assert + Assert.NotNull(response); + Assert.NotEmpty(response); + var categories = response + .FirstOrDefault()!.Categories + .Count(); + Assert.Equal(filteredDtos.Count(), categories); + } + + [Fact] + public async Task GetDatesRange_returns_NoContent() + { + //arrange + memoryCache.Remove(SystemCacheKey); + dbContext.CleanupDbSet(); + dbContext.CleanupDbSet(); //act var response = await techMessagesClient.GetDatesRangeAsync(CancellationToken.None); - //assert - Assert.NotNull(response); - Assert.NotNull(response?.From); - Assert.NotNull(response?.To); - } + //assert + Assert.Null(response); + } - // [Fact] - // public async Task GetPart_returns_success() - // { - // //arrange - // var dateBegin = DateTimeOffset.UtcNow; - // var take = 2; + [Fact] + public async Task GetDatesRange_AfterSave_returns_success() + { + //arrange + await InsertRange(Guid.NewGuid()); - // //act - // var response = await techMessagesClient.GetPart(dateBegin, take, CancellationToken.None); + //act + var response = await techMessagesClient.GetDatesRangeAsync(CancellationToken.None); - // //assert - // Assert.NotNull(response); - // Assert.Empty(response); - //} + //assert + Assert.NotNull(response); + Assert.NotNull(response?.From); + Assert.NotNull(response?.To); + } - [Fact] - public async Task GetPart_AfterSave_returns_success() - { - //arrange - var dateBegin = DateTimeOffset.UtcNow; - var take = 1; - await InsertRange(Guid.NewGuid()); + // [Fact] + // public async Task GetPart_returns_success() + // { + // //arrange + // var dateBegin = DateTimeOffset.UtcNow; + // var take = 2; + + // //act + // var response = await techMessagesClient.GetPart(dateBegin, take, CancellationToken.None); + + // //assert + // Assert.NotNull(response); + // Assert.Empty(response); + //} + + [Fact] + public async Task GetPart_AfterSave_returns_success() + { + //arrange + var dateBegin = DateTimeOffset.UtcNow; + var take = 1; + await InsertRange(Guid.NewGuid()); //act var response = await techMessagesClient.GetPart(dateBegin, take, CancellationToken.None); - //assert - Assert.NotNull(response); - Assert.NotEmpty(response); - } + //assert + Assert.NotNull(response); + Assert.NotEmpty(response); + } - private async Task> InsertRange(Guid systemId) - { - //arrange - memoryCache.Remove(SystemCacheKey); - dbContext.CleanupDbSet(); - dbContext.CleanupDbSet(); + private async Task> InsertRange(Guid systemId) + { + //arrange + memoryCache.Remove(SystemCacheKey); + dbContext.CleanupDbSet(); + dbContext.CleanupDbSet(); - var dtos = new List() - { - new TechMessageDto() - { - EventId = Guid.NewGuid(), - CategoryId = 1, - Timestamp = DateTimeOffset.UtcNow, - Text = nameof(TechMessageDto.Text), - EventState = Models.Enumerations.EventState.Triggered - }, - new TechMessageDto() - { - EventId = Guid.NewGuid(), - CategoryId = 2, - Timestamp = DateTimeOffset.UtcNow, - Text = nameof(TechMessageDto.Text), - EventState = Models.Enumerations.EventState.Triggered - } - }; + var dtos = new List() + { + new TechMessageDto() + { + EventId = Guid.NewGuid(), + CategoryId = 1, + Timestamp = DateTimeOffset.UtcNow, + Text = nameof(TechMessageDto.Text), + EventState = Models.Enumerations.EventState.Triggered + }, + new TechMessageDto() + { + EventId = Guid.NewGuid(), + CategoryId = 2, + Timestamp = DateTimeOffset.UtcNow, + Text = nameof(TechMessageDto.Text), + EventState = Models.Enumerations.EventState.Triggered + } + }; - //act - var response = await techMessagesClient.AddRange(systemId, dtos, CancellationToken.None); + //act + var response = await techMessagesClient.AddRange(systemId, dtos, CancellationToken.None); - //assert - Assert.Equal(dtos.Count, response); + //assert + Assert.Equal(dtos.Count, response); return dtos; } diff --git a/DD.Persistence.IntegrationTests/Controllers/TimeSeriesBaseControllerTest.cs b/DD.Persistence.IntegrationTests/Controllers/TimeSeriesBaseControllerTest.cs index 7d75875..e8f05ce 100644 --- a/DD.Persistence.IntegrationTests/Controllers/TimeSeriesBaseControllerTest.cs +++ b/DD.Persistence.IntegrationTests/Controllers/TimeSeriesBaseControllerTest.cs @@ -1,16 +1,19 @@ +using DD.Persistence.Client; +using DD.Persistence.Client.Clients; +using DD.Persistence.Client.Clients.Interfaces; +using DD.Persistence.Client.Clients.Interfaces.Refit; +using DD.Persistence.Database.Model; +using DD.Persistence.Models; using Mapster; using Microsoft.Extensions.DependencyInjection; -using DD.Persistence.Client; -using DD.Persistence.Client.Clients.Interfaces; -using DD.Persistence.Database.Model; -using System.Net; +using Microsoft.Extensions.Logging; using Xunit; namespace DD.Persistence.IntegrationTests.Controllers; public abstract class TimeSeriesBaseControllerTest : BaseIntegrationTest where TEntity : class, ITimestampedData, new() - where TDto : class, new() + where TDto : class, ITimeSeriesAbstractDto, new() { private readonly ITimeSeriesClient timeSeriesClient; @@ -18,11 +21,12 @@ public abstract class TimeSeriesBaseControllerTest : BaseIntegrat { dbContext.CleanupDbSet(); - var scope = factory.Services.CreateScope(); - var persistenceClientFactory = scope.ServiceProvider - .GetRequiredService(); + var refitClientFactory = scope.ServiceProvider + .GetRequiredService>>(); + var logger = scope.ServiceProvider.GetRequiredService>>(); - timeSeriesClient = persistenceClientFactory.GetTimeSeriesClient(); + timeSeriesClient = scope.ServiceProvider + .GetRequiredService>(); } public async Task InsertRangeSuccess(TDto dto) diff --git a/DD.Persistence.IntegrationTests/Controllers/TimestampedSetControllerTest.cs b/DD.Persistence.IntegrationTests/Controllers/TimestampedSetControllerTest.cs index 567b8c8..1e84e9d 100644 --- a/DD.Persistence.IntegrationTests/Controllers/TimestampedSetControllerTest.cs +++ b/DD.Persistence.IntegrationTests/Controllers/TimestampedSetControllerTest.cs @@ -3,6 +3,9 @@ using DD.Persistence.Client; using DD.Persistence.Client.Clients.Interfaces; using DD.Persistence.Models; using Xunit; +using DD.Persistence.Client.Clients.Interfaces.Refit; +using DD.Persistence.Client.Clients; +using Microsoft.Extensions.Logging; namespace DD.Persistence.IntegrationTests.Controllers; public class TimestampedSetControllerTest : BaseIntegrationTest @@ -11,10 +14,12 @@ public class TimestampedSetControllerTest : BaseIntegrationTest public TimestampedSetControllerTest(WebAppFactoryFixture factory) : base(factory) { - var persistenceClientFactory = scope.ServiceProvider - .GetRequiredService(); + var refitClientFactory = scope.ServiceProvider + .GetRequiredService>(); + var logger = scope.ServiceProvider.GetRequiredService>(); - client = persistenceClientFactory.GetTimestampedSetClient(); + client = scope.ServiceProvider + .GetRequiredService(); } [Fact] diff --git a/DD.Persistence.IntegrationTests/Controllers/WitsDataControllerTest.cs b/DD.Persistence.IntegrationTests/Controllers/WitsDataControllerTest.cs index 6b33804..13e1116 100644 --- a/DD.Persistence.IntegrationTests/Controllers/WitsDataControllerTest.cs +++ b/DD.Persistence.IntegrationTests/Controllers/WitsDataControllerTest.cs @@ -1,13 +1,12 @@ -using Microsoft.Extensions.DependencyInjection; +using DD.Persistence.Client; +using DD.Persistence.Client.Clients; +using DD.Persistence.Client.Clients.Interfaces; +using DD.Persistence.Client.Clients.Interfaces.Refit; using DD.Persistence.Database.Entity; using DD.Persistence.Models; -using System.Net; -using Xunit; -using DD.Persistence.Client.Clients.Interfaces; -using DD.Persistence.Client; -using DD.Persistence.Client.Clients.Interfaces.Refit; -using DD.Persistence.Client.Clients; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; +using Xunit; namespace DD.Persistence.IntegrationTests.Controllers; public class WitsDataControllerTest : BaseIntegrationTest @@ -17,7 +16,7 @@ public class WitsDataControllerTest : BaseIntegrationTest public WitsDataControllerTest(WebAppFactoryFixture factory) : base(factory) { var refitClientFactory = scope.ServiceProvider - .GetRequiredService>(); + .GetRequiredService>(); var logger = scope.ServiceProvider.GetRequiredService>(); witsDataClient = scope.ServiceProvider