правка 2-х найденных багов + юнит тест

This commit is contained in:
Olga Nemt 2024-08-02 15:13:29 +05:00
parent 10497dcfbe
commit 59f663992c
2 changed files with 132 additions and 312 deletions

View File

@ -114,7 +114,7 @@ namespace AsbCloudInfrastructure.Services
if (indexEnd == indexStart)
continue;
var length = indexEnd - indexStart;
var length = indexEnd - indexStart + 1;
var subset = dataSaub.AsSpan(indexStart, length);
var stats = CalcStats(operation, subset);
@ -135,7 +135,7 @@ namespace AsbCloudInfrastructure.Services
if (IsNewCacheItem(previous, current) || i == dataSaub.Length - 1)
{
var length = i - indexStart;
var length = i - indexStart + 1;
var span = dataSaub.Slice(indexStart, length);
indexStart = i;
if (length <= 2 || (span[^1].WellDepth - span[0].WellDepth) < 0.001)

View File

@ -1,27 +1,24 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
using AsbCloudApp.Data;
using AsbCloudApp.Data.DetectedOperation;
using AsbCloudApp.Data.SAUB;
using AsbCloudApp.Data.User;
using AsbCloudApp.Repositories;
using AsbCloudApp.Requests;
using AsbCloudApp.Services;
using AsbCloudInfrastructure.Repository;
using AsbCloudInfrastructure.Services;
using AsbCloudInfrastructure.Services.SAUB;
using Mapster;
using NSubstitute;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Xunit;
namespace AsbCloudWebApi.Tests.Services;
public class DataSaubStatServiceTest
{
private readonly int Gap = 5;
private readonly IDataSaubStatRepository dataSaubStatRepositoryMock = Substitute.For<IDataSaubStatRepository>();
private readonly ITelemetryDataCache<TelemetryDataSaubDto> telemetryDataCacheMock = Substitute.For<ITelemetryDataCache<TelemetryDataSaubDto>>();
private readonly IDetectedOperationRepository detectedOperationRepositoryMock = Substitute.For<IDetectedOperationRepository>();
@ -29,7 +26,7 @@ public class DataSaubStatServiceTest
private DataSaubStatService dataSaubStatService;
private int[] idTelemetries = [1, 2, 3];
private int[] idTelemetries = [1];
private IEnumerable<DataSaubStatDto> dataSaubStatDtos = new List<DataSaubStatDto>()
{
new DataSaubStatDto {
@ -109,7 +106,7 @@ public class DataSaubStatServiceTest
},
};
private IEnumerable<DetectedOperationDto> detectedOperationDtos = new List<DetectedOperationDto>() {
private List<DetectedOperationDto> detectedOperationDtos = new List<DetectedOperationDto>() {
new DetectedOperationDto {
Id = 1,
DateEnd = DateTimeOffset.UtcNow,
@ -124,7 +121,7 @@ public class DataSaubStatServiceTest
}
};
private IEnumerable<TelemetryDataSaubDto> telemetryDataSaubDtos1 = new List<TelemetryDataSaubDto> {
private List<TelemetryDataSaubDto> telemetryDataSaubDtos = new List<TelemetryDataSaubDto> {
new TelemetryDataSaubDto()
{
IdTelemetry = 1,
@ -168,280 +165,7 @@ public class DataSaubStatServiceTest
RotorTorqueIdle = 1,
RotorTorqueSp = 1,
RotorTorqueLimitMax = 1,
WellDepth = 1,
},
new TelemetryDataSaubDto()
{
IdTelemetry = 1,
DateTime = DateTime.UtcNow.AddMinutes(-20),
AxialLoad = 1,
AxialLoadLimitMax = 1,
AxialLoadSp = 1,
BitDepth = 1,
BlockPosition = 1,
BlockPositionMax = 1,
BlockPositionMin = 1,
BlockSpeed = 1,
BlockSpeedSp = 1,
BlockSpeedSpDevelop = 1,
BlockSpeedSpRotor = 1,
BlockSpeedSpSlide = 1,
Flow = 1,
FlowDeltaLimitMax = 1,
FlowIdle = 1,
HookWeight = 1,
HookWeightIdle = 1,
HookWeightLimitMax = 1,
HookWeightLimitMin = 1,
IdFeedRegulator = 1,
IdUser = 1,
Mode = 1,
Mse = 1,
MseState = 1,
Pressure = 1,
PressureDeltaLimitMax = 1,
PressureIdle = 1,
PressureSp = 1,
PressureSpDevelop = 1,
PressureSpRotor = 1,
PressureSpSlide = 1,
Pump0Flow = 1,
Pump1Flow = 1,
Pump2Flow = 1,
RotorSpeed = 1,
RotorTorque = 1,
RotorTorqueIdle = 1,
RotorTorqueSp = 1,
RotorTorqueLimitMax = 1,
WellDepth = 1,
},
new TelemetryDataSaubDto()
{
IdTelemetry = 1,
DateTime = DateTime.UtcNow.AddMinutes(-10),
AxialLoad = 1,
AxialLoadLimitMax = 1,
AxialLoadSp = 1,
BitDepth = 1,
BlockPosition = 1,
BlockPositionMax = 1,
BlockPositionMin = 1,
BlockSpeed = 1,
BlockSpeedSp = 1,
BlockSpeedSpDevelop = 1,
BlockSpeedSpRotor = 1,
BlockSpeedSpSlide = 1,
Flow = 1,
FlowDeltaLimitMax = 1,
FlowIdle = 1,
HookWeight = 1,
HookWeightIdle = 1,
HookWeightLimitMax = 1,
HookWeightLimitMin = 1,
IdFeedRegulator = 1,
IdUser = 1,
Mode = 1,
Mse = 1,
MseState = 1,
Pressure = 1,
PressureDeltaLimitMax = 1,
PressureIdle = 1,
PressureSp = 1,
PressureSpDevelop = 1,
PressureSpRotor = 1,
PressureSpSlide = 1,
Pump0Flow = 1,
Pump1Flow = 1,
Pump2Flow = 1,
RotorSpeed = 1,
RotorTorque = 1,
RotorTorqueIdle = 1,
RotorTorqueSp = 1,
RotorTorqueLimitMax = 1,
WellDepth = 2,
},
new TelemetryDataSaubDto()
{
IdTelemetry = 1,
DateTime = DateTime.UtcNow.AddMinutes(-5),
AxialLoad = 1,
AxialLoadLimitMax = 1,
AxialLoadSp = 1,
BitDepth = 1,
BlockPosition = 1,
BlockPositionMax = 1,
BlockPositionMin = 1,
BlockSpeed = 1,
BlockSpeedSp = 1,
BlockSpeedSpDevelop = 1,
BlockSpeedSpRotor = 1,
BlockSpeedSpSlide = 1,
Flow = 1,
FlowDeltaLimitMax = 1,
FlowIdle = 1,
HookWeight = 1,
HookWeightIdle = 1,
HookWeightLimitMax = 1,
HookWeightLimitMin = 1,
IdFeedRegulator = 1,
IdUser = 1,
Mode = 1,
Mse = 1,
MseState = 1,
Pressure = 1,
PressureDeltaLimitMax = 1,
PressureIdle = 1,
PressureSp = 1,
PressureSpDevelop = 1,
PressureSpRotor = 1,
PressureSpSlide = 1,
Pump0Flow = 1,
Pump1Flow = 1,
Pump2Flow = 1,
RotorSpeed = 1,
RotorTorque = 1,
RotorTorqueIdle = 1,
RotorTorqueSp = 1,
RotorTorqueLimitMax = 1,
WellDepth = 3,
},
new TelemetryDataSaubDto()
{
IdTelemetry = 1,
DateTime = DateTime.UtcNow.AddMinutes(5),
AxialLoad = 1,
AxialLoadLimitMax = 1,
AxialLoadSp = 1,
BitDepth = 1,
BlockPosition = 1,
BlockPositionMax = 1,
BlockPositionMin = 1,
BlockSpeed = 1,
BlockSpeedSp = 1,
BlockSpeedSpDevelop = 1,
BlockSpeedSpRotor = 1,
BlockSpeedSpSlide = 1,
Flow = 1,
FlowDeltaLimitMax = 1,
FlowIdle = 1,
HookWeight = 1,
HookWeightIdle = 1,
HookWeightLimitMax = 1,
HookWeightLimitMin = 1,
IdFeedRegulator = 1,
IdUser = 1,
Mode = 1,
Mse = 1,
MseState = 1,
Pressure = 1,
PressureDeltaLimitMax = 1,
PressureIdle = 1,
PressureSp = 1,
PressureSpDevelop = 1,
PressureSpRotor = 1,
PressureSpSlide = 1,
Pump0Flow = 1,
Pump1Flow = 1,
Pump2Flow = 1,
RotorSpeed = 1,
RotorTorque = 1,
RotorTorqueIdle = 1,
RotorTorqueSp = 1,
RotorTorqueLimitMax = 1,
WellDepth = 1,
}
};
private IEnumerable<TelemetryDataSaubDto> telemetryDataSaubDtos2 = new List<TelemetryDataSaubDto> {
new TelemetryDataSaubDto()
{
IdTelemetry = 2,
DateTime = DateTime.Now.AddMinutes(-20),
AxialLoad = 1,
AxialLoadLimitMax = 1,
AxialLoadSp = 1,
BitDepth = 1,
BlockPosition = 1,
BlockPositionMax = 1,
BlockPositionMin = 1,
BlockSpeed = 1,
BlockSpeedSp = 1,
BlockSpeedSpDevelop = 1,
BlockSpeedSpRotor = 1,
BlockSpeedSpSlide = 1,
Flow = 1,
FlowDeltaLimitMax = 1,
FlowIdle = 1,
HookWeight = 1,
HookWeightIdle = 1,
HookWeightLimitMax = 1,
HookWeightLimitMin = 1,
IdFeedRegulator = 1,
IdUser = 1,
Mode = 1,
Mse = 1,
MseState = 1,
Pressure = 1,
PressureDeltaLimitMax = 1,
PressureIdle = 1,
PressureSp = 1,
PressureSpDevelop = 1,
PressureSpRotor = 1,
PressureSpSlide = 1,
Pump0Flow = 1,
Pump1Flow = 1,
Pump2Flow = 1,
RotorSpeed = 1,
RotorTorque = 1,
RotorTorqueIdle = 1,
RotorTorqueSp = 1,
RotorTorqueLimitMax = 1,
WellDepth = 1,
},
new TelemetryDataSaubDto()
{
IdTelemetry = 2,
DateTime = DateTime.Now.AddMinutes(-20),
AxialLoad = 1,
AxialLoadLimitMax = 1,
AxialLoadSp = 1,
BitDepth = 1,
BlockPosition = 1,
BlockPositionMax = 1,
BlockPositionMin = 1,
BlockSpeed = 1,
BlockSpeedSp = 1,
BlockSpeedSpDevelop = 1,
BlockSpeedSpRotor = 1,
BlockSpeedSpSlide = 1,
Flow = 1,
FlowDeltaLimitMax = 1,
FlowIdle = 1,
HookWeight = 1,
HookWeightIdle = 1,
HookWeightLimitMax = 1,
HookWeightLimitMin = 1,
IdFeedRegulator = 1,
IdUser = 1,
Mode = 1,
Mse = 1,
MseState = 1,
Pressure = 1,
PressureDeltaLimitMax = 1,
PressureIdle = 1,
PressureSp = 1,
PressureSpDevelop = 1,
PressureSpRotor = 1,
PressureSpSlide = 1,
Pump0Flow = 1,
Pump1Flow = 1,
Pump2Flow = 1,
RotorSpeed = 1,
RotorTorque = 1,
RotorTorqueIdle = 1,
RotorTorqueSp = 1,
RotorTorqueLimitMax = 1,
WellDepth = 1,
WellDepth = 10,
}
};
@ -455,17 +179,49 @@ public class DataSaubStatServiceTest
.GetLastsAsync(Arg.Any<int[]>(), Arg.Any<CancellationToken>())
.Returns(dataSaubStatDtos);
detectedOperationRepositoryMock
.Get(Arg.Any<DetectedOperationByTelemetryRequest>(), Arg.Any<CancellationToken>())
.Returns(detectedOperationDtos);
var telemetrySaubDto = telemetryDataSaubDtos.FirstOrDefault();
if (telemetrySaubDto != null)
{
//çàïîëíåíèå ñïèñêà òåëåìåòðèé ñëåäóþùèì îáðàçîì:
// - âñåãî â ñïèñêå 6 ýëåìåíòîâ:
// - âñå îíè ïîïàäàþò â äèàïàçîí, îïðåäåëåííûé äàòàìè DateStart è DateEnd ñîîòâåòñòâóþùåé çàïèñè detectedOperation
// - èç ýòèõ 6-õ çàïèñåé ó 2-õ çàïèñåé ìåíÿåòñÿ ïàðàìåòð,
// ÿâëÿþùèéñÿ ïðèçíàêîì íà÷àëà íîâîãî èíòåðâàëà (íîâîé çàïèñè dataSaubStat)
// òàêèì îáðàçîì, â áàçå äàííûõ äîëæíî ñîçäàòüñÿ 1 íîâàÿ çàïèñü dataSaubStat (insertedDataSaubStatCount = 1)
var telemetrySaubDto1 = telemetrySaubDto.Adapt<TelemetryDataSaubDto>();
telemetrySaubDto1.DateTime = DateTime.UtcNow.AddMinutes(-20);
telemetryDataSaubDtos.Add(telemetrySaubDto1);
var telemetrySaubDto2 = telemetrySaubDto.Adapt<TelemetryDataSaubDto>();
telemetrySaubDto2.DateTime = DateTime.UtcNow.AddMinutes(-10);
telemetrySaubDto2.RotorTorqueLimitMax = 2;
telemetryDataSaubDtos.Add(telemetrySaubDto2);
var telemetrySaubDto3 = telemetrySaubDto.Adapt<TelemetryDataSaubDto>();
telemetrySaubDto3.DateTime = DateTime.UtcNow.AddMinutes(-8);
telemetrySaubDto3.RotorTorqueLimitMax = 2;
telemetryDataSaubDtos.Add(telemetrySaubDto3);
var telemetrySaubDto4 = telemetrySaubDto.Adapt<TelemetryDataSaubDto>();
telemetrySaubDto4.DateTime = DateTime.UtcNow.AddMinutes(-6);
telemetrySaubDto4.RotorTorqueLimitMax = 2;
telemetryDataSaubDtos.Add(telemetrySaubDto4);
var telemetrySaubDto5 = telemetrySaubDto.Adapt<TelemetryDataSaubDto>();
telemetrySaubDto5.DateTime = DateTime.UtcNow.AddMinutes(-4);
telemetrySaubDto5.RotorTorqueLimitMax = 2;
telemetryDataSaubDtos.Add(telemetrySaubDto5);
var telemetrySaubDto6 = telemetrySaubDto.Adapt<TelemetryDataSaubDto>();
telemetrySaubDto6.DateTime = DateTime.UtcNow.AddMinutes(-2);
telemetrySaubDto6.RotorTorqueLimitMax = 3;
telemetrySaubDto6.WellDepth = 11;
telemetryDataSaubDtos.Add(telemetrySaubDto6);
}
dataSaubServiceMock
.Get(1, Arg.Any<bool>(), Arg.Any<DateTimeOffset>(), Arg.Any<DateTimeOffset>(), Arg.Any<int>(), Arg.Any<CancellationToken>())
.Returns(telemetryDataSaubDtos1);
dataSaubStatRepositoryMock
.InsertRangeAsync(Arg.Any<IEnumerable<DataSaubStatDto>>(), Arg.Any<CancellationToken>())
.Returns(2);
.Get(Arg.Any<int>(), Arg.Any<bool>(), Arg.Any<DateTimeOffset>(), Arg.Any<DateTimeOffset>(), Arg.Any<int>(), Arg.Any<CancellationToken>())
.Returns(telemetryDataSaubDtos);
dataSaubStatService = new DataSaubStatService(
dataSaubStatRepositoryMock,
@ -475,15 +231,79 @@ public class DataSaubStatServiceTest
}
[Fact]
public async Task GetByMarkId_ShouldReturn_FileInfo()
public async Task Create_1DataSaubStatItems_ShouldReturn__Success()
{
var insertedDataSaubStatCount = 1;
detectedOperationRepositoryMock
.Get(Arg.Any<DetectedOperationByTelemetryRequest>(), Arg.Any<CancellationToken>())
.Returns(detectedOperationDtos);
dataSaubStatRepositoryMock
.InsertRangeAsync(Arg.Any<IEnumerable<DataSaubStatDto>>(), Arg.Any<CancellationToken>())
.Returns(insertedDataSaubStatCount);
Action<string, double?> action = (message, count) =>
{
//act
//var data = await fileService.GetByMarkId(idMark, CancellationToken.None);
Action<string, double?> action = async (a, b) => {
;
};
await dataSaubStatService.CreateStatAsync(5, action, CancellationToken.None);
//assert
Assert.NotNull("sd");
Assert.Equal(insertedDataSaubStatCount, count);
};
//act
await dataSaubStatService.CreateStatAsync(Gap, action, CancellationToken.None);
}
[Fact]
public async Task Create_2DataSaubStatItems_ShouldReturn__Success()
{
var insertedDataSaubStatCount = 2;
var detectedOperationDto = detectedOperationDtos.FirstOrDefault();
if (detectedOperationDto != null)
{
var detectedOperationDto1 = detectedOperationDto.Adapt<DetectedOperationDto>();
detectedOperationDto1.DateStart = DateTimeOffset.UtcNow.AddMinutes(1);
detectedOperationDto1.DateEnd = DateTimeOffset.UtcNow.AddHours(1);
detectedOperationDtos.Add(detectedOperationDto1);
}
var telemetryDataSaubDto = telemetryDataSaubDtos.LastOrDefault();
if (telemetryDataSaubDto != null)
{
var telemetryDataSaubDto1 = telemetryDataSaubDto.Adapt<TelemetryDataSaubDto>();
telemetryDataSaubDto1.DateTime = DateTime.UtcNow.AddMinutes(10);
telemetryDataSaubDto1.WellDepth = telemetryDataSaubDto.WellDepth + 1;
var telemetryDataSaubDto2 = telemetryDataSaubDto.Adapt<TelemetryDataSaubDto>();
telemetryDataSaubDto2.DateTime = DateTime.UtcNow.AddMinutes(20);
telemetryDataSaubDto2.WellDepth = telemetryDataSaubDto1.WellDepth + 1;
var telemetryDataSaubDto3 = telemetryDataSaubDto.Adapt<TelemetryDataSaubDto>();
telemetryDataSaubDto3.DateTime = DateTime.UtcNow.AddMinutes(30);
telemetryDataSaubDto3.WellDepth = telemetryDataSaubDto2.WellDepth + 1;
telemetryDataSaubDtos.Add(telemetryDataSaubDto1);
telemetryDataSaubDtos.Add(telemetryDataSaubDto2);
telemetryDataSaubDtos.Add(telemetryDataSaubDto3);
}
detectedOperationRepositoryMock
.Get(Arg.Any<DetectedOperationByTelemetryRequest>(), Arg.Any<CancellationToken>())
.Returns(detectedOperationDtos);
dataSaubStatRepositoryMock
.InsertRangeAsync(Arg.Any<IEnumerable<DataSaubStatDto>>(), Arg.Any<CancellationToken>())
.Returns(insertedDataSaubStatCount);
Action<string, double?> action = (message, count) =>
{
//assert
Assert.Equal(insertedDataSaubStatCount, count);
};
//act
await dataSaubStatService.CreateStatAsync(Gap, action, CancellationToken.None);
}
}