using AsbCloudApp.Requests; using AsbCloudDb.Model; using AsbCloudDb.Model.ProcessMaps; using AsbCloudWebApi.IntegrationTests.Clients; using System.Net; using AsbCloudWebApi.IntegrationTests.Data; using Xunit; namespace AsbCloudWebApi.IntegrationTests.Controllers.ProcessMapPlan; public class ProcessMapReportDrillingControllerTest : BaseIntegrationTest { private IProcessMapReportDrilling client; public ProcessMapReportDrillingControllerTest(WebAppFactoryFixture factory) : base(factory) { dbContext.CleanupDbSet(); dbContext.CleanupDbSet(); client = factory.GetAuthorizedHttpClient(string.Empty); } [Fact] public async Task Get_rtk_report_by_default_request_returns_success() { //arrange var well = dbContext.Wells.First(); var processMapPlanDrilling = CreateProcessMapPlanDrilling(well.Id); dbContext.ProcessMapPlanDrilling.Add(processMapPlanDrilling); var wellOperation = CreateWellOperation(well.Id); dbContext.WellOperations.Add(wellOperation); var dataSaubStats = CreateDataSaubStats(well.IdTelemetry!.Value, wellOperation.IdCategory); dbContext.DataSaubStat.AddRange(dataSaubStats); await dbContext.SaveChangesAsync(); //act var request = new DataSaubStatRequest(); var response = await client.GetReportAsync(well.Id, request, CancellationToken.None); //assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.NotNull(response.Content); Assert.Equal(dataSaubStats.Count() - 1, response.Content.Count()); } [Fact] public async Task Get_rtk_report_by_parametrize_request_returns_success() { //arrange var well = dbContext.Wells.First(); var processMapPlanDrilling = CreateProcessMapPlanDrilling(well.Id); dbContext.ProcessMapPlanDrilling.Add(processMapPlanDrilling); var wellOperation = CreateWellOperation(well.Id); dbContext.WellOperations.Add(wellOperation); var dataSaubStats = CreateDataSaubStats(well.IdTelemetry!.Value, wellOperation.IdCategory); dbContext.DataSaubStat.AddRange(dataSaubStats); await dbContext.SaveChangesAsync(); var request = new DataSaubStatRequest { DeltaAxialLoad = 5, DeltaPressure = 15, DeltaRotorTorque = 10 }; //act var response = await client.GetReportAsync(well.Id, request, CancellationToken.None); //assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.NotNull(response.Content); Assert.Equal(1, response.Content.Count()); } [Fact] public async Task Get_rtk_report_returns_BadRequest() { //act var request = new DataSaubStatRequest() { DeltaAxialLoad = 15, DeltaPressure = 25, DeltaRotorTorque = 20 }; var response = await client.GetReportAsync(0, request, CancellationToken.None); //assert Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode); } [Fact] public async Task Export_rtk_report_returns_success() { //arrange var well = dbContext.Wells.First(); var processMapPlanDrilling = CreateProcessMapPlanDrilling(well.Id); dbContext.ProcessMapPlanDrilling.Add(processMapPlanDrilling); var wellOperation = CreateWellOperation(well.Id); dbContext.WellOperations.Add(wellOperation); var dataSaubStats = CreateDataSaubStats(well.IdTelemetry!.Value, wellOperation.IdCategory); dbContext.DataSaubStat.AddRange(dataSaubStats); await dbContext.SaveChangesAsync(); //act var request = new DataSaubStatRequest(); var response = await client.ExportReportAsync(1, request, CancellationToken.None); //assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.Equal("application/octet-stream", response.ContentHeaders?.ContentType?.MediaType); Assert.True(response.ContentHeaders?.ContentLength > 0); } private static WellOperation CreateWellOperation(int idWell) => new() { CategoryInfo = "CategoryInfo", Comment = "Comment", DateStart = DateTimeOffset.UtcNow, DepthEnd = 1, DepthStart = 0.6, DurationHours = 10, IdCategory = WellOperationCategory.IdSlide, IdPlan = null, IdType = WellOperation.IdOperationTypeFact, IdUser = 1, IdWell = idWell, IdWellSectionType = 1, LastUpdateDate = DateTimeOffset.UtcNow }; private static ProcessMapPlanDrilling CreateProcessMapPlanDrilling(int idWell) => new() { IdAuthor = 1, IdEditor = null, Creation = DateTimeOffset.UtcNow, Obsolete = null, IdState = ChangeLogAbstract.IdStateActual, IdPrevious = null, IdWell = idWell, IdWellSectionType = 1, DepthStart = 0.5, DepthEnd = 1.5, IdMode = 1, AxialLoadPlan = 2.718281, AxialLoadLimitMax = 3.1415926, DeltaPressurePlan = 4, DeltaPressureLimitMax = 5, TopDriveTorquePlan = 6, TopDriveTorqueLimitMax = 7, TopDriveSpeedPlan = 8, TopDriveSpeedLimitMax = 9, FlowPlan = 10, FlowLimitMax = 11, RopPlan = 12, UsageSaub = 13, UsageSpin = 14, Comment = "это тестовая запись", }; private static IEnumerable CreateDataSaubStats(int idTelemetry, int idCategory) => new[] { new DataSaubStat { AxialLoad = 0, AxialLoadLimitMax = 10, AxialLoadSp = 8, BlockSpeedSp = 50.0, DateEnd = DateTimeOffset.UtcNow.AddMinutes(40), DateStart = DateTimeOffset.UtcNow.AddMinutes(30), DepthEnd = 85.99299621582031, DepthStart = 85.9260025024414, EnabledSubsystems = 0, Flow = 10, IdCategory = idCategory, HasOscillation = true, IdFeedRegulator = 0, IdTelemetry = idTelemetry, Pressure = 24, PressureIdle = 0, PressureSp = 40, RotorSpeed = 11.3, RotorTorque = 1, RotorTorqueLimitMax = 26.5, RotorTorqueSp = 5, Speed = 80.3924560546875 }, new DataSaubStat { AxialLoad = 2, AxialLoadLimitMax = 10.0, AxialLoadSp = 8, BlockSpeedSp = 20, DateEnd = DateTimeOffset.UtcNow.AddMinutes(30), DateStart = DateTimeOffset.UtcNow.AddMinutes(20), DepthEnd = 86.28099822998047, DepthStart = 86.21900177001953, EnabledSubsystems = 1, Flow = 20, HasOscillation = true, IdCategory = idCategory, IdFeedRegulator = 1, IdTelemetry = idTelemetry, Pressure = 30, PressureIdle = 20, PressureSp = 40, RotorSpeed = 11.251153300212916, RotorTorque = 7, RotorTorqueLimitMax = 26.5, RotorTorqueSp = 9, Speed = 74.395751953125 }, new DataSaubStat { AxialLoad = 4, AxialLoadLimitMax = 15.0, AxialLoadSp = 8, BlockSpeedSp = 110.0, DateEnd = DateTimeOffset.UtcNow.AddMinutes(20), DateStart = DateTimeOffset.UtcNow.AddMinutes(10), DepthEnd = 106.7490005493164, DepthStart = 106.47899627685547, EnabledSubsystems = 1, Flow = 30, HasOscillation = true, IdFeedRegulator = 1, IdTelemetry = idTelemetry, IdCategory = idCategory, Pressure = 36, PressureIdle = 23.0, PressureSp = 63.0, RotorSpeed = 11.334207942999628, RotorTorque = 14, RotorTorqueLimitMax = 15.0, RotorTorqueSp = 13, Speed = 108.001708984375 } }; }