using AsbCloudApp.Data; using AsbCloudApp.Data.DetectedOperation; using AsbCloudApp.Data.SAUB; using AsbCloudApp.Repositories; using AsbCloudApp.Requests; using AsbCloudApp.Services; using AsbCloudInfrastructure.Services; using Mapster; using NSubstitute; using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; using Xunit; namespace AsbCloudInfrastructure.Tests.Services; public class DataSaubStatDtillingQualityServiceTest { 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() { 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); var telemetrySaubDto2 = CreateTelemetryDataSaubItem( telemetrySaubDto, wellDepth: 1000, bitDepth: 1000, idFeedRegulator: 1, dateTime: DateTime.UtcNow.AddMinutes(20)); telemetryDataSaubDtos.Add(telemetrySaubDto2); var telemetrySaubDto3 = CreateTelemetryDataSaubItem( telemetrySaubDto, wellDepth: 900, bitDepth: 900, idFeedRegulator: 1, dateTime: DateTime.UtcNow.AddMinutes(20)); telemetryDataSaubDtos.Add(telemetrySaubDto3); var telemetrySaubDto4 = CreateTelemetryDataSaubItem( telemetrySaubDto, wellDepth: 1200, bitDepth: 1200, idFeedRegulator: 1, dateTime: DateTime.UtcNow.AddMinutes(20)); telemetryDataSaubDtos.Add(telemetrySaubDto4); var telemetrySaubDto5 = CreateTelemetryDataSaubItem( telemetrySaubDto, wellDepth: 1300, bitDepth: 1300, idFeedRegulator: 1, dateTime: DateTime.UtcNow.AddMinutes(20)); telemetryDataSaubDtos.Add(telemetrySaubDto5); var telemetrySaubDto6 = CreateTelemetryDataSaubItem( telemetrySaubDto, wellDepth: 1100, bitDepth: 1100, idFeedRegulator: 1, dateTime: DateTime.UtcNow.AddMinutes(20)); telemetryDataSaubDtos.Add(telemetrySaubDto6); 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); } dataSaubServiceMock .Get(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()) .Returns(telemetryDataSaubDtos); //act var result = await dataSaubStatService.CreateStatDrillingQualityForTelemetry(1, DateTimeOffset.UnixEpoch, CancellationToken.None); //assert Assert.Equal(3, result.Count()); } //[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()); //} }