From 47e9c9f2cd042fdb5a19c709ba7db84772524d83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D1=82=D0=B5=D0=BF=D0=B0=D0=BD=D0=BE=D0=B2=20=D0=94?= =?UTF-8?q?=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Fri, 1 Mar 2024 07:33:39 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A2=D0=B5=D1=81=D1=82=D1=8B=20=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BE=D0=B3=D0=BE=20=D0=B0=D0=BB=D0=B3=D0=BE=D1=80=D0=B8?= =?UTF-8?q?=D1=82=D0=BC=D0=B0=20"=D0=A3=D0=B4=D0=B5=D1=80=D0=B6=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B2=20=D0=BA=D0=BB=D0=B8=D0=BD=D1=8C?= =?UTF-8?q?=D1=8F=D1=85"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Builders/DetectableTelemetryBuilder.cs | 69 +++++++++++ .../Detectors/DetectorSlipsTimeTests.cs | 109 ++++++++++++++++++ 2 files changed, 178 insertions(+) create mode 100644 AsbCloudWebApi.Tests/Builders/DetectableTelemetryBuilder.cs create mode 100644 AsbCloudWebApi.Tests/Services/DetectedOperations/Detectors/DetectorSlipsTimeTests.cs diff --git a/AsbCloudWebApi.Tests/Builders/DetectableTelemetryBuilder.cs b/AsbCloudWebApi.Tests/Builders/DetectableTelemetryBuilder.cs new file mode 100644 index 00000000..f0acdc09 --- /dev/null +++ b/AsbCloudWebApi.Tests/Builders/DetectableTelemetryBuilder.cs @@ -0,0 +1,69 @@ +using System; +using AsbCloudInfrastructure.Services.DetectOperations; + +namespace AsbCloudWebApi.Tests.Builders; + +public class DetectableTelemetryBuilder +{ + private DateTimeOffset dateTime = DateTimeOffset.UtcNow; + private float wellDepth = 300; + private float pressure = 15; + private float hookWeight = 20; + private float blockPosition = 20; + private float bitDepth = 151; + private float axialLoad = 19; + + public DetectableTelemetryBuilder WithDateTime(DateTimeOffset newDateTime) + { + dateTime = newDateTime; + return this; + } + + public DetectableTelemetryBuilder WithWellDepth(float newWllDepth) + { + wellDepth = newWllDepth; + return this; + } + + public DetectableTelemetryBuilder WithPressure(float newPressure) + { + pressure = newPressure; + return this; + } + + public DetectableTelemetryBuilder WithHookWeight(float newHookWeight) + { + hookWeight = newHookWeight; + return this; + } + + public DetectableTelemetryBuilder WithBlockPosition(float newBlockPosition) + { + blockPosition = newBlockPosition; + return this; + } + + public DetectableTelemetryBuilder WithBitDepth(float newBitDepth) + { + bitDepth = newBitDepth; + return this; + } + + public DetectableTelemetryBuilder WithAxialLoad(float newAxialLoad) + { + axialLoad = newAxialLoad; + return this; + } + + public DetectableTelemetry Build() => + new() + { + DateTime = dateTime, + WellDepth = wellDepth, + Pressure = pressure, + HookWeight = hookWeight, + BlockPosition = blockPosition, + BitDepth = bitDepth, + AxialLoad = axialLoad + }; +} \ No newline at end of file diff --git a/AsbCloudWebApi.Tests/Services/DetectedOperations/Detectors/DetectorSlipsTimeTests.cs b/AsbCloudWebApi.Tests/Services/DetectedOperations/Detectors/DetectorSlipsTimeTests.cs new file mode 100644 index 00000000..ac8c373c --- /dev/null +++ b/AsbCloudWebApi.Tests/Services/DetectedOperations/Detectors/DetectorSlipsTimeTests.cs @@ -0,0 +1,109 @@ +using System; +using AsbCloudInfrastructure.Services.DetectOperations.Detectors; +using AsbCloudWebApi.Tests.Builders; +using Xunit; + +namespace AsbCloudWebApi.Tests.Services.DetectedOperations.Detectors; + +public class DetectorSlipsTimeTests +{ + private const int IdSlipsTime = 5011; + + private readonly DetectableTelemetryBuilder telemetryBuilder = new(); + + private readonly DetectorSlipsTime sut = new(); + + [Fact] + public void DetectOperation_by_change_block_position_and_axial_load_less_hook_weight_is_success() + { + //arrange + var point0 = telemetryBuilder + .Build(); + + var point1 = telemetryBuilder + .WithBlockPosition(21) + .Build(); + + 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 = telemetryBuilder + .Build(); + + var point1 = telemetryBuilder + .WithBlockPosition(21) + .WithAxialLoad(30) + .WithHookWeight(20) + .WithPressure(23) + .Build(); + + 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_well_depth_before_150_meters_is_invalid() + { + //arrange + var point0 = telemetryBuilder + .WithBitDepth(149) + .Build(); + + var point1 = telemetryBuilder + .WithBitDepth(149) + .WithBlockPosition(21) + .Build(); + + 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); + } + + [Fact] + public void ValidateOperation_with_duration_more_30_minutes_is_invalid() + { + //arrange + var point0 = telemetryBuilder + .Build(); + + var point1 = telemetryBuilder + .WithDateTime(DateTimeOffset.UtcNow.AddMinutes(30)) + .WithBlockPosition(21) + .Build(); + + 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); + } +} \ No newline at end of file