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

102 lines
3.9 KiB
C#

using AsbCloudApp.Data;
using AsbCloudApp.Data.SAUB;
using AsbCloudApp.Repositories;
using AsbCloudApp.Requests;
using AsbCloudApp.Services;
using AsbCloudDb.Model;
using AsbCloudInfrastructure.Services;
using AsbCloudInfrastructure.Tests.MapData;
using CsvHelper;
using Mapster;
using NSubstitute;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Net.NetworkInformation;
using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
using Xunit;
namespace AsbCloudInfrastructure.Tests.Services;
public class DataSaubStatDtillingQualityServiceTest
{
private const string UsingTemplateFile = "AsbCloudInfrastructure/Tests/Services/DataSaubStat";
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 DataSaubStatDrillingQualityService dataSaubStatService;
public DataSaubStatDtillingQualityServiceTest()
{
dataSaubStatService = new DataSaubStatDrillingQualityService(
dataSaubStatRepositoryMock,
telemetryDataCacheMock,
dataSaubServiceMock);
}
[Fact]
public async Task Create_DataSaubStatDrillingQuality_From_CSVFile_Test1_ShouldReturn_Success()
{
var resourceName = Assembly.GetExecutingAssembly()
.GetManifestResourceNames()
.Where(r => r.Contains("DataSaubStat.test1.csv"))
.FirstOrDefault();
if (String.IsNullOrEmpty(resourceName))
Assert.Fail("No mock data for test");
using var stream = Assembly.GetExecutingAssembly()
.GetManifestResourceStream(resourceName)!;
var actual = Enumerable.Empty<DataSaubStatDrillingQualityDto>();
using (var reader = new StreamReader(stream))
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
{
csv.Context.RegisterClassMap<TelemetryDataSaubMap>();
var records = csv.GetRecords<TelemetryDataSaubDto>().ToList();
dataSaubServiceMock
.Get(Arg.Any<int>(), Arg.Any<bool>(), Arg.Any<DateTimeOffset>(), Arg.Any<DateTimeOffset>(), Arg.Any<int>(), Arg.Any<CancellationToken>())
.Returns(records);
//act
actual = await dataSaubStatService.CreateStatDrillingQualityForTelemetry(1, DateTimeOffset.UnixEpoch, CancellationToken.None);
}
resourceName = Assembly.GetExecutingAssembly()
.GetManifestResourceNames()
.Where(r => r.Contains("DataSaubStat.test1_result.csv"))
.FirstOrDefault();
if (String.IsNullOrEmpty(resourceName))
Assert.Fail("No mock data for test");
using var stream2 = Assembly.GetExecutingAssembly()
.GetManifestResourceStream(resourceName)!;
using (var reader = new StreamReader(stream2))
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
{
csv.Context.RegisterClassMap<DataSaubStatDrillingQualityDtoMap>();
var expected = csv.GetRecords<DataSaubStatDrillingQualityDto>().ToList();
Assert.Equal(expected.Count(), actual.Count());
var expectedItem = expected.FirstOrDefault()!;
var actualItem = actual.FirstOrDefault()!;
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);
}
}
}