fix tests

This commit is contained in:
ngfrolov 2024-02-07 13:53:08 +05:00
parent 2b4000ce6b
commit 1e27b7e559
Signed by: ng.frolov
GPG Key ID: E99907A0357B29A7

View File

@ -5,161 +5,161 @@ using Mapster;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Xunit; using Xunit;
namespace AsbCloudWebApi.IntegrationTests.Repository namespace AsbCloudWebApi.IntegrationTests.Repository;
public class DataSaubStatRepositoryTest : BaseIntegrationTest
{ {
public class DataSaubStatRepositoryTest : BaseIntegrationTest private static readonly TimeSpan timeSpan = TimeSpan.FromHours(1);
private static readonly DataSaubStatDto[] statDtos = new DataSaubStatDto[2]
{ {
private static readonly TimeSpan timeSpan = TimeSpan.FromHours(1); new()
private static readonly DataSaubStatDto[] statDtos = new DataSaubStatDto[2]
{ {
new DataSaubStatDto() IdTelemetry = 1,
{ DateEnd = new DateTimeOffset(2024, 1, 1, 20, 25, 0, timeSpan),
IdTelemetry = 1, DateStart = new DateTimeOffset(2024, 1, 1, 20, 15, 0, timeSpan),
DateEnd = new DateTimeOffset(2024, 1, 1, 20, 25, 0, timeSpan), AxialLoad = 10.0,
DateStart = new DateTimeOffset(2024, 1, 1, 20, 15, 0, timeSpan), AxialLoadLimitMax = 10.0,
AxialLoad = 10.0, AxialLoadSp = 10.0,
AxialLoadLimitMax = 10.0, BlockSpeedSp = 1000,
AxialLoadSp = 10.0, DepthEnd = 10.0,
BlockSpeedSp = 1000, DepthStart = 5.0,
DepthEnd = 10.0, EnabledSubsystems = 1,
DepthStart = 5.0, Flow = 10.0,
EnabledSubsystems = 1, HasOscillation = true,
Flow = 10.0, Id = default,
HasOscillation = true, IdCategory = 2,
Id = default, IdFeedRegulator = 1,
IdCategory = 2, Pressure = 10.0,
IdFeedRegulator = 1, PressureIdle = 10.0,
Pressure = 10.0, PressureSp = 10.0,
PressureIdle = 10.0, RotorSpeed = 9.0,
PressureSp = 10.0, RotorTorque = 9.0,
RotorSpeed = 9.0, RotorTorqueSp = 9.0,
RotorTorque = 9.0, RotorTorqueLimitMax = 9.0,
RotorTorqueSp = 9.0, Speed = 10.0
RotorTorqueLimitMax = 9.0, },
Speed = 10.0 new()
}, {
new DataSaubStatDto() IdTelemetry = 1,
{ DateEnd = new DateTimeOffset(2024, 2, 2, 20, 25, 0, timeSpan),
IdTelemetry = 1, DateStart = new DateTimeOffset(2024, 2, 2, 20, 15, 0, timeSpan),
DateEnd = new DateTimeOffset(2024, 2, 2, 20, 25, 0, timeSpan), AxialLoad = 10.0,
DateStart = new DateTimeOffset(2024, 2, 2, 20, 15, 0, timeSpan), AxialLoadLimitMax = 10.0,
AxialLoad = 10.0, AxialLoadSp = 10.0,
AxialLoadLimitMax = 10.0, BlockSpeedSp = 1000,
AxialLoadSp = 10.0, DepthEnd = 10.0,
BlockSpeedSp = 1000, DepthStart = 5.0,
DepthEnd = 10.0, EnabledSubsystems = 1,
DepthStart = 5.0, Flow = 10.0,
EnabledSubsystems = 1, HasOscillation = true,
Flow = 10.0, Id = default,
HasOscillation = true, IdCategory = 2,
Id = default, IdFeedRegulator = 1,
IdCategory = 2, Pressure = 10.0,
IdFeedRegulator = 1, PressureIdle = 10.0,
Pressure = 10.0, PressureSp = 10.0,
PressureIdle = 10.0, RotorSpeed = 10.0,
PressureSp = 10.0, RotorTorque = 10.0,
RotorSpeed = 10.0, RotorTorqueSp = 10.0,
RotorTorque = 10.0, RotorTorqueLimitMax = 10.0,
RotorTorqueSp = 10.0, Speed = 10.0
RotorTorqueLimitMax = 10.0, }
Speed = 10.0 };
} private static readonly WellOperationCategory category = new()
{
Id = 2,
IdParent = null,
Name = "Категория 2"
};
private readonly IDataSaubStatRepository dataSaubStatRepository;
public DataSaubStatRepositoryTest(WebAppFactoryFixture factory) : base(factory)
{
dataSaubStatRepository = scope.ServiceProvider.GetRequiredService<IDataSaubStatRepository>();
}
[Fact]
public async Task GetLastDatesAsync_returns_success()
{
//prepare
dbContext.CleanupDbSet<DataSaubStat>();
dbContext.CleanupDbSet<WellOperationCategory>();
var dbSetSaubStat = dbContext.Set<DataSaubStat>();
var dbSetCategories = dbContext.Set<WellOperationCategory>();
var entities = statDtos.Select(stat => ConvertToEntity(stat));
dbSetCategories.Add(category);
dbContext.SaveChanges();
dbSetSaubStat.AddRange(entities);
dbContext.SaveChanges();
//act
var telemetryIds = statDtos.Select(stat => stat.IdTelemetry).ToArray();
var result = await dataSaubStatRepository.GetLastsAsync(telemetryIds, CancellationToken.None);
var expected = statDtos.Max(stat => stat.DateEnd);
var actual = result.First().DateEnd;
//assert
Assert.True((expected - actual).Ticks == 0.0);
}
[Fact]
public async Task InsertRangeAsync_returns_success()
{
//prepare
dbContext.CleanupDbSet<DataSaubStat>();
var dbSet = dbContext.Set<DataSaubStat>();
var dbSetCategories = dbContext.Set<WellOperationCategory>();
dbSetCategories.Add(category);
dbContext.SaveChanges();
//act
var result = await dataSaubStatRepository.InsertRangeAsync(statDtos, CancellationToken.None);
//assert
Assert.Equal(statDtos.Length, result);
var statDtosFromDb = dbSet.Select(stat => ConvertToDto(stat, timeSpan)).ToArray();
var excludedProps = new[] {
nameof(DataSaubStat.Telemetry),
nameof(DataSaubStat.Id),
nameof(DataSaubStat.OperationCategory)
}; };
private static readonly WellOperationCategory category = new() foreach (var statDtoFromDb in statDtosFromDb)
{ {
Id = 2, var statDto = statDtos
IdParent = null, .Where(stat => stat.DateStart == statDtoFromDb.DateStart)
Name = "Категория 2" .Where(stat => stat.DateEnd == statDtoFromDb.DateEnd)
}; .FirstOrDefault();
private readonly IDataSaubStatRepository dataSaubStatRepository; MatchHelper.Match(statDtoFromDb, statDto, excludedProps);
public DataSaubStatRepositoryTest(WebAppFactoryFixture factory) : base(factory)
{
dataSaubStatRepository = scope.ServiceProvider.GetRequiredService<IDataSaubStatRepository>();
}
[Fact]
public async Task GetLastDatesAsync_returns_success()
{
//prepare
dbContext.CleanupDbSet<DataSaubStat>();
var dbSetSaubStat = dbContext.Set<DataSaubStat>();
var dbSetCategories = dbContext.Set<WellOperationCategory>();
var entities = statDtos.Select(stat => ConvertToEntity(stat));
dbSetCategories.Add(category);
dbSetSaubStat.AddRange(entities);
dbContext.SaveChanges();
//act
var telemetryIds = statDtos.Select(stat => stat.IdTelemetry).ToArray();
var result = await dataSaubStatRepository.GetLastsAsync(telemetryIds, CancellationToken.None);
var expected = statDtos.Max(stat => stat.DateEnd);
var actual = result.First().DateEnd;
//assert
Assert.True((expected - actual).Ticks == 0.0);
}
[Fact]
public async Task InsertRangeAsync_returns_success()
{
//prepare
dbContext.CleanupDbSet<DataSaubStat>();
//act
var dbSet = dbContext.Set<DataSaubStat>();
dbSet.RemoveRange(dbSet);
var dbSetCategories = dbContext.Set<WellOperationCategory>();
dbSetCategories.Add(category);
dbContext.SaveChanges();
var result = await dataSaubStatRepository.InsertRangeAsync(statDtos, CancellationToken.None);
//assert
Assert.Equal(statDtos.Length, result);
var statDtosFromDb = dbSet.Select(stat => ConvertToDto(stat, timeSpan)).ToArray();
var excludedProps = new[] {
nameof(DataSaubStat.Telemetry),
nameof(DataSaubStat.Id),
nameof(DataSaubStat.OperationCategory)
};
foreach (var statDtoFromDb in statDtosFromDb)
{
var statDto = statDtos
.Where(stat => stat.DateStart == statDtoFromDb.DateStart)
.Where(stat => stat.DateEnd == statDtoFromDb.DateEnd)
.FirstOrDefault();
MatchHelper.Match(statDtoFromDb, statDto, excludedProps);
}
}
private static DataSaubStat ConvertToEntity(DataSaubStatDto stat)
{
var entity = stat.Adapt<DataSaubStat>();
entity.DateStart = entity.DateStart.ToUniversalTime();
entity.DateEnd = entity.DateEnd.ToUniversalTime();
return entity;
}
private static DataSaubStatDto ConvertToDto(DataSaubStat stat, TimeSpan timeSpan)
{
var dto = stat.Adapt<DataSaubStatDto>();
dto.DateStart = dto.DateStart.ToOffset(timeSpan);
dto.DateEnd = dto.DateEnd.ToOffset(timeSpan);
return dto;
} }
} }
private static DataSaubStat ConvertToEntity(DataSaubStatDto stat)
{
var entity = stat.Adapt<DataSaubStat>();
entity.DateStart = entity.DateStart.ToUniversalTime();
entity.DateEnd = entity.DateEnd.ToUniversalTime();
return entity;
}
private static DataSaubStatDto ConvertToDto(DataSaubStat stat, TimeSpan timeSpan)
{
var dto = stat.Adapt<DataSaubStatDto>();
dto.DateStart = dto.DateStart.ToOffset(timeSpan);
dto.DateEnd = dto.DateEnd.ToOffset(timeSpan);
return dto;
}
} }