DD.WellWorkover.Cloud/AsbCloudInfrastructure.Tests/Services/DataSaubStat/DataSaubStatDtillingQualityServiceTest.cs

119 lines
4.5 KiB
C#
Raw Normal View History

using AsbCloudApp.Data;
using AsbCloudApp.Data.SAUB;
using AsbCloudApp.Repositories;
using AsbCloudApp.Services;
using AsbCloudInfrastructure.Services;
2024-10-14 10:51:39 +05:00
using AsbCloudInfrastructure.Tests.MapData;
2024-10-10 15:29:27 +05:00
using CsvHelper;
using Mapster;
using NSubstitute;
using System;
2024-10-10 15:29:27 +05:00
using System.Globalization;
using System.IO;
using System.Linq;
2024-10-14 10:51:39 +05:00
using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
using Xunit;
namespace AsbCloudInfrastructure.Tests.Services;
public class DataSaubStatDtillingQualityServiceTest
{
private readonly IDataSaubStatRepository<DataSaubStatDrillingQualityDto> dataSaubStatRepositoryMock = Substitute.For<IDataSaubStatRepository<DataSaubStatDrillingQualityDto>>();
private readonly ITelemetryDataCache<TelemetryDataSaubDto> telemetryDataCacheMock = Substitute.For<ITelemetryDataCache<TelemetryDataSaubDto>>();
private readonly ITelemetryDataSaubService dataSaubServiceMock = Substitute.For<ITelemetryDataSaubService>();
private readonly ITelemetryService telemetryServiceMock = Substitute.For<ITelemetryService>();
private DataSaubStatDrillingQualityService dataSaubStatService;
public DataSaubStatDtillingQualityServiceTest()
{
dataSaubStatService = new DataSaubStatDrillingQualityService(
dataSaubStatRepositoryMock,
telemetryDataCacheMock,
dataSaubServiceMock,
telemetryServiceMock);
}
[Theory]
[InlineData("DataSaubStat.test3.csv", "DataSaubStat.test3_result.csv")]
[InlineData("DataSaubStat.test2.csv", "DataSaubStat.test2_result.csv")]
//[InlineData("DataSaubStat.test1.csv", "DataSaubStat.test1_result.csv")]
public async Task Create_DataSaubStatDrillingQuality_From_CSVFile_ShouldReturn_Success(
string pathMockData,
string pathResult
)
{
2024-10-14 10:51:39 +05:00
var resourceName = Assembly.GetExecutingAssembly()
.GetManifestResourceNames()
.Where(r => r.Contains(pathMockData))
2024-10-14 10:51:39 +05:00
.FirstOrDefault();
if (String.IsNullOrEmpty(resourceName))
Assert.Fail("No mock data for test");
2024-10-10 15:29:27 +05:00
2024-10-14 10:51:39 +05:00
using var stream = Assembly.GetExecutingAssembly()
.GetManifestResourceStream(resourceName)!;
2024-10-10 15:29:27 +05:00
var actualData = Enumerable.Empty<DataSaubStatDrillingQualityDto>();
2024-10-14 10:51:39 +05:00
using (var reader = new StreamReader(stream))
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
{
var dataSaubMaps = csv.GetRecords<TelemetryDataSaubMap>().ToList();
var dtos = dataSaubMaps.Select(x => x.Adapt<TelemetryDataSaubDto>()).ToArray();
2024-10-10 15:29:27 +05:00
2024-10-14 10:51:39 +05:00
dataSaubServiceMock
2024-10-10 15:29:27 +05:00
.Get(Arg.Any<int>(), Arg.Any<bool>(), Arg.Any<DateTimeOffset>(), Arg.Any<DateTimeOffset>(), Arg.Any<int>(), Arg.Any<CancellationToken>())
.Returns(dtos);
2024-10-10 15:29:27 +05:00
2024-10-14 10:51:39 +05:00
//act
actualData = await dataSaubStatService.CreateStatDrillingQualityForTelemetry(1, DateTimeOffset.UnixEpoch, CancellationToken.None);
2024-10-10 15:29:27 +05:00
}
2024-10-14 10:51:39 +05:00
resourceName = Assembly.GetExecutingAssembly()
.GetManifestResourceNames()
.Where(r => r.Contains(pathResult))
2024-10-14 10:51:39 +05:00
.FirstOrDefault();
2024-10-10 15:29:27 +05:00
2024-10-14 10:51:39 +05:00
if (String.IsNullOrEmpty(resourceName))
Assert.Fail("No mock data for test");
2024-10-10 15:29:27 +05:00
2024-10-14 10:51:39 +05:00
using var stream2 = Assembly.GetExecutingAssembly()
.GetManifestResourceStream(resourceName)!;
2024-10-10 15:29:27 +05:00
2024-10-14 10:51:39 +05:00
using (var reader = new StreamReader(stream2))
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
{
var dataSaubMaps = csv.GetRecords<DataSaubStatDrillingQualityDtoMap>().ToList();
var expectedData = dataSaubMaps.Select(x => x.Adapt<DataSaubStatDrillingQualityDto>()).ToArray();
2024-10-10 15:29:27 +05:00
//assert
var actual = actualData
.OrderBy(d => d.IdFeedRegulator)
.ToArray();
var expected = expectedData
.OrderBy(d => d.IdFeedRegulator)
.ToArray();
2024-10-14 10:51:39 +05:00
Assert.Equal(expected.Count(), actual.Count());
for (var i = 0; i < actual.Count(); i++)
{
var expectedItem = expected[i];
var actualItem = actual[i];
Assert.True(Math.Abs(expectedItem.DepthStart - actualItem.DepthStart) < 0.000001);
Assert.True(Math.Abs(expectedItem.DepthEnd - actualItem.DepthEnd) < 0.000001);
Assert.True(Math.Abs(expectedItem.DepthDrillingQuality - actualItem.DepthDrillingQuality) < 0.000001);
}
2024-10-10 15:29:27 +05:00
2024-10-14 10:51:39 +05:00
}
}
2024-10-10 15:29:27 +05:00
}