diff --git a/AsbCloudWebApi.IntegrationTests/Clients/IProcessMapReportDrilling.cs b/AsbCloudWebApi.IntegrationTests/Clients/IProcessMapReportDrilling.cs new file mode 100644 index 00000000..92a4353b --- /dev/null +++ b/AsbCloudWebApi.IntegrationTests/Clients/IProcessMapReportDrilling.cs @@ -0,0 +1,20 @@ +using AsbCloudApp.Data; +using AsbCloudApp.Data.ProcessMaps; +using AsbCloudApp.Data.ProcessMaps.Report; +using AsbCloudApp.Requests; +using Microsoft.AspNetCore.Mvc; +using Refit; + +namespace AsbCloudWebApi.IntegrationTests.Clients; + +public interface IProcessMapReportDrilling +{ + private const string BaseRoute = "/api/well/{idWell}/ProcessMapReportDrilling"; + + [Get($"{BaseRoute}/report")] + Task>> GetReportAsync(int idWell, [FromQuery] DataSaubStatRequest request, CancellationToken cancellationToken); + + [Get($"{BaseRoute}/report/export")] + Task> ExportReportAsync(int idWell, [FromQuery] DataSaubStatRequest request, CancellationToken cancellationToken); + +} diff --git a/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapReportDrillingControllerTest.cs b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapReportDrillingControllerTest.cs new file mode 100644 index 00000000..3083d514 --- /dev/null +++ b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapReportDrillingControllerTest.cs @@ -0,0 +1,315 @@ +using AsbCloudApp.Requests; +using AsbCloudDb.Model; +using AsbCloudDb.Model.ProcessMaps; +using AsbCloudWebApi.IntegrationTests.Clients; +using Org.BouncyCastle.Asn1.Ocsp; +using System.Net; +using System.Net.Http.Headers; +using Xunit; + +namespace AsbCloudWebApi.IntegrationTests.Controllers.ProcessMapPlan; + +public class ProcessMapReportDrillingControllerTest : BaseIntegrationTest +{ + + private readonly WellSectionType wellSection = new WellSectionType() + { + Id = 1, + Caption = "Секция 1", + Order = 1 + }; + + private readonly WellOperationCategory wellOperationCategory = new WellOperationCategory() + { + Id = 1, + IdParent = null, + KeyValueName = "Name", + Name = "Name" + }; + + private readonly WellOperation wellOperation = new WellOperation() + { + CategoryInfo = "CategoryInfo", + Id = 10, + Comment = "Comment", + DateStart = DateTimeOffset.UtcNow, + DepthEnd = 1, + DepthStart = 0.6, + DurationHours = 10, + IdCategory = 1, + IdPlan = null, + IdType = 1, + IdUser = 1, + IdWell = 1, + IdWellSectionType = 1, + LastUpdateDate = DateTimeOffset.UtcNow + }; + + private readonly List dataSaubStats = new List() + { + + 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, + HasOscillation = true, + Id = 1, + IdCategory = 1, + IdFeedRegulator = 0, + IdTelemetry = 1, + 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, + Id = 2, + IdCategory = 1, + IdFeedRegulator = 1, + IdTelemetry = 1, + 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, + Id = 3, + IdCategory = 1, + IdFeedRegulator = 1, + IdTelemetry = 1, + Pressure = 36, + PressureIdle = 23.0, + PressureSp = 63.0, + RotorSpeed = 11.334207942999628, + RotorTorque = 14, + RotorTorqueLimitMax = 15.0, + RotorTorqueSp = 13, + Speed = 108.001708984375 + } + }; + + + + + private readonly ProcessMapPlanDrilling entity = new() + { + Id = 0, + IdAuthor = 1, + IdEditor = null, + Creation = DateTimeOffset.UtcNow, + Obsolete = null, + IdState = AsbCloudDb.Model.ChangeLogAbstract.IdStateActual, + IdPrevious = null, + + IdWell = 1, + 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 IProcessMapReportDrilling client; + + public ProcessMapReportDrillingControllerTest(WebAppFactoryFixture factory) : base(factory) + { + client = factory.GetAuthorizedHttpClient(string.Empty); + } + + + [Fact] + public async Task Get_rtk_report_by_default_request_returns_success() + { + //arrange + dbContext.CleanupDbSet(); + var dbset = dbContext.Set(); + dbset.Add(entity); + entity.Id = 1; + dbset.Add(entity); + entity.Id = 2; + dbset.Add(entity); + + var dbSetWellOperationCategory = dbContext.Set(); + dbSetWellOperationCategory.Add(wellOperationCategory); + + var dbSetWellOperation = dbContext.Set(); + dbSetWellOperation.Add(wellOperation); + + var dbSetDataSaubStat = dbContext.Set(); + dbSetDataSaubStat.AddRange(dataSaubStats); + + dbContext.SaveChanges(); + + //act + var request = new DataSaubStatRequest(); + var response = await client.GetReportAsync(1, 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 + dbContext.CleanupDbSet(); + var dbset = dbContext.Set(); + dbset.Add(entity); + entity.Id = 1; + dbset.Add(entity); + entity.Id = 2; + dbset.Add(entity); + + var dbSetWellOperationCategory = dbContext.Set(); + dbSetWellOperationCategory.Add(wellOperationCategory); + + var dbSetWellOperation = dbContext.Set(); + dbSetWellOperation.Add(wellOperation); + + var dbSetDataSaubStat = dbContext.Set(); + dbSetDataSaubStat.AddRange(dataSaubStats); + + dbContext.SaveChanges(); + + //act + var request = new DataSaubStatRequest() + { + DeltaAxialLoad = 5, + DeltaPressure = 15, + DeltaRotorTorque = 10 + }; + var response = await client.GetReportAsync(1, 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() + { + //arrange + dbContext.CleanupDbSet(); + var dbset = dbContext.Set(); + dbset.Add(entity); + entity.Id = 1; + dbset.Add(entity); + entity.Id = 2; + dbset.Add(entity); + + var dbSetWellOperationCategory = dbContext.Set(); + dbSetWellOperationCategory.Add(wellOperationCategory); + + var dbSetWellOperation = dbContext.Set(); + dbSetWellOperation.Add(wellOperation); + + var dbSetDataSaubStat = dbContext.Set(); + dbSetDataSaubStat.AddRange(dataSaubStats); + + dbContext.SaveChanges(); + + //act + var request = new DataSaubStatRequest() + { + DeltaAxialLoad = 15, + DeltaPressure = 25, + DeltaRotorTorque = 20 + }; + var response = await client.GetReportAsync(1, request, CancellationToken.None); + + //assert + Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode); + } + + [Fact] + public async Task Export_rtk_report_returns_success() + { + //clear + dbContext.CleanupDbSet(); + + //arrange + var dbset = dbContext.Set(); + dbset.Add(entity); + entity.Id = 1; + dbset.Add(entity); + entity.Id = 2; + dbset.Add(entity); + + var dbSetWellOperationCategory = dbContext.Set(); + dbSetWellOperationCategory.Add(wellOperationCategory); + + var dbSetWellOperation = dbContext.Set(); + dbSetWellOperation.Add(wellOperation); + + var dbSetDataSaubStat = dbContext.Set(); + dbSetDataSaubStat.AddRange(dataSaubStats); + + dbContext.SaveChanges(); + + //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); + } +} diff --git a/AsbCloudWebApi.Tests/Services/WellOperationExport/WellOperationExportServiceTest.cs b/AsbCloudWebApi.Tests/Services/WellOperationExport/WellOperationExportServiceTest.cs index 0c8523c4..ad3d3895 100644 --- a/AsbCloudWebApi.Tests/Services/WellOperationExport/WellOperationExportServiceTest.cs +++ b/AsbCloudWebApi.Tests/Services/WellOperationExport/WellOperationExportServiceTest.cs @@ -5,11 +5,9 @@ using AsbCloudApp.Requests; using AsbCloudApp.Services; using AsbCloudApp.Services.WellOperationImport; using AsbCloudDb.Model; -using AsbCloudInfrastructure.Repository; using AsbCloudInfrastructure.Services.WellOperationImport; using AsbCloudInfrastructure.Services.WellOperationImport.FileParser; using NSubstitute; -using SignalRSwaggerGen.Enums; using System; using System.Collections.Generic; using System.Linq; @@ -34,41 +32,6 @@ namespace AsbCloudWebApi.Tests.Services.WellOperationExport private WellOperationImportService wellOperationImportService; private IWellOperationExcelParser wellOperationDefaultExcelParser; - private readonly WellOperationDto[] operations = new WellOperationDto[2] { - new WellOperationDto() { - Id = 5, - IdWell = idWell, - IdUser = 1, - IdType = 0, - IdWellSectionType = 1, - WellSectionTypeName = "1", - IdCategory = 1, - CategoryName = "1", - CategoryInfo = "CategoryInfo 1", - DepthStart = 10, - DepthEnd = 20, - DateStart = GetDate(days: 0), - DurationHours = 10, - Comment = "Комментарий 1", - }, - new WellOperationDto() { - Id = 6, - IdWell = idWell, - IdUser = 1, - IdType = 0, - IdWellSectionType = 2, - WellSectionTypeName = "2", - IdCategory = 2, - CategoryName = "2", - CategoryInfo = "CategoryInfo 2", - DepthStart = 20, - DepthEnd = 30, - DateStart = GetDate(days: 1), - DurationHours = 20, - Comment = "Комментарий 2", - } - }; - private readonly WellSectionTypeDto[] sectionTypes = new WellSectionTypeDto[2] { new WellSectionTypeDto() @@ -106,12 +69,6 @@ namespace AsbCloudWebApi.Tests.Services.WellOperationExport }; private readonly ITestOutputHelper output; - private static DateTime GetDate(int days) - { - var date = DateTime.Now.AddDays(days); - return new DateTime(date.Year, date.Month, date.Day, date.Hour, date.Minute, date.Second); - } - public WellOperationExportServiceTest(ITestOutputHelper output) { wellService = Substitute.For(); @@ -123,17 +80,20 @@ namespace AsbCloudWebApi.Tests.Services.WellOperationExport wellOperationImportService = new WellOperationImportService(wellService, wellOperationRepository, wellOperationCategoryRepository); wellOperationDefaultExcelParser = new WellOperationDefaultExcelParser(); this.output = output; + + wellService.GetTimezone(idWell).Returns(new SimpleTimezoneDto() + { + Hours = 5 + }); } [Fact] public async Task Check_Exported_WellOperations_With_Operations_In_Db() { - wellService.GetTimezone(idWell).Returns(new SimpleTimezoneDto() - { - Hours = 5 - }); + var operations = getOperations(); var localOperations = operations.ToArray(); + foreach (var operation in localOperations) operation.Id = 0; @@ -161,6 +121,7 @@ namespace AsbCloudWebApi.Tests.Services.WellOperationExport public void TestDataContainsNotDefaultProps() { var initOk = true; + var operations = getOperations(); for (int i = 0; i < operations.Length; i++) { var operation = operations[i]; @@ -204,5 +165,52 @@ namespace AsbCloudWebApi.Tests.Services.WellOperationExport yield return prop.Name; } } + + private WellOperationDto[] getOperations() + { + + var timezone = wellService.GetTimezone(idWell); + + DateTimeOffset GetDate(int days) + { + var date = DateTimeOffset.UtcNow.AddDays(days); + return new DateTimeOffset(date.Year, date.Month, date.Day, date.Hour, date.Minute, date.Second, TimeSpan.FromHours(timezone.Hours)); + } + + return new WellOperationDto[2] { + new WellOperationDto() { + Id = 5, + IdWell = idWell, + IdUser = 1, + IdType = 0, + IdWellSectionType = 1, + WellSectionTypeName = "1", + IdCategory = 1, + CategoryName = "1", + CategoryInfo = "CategoryInfo 1", + DepthStart = 10, + DepthEnd = 20, + DateStart = GetDate(days: 0), + DurationHours = 10, + Comment = "Комментарий 1", + }, + new WellOperationDto() { + Id = 6, + IdWell = idWell, + IdUser = 1, + IdType = 0, + IdWellSectionType = 2, + WellSectionTypeName = "2", + IdCategory = 2, + CategoryName = "2", + CategoryInfo = "CategoryInfo 2", + DepthStart = 20, + DepthEnd = 30, + DateStart = GetDate(days: 1), + DurationHours = 20, + Comment = "Комментарий 2", + } + }; + } } }