using System; using AsbCloudInfrastructure.Services.DetectOperations; using AsbCloudInfrastructure.Services.DetectOperations.Detectors; using Xunit; namespace AsbCloudWebApi.Tests.Services.DetectedOperations.Detectors; public class DetectorSlipsTimeTests { private const int IdSlipsTime = 5011; private readonly DetectableTelemetry telemetry = new() { WellDepth = 300, Pressure = 15, HookWeight = 20, BlockPosition = 20, BitDepth = 151, AxialLoad = 19, }; private readonly DetectorSlipsTime sut = new(); [Fact] public void DetectOperation_by_change_block_position_and_axial_load_less_hook_weight_is_success() { //arrange var point0 = telemetry.Copy(); var point1 = telemetry.Copy(); point1.BlockPosition = 21; var telemetries = new[] { point0, point1 }; //act var isDetectOperation = sut.TryDetect(0, telemetries, 0, telemetries.Length - 1, null, out var result); //assert Assert.True(isDetectOperation); Assert.NotNull(result); Assert.Equal(IdSlipsTime, result.Operation.IdCategory); } [Fact] public void DetectOperation_by_high_pressure_is_success() { //arrange var point0 = telemetry.Copy(); var point1 = telemetry.Copy(); point1.BlockPosition = 21; point1.AxialLoad = 30; point1.HookWeight = 20; point1.Pressure = 23; var telemetries = new[] { point0, point1 }; //act var isDetectOperation = sut.TryDetect(0, telemetries, 0, telemetries.Length - 1, null, out var result); //assert Assert.True(isDetectOperation); Assert.NotNull(result); Assert.Equal(IdSlipsTime, result.Operation.IdCategory); } [Fact] public void ValidateOperation_with_duration_more_30_minutes_is_invalid() { //arrange var point0 = telemetry.Copy(); var point1 = telemetry.Copy(); point1.BlockPosition = 21; point1.DateTime = DateTimeOffset.UtcNow.AddMinutes(30); var telemetries = new[] { point0, point1 }; //act var isDetectOperation = sut.TryDetect(0, telemetries, 0, telemetries.Length - 1, null, out var result); //assert Assert.False(isDetectOperation); Assert.NotNull(result); Assert.Equal(IdSlipsTime, result.Operation.IdCategory); } }