using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; using AsbCloudApp.Data; using AsbCloudApp.Data.ProcessMaps; using AsbCloudApp.Repositories; using AsbCloudApp.Requests; using AsbCloudApp.Services; using AsbCloudDb.Model; using AsbCloudInfrastructure.Repository; using AsbCloudInfrastructure.Services.ProcessMaps; using AsbCloudInfrastructure.Services.ProcessMaps.Report; using DocumentFormat.OpenXml.Bibliography; using DocumentFormat.OpenXml.Spreadsheet; using NSubstitute; using Xunit; namespace AsbCloudWebApi.Tests.Services.ProcessMaps; public class ProcessMapReportDataSaubStatServiceTest { private IWellService wellService = Substitute.For(); private IChangeLogRepository processMapPlanBaseRepository = Substitute.For>(); private IWellOperationRepository wellOperationRepository = Substitute.For(); private IWellOperationCategoryRepository wellOperationCategoryRepository = Substitute.For(); private IDataSaubStatRepository dataSaubStatRepository = Substitute.For(); private ProcessMapReportDrillingService service; private readonly static SimpleTimezoneDto timezone = new() { Hours = 2 }; private static readonly DateTimeOffset dateStart = new (2024, 01, 01, 00, 11, 11, timezone.Offset); private readonly static WellDto well = new() { Id = 1, IdTelemetry = 1, Timezone = timezone }; private readonly static IEnumerable processMapPlan = new List() { new() { DepthStart = 0, DepthEnd = 100, IdMode = 1, IdWell = well.Id, IdWellSectionType = 1, AxialLoadPlan = 0.2, AxialLoadLimitMax = 0.3, DeltaPressurePlan = 0.4, DeltaPressureLimitMax = 0.5, TopDriveTorquePlan = 0.6, TopDriveTorqueLimitMax = 0.7, TopDriveSpeedPlan = 0.8, TopDriveSpeedLimitMax = 0.9, FlowPlan = 0.10, FlowLimitMax = 0.11, RopPlan = 0.12, UsageSaub = 0.12, UsageSpin = 0.14, Comment = "r", }, new() { DepthStart = 0, DepthEnd = 100, IdMode = 2, IdWell = well.Id, IdWellSectionType = 1, AxialLoadPlan = 0.12, AxialLoadLimitMax = 0.13, DeltaPressurePlan = 0.14, DeltaPressureLimitMax = 0.15, TopDriveTorquePlan = 0.16, TopDriveTorqueLimitMax = 0.17, TopDriveSpeedPlan = 0.18, TopDriveSpeedLimitMax = 0.19, FlowPlan = 0.110, FlowLimitMax = 0.111, RopPlan = 0.112, UsageSaub = 0.112, UsageSpin = 0.114, Comment = "s", }, new() { DepthStart = 100, DepthEnd = 200, IdMode = 1, IdWell = well.Id, IdWellSectionType = 1, AxialLoadPlan = 0.22, AxialLoadLimitMax = 0.23, DeltaPressurePlan = 0.24, DeltaPressureLimitMax = 0.25, TopDriveTorquePlan = 0.26, TopDriveTorqueLimitMax = 0.27, TopDriveSpeedPlan = 0.28, TopDriveSpeedLimitMax = 0.29, FlowPlan = 0.210, FlowLimitMax = 0.211, RopPlan = 0.212, UsageSaub = 0.212, UsageSpin = 0.214, Comment = "r", }, new() { DepthStart = 100, DepthEnd = 200, IdMode = 2, IdWell = well.Id, IdWellSectionType = 1, AxialLoadPlan = 0.32, AxialLoadLimitMax = 0.33, DeltaPressurePlan = 0.34, DeltaPressureLimitMax = 0.35, TopDriveTorquePlan = 0.36, TopDriveTorqueLimitMax = 0.37, TopDriveSpeedPlan = 0.38, TopDriveSpeedLimitMax = 0.39, FlowPlan = 0.310, FlowLimitMax = 0.311, RopPlan = 0.312, UsageSaub = 0.312, UsageSpin = 0.314, Comment = "s", }, }; private readonly static IEnumerable operations = new List() { new() { Id = 1, IdWell = well.Id, IdWellSectionType = 1, IdCategory = WellOperationCategory.IdRotor, IdParentCategory = WellOperationCategory.IdMechanicalDrilling, IdType = WellOperation.IdOperationTypeFact, DepthStart = 0, DepthEnd = 10, DateStart = dateStart, DurationHours = 1, }, new() { Id = 1, IdWell = well.Id, IdWellSectionType = 2, IdCategory = WellOperationCategory.IdRotor, IdParentCategory = WellOperationCategory.IdMechanicalDrilling, IdType = WellOperation.IdOperationTypeFact, DepthStart = 50, DepthEnd = 100, DateStart = dateStart, DurationHours = 1, } }; private readonly static IEnumerable operationCategories = new List() { new(){Id = WellOperationCategory.IdRotor, IdParent = WellOperationCategory.IdMechanicalDrilling, Name = "РОТОР"}, new(){Id = WellOperationCategory.IdSlide, IdParent = WellOperationCategory.IdMechanicalDrilling, Name = "СЛАЙД"}, }; private readonly static IEnumerable sectionTypes = new List() { new(){ Id = 1, Caption = "Секция 1"}, new(){ Id = 2, Caption = "Секция 2"}, new(){ Id = 3, Caption = "Секция 3"}, new(){ Id = 4, Caption = "Секция 4"}, }; private readonly static IEnumerable dataSaubStat = new List() { new(){ Id = 1, IdTelemetry = 1, IdCategory = WellOperationCategory.IdRotor, DateStart = dateStart, DateEnd = dateStart.AddHours(3.25), DepthStart = 0, DepthEnd = 20, Speed = 0.1, BlockSpeedSp = 0.2, Pressure = 0.3, PressureIdle = 0.4, PressureSp = 0.5, AxialLoad = 0.6, AxialLoadSp = 0.7, AxialLoadLimitMax = 0.8, RotorTorque = 0.9, RotorTorqueSp = 0.11, RotorTorqueLimitMax = 0.12, RotorSpeed = 0.14, Flow = 0.17, IdFeedRegulator = LimitingParameterDto.AxialLoad, EnabledSubsystems = 15, HasOscillation = false, }, new(){ Id = 1, IdTelemetry = 1, IdCategory = WellOperationCategory.IdRotor, DateStart = dateStart.AddHours(3.25), DateEnd = dateStart.AddHours(4.25), DepthStart = 20, DepthEnd = 190, Speed = 0.21, BlockSpeedSp = 0.22, Pressure = 0.23, PressureIdle = 0.24, PressureSp = 0.25, AxialLoad = 0.26, AxialLoadSp = 0.27, AxialLoadLimitMax = 0.28, RotorTorque = 0.29, RotorTorqueSp = 0.211, RotorTorqueLimitMax = 0.212, RotorSpeed = 0.214, Flow = 0.217, IdFeedRegulator = LimitingParameterDto.AxialLoad, EnabledSubsystems = 15, HasOscillation = false, }, new(){ Id = 1, IdTelemetry = 1, IdCategory = WellOperationCategory.IdRotor, DateStart = dateStart.AddHours(4.25), DateEnd = dateStart.AddHours(16), DepthStart = 190, DepthEnd = 290, Speed = 0.31, BlockSpeedSp = 0.32, Pressure = 0.33, PressureIdle = 0.34, PressureSp = 0.35, AxialLoad = 0.36, AxialLoadSp = 0.37, AxialLoadLimitMax = 0.38, RotorTorque = 0.39, RotorTorqueSp = 0.231, RotorTorqueLimitMax = 0.232, RotorSpeed = 0.234, Flow = 0.237, IdFeedRegulator = LimitingParameterDto.AxialLoad, EnabledSubsystems = 15, HasOscillation = false, } }; public ProcessMapReportDataSaubStatServiceTest() { wellService.GetOrDefaultAsync(Arg.Any(), Arg.Any()) .Returns(well); processMapPlanBaseRepository.Get(Arg.Any(), Arg.Any()) .Returns(processMapPlan); wellOperationRepository.GetAsync(Arg.Any(), Arg.Any()) .Returns(operations); wellOperationRepository.GetSectionTypes() .Returns(sectionTypes); wellOperationCategoryRepository.Get(Arg.Any()) .Returns(operationCategories); dataSaubStatRepository.GetAsync(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()) .Returns(dataSaubStat); service = new ProcessMapReportDrillingService(wellService, processMapPlanBaseRepository, dataSaubStatRepository, wellOperationRepository, wellOperationCategoryRepository); } [Fact] public async Task GetAsync_return_data() { // arrange DataSaubStatRequest request = new() { }; // act var result = await service.GetAsync(well.Id, request, CancellationToken.None); // assert Assert.NotEmpty(result); } }