fix tests

This commit is contained in:
ngfrolov 2023-02-22 12:37:43 +05:00
parent 3bd6c7d0fb
commit c94a2f2904
Signed by: ng.frolov
GPG Key ID: E99907A0357B29A7
5 changed files with 9 additions and 163 deletions

View File

@ -1,61 +0,0 @@
using AsbCloudApp.Data;
using AsbCloudApp.Services;
using AsbCloudDb.Model;
using AsbCloudInfrastructure.EfCache;
using DocumentFormat.OpenXml.Spreadsheet;
using Mapster;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Xunit;
namespace AsbCloudWebApi.Tests.CacheTests
{
public class CacheTest
{
private readonly string userCacheTag = "Users";
private static readonly TimeSpan cacheObsolence = TimeSpan.FromMinutes(15);
public IEnumerable<User> UsersCache = new List<User> {
new User { Id = 1, Name = "test1", Email = "test1@mail.com" },
new User { Id = 2, Name = "test2", Email = "test2@mail.com" },
new User { Id = 3, Name = "test3", Email = "test3@mail.com" },
new User { Id = 4, Name = "test4", Email = "test4@mail.com" },
new User { Id = 5, Name = "test5", Email = "test5@mail.com" },
new User { Id = 6, Name = "test6", Email = "test6@mail.com" },
new User { Id = 7, Name = "test7", Email = "test7@mail.com" }
};
[Fact]
public void Send_n_requests_cache_user()
{
const int iterations = 1230;
var cache = UsersCache.AsQueryable();
var cacheCount = UsersCache.Count();
var fail = false;
var tasks = new int[iterations].Select(_=> new Task(() =>
{
var data = cache.FromCache(userCacheTag, cacheObsolence, Convert).ToArray();
if (data.Count() != cacheCount)
fail = true;
}))
.ToArray();
foreach(var task in tasks)
task.Start();
Task.WaitAll(tasks);
Assert.False(fail);
}
private UserExtendedDto Convert(User entity)
{
var dto = entity.Adapt<UserExtendedDto>();
return dto;
}
}
}

View File

@ -1,93 +0,0 @@
using AsbCloudDb.Model;
using AsbCloudInfrastructure.Services.SAUB;
using Moq;
using System;
using System.Linq;
using System.Threading.Tasks;
using Xunit;
namespace AsbCloudWebApi.Tests.CacheTests
{
public class TelemetryDataCacheTest
{
private const int IdTelemetryOk = 10;
private static readonly DateTime baseDate = DateTime.Now;
private static readonly SimpleTimezone timezone = new() { Hours = TimeZoneInfo.Local.BaseUtcOffset.TotalHours };
private static readonly Well[] wellData = new Well[]{
new(){ Id = 1, IdTelemetry = IdTelemetryOk, IdState = 1, Caption = "", Timezone = timezone}
};
private static readonly TTelemetryData[] telemetryData = new TTelemetryData[]{
new ( IdTelemetryOk, baseDate.AddSeconds(1), timezone.Hours ),
new ( IdTelemetryOk, baseDate.AddSeconds(2), timezone.Hours ),
new ( IdTelemetryOk, baseDate.AddSeconds(3), timezone.Hours ),
new ( IdTelemetryOk, baseDate.AddSeconds(4), timezone.Hours ),
};
private readonly Mock<IAsbCloudDbContext> dbMock;
private TelemetryDataCache<TTelemetryData> cacheTest;
public class TTelemetryData : ITelemetryData, AsbCloudApp.Data.ITelemetryData
{
private DateTimeOffset _dateTime;
public TTelemetryData(int idTelemetry, DateTime dateTime, double hoursOffset)
{
IdTelemetry = idTelemetry;
DateTime = dateTime;
var offset = TimeSpan.FromHours(hoursOffset);
var dateTimeUTC = DateTime.SpecifyKind(dateTime, DateTimeKind.Unspecified);
_dateTime = new DateTimeOffset(dateTimeUTC, offset)
.ToUniversalTime();
}
public int IdTelemetry { get; set; }
public DateTime DateTime { get; set; }
DateTimeOffset ITelemetryData.DateTime { get => _dateTime; set => _dateTime = value; }
}
public TelemetryDataCacheTest()
{
dbMock = new Mock<IAsbCloudDbContext>();
dbMock
.AddDbSetMock(wellData)
.AddDbSetMock(telemetryData);
cacheTest = TelemetryDataCache<TTelemetryData>.GetInstance<TTelemetryData>(dbMock.Object, out Task cacheInitialization);
cacheInitialization.Wait();
}
[Fact]
public void Get_existing_cache_returns_some()
{
var startDate = baseDate.AddSeconds(3);
var data = cacheTest.GetOrDefault(IdTelemetryOk, startDate, 600, 600);
Assert.NotNull(data);
Assert.NotEmpty(data);
}
[Fact]
public void Get_non_existing_cache_returns_null()
{
var startDate = baseDate.AddSeconds(-1);
var data = cacheTest.GetOrDefault(IdTelemetryOk, startDate, 600, 600);
Assert.Null(data);
}
[Fact]
public void Add_new_data_should_replace_IdTelemetry()
{
var startDate = baseDate.AddSeconds(4);
var newTelemetryData = new TTelemetryData[]{
new ( 0, startDate, timezone.Hours),
new ( 0, startDate.AddSeconds(1), timezone.Hours),
};
cacheTest.AddRange(IdTelemetryOk, newTelemetryData);
var data = cacheTest.GetOrDefault(IdTelemetryOk, startDate, 600, 600);
Assert.NotNull(data);
Assert.True(data?.Count() > 2);
Assert.All(data!, p => Assert.Equal(IdTelemetryOk, p.IdTelemetry));
}
}
}

View File

@ -20,8 +20,8 @@ public class EventServiceTest
context = TestHelpter.MakeRealTestContext();
var telemetryTracker = new Mock<ITelemetryTracker>();
var imezoneServiceMock = new Mock<ITimezoneService>();
var telemetryService = new TelemetryService(context, telemetryTracker.Object, imezoneServiceMock.Object);
service = new EventService(context, telemetryService);
var telemetryService = new TelemetryService(context, TestHelpter.MemoryCache, telemetryTracker.Object, imezoneServiceMock.Object);
service = new EventService(context, TestHelpter.MemoryCache, telemetryService);
}
[Fact]

View File

@ -40,7 +40,7 @@ namespace AsbCloudWebApi.Tests.ServicesTests
.Returns(timezone);
context = TestHelpter.MakeRealTestContext();
telemetryService = new TelemetryService(context, telemetryTracker.Object, timezoneService.Object);
telemetryService = new TelemetryService(context, TestHelpter.MemoryCache, telemetryTracker.Object, timezoneService.Object);
telemetryUserService = new TelemetryUserService(context, telemetryService, TestHelpter.MemoryCache);
telemetryDataSaubCache = TelemetryDataCache<TelemetryDataSaubDto>.GetInstance<TelemetryDataSaub>(context, out Task _);
var info = new TelemetryInfoDto

View File

@ -53,7 +53,7 @@ namespace ConsoleApp1
public static AsbCloudDbContext MakeContext()
=> MakeContext(options);
public static IMemoryCache memoryCache = new MemoryCache(new MemoryCacheOptions());
public static IMemoryCache MemoryCache = new MemoryCache(new MemoryCacheOptions());
public static AsbCloudDbContext MakeContext(DbContextOptions<AsbCloudDbContext> options)
=> new (options);
@ -65,19 +65,19 @@ namespace ConsoleApp1
=> AsbCloudInfrastructure.DependencyInjection.MapsterSetup();
public static TelemetryTracker MakeTelemetryTracker()
=> new (ConfigurationService, memoryCache);
=> new (ConfigurationService, MemoryCache);
public static TelemetryService MakeTelemetryService()
=> new (Context, MakeTelemetryTracker(), TimezoneService);
=> new (Context, MemoryCache, MakeTelemetryTracker(), TimezoneService);
public static WellService MakeWellService()
=> new (Context, memoryCache, MakeTelemetryService(), TimezoneService);
=> new (Context, MemoryCache, MakeTelemetryService(), TimezoneService);
public static WellOperationRepository MakeWellOperationRepository()
=> new (Context, memoryCache, MakeWellService());
=> new (Context, MemoryCache, MakeWellService());
public static OperationsStatService MakeOperationsStatService()
=> new (Context, memoryCache, MakeWellService());
=> new (Context, MemoryCache, MakeWellService());
public static ScheduleReportService MakeScheduleReportService()
=> new(MakeOperationsStatService(), MakeWellService());