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 dataSaubStatRepositoryMock = Substitute.For>(); private readonly ITelemetryDataCache telemetryDataCacheMock = Substitute.For>(); private readonly ITelemetryDataSaubService dataSaubServiceMock = Substitute.For(); 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(); using (var reader = new StreamReader(stream)) using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture)) { csv.Context.RegisterClassMap(); var records = csv.GetRecords().ToList(); dataSaubServiceMock .Get(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any()) .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(); var expected = csv.GetRecords().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); } } }