2024-03-15 14:51:13 +05:00
|
|
|
|
using AsbCloudDb.Model;
|
|
|
|
|
using AsbCloudInfrastructure.Services.DetectOperations;
|
|
|
|
|
using AsbCloudInfrastructure.Services.DetectOperations.Detectors;
|
|
|
|
|
using Xunit;
|
|
|
|
|
|
|
|
|
|
namespace AsbCloudWebApi.Tests.Services.DetectedOperations.Detectors;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2024-03-15 14:55:40 +05:00
|
|
|
|
/// Тестирование автоопределения операции "Промывка"
|
2024-03-15 14:51:13 +05:00
|
|
|
|
/// </summary>
|
|
|
|
|
public class DetectorFlashingTests : DetectorFlashing
|
|
|
|
|
{
|
|
|
|
|
private readonly DetectorFlashing detector = new();
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2024-03-15 14:55:40 +05:00
|
|
|
|
/// Операция, попадающая под автоопределение операции промывки
|
2024-03-15 14:51:13 +05:00
|
|
|
|
/// </summary>
|
|
|
|
|
private readonly DetectableTelemetry telemetry = new()
|
|
|
|
|
{
|
|
|
|
|
Pressure = 21,
|
|
|
|
|
WellDepth = 152,
|
|
|
|
|
BitDepth = 151,
|
|
|
|
|
RotorSpeed = 9,
|
|
|
|
|
DateTime = System.DateTimeOffset.Now
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2024-03-15 14:55:40 +05:00
|
|
|
|
/// Тестирование операций, попадающей под автоопределение операции промывки, при этом
|
|
|
|
|
/// - найден признак начала операции
|
|
|
|
|
/// - не найден признак окончания операции
|
2024-03-15 14:51:13 +05:00
|
|
|
|
/// </summary>
|
|
|
|
|
[Fact]
|
|
|
|
|
public void DetectOperation_find_startOperation_notFind_endOperation()
|
|
|
|
|
{
|
|
|
|
|
//arrange
|
|
|
|
|
var point0 = telemetry.Copy();
|
|
|
|
|
var point1 = telemetry.Copy();
|
|
|
|
|
point1.DateTime = System.DateTimeOffset.Now.AddMinutes(5);
|
|
|
|
|
|
|
|
|
|
var telemetries = new[] { point0, point1 };
|
|
|
|
|
|
|
|
|
|
//act
|
|
|
|
|
var isDetectOperation = detector.TryDetect(0, telemetries, 0, telemetries.Length - 1, null, out var result);
|
|
|
|
|
|
|
|
|
|
//assert
|
|
|
|
|
Assert.True(isDetectOperation);
|
|
|
|
|
Assert.NotNull(result);
|
|
|
|
|
Assert.Equal(WellOperationCategory.IdFlashing, result.Operation.IdCategory);
|
|
|
|
|
Assert.Equal(IdReasonOfEnd_NotDetected, result.Operation.ExtraData["IdReasonOfEnd"]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2024-03-15 14:55:40 +05:00
|
|
|
|
/// Операция, у которой глубина долота = 150м, не является промывкой
|
2024-03-15 14:51:13 +05:00
|
|
|
|
/// </summary>
|
|
|
|
|
[Fact]
|
|
|
|
|
public void DetectOperation_with_BitDepth_LE_150_is_fail()
|
|
|
|
|
{
|
|
|
|
|
//arrange
|
|
|
|
|
var point0 = telemetry.Copy();
|
|
|
|
|
point0.BitDepth = 150;
|
|
|
|
|
|
|
|
|
|
var point1 = telemetry.Copy();
|
|
|
|
|
|
|
|
|
|
var telemetries = new[] { point0, point1 };
|
|
|
|
|
|
2024-03-15 14:54:59 +05:00
|
|
|
|
//act
|
2024-03-15 14:51:13 +05:00
|
|
|
|
|
|
|
|
|
var isDetectOperation = detector.TryDetect(0, telemetries, 0, telemetries.Length - 1, null, out var result);
|
|
|
|
|
|
|
|
|
|
//assert
|
|
|
|
|
Assert.False(isDetectOperation);
|
|
|
|
|
Assert.Null(result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2024-03-15 14:55:40 +05:00
|
|
|
|
/// Операция, у которой меняется глубина забоя, не является промывкой
|
2024-03-15 14:51:13 +05:00
|
|
|
|
/// </summary>
|
|
|
|
|
[Fact]
|
|
|
|
|
public void DetectOperation_with_DeltaWellDepth_NotEqual_0_is_fail()
|
|
|
|
|
{
|
|
|
|
|
//arrange
|
|
|
|
|
var point0 = telemetry.Copy();
|
|
|
|
|
var point1 = telemetry.Copy();
|
|
|
|
|
point1.WellDepth = point0.WellDepth + 10;
|
|
|
|
|
|
|
|
|
|
var telemetries = new[] { point0, point1 };
|
|
|
|
|
|
|
|
|
|
//act
|
|
|
|
|
var isDetectOperation = detector.TryDetect(0, telemetries, 0, telemetries.Length - 1, null, out var result);
|
|
|
|
|
|
|
|
|
|
//assert
|
|
|
|
|
Assert.False(isDetectOperation);
|
|
|
|
|
Assert.Null(result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
2024-03-15 14:55:40 +05:00
|
|
|
|
/// Найдены начальная и конечная операции промывки,
|
|
|
|
|
/// Признак окончания операции - снижение давления менее 10 атм
|
2024-03-15 14:51:13 +05:00
|
|
|
|
/// </summary>
|
|
|
|
|
[Fact]
|
|
|
|
|
public void DetectOperations_Begin_And_End_by_Pressure_Less_20_is_success()
|
|
|
|
|
{
|
|
|
|
|
//arrange
|
|
|
|
|
var point0 = telemetry.Copy();
|
|
|
|
|
var point1 = telemetry.Copy();
|
|
|
|
|
point1.Pressure = 9;
|
|
|
|
|
point1.BitDepth = 140.0001f;
|
|
|
|
|
point1.RotorSpeed = 10;
|
|
|
|
|
|
|
|
|
|
var telemetries = new[] { point0, point1 };
|
|
|
|
|
|
|
|
|
|
//act
|
|
|
|
|
var isDetectOperation = detector.TryDetect(0, telemetries, 0, telemetries.Length - 1, null, out var result);
|
|
|
|
|
|
|
|
|
|
//assert
|
|
|
|
|
Assert.False(isDetectOperation);
|
|
|
|
|
Assert.NotNull(result);
|
|
|
|
|
Assert.Equal(WellOperationCategory.IdFlashing, result.Operation.IdCategory);
|
|
|
|
|
Assert.Equal(IdReasonOfEnd_PressureIsLo, result.Operation.ExtraData["IdReasonOfEnd"]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|