diff --git a/AsbCloudWebApi.IntegrationTests/AsbCloudWebApi.IntegrationTests.csproj b/AsbCloudWebApi.IntegrationTests/AsbCloudWebApi.IntegrationTests.csproj index f20fc316..a9d7713a 100644 --- a/AsbCloudWebApi.IntegrationTests/AsbCloudWebApi.IntegrationTests.csproj +++ b/AsbCloudWebApi.IntegrationTests/AsbCloudWebApi.IntegrationTests.csproj @@ -22,4 +22,9 @@ <ProjectReference Include="..\AsbCloudWebApi\AsbCloudWebApi.csproj" /> </ItemGroup> + <ItemGroup> + <EmbeddedResource Include="Controllers\ProcessMapPlan\Files\ProcessMapPlanDrillingInvalid.xlsx" /> + <EmbeddedResource Include="Controllers\ProcessMapPlan\Files\ProcessMapPlanDrillingValid.xlsx" /> + </ItemGroup> + </Project> diff --git a/AsbCloudWebApi.IntegrationTests/Clients/IProcessMapPlanDrillingClient.cs b/AsbCloudWebApi.IntegrationTests/Clients/IProcessMapPlanDrillingClient.cs index 7c8c65e3..e60f5e90 100644 --- a/AsbCloudWebApi.IntegrationTests/Clients/IProcessMapPlanDrillingClient.cs +++ b/AsbCloudWebApi.IntegrationTests/Clients/IProcessMapPlanDrillingClient.cs @@ -1,6 +1,6 @@ -using AsbCloudApp.Data.ProcessMapPlan; +using AsbCloudApp.Data; +using AsbCloudApp.Data.ProcessMapPlan; using AsbCloudApp.Requests; -using Microsoft.AspNetCore.Mvc; using Refit; namespace AsbCloudWebApi.IntegrationTests.Clients; @@ -32,4 +32,8 @@ public interface IProcessMapPlanDrillingClient [Put(BaseRoute)] Task<IApiResponse<int>> UpdateOrInsertRange(int idWell, IEnumerable<ProcessMapPlanDrillingDto> dtos); + + [Multipart] + [Post(BaseRoute + "/parse")] + Task<IApiResponse<ParserResultDto<ProcessMapPlanDrillingDto>>> Parse(int idWell, [AliasAs("files")] IEnumerable<StreamPart> streams); } diff --git a/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/Files/ProcessMapPlanDrillingInvalid.xlsx b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/Files/ProcessMapPlanDrillingInvalid.xlsx new file mode 100644 index 00000000..09865489 Binary files /dev/null and b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/Files/ProcessMapPlanDrillingInvalid.xlsx differ diff --git a/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/Files/ProcessMapPlanDrillingValid.xlsx b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/Files/ProcessMapPlanDrillingValid.xlsx new file mode 100644 index 00000000..b2bdd446 Binary files /dev/null and b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/Files/ProcessMapPlanDrillingValid.xlsx differ diff --git a/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlanDrillingControllerTest.cs b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapPlanDrillingControllerTest.cs similarity index 89% rename from AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlanDrillingControllerTest.cs rename to AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapPlanDrillingControllerTest.cs index c0ba7093..67844201 100644 --- a/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlanDrillingControllerTest.cs +++ b/AsbCloudWebApi.IntegrationTests/Controllers/ProcessMapPlan/ProcessMapPlanDrillingControllerTest.cs @@ -1,31 +1,35 @@ using AsbCloudApp.Data.ProcessMapPlan; using AsbCloudApp.Requests; using AsbCloudDb.Model.ProcessMapPlan; -using AsbCloudDb.Model.ProcessMaps; using AsbCloudWebApi.IntegrationTests.Clients; using Mapster; using Microsoft.EntityFrameworkCore; using System.Net; +using System.Reflection; +using AsbCloudDb.Model.ProcessMaps; +using AsbCloudWebApi.IntegrationTests.Data; +using Refit; using Xunit; -namespace AsbCloudWebApi.IntegrationTests.Controllers; +namespace AsbCloudWebApi.IntegrationTests.Controllers.ProcessMapPlan; public class ProcessMapPlanDrillingControllerTest: BaseIntegrationTest { - private IProcessMapPlanDrillingClient client; private readonly ProcessMapPlanDrillingDto dto = new (){ Id = 0, Creation = new(), Obsolete = null, IdState = 0, IdPrevious = null, - + IdWell = 1, - IdWellSectionType = 1, + Section = "Кондуктор", + IdWellSectionType = 3, DepthStart = 0.5, DepthEnd = 1.5, IdMode = 1, + Mode = "ротор", AxialLoadPlan = 2.718281, AxialLoadLimitMax = 3.1415926, DeltaPressurePlan = 4, @@ -73,6 +77,8 @@ public class ProcessMapPlanDrillingControllerTest: BaseIntegrationTest Comment = "это тестовая запись", }; + private IProcessMapPlanDrillingClient client; + public ProcessMapPlanDrillingControllerTest(WebAppFactoryFixture factory) : base(factory) { dbContext.CleanupDbSet<ProcessMapPlanDrilling>(); @@ -109,6 +115,8 @@ public class ProcessMapPlanDrillingControllerTest: BaseIntegrationTest nameof(ProcessMapPlanDrillingDto.IdState), nameof(ProcessMapPlanDrillingDto.Author), nameof(ProcessMapPlanDrillingDto.Creation), + nameof(ProcessMapPlanDrillingDto.Mode), + nameof(ProcessMapPlanDrillingDto.Section) }; MatchHelper.Match(expected, actual, excludeProps); } @@ -556,4 +564,59 @@ public class ProcessMapPlanDrillingControllerTest: BaseIntegrationTest }; MatchHelper.Match(expected, actual, excludeProps); } + + [Fact] + public async Task Parse_returns_success() + { + //arrange + const string fileName = "ProcessMapPlanDrillingValid.xlsx"; + var stream = Assembly.GetExecutingAssembly().GetFileCopyStream(fileName); + + //act + var streamPart = new StreamPart(stream, fileName, "application/octet-stream"); + var response = await client.Parse(Defaults.Wells[0].Id, new[] { streamPart }); + + //assert + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + + var parserResult = response.Content; + + Assert.NotNull(parserResult); + Assert.Single(parserResult.Item); + Assert.True(parserResult.IsValid); + + var row = parserResult.Item.First(); + var dtoActual = row.Item; + + Assert.True(row.IsValid); + + var excludeProps = new[] { nameof(ProcessMapPlanDrillingDto.IdWell) }; + MatchHelper.Match(dto, dtoActual, excludeProps); + } + + [Fact] + public async Task Parse_returns_success_for_result_with_warnings() + { + //arrange + const string fileName = "ProcessMapPlanDrillingInvalid.xlsx"; + var stream = Assembly.GetExecutingAssembly().GetFileCopyStream(fileName); + + //act + var streamPart = new StreamPart(stream, fileName, "application/octet-stream"); + var response = await client.Parse(Defaults.Wells[0].Id, new[] { streamPart }); + + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + + var parserResult = response.Content; + + Assert.NotNull(parserResult); + Assert.False(parserResult.IsValid); + Assert.Single(parserResult.Warnings); + Assert.Single(parserResult.Item); + + var row = parserResult.Item.First(); + + Assert.False(row.IsValid); + Assert.Equal(2, row.Warnings.Count()); + } }