persistence/DD.Persistence.Test/TimestampedValuesServiceShould.cs

69 lines
2.5 KiB
C#

using DD.Persistence.Models;
using DD.Persistence.Repositories;
using DD.Persistence.Services;
using NSubstitute;
using System.Text.Json;
namespace DD.Persistence.Test;
public class TimestampedValuesServiceShould
{
private readonly ITimestampedValuesRepository timestampedValuesRepository = Substitute.For<ITimestampedValuesRepository>();
private readonly ISchemePropertyRepository dataSchemeRepository = Substitute.For<ISchemePropertyRepository>();
private TimestampedValuesService timestampedValuesService;
public TimestampedValuesServiceShould()
{
timestampedValuesService = new TimestampedValuesService(timestampedValuesRepository, dataSchemeRepository);
}
[Fact]
public async Task TestServiceEfficiency()
{
var discriminatorIds = new[] { Guid.NewGuid(), Guid.NewGuid() };
const int count = 10;
var dtos = Generate(count, DateTimeOffset.UtcNow);
var addRangeResult = await timestampedValuesService
.AddRange(discriminatorIds.First(), dtos, CancellationToken.None);
Assert.Equal(0, addRangeResult);
addRangeResult = await timestampedValuesService
.AddRange(discriminatorIds.Last(), dtos, CancellationToken.None);
Assert.Equal(0, addRangeResult);
var columnNames = new[] { "A", "B", "C", "D" };
var geTimestamp = DateTimeOffset.UtcNow
.AddHours(-1)
.ToUniversalTime();
var getResult = await timestampedValuesService
.Get(discriminatorIds, geTimestamp, columnNames, 0, count, CancellationToken.None);
Assert.NotNull(getResult);
Assert.Empty(getResult);
}
private static IEnumerable<TimestampedValuesDto> Generate(int countToCreate, DateTimeOffset from)
{
for (int i = 0; i < countToCreate; i++)
{
var values = new Dictionary<string, object>()
{
{ "A", GetJsonFromObject(i) },
{ "B", GetJsonFromObject(i * 1.1) },
{ "C", GetJsonFromObject($"Any{i}") },
{ "D", GetJsonFromObject(DateTimeOffset.Now) }
};
yield return new TimestampedValuesDto()
{
Timestamp = from.AddSeconds(i),
Values = values
};
}
}
private static JsonElement GetJsonFromObject(object value)
{
var jsonString = JsonSerializer.Serialize(value);
var doc = JsonDocument.Parse(jsonString);
return doc.RootElement;
}
}