From dc96d03740ce7127cabdfb10cd53652b5df98abd Mon Sep 17 00:00:00 2001 From: Olga Nemt Date: Tue, 23 Apr 2024 14:43:17 +0500 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=BD=D1=82=D0=B5=D0=B3=D1=80=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D0=BE=D0=BD=D0=BD=D1=8B=D0=B9=20=D1=82=D0=B5=D1=81?= =?UTF-8?q?=D1=82=20=D0=B4=D0=BB=D1=8F=20=D1=81=D0=BE=D0=BF=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BA=D0=B0?= =?UTF-8?q?=D1=82=D0=B5=D0=B3=D0=BE=D1=80=D0=B8=D0=B9=20=D0=BC=D0=B5=D0=B6?= =?UTF-8?q?=D0=B4=D1=83=20=D1=88=D0=B0=D0=B1=D0=BB=D0=BE=D0=BD=D0=B0=D0=BC?= =?UTF-8?q?=D0=B8=20=D0=B8=D0=BC=D0=BF=D0=BE=D1=80=D1=82=D0=B0/=D1=8D?= =?UTF-8?q?=D0=BA=D1=81=D0=BF=D0=BE=D1=80=D1=82=D0=B0=20=D0=93=D0=93=D0=94?= =?UTF-8?q?=20=D0=B8=20=D0=B7=D0=B0=D0=BF=D0=B8=D1=81=D1=8F=D0=BC=D0=B8=20?= =?UTF-8?q?=D0=B2=20=D0=91=D0=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Templates/WellOperationFactTemplate.xlsx | Bin 37120 -> 37024 bytes .../Templates/WellOperationPlanTemplate.xlsx | Bin 40098 -> 40045 bytes .../Clients/IWellOperationClient.cs | 6 + .../WellOperationControllerTest.cs | 362 ++++++++++-------- 4 files changed, 208 insertions(+), 160 deletions(-) diff --git a/AsbCloudInfrastructure/Services/WellOperations/Templates/WellOperationFactTemplate.xlsx b/AsbCloudInfrastructure/Services/WellOperations/Templates/WellOperationFactTemplate.xlsx index 97e0f79a5f1dc05ca7461d5e50aa8c858cfff777..928ffeb6977c7f45eca8206b5ac11b7ef5ca5829 100644 GIT binary patch literal 37024 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 diff --git a/AsbCloudWebApi.IntegrationTests/Clients/IWellOperationClient.cs b/AsbCloudWebApi.IntegrationTests/Clients/IWellOperationClient.cs index b9e63518..9a9a5b7e 100644 --- a/AsbCloudWebApi.IntegrationTests/Clients/IWellOperationClient.cs +++ b/AsbCloudWebApi.IntegrationTests/Clients/IWellOperationClient.cs @@ -29,4 +29,10 @@ public interface IWellOperationClient [Get(BaseRoute + "/export")] Task> ExportAsync(int idWell, int idType); + + [Get(BaseRoute + "/template")] + Task> GetTemplate(int idWell, int idType); + + [Get(BaseRoute + "/categories")] + Task>> GetCategories(int idWell, bool includeParents, bool includeHidden); } \ No newline at end of file diff --git a/AsbCloudWebApi.IntegrationTests/Controllers/WellOperations/WellOperationControllerTest.cs b/AsbCloudWebApi.IntegrationTests/Controllers/WellOperations/WellOperationControllerTest.cs index 1a700189..0c4b3dea 100644 --- a/AsbCloudWebApi.IntegrationTests/Controllers/WellOperations/WellOperationControllerTest.cs +++ b/AsbCloudWebApi.IntegrationTests/Controllers/WellOperations/WellOperationControllerTest.cs @@ -1,208 +1,250 @@ -using System.Net; -using System.Reflection; using AsbCloudApp.Data.WellOperation; using AsbCloudApp.Requests; using AsbCloudDb.Model; +using AsbCloudInfrastructure; using AsbCloudWebApi.IntegrationTests.Clients; using AsbCloudWebApi.IntegrationTests.Data; +using ClosedXML.Excel; using Mapster; using Microsoft.EntityFrameworkCore; using Refit; +using System.Net; +using System.Reflection; using Xunit; namespace AsbCloudWebApi.IntegrationTests.Controllers.WellOperations; public class WellOperationControllerTest : BaseIntegrationTest { - private IWellOperationClient client; + private IWellOperationClient client; - public WellOperationControllerTest(WebAppFactoryFixture factory) - : base(factory) - { - client = factory.GetAuthorizedHttpClient(string.Empty); + public WellOperationControllerTest(WebAppFactoryFixture factory) + : base(factory) + { + client = factory.GetAuthorizedHttpClient(string.Empty); - dbContext.CleanupDbSet(); - } + dbContext.CleanupDbSet(); + } - /// - /// Успешное добавление операций (без предварительной очистки данных) - /// - /// - [Fact] - public async Task InsertRange_returns_success() - { - //arrange - var well = await dbContext.Wells.FirstAsync(); - var entity = CreateWellOperation(well.Id); - var dtos = new[] { entity.Adapt() }; + /// + /// Успешное добавление операций (без предварительной очистки данных) + /// + /// + [Fact] + public async Task InsertRange_returns_success() + { + //arrange + var well = await dbContext.Wells.FirstAsync(); + var entity = CreateWellOperation(well.Id); + var dtos = new[] { entity.Adapt() }; - //act - var response = await client.InsertRangeAsync(well.Id, false, dtos); + //act + var response = await client.InsertRangeAsync(well.Id, false, dtos); - //assert - Assert.Equal(HttpStatusCode.OK, response.StatusCode); - } + //assert + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + } - /// - /// Успешное добавление операций (с предварительной очисткой данных) - /// - /// - [Fact] - public async Task InsertRangeWithDeleteBefore_returns_success() - { - //arrange - var well = await dbContext.Wells.FirstAsync(); - var entity = CreateWellOperation(well.Id); - var dtos = new[] { entity.Adapt() }; + /// + /// Успешное добавление операций (с предварительной очисткой данных) + /// + /// + [Fact] + public async Task InsertRangeWithDeleteBefore_returns_success() + { + //arrange + var well = await dbContext.Wells.FirstAsync(); + var entity = CreateWellOperation(well.Id); + var dtos = new[] { entity.Adapt() }; - //act - var response = await client.InsertRangeAsync(well.Id, true, dtos); + //act + var response = await client.InsertRangeAsync(well.Id, true, dtos); - //assert - Assert.Equal(HttpStatusCode.OK, response.StatusCode); - } + //assert + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + } - /// - /// Успешное обновление операций - /// - /// - [Fact] - public async Task UpdateRangeAsync_returns_success() - { - //arrange - var well = await dbContext.Wells.FirstAsync(); - var entity = CreateWellOperation(well.Id); - dbContext.WellOperations.Add(entity); - await dbContext.SaveChangesAsync(); + /// + /// Успешное обновление операций + /// + /// + [Fact] + public async Task UpdateRangeAsync_returns_success() + { + //arrange + var well = await dbContext.Wells.FirstAsync(); + var entity = CreateWellOperation(well.Id); + dbContext.WellOperations.Add(entity); + await dbContext.SaveChangesAsync(); - var dtos = new[] { entity.Adapt() }; + var dtos = new[] { entity.Adapt() }; - //act - var response = await client.UpdateRangeAsync(well.Id, dtos); + //act + var response = await client.UpdateRangeAsync(well.Id, dtos); - //assert - Assert.Equal(HttpStatusCode.OK, response.StatusCode); - } + //assert + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + } - /// - /// Получение плановых операций - /// - /// - [Fact] - public async Task GetPageOperationsAsync_returns_first_page() - { - //arrange - const int pageSize = 10; - const int pageIndex = 0; - - var well = await dbContext.Wells.FirstAsync(); - var entity = CreateWellOperation(well.Id); - dbContext.WellOperations.Add(entity); - await dbContext.SaveChangesAsync(); + /// + /// Получение плановых операций + /// + /// + [Fact] + public async Task GetPageOperationsAsync_returns_first_page() + { + //arrange + const int pageSize = 10; + const int pageIndex = 0; - var dto = entity.Adapt(); - var timezoneOffset = TimeSpan.FromHours(well.Timezone.Hours); - dto.DateStart = dto.DateStart.ToOffset(timezoneOffset); - dto.LastUpdateDate = dto.LastUpdateDate?.ToOffset(timezoneOffset); + var well = await dbContext.Wells.FirstAsync(); + var entity = CreateWellOperation(well.Id); + dbContext.WellOperations.Add(entity); + await dbContext.SaveChangesAsync(); - var request = new WellOperationRequestBase - { - OperationType = WellOperation.IdOperationTypePlan, - Skip = pageIndex, - Take = pageSize, - }; + var dto = entity.Adapt(); + var timezoneOffset = TimeSpan.FromHours(well.Timezone.Hours); + dto.DateStart = dto.DateStart.ToOffset(timezoneOffset); + dto.LastUpdateDate = dto.LastUpdateDate?.ToOffset(timezoneOffset); - //act - var response = await client.GetPageOperationsAsync(well.Id, request); + var request = new WellOperationRequestBase + { + OperationType = WellOperation.IdOperationTypePlan, + Skip = pageIndex, + Take = pageSize, + }; - //assert - Assert.Equal(response.StatusCode, HttpStatusCode.OK); - Assert.NotNull(response.Content); + //act + var response = await client.GetPageOperationsAsync(well.Id, request); - var totalExpected = response.Content.Count - pageSize * pageIndex; - Assert.Equal(totalExpected, response.Content.Items.Count()); + //assert + Assert.Equal(response.StatusCode, HttpStatusCode.OK); + Assert.NotNull(response.Content); - Assert.Single(response.Content.Items); - var actualDto = response.Content.Items.First(); + var totalExpected = response.Content.Count - pageSize * pageIndex; + Assert.Equal(totalExpected, response.Content.Items.Count()); - MatchHelper.Match(dto, actualDto); - } + Assert.Single(response.Content.Items); + var actualDto = response.Content.Items.First(); - [Theory] - [InlineData(WellOperation.IdOperationTypePlan, "PlanWellOperations.xlsx")] - [InlineData(WellOperation.IdOperationTypeFact, "FactWellOperations.xlsx")] - public async Task ParseAsync_returns_success(int idType, string fileName) - { - //arrange - var well = await dbContext.Wells.FirstAsync(); + MatchHelper.Match(dto, actualDto); + } - var expectedDto = new WellOperationDto - { - IdWell = well.Id, - IdWellSectionType = 2, - IdCategory = WellOperationCategory.IdSlide, - IdPlan = null, - CategoryInfo = "Доп.инфо", - IdType = idType, - DepthStart = 10.0, - DepthEnd = 20.0, - DateStart = new DateTimeOffset(new DateTime(2023, 1, 10), TimeSpan.FromHours(well.Timezone.Hours)), - DurationHours = 1.0, - Comment = "123", - }; + [Theory] + [InlineData(WellOperation.IdOperationTypePlan, "PlanWellOperations.xlsx")] + [InlineData(WellOperation.IdOperationTypeFact, "FactWellOperations.xlsx")] + public async Task ParseAsync_returns_success(int idType, string fileName) + { + //arrange + var well = await dbContext.Wells.FirstAsync(); - var stream = Assembly.GetExecutingAssembly().GetFileCopyStream(fileName); + var expectedDto = new WellOperationDto + { + IdWell = well.Id, + IdWellSectionType = 2, + IdCategory = WellOperationCategory.IdSlide, + IdPlan = null, + CategoryInfo = "Доп.инфо", + IdType = idType, + DepthStart = 10.0, + DepthEnd = 20.0, + DateStart = new DateTimeOffset(new DateTime(2023, 1, 10), TimeSpan.FromHours(well.Timezone.Hours)), + DurationHours = 1.0, + Comment = "123", + }; - var streamPart = new StreamPart(stream, fileName, "application/octet-stream"); + var stream = Assembly.GetExecutingAssembly().GetFileCopyStream(fileName); - //act - var response = await client.ParseAsync(well.Id, idType, streamPart); + var streamPart = new StreamPart(stream, fileName, "application/octet-stream"); - //assert - Assert.Equal(HttpStatusCode.OK, response.StatusCode); - Assert.NotNull(response.Content); + //act + var response = await client.ParseAsync(well.Id, idType, streamPart); - var actualDto = response.Content.Item.First().Item; + //assert + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + Assert.NotNull(response.Content); - MatchHelper.Match(expectedDto, actualDto); - } + var actualDto = response.Content.Item.First().Item; - [Theory] - [InlineData(WellOperation.IdOperationTypePlan)] - [InlineData(WellOperation.IdOperationTypeFact)] - public async Task ExportAsync_returns_success(int idType) - { - //arrange - var well = await dbContext.Wells.FirstAsync(); + MatchHelper.Match(expectedDto, actualDto); + } - var entity = CreateWellOperation(well.Id, idType); - dbContext.WellOperations.Add(entity); - await dbContext.SaveChangesAsync(); + [Theory] + [InlineData(WellOperation.IdOperationTypePlan)] + [InlineData(WellOperation.IdOperationTypeFact)] + public async Task ExportAsync_returns_success(int idType) + { + //arrange + var well = await dbContext.Wells.FirstAsync(); - //act - var response = await client.ExportAsync(well.Id, idType); + var entity = CreateWellOperation(well.Id, idType); + dbContext.WellOperations.Add(entity); + await dbContext.SaveChangesAsync(); - //assert - Assert.Equal(HttpStatusCode.OK, response.StatusCode); - Assert.Equal("application/octet-stream", response.ContentHeaders?.ContentType?.MediaType); - Assert.True(response.ContentHeaders?.ContentLength > 0); - } + //act + var response = await client.ExportAsync(well.Id, idType); - private static WellOperation CreateWellOperation(int idWell, int idType = WellOperation.IdOperationTypePlan) => - new() - { - IdWell = idWell, - IdWellSectionType = 2, - IdCategory = WellOperationCategory.IdSlide, - IdPlan = null, - CategoryInfo = "Доп.инфо", - LastUpdateDate = new DateTimeOffset(new DateTime(2023, 1, 10)).ToUniversalTime(), - IdType = idType, - DepthStart = 10.0, - DepthEnd = 20.0, - DateStart = new DateTimeOffset(new DateTime(2023, 1, 10), TimeSpan.FromHours(Defaults.Timezone.Hours)).ToUniversalTime(), - DurationHours = 1.0, - Comment = "1", - IdUser = 1, - }; + //assert + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + Assert.Equal("application/octet-stream", response.ContentHeaders?.ContentType?.MediaType); + Assert.True(response.ContentHeaders?.ContentLength > 0); + } + + [Theory] + [InlineData(WellOperation.IdOperationTypePlan)] + [InlineData(WellOperation.IdOperationTypeFact)] + public async Task MatchCategoriesFromTemplateAndDb_returns_success(int idType) + { + //arrange + var well = await dbContext.Wells.FirstAsync(); + var responseTemplate = await client.GetTemplate(well.Id, idType); + var stream = responseTemplate.Content; + + using var workbook = new XLWorkbook(stream); + var sheet = workbook.GetWorksheet("Справочники"); + + var count = sheet.RowsUsed().Count() - 1; + + var categoryCaptionsInTemplate = new List(); + for (var i = 0; i < count; i++) + { + var xlRow = sheet.Row(i + 2); + var rowNumber = xlRow.RowNumber(); + + var xlCell = xlRow.Cell(1); + var cellValue = xlCell.GetText().Trim(); + + categoryCaptionsInTemplate.Add(cellValue); + } + + var responseCategories = await client.GetCategories(well.Id, false, false); + var categories = responseCategories.Content; + var categoryCaptionsInDb = categories!.Select(c => c.Name.Trim()); + + var notExistedInTemplate = categoryCaptionsInDb.Except(categoryCaptionsInTemplate); + var notExistedInDb = categoryCaptionsInTemplate.Except(categoryCaptionsInDb); + + //assert + Assert.True(categoryCaptionsInDb.Count() == categoryCaptionsInTemplate.Count()); + Assert.True(notExistedInTemplate.Count() == 0); + Assert.True(notExistedInDb.Count() == 0); + } + + private static WellOperation CreateWellOperation(int idWell, int idType = WellOperation.IdOperationTypePlan) => + new() + { + IdWell = idWell, + IdWellSectionType = 2, + IdCategory = WellOperationCategory.IdSlide, + IdPlan = null, + CategoryInfo = "Доп.инфо", + LastUpdateDate = new DateTimeOffset(new DateTime(2023, 1, 10)).ToUniversalTime(), + IdType = idType, + DepthStart = 10.0, + DepthEnd = 20.0, + DateStart = new DateTimeOffset(new DateTime(2023, 1, 10), TimeSpan.FromHours(Defaults.Timezone.Hours)).ToUniversalTime(), + DurationHours = 1.0, + Comment = "1", + IdUser = 1, + }; } \ No newline at end of file