forked from ddrilling/AsbCloudServer
Комментарии к автотестам + перегрузка метода BuildQuery
This commit is contained in:
parent
5cbe97e950
commit
fa9095b2f0
@ -209,24 +209,10 @@ public class WellOperationRepository : IWellOperationRepository
|
||||
WellsOperationRequest request,
|
||||
CancellationToken token)
|
||||
{
|
||||
var query = db.WellOperations
|
||||
.Where(o => request.IdsWell.Contains(o.IdWell))
|
||||
.Where(o => request.IdType == o.IdType)
|
||||
.Where(o => request.SectionTypeIds != null ? request.SectionTypeIds.Contains(o.IdWellSectionType) : true)
|
||||
.Where(o => request.OperationCategoryIds != null ? request.OperationCategoryIds.Contains(o.IdCategory) : true)
|
||||
.Select(o => new WellOperationDataDto(){
|
||||
DepthStart = o.DepthStart,
|
||||
DurationHours = o.DurationHours,
|
||||
IdCategory = o.IdCategory,
|
||||
IdWell = o.IdWell,
|
||||
IdWellSectionType = o.IdWellSectionType,
|
||||
OperationCategoryName = o.OperationCategory.Name,
|
||||
WellSectionTypeCaption = o.WellSectionType.Caption,
|
||||
})
|
||||
.AsNoTracking();
|
||||
var query = BuildQuery(request)
|
||||
.AsNoTracking();
|
||||
|
||||
var dtos = await query.ToArrayAsync(token);
|
||||
|
||||
return dtos;
|
||||
}
|
||||
|
||||
@ -497,6 +483,49 @@ public class WellOperationRepository : IWellOperationRepository
|
||||
return dtos.AsNoTracking();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Получение данных по запросу
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <param name="token"></param>
|
||||
/// <returns></returns>
|
||||
private IQueryable<WellOperationDataDto> BuildQuery(WellsOperationRequest request)
|
||||
{
|
||||
var query = db.WellOperations
|
||||
.Where(o => request.IdsWell.Contains(o.IdWell))
|
||||
.Where(o => request.IdType == o.IdType);
|
||||
|
||||
if (request.SectionTypeIds?.Any() == true)
|
||||
query = query.Where(o => request.SectionTypeIds.Contains(o.IdWellSectionType));
|
||||
|
||||
if (request.OperationCategoryIds?.Any() == true)
|
||||
query = query.Where(o => request.OperationCategoryIds.Contains(o.IdCategory));
|
||||
|
||||
var dtos = query.Select(o => new WellOperationDataDto
|
||||
{
|
||||
DepthStart = o.DepthStart,
|
||||
DurationHours = o.DurationHours,
|
||||
IdCategory = o.IdCategory,
|
||||
IdWell = o.IdWell,
|
||||
IdWellSectionType = o.IdWellSectionType,
|
||||
OperationCategoryName = o.OperationCategory.Name,
|
||||
WellSectionTypeCaption = o.WellSectionType.Caption,
|
||||
});
|
||||
|
||||
if (request.SortFields?.Any() == true)
|
||||
{
|
||||
dtos = dtos.SortBy(request.SortFields);
|
||||
}
|
||||
|
||||
if (request.Skip.HasValue)
|
||||
dtos = dtos.Skip(request.Skip.Value);
|
||||
|
||||
if (request.Take.HasValue)
|
||||
dtos = dtos.Take(request.Take.Value);
|
||||
|
||||
return dtos.AsNoTracking();
|
||||
}
|
||||
|
||||
private WellOperationDto Convert(WellOperationDto dto)
|
||||
{
|
||||
var timezone = wellService.GetTimezone(dto.IdWell);
|
||||
|
@ -171,8 +171,14 @@ namespace AsbCloudWebApi.Tests.Services.WellCompositeOperation
|
||||
wellOperationRepository);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// На вход подаются 2 операции с одинаковыми секциями (id = 2), но разными категориями (ids = 5096, 5008) и ключами скважин (ids = 55, 64)
|
||||
/// Метод возвращает список из одной операции в разрезе 3-х скважин: 2 текущие скважины и одна композитная
|
||||
/// Операция должна иметь категорию 5013 для всех трех скважин
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[Fact]
|
||||
public async Task GetAsync_return_data()
|
||||
public async Task GetAsync_return_composite_and_others_with_category_5013()
|
||||
{
|
||||
// arrange
|
||||
wellOperationRepository.GetAsync(Arg.Any<WellsOperationRequest>(), Arg.Any<CancellationToken>())
|
||||
@ -200,9 +206,14 @@ namespace AsbCloudWebApi.Tests.Services.WellCompositeOperation
|
||||
Assert.Equal("Подъем КНБК", categoryName);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// На вход подаются 2 операции с одинаковыми секциями (id = 2) и категориями (id = 5003), но разными ключами скважин (ids = 55, 64)
|
||||
/// Метод возвращает список из одной операции в разрезе 3-х скважин: 2 текущие скважины и одна композитная
|
||||
/// Операция композитной скважины должна содержать данные той операции, которая содержит минимальный duration_hours
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[Fact]
|
||||
public async Task GetAsync_return_data2()
|
||||
public async Task GetAsync_return_composite_with_minimum_depth_start()
|
||||
{
|
||||
// arrange
|
||||
wellOperationRepository.GetAsync(Arg.Any<WellsOperationRequest>(), Arg.Any<CancellationToken>())
|
||||
@ -221,6 +232,12 @@ namespace AsbCloudWebApi.Tests.Services.WellCompositeOperation
|
||||
Assert.Equal(10, compositeWellOperation.DepthStart);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// На вход подаются 2 операции с одинаковыми секциями (id = 3) и категориями (id = 5036), но разными ключами скважин (ids = 55, 64)
|
||||
/// Метод возвращает список из одной операции в разрезе 3-х скважин: 2 текущие скважины и одна композитная
|
||||
/// Операция композитной скважины должна содержать данные той операции, которая содержит минимальный duration_hours
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[Fact]
|
||||
public async Task GetAsync_return_data3()
|
||||
{
|
||||
@ -241,6 +258,16 @@ namespace AsbCloudWebApi.Tests.Services.WellCompositeOperation
|
||||
Assert.Equal(1372, compositeWellOperation.DepthStart);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// На вход подаются 3 операции с одинаковыми секциями (id = 31), но разными категориями (ids = 5012, 5083) и ключами скважин (ids = 55, 64)
|
||||
/// Метод возвращает список из одной операции в разрезе 3-х скважин: 2 текущие скважины и одна композитная
|
||||
/// Операция композитной скважины должна содержать:
|
||||
/// данные той операции, которая содержит минимальный duration_hours
|
||||
/// категорию с ключом 5013
|
||||
/// Операции по скважине с ключом 55 должны объединиться в одну,
|
||||
/// при этом их длительность складывается, а depth_start берется минимальный из двух
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[Fact]
|
||||
public async Task GetAsync_return_data4()
|
||||
{
|
||||
@ -260,16 +287,27 @@ namespace AsbCloudWebApi.Tests.Services.WellCompositeOperation
|
||||
Assert.Single(categories);
|
||||
Assert.Equal(5013, categories.First());
|
||||
|
||||
var currentOperationByWell55 = currentWellOperations.Where(o => o.IdWell == 55).FirstOrDefault();
|
||||
Assert.NotNull(currentOperationByWell55);
|
||||
Assert.Equal(15, currentOperationByWell55.DurationHours);
|
||||
Assert.Equal(500, currentOperationByWell55.DepthStart);
|
||||
|
||||
var categoryName = currentWellOperations.Select(o => o.OperationCategoryName).First();
|
||||
Assert.Equal("Подъем КНБК", categoryName);
|
||||
|
||||
var compositeWellOperation = result.SelectMany(o => o.Values.Where(o => o.IdWell == 0)).FirstOrDefault();
|
||||
Assert.NotNull(compositeWellOperation);
|
||||
Assert.Equal(5013, compositeWellOperation.IdCategory);
|
||||
Assert.Equal(15, compositeWellOperation.DurationHours);
|
||||
Assert.Equal(500, compositeWellOperation.DepthStart);
|
||||
Assert.Equal(5, compositeWellOperation.DurationHours);
|
||||
Assert.Equal(600, compositeWellOperation.DepthStart);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// На вход подаются список разных операций с разными ключами скважин (ids = 55, 64)
|
||||
/// Метод возвращает список из 4-х операций в разрезе 3-х скважин: 2 текущие скважины и одна композитная
|
||||
/// Операция композитной скважины должна содержать глубину забоя = 1372
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[Fact]
|
||||
public async Task GetAsync_return_data5()
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user