2024-10-08 12:14:10 +05:00
|
|
|
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;
|
2024-10-16 18:02:38 +05:00
|
|
|
using Mapster;
|
2024-10-08 12:14:10 +05:00
|
|
|
using NSubstitute;
|
|
|
|
using System;
|
2024-10-10 15:29:27 +05:00
|
|
|
using System.Globalization;
|
|
|
|
using System.IO;
|
2024-10-08 12:14:10 +05:00
|
|
|
using System.Linq;
|
2024-10-14 10:51:39 +05:00
|
|
|
using System.Reflection;
|
2024-10-08 12:14:10 +05:00
|
|
|
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>();
|
2024-10-16 18:02:38 +05:00
|
|
|
private readonly ITelemetryService telemetryServiceMock = Substitute.For<ITelemetryService>();
|
2024-10-08 12:14:10 +05:00
|
|
|
|
|
|
|
private DataSaubStatDrillingQualityService dataSaubStatService;
|
|
|
|
|
|
|
|
public DataSaubStatDtillingQualityServiceTest()
|
|
|
|
{
|
2024-10-09 13:31:36 +05:00
|
|
|
dataSaubStatService = new DataSaubStatDrillingQualityService(
|
|
|
|
dataSaubStatRepositoryMock,
|
|
|
|
telemetryDataCacheMock,
|
2024-10-16 18:02:38 +05:00
|
|
|
dataSaubServiceMock,
|
|
|
|
telemetryServiceMock);
|
2024-10-09 13:31:36 +05:00
|
|
|
}
|
|
|
|
|
2024-10-14 12:07:03 +05:00
|
|
|
[Theory]
|
2024-10-16 18:02:38 +05:00
|
|
|
[InlineData("DataSaubStat.test3.csv", "DataSaubStat.test3_result.csv")]
|
|
|
|
[InlineData("DataSaubStat.test2.csv", "DataSaubStat.test2_result.csv")]
|
|
|
|
//[InlineData("DataSaubStat.test1.csv", "DataSaubStat.test1_result.csv")]
|
2024-10-14 12:07:03 +05:00
|
|
|
public async Task Create_DataSaubStatDrillingQuality_From_CSVFile_ShouldReturn_Success(
|
|
|
|
string pathMockData,
|
|
|
|
string pathResult
|
|
|
|
)
|
2024-10-09 13:31:36 +05:00
|
|
|
{
|
2024-10-14 10:51:39 +05:00
|
|
|
var resourceName = Assembly.GetExecutingAssembly()
|
|
|
|
.GetManifestResourceNames()
|
2024-10-14 12:07:03 +05:00
|
|
|
.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
|
|
|
|
2024-10-16 18:02:38 +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))
|
|
|
|
{
|
2024-10-16 18:02:38 +05:00
|
|
|
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>())
|
2024-10-16 18:02:38 +05:00
|
|
|
.Returns(dtos);
|
2024-10-10 15:29:27 +05:00
|
|
|
|
2024-10-14 10:51:39 +05:00
|
|
|
//act
|
2024-10-16 18:02:38 +05:00
|
|
|
actualData = await dataSaubStatService.CreateStatDrillingQualityForTelemetry(1, DateTimeOffset.UnixEpoch, CancellationToken.None);
|
2024-10-10 15:29:27 +05:00
|
|
|
}
|
2024-10-08 12:14:10 +05:00
|
|
|
|
2024-10-14 10:51:39 +05:00
|
|
|
resourceName = Assembly.GetExecutingAssembly()
|
|
|
|
.GetManifestResourceNames()
|
2024-10-14 12:07:03 +05:00
|
|
|
.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))
|
|
|
|
{
|
2024-10-16 18:02:38 +05:00
|
|
|
var dataSaubMaps = csv.GetRecords<DataSaubStatDrillingQualityDtoMap>().ToList();
|
|
|
|
var expectedData = dataSaubMaps.Select(x => x.Adapt<DataSaubStatDrillingQualityDto>()).ToArray();
|
2024-10-10 15:29:27 +05:00
|
|
|
|
2024-10-14 12:07:03 +05:00
|
|
|
//assert
|
2024-10-16 18:02:38 +05:00
|
|
|
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());
|
2024-10-08 12:14:10 +05:00
|
|
|
|
2024-10-16 18:02:38 +05:00
|
|
|
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-08 12:14:10 +05:00
|
|
|
}
|
2024-10-10 15:29:27 +05:00
|
|
|
}
|
|
|
|
|