diff --git a/AsbCloudInfrastructure.Tests/AsbCloudInfrastructure.Tests.csproj b/AsbCloudInfrastructure.Tests/AsbCloudInfrastructure.Tests.csproj index a9cf66be..3a1d909a 100644 --- a/AsbCloudInfrastructure.Tests/AsbCloudInfrastructure.Tests.csproj +++ b/AsbCloudInfrastructure.Tests/AsbCloudInfrastructure.Tests.csproj @@ -7,11 +7,15 @@ + + + + diff --git a/AsbCloudInfrastructure.Tests/MapData/DataSaubStatDrillingQualityDtoMap.cs b/AsbCloudInfrastructure.Tests/MapData/DataSaubStatDrillingQualityDtoMap.cs new file mode 100644 index 00000000..d6499973 --- /dev/null +++ b/AsbCloudInfrastructure.Tests/MapData/DataSaubStatDrillingQualityDtoMap.cs @@ -0,0 +1,16 @@ +using AsbCloudApp.Data; +using CsvHelper.Configuration; + +namespace AsbCloudInfrastructure.Tests.MapData +{ + public class DataSaubStatDrillingQualityDtoMap : ClassMap + { + public DataSaubStatDrillingQualityDtoMap() + { + Map(m => m.IdTelemetry).Name("id_telemetry"); + Map(m => m.DepthStart).Name("depth_start"); + Map(m => m.DepthEnd).Name("depth_end"); + Map(m => m.DepthDrillingQuality).Name("depth_drilling_quality"); + } + } +} diff --git a/AsbCloudInfrastructure.Tests/Services/DataSaubStat/TelemetryDataSaubMap.cs b/AsbCloudInfrastructure.Tests/MapData/TelemetryDataSaubMap.cs similarity index 92% rename from AsbCloudInfrastructure.Tests/Services/DataSaubStat/TelemetryDataSaubMap.cs rename to AsbCloudInfrastructure.Tests/MapData/TelemetryDataSaubMap.cs index aa23cf94..9b679a55 100644 --- a/AsbCloudInfrastructure.Tests/Services/DataSaubStat/TelemetryDataSaubMap.cs +++ b/AsbCloudInfrastructure.Tests/MapData/TelemetryDataSaubMap.cs @@ -1,13 +1,7 @@ using AsbCloudApp.Data.SAUB; using CsvHelper.Configuration; -using AsbCloudInfrastructure.Services; -using CsvHelper.Configuration.Attributes; -using Mapster; -using Microsoft.EntityFrameworkCore; -using System; -using System.Text.Json.Serialization; -namespace AsbCloudDb.Model +namespace AsbCloudInfrastructure.Tests.MapData { public class TelemetryDataSaubMap : ClassMap { diff --git a/AsbCloudInfrastructure.Tests/Services/DataSaubStat/DataSaubStatDtillingQualityServiceTest.cs b/AsbCloudInfrastructure.Tests/Services/DataSaubStat/DataSaubStatDtillingQualityServiceTest.cs index 99818138..8e9485f5 100644 --- a/AsbCloudInfrastructure.Tests/Services/DataSaubStat/DataSaubStatDtillingQualityServiceTest.cs +++ b/AsbCloudInfrastructure.Tests/Services/DataSaubStat/DataSaubStatDtillingQualityServiceTest.cs @@ -1,21 +1,21 @@ using AsbCloudApp.Data; -using AsbCloudApp.Data.DetectedOperation; using AsbCloudApp.Data.SAUB; using AsbCloudApp.Repositories; using AsbCloudApp.Requests; using AsbCloudApp.Services; using AsbCloudDb.Model; using AsbCloudInfrastructure.Services; -using AsbCloudInfrastructure.Services.SAUB; +using AsbCloudInfrastructure.Tests.MapData; using CsvHelper; using Mapster; using NSubstitute; using System; using System.Collections.Generic; -using System.Formats.Asn1; using System.Globalization; using System.IO; using System.Linq; +using System.Net.NetworkInformation; +using System.Reflection; using System.Threading; using System.Threading.Tasks; using Xunit; @@ -25,323 +25,77 @@ namespace AsbCloudInfrastructure.Tests.Services; public class DataSaubStatDtillingQualityServiceTest { private const string UsingTemplateFile = "AsbCloudInfrastructure/Tests/Services/DataSaubStat"; - private readonly int Gap = 5; private readonly IDataSaubStatRepository dataSaubStatRepositoryMock = Substitute.For>(); private readonly ITelemetryDataCache telemetryDataCacheMock = Substitute.For>(); - private readonly IDetectedOperationRepository detectedOperationRepositoryMock = Substitute.For(); private readonly ITelemetryDataSaubService dataSaubServiceMock = Substitute.For(); private DataSaubStatDrillingQualityService dataSaubStatService; - private int[] idTelemetries = [1]; - private IEnumerable dataSaubStatDrillingQualityDtos = new List() - { - new DataSaubStatDrillingQualityDto { - Id = 1, - DateEnd = DateTime.UtcNow, - DateStart = DateTime.UtcNow.AddHours(-1), - DepthEnd = 2, - DepthStart = 1, - IdFeedRegulator = 1, - IdTelemetry = 1 - }, - new DataSaubStatDrillingQualityDto { - Id = 2, - DateEnd = DateTime.UtcNow, - DateStart = DateTime.UtcNow.AddHours(-1), - DepthEnd = 3, - DepthStart = 2, - IdFeedRegulator = 2, - IdTelemetry = 2, - }, - new DataSaubStatDrillingQualityDto { - Id = 3, - DateEnd = DateTime.UtcNow, - DateStart = DateTime.UtcNow.AddHours(-1), - DepthEnd = 4, - DepthStart = 3, - IdFeedRegulator = 3, - IdTelemetry = 3, - }, - }; - - - private List telemetryDataSaubDtos = new List { - new TelemetryDataSaubDto() - { - IdTelemetry = 1, - DateTime = DateTime.UtcNow.AddMinutes(-30), - AxialLoad = 800, - AxialLoadLimitMax = 1, - AxialLoadSp = 1, - BitDepth = 1, - BlockPosition = 1, - BlockPositionMax = 1, - BlockPositionMin = 1, - BlockSpeed = 1, - BlockSpeedSp = 1, - BlockSpeedSpDevelop = 1, - BlockSpeedSpRotor = 1, - BlockSpeedSpSlide = 1, - Flow = 1, - FlowDeltaLimitMax = 1, - FlowIdle = 1, - HookWeight = 1, - HookWeightIdle = 1, - HookWeightLimitMax = 1, - HookWeightLimitMin = 1, - IdFeedRegulator = 1, - IdUser = 1, - Mode = 1, - Mse = 1, - MseState = 1, - Pressure = 1, - PressureDeltaLimitMax = 1, - PressureIdle = 1, - PressureSp = 1, - PressureSpDevelop = 1, - PressureSpRotor = 1, - PressureSpSlide = 1, - Pump0Flow = 1, - Pump1Flow = 1, - Pump2Flow = 1, - RotorSpeed = 1, - RotorTorque = 1, - RotorTorqueIdle = 1, - RotorTorqueSp = 1, - RotorTorqueLimitMax = 1, - WellDepth = 800, - } - }; - public DataSaubStatDtillingQualityServiceTest() { - telemetryDataCacheMock - .GetIds(Arg.Any()) - .Returns(idTelemetries); - - dataSaubStatRepositoryMock - .GetLastsAsync(Arg.Any(), Arg.Any()) - .Returns(dataSaubStatDrillingQualityDtos); - dataSaubStatService = new DataSaubStatDrillingQualityService( dataSaubStatRepositoryMock, telemetryDataCacheMock, dataSaubServiceMock); } - private TelemetryDataSaubDto CreateTelemetryDataSaubItem( - TelemetryDataSaubDto telemetrySaubDto, - float wellDepth, - float bitDepth, - short idFeedRegulator, - DateTime dateTime) - { - var telemetrySaubDto1 = telemetrySaubDto.Adapt(); - telemetrySaubDto1.WellDepth = wellDepth; - telemetrySaubDto1.BitDepth = bitDepth; - telemetrySaubDto1.IdFeedRegulator = idFeedRegulator; - telemetrySaubDto1.DateTime = dateTime; - - return telemetrySaubDto1; - } [Fact] - public async Task Create_1DataSaubStatItems_ShouldReturn__Success() + public async Task Create_DataSaubStatDrillingQuality_From_CSVFile_Test1_ShouldReturn_Success() { - var telemetryDataSaubDtos2 = new List(); - string fileName = @"C:\Users\admin\source\repos\AsbCloudServer\AsbCloudInfrastructure.Tests\Services\DataSaubStat\test.csv"; - using (var reader = new StreamReader(fileName)) + var resourceName = Assembly.GetExecutingAssembly() + .GetManifestResourceNames() + .Where(r => r.Contains("DataSaubStat.test1.csv")) + .FirstOrDefault(); + + if (String.IsNullOrEmpty(resourceName)) + Assert.Fail("No mock data for test"); + + using var stream = Assembly.GetExecutingAssembly() + .GetManifestResourceStream(resourceName)!; + + var actual = Enumerable.Empty(); + + using (var reader = new StreamReader(stream)) using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture)) { - try - { - csv.Context.RegisterClassMap(); - var records = csv.GetRecords().ToList(); + csv.Context.RegisterClassMap(); + var records = csv.GetRecords().ToList(); - - - dataSaubServiceMock + dataSaubServiceMock .Get(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()) .Returns(records); - //act - var result = await dataSaubStatService.CreateStatDrillingQualityForTelemetry(1, DateTimeOffset.UnixEpoch, CancellationToken.None); - - //assert - Assert.Equal(3, result.Count()); - } - catch (Exception ex) - { - ; - } + //act + actual = await dataSaubStatService.CreateStatDrillingQualityForTelemetry(1, DateTimeOffset.UnixEpoch, CancellationToken.None); } - //var telemetrySaubDto = telemetryDataSaubDtos.FirstOrDefault(); - //if (telemetrySaubDto != null) - //{ - // //idFeedRegulator depthWell - // //1 800 - // //1 900 - // //1 1000 - // //1 900 - // //1 1200 - // //1 1300 - // //1 1100 - // //1 1500 - // //2 1600 - // //Ожидаемые результаты для idFeedRegulator: - // // количество возвращаемых записей = 3 - // // общая глубина = (1000 - 800) + (1300 - 900) + (1600 - 1100) = 1100 - // var telemetrySaubDto1 = CreateTelemetryDataSaubItem( - // telemetrySaubDto, - // wellDepth: 900, - // bitDepth: 900, - // idFeedRegulator: 1, - // dateTime: DateTime.UtcNow.AddMinutes(20)); - // telemetryDataSaubDtos.Add(telemetrySaubDto1); + resourceName = Assembly.GetExecutingAssembly() + .GetManifestResourceNames() + .Where(r => r.Contains("DataSaubStat.test1_result.csv")) + .FirstOrDefault(); - // var telemetrySaubDto2 = CreateTelemetryDataSaubItem( - // telemetrySaubDto, - // wellDepth: 1000, - // bitDepth: 1000, - // idFeedRegulator: 1, - // dateTime: DateTime.UtcNow.AddMinutes(20)); - // telemetryDataSaubDtos.Add(telemetrySaubDto2); + if (String.IsNullOrEmpty(resourceName)) + Assert.Fail("No mock data for test"); - // var telemetrySaubDto3 = CreateTelemetryDataSaubItem( - // telemetrySaubDto, - // wellDepth: 900, - // bitDepth: 900, - // idFeedRegulator: 1, - // dateTime: DateTime.UtcNow.AddMinutes(20)); - // telemetryDataSaubDtos.Add(telemetrySaubDto3); + using var stream2 = Assembly.GetExecutingAssembly() + .GetManifestResourceStream(resourceName)!; - // var telemetrySaubDto4 = CreateTelemetryDataSaubItem( - // telemetrySaubDto, - // wellDepth: 1200, - // bitDepth: 1200, - // idFeedRegulator: 1, - // dateTime: DateTime.UtcNow.AddMinutes(20)); - // telemetryDataSaubDtos.Add(telemetrySaubDto4); + using (var reader = new StreamReader(stream2)) + using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture)) + { + csv.Context.RegisterClassMap(); + var expected = csv.GetRecords().ToList(); - // var telemetrySaubDto5 = CreateTelemetryDataSaubItem( - // telemetrySaubDto, - // wellDepth: 1300, - // bitDepth: 1300, - // idFeedRegulator: 1, - // dateTime: DateTime.UtcNow.AddMinutes(20)); - // telemetryDataSaubDtos.Add(telemetrySaubDto5); + Assert.Equal(expected.Count(), actual.Count()); - // var telemetrySaubDto6 = CreateTelemetryDataSaubItem( - // telemetrySaubDto, - // wellDepth: 1100, - // bitDepth: 1100, - // idFeedRegulator: 1, - // dateTime: DateTime.UtcNow.AddMinutes(20)); - // telemetryDataSaubDtos.Add(telemetrySaubDto6); + var expectedItem = expected.FirstOrDefault()!; + var actualItem = actual.FirstOrDefault()!; - // var telemetrySaubDto7 = CreateTelemetryDataSaubItem( - // telemetrySaubDto, - // wellDepth: 1500, - // bitDepth: 1500, - // idFeedRegulator: 1, - // dateTime: DateTime.UtcNow.AddMinutes(20)); - // telemetryDataSaubDtos.Add(telemetrySaubDto7); - - // var telemetrySaubDto8 = CreateTelemetryDataSaubItem( - // telemetrySaubDto, - // wellDepth: 1600, - // bitDepth: 1600, - // idFeedRegulator: 2, - // dateTime: DateTime.UtcNow.AddMinutes(20)); - // telemetryDataSaubDtos.Add(telemetrySaubDto8); - //} - - + Assert.True(Math.Abs(expectedItem.DepthStart - actualItem.DepthStart) < 0.000001); + Assert.True(Math.Abs(expectedItem.DepthEnd - actualItem.DepthEnd) < 0.000001); + Assert.True(Math.Abs(expectedItem.DepthDrillingQuality - actualItem.DepthDrillingQuality) < 0.000001); + } } - - private TelemetryDataSaubDto Convert(TelemetryDataSaub src, double timezoneOffset) - { - var mapper = MapsterForUnitTests.GetMapper(); - - var res = new TelemetryDataSaubDto(); - var dto = mapper.Map(src, res); - //var telemetryUser = telemetryUserService.GetOrDefault(src.IdTelemetry, src.IdUser ?? int.MinValue); - dto.User = "dfsdf"; - //telemetryUser?.MakeDisplayName(); - dto.DateTime = src.DateTime.ToRemoteDateTime(timezoneOffset); - dto.BitDepth = src.BitDepth <= src.WellDepth - ? src.BitDepth - : src.WellDepth; - return dto; - } - - - - //[Fact] - //public async Task Create_2DataSaubStatItems_ShouldReturn__Success() - //{ - // var insertedDataSaubStatCount = 2; - - // var detectedOperationDto = detectedOperationDtos.FirstOrDefault(); - // if (detectedOperationDto != null) - // { - // var detectedOperationDto1 = detectedOperationDto.Adapt(); - // detectedOperationDto1.DateStart = DateTimeOffset.UtcNow.AddMinutes(1); - // detectedOperationDto1.DateEnd = DateTimeOffset.UtcNow.AddHours(1); - - // detectedOperationDtos.Add(detectedOperationDto1); - // } - - // var telemetryDataSaubDto = telemetryDataSaubDtos.LastOrDefault(); - // if (telemetryDataSaubDto != null) - // { - // var telemetryDataSaubDto1 = telemetryDataSaubDto.Adapt(); - // telemetryDataSaubDto1.DateTime = DateTime.UtcNow.AddMinutes(10); - // telemetryDataSaubDto1.WellDepth = telemetryDataSaubDto.WellDepth + 1; - - // var telemetryDataSaubDto2 = telemetryDataSaubDto.Adapt(); - // telemetryDataSaubDto2.DateTime = DateTime.UtcNow.AddMinutes(20); - // telemetryDataSaubDto2.WellDepth = telemetryDataSaubDto1.WellDepth + 1; - - // var telemetryDataSaubDto3 = telemetryDataSaubDto.Adapt(); - // telemetryDataSaubDto3.DateTime = DateTime.UtcNow.AddMinutes(30); - // telemetryDataSaubDto3.WellDepth = telemetryDataSaubDto2.WellDepth + 1; - - // telemetryDataSaubDtos.Add(telemetryDataSaubDto1); - // telemetryDataSaubDtos.Add(telemetryDataSaubDto2); - // telemetryDataSaubDtos.Add(telemetryDataSaubDto3); - // } - - // detectedOperationRepositoryMock - // .Get(Arg.Any(), Arg.Any()) - // .Returns(detectedOperationDtos); - - // dataSaubStatRepositoryMock - // .InsertRangeAsync(Arg.Any>(), Arg.Any()) - // .Returns(insertedDataSaubStatCount); - - // Action action = (message, percent) => - // { - // //assert - // Assert.NotNull(percent); - // Assert.InRange(percent.Value, 0.0, 1.0); - // }; - - // //act - // await dataSaubStatService.CreateStatAsync(Gap, action, CancellationToken.None); - - // //assert - // await dataSaubStatRepositoryMock.Received().InsertRangeAsync( - // Arg.Is>(l => l.Count() == insertedDataSaubStatCount), - // Arg.Any()); - //} } -internal class TestDto -{ - public int Id { get; set; } - public string Name { get; set; } - public int Age { get; set; } -} \ No newline at end of file diff --git a/AsbCloudInfrastructure.Tests/Services/DataSaubStat/test.csv b/AsbCloudInfrastructure.Tests/Services/DataSaubStat/test1.csv similarity index 100% rename from AsbCloudInfrastructure.Tests/Services/DataSaubStat/test.csv rename to AsbCloudInfrastructure.Tests/Services/DataSaubStat/test1.csv diff --git a/AsbCloudInfrastructure.Tests/Services/DataSaubStat/test1_result.csv b/AsbCloudInfrastructure.Tests/Services/DataSaubStat/test1_result.csv new file mode 100644 index 00000000..64c49983 --- /dev/null +++ b/AsbCloudInfrastructure.Tests/Services/DataSaubStat/test1_result.csv @@ -0,0 +1,2 @@ +"id_telemetry","depth_start","depth_end","depth_drilling_quality" +419,46,251.279998779297,0.0