DD.WellWorkover.Cloud/AsbCloudInfrastructure.Tests/Services/MessageServiceTest.cs

292 lines
8.4 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 NSubstitute;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Xunit;
namespace AsbCloudInfrastructure.Tests.Services;
public class MessageServiceTest
{
private static readonly List<TelemetryDto> telemetries = new List<TelemetryDto>()
{
new TelemetryDto()
{
Id = 1,
IdWell = 1,
TimeZone = new SimpleTimezoneDto()
{
Hours = 5
}
},
new TelemetryDto()
{
Id = 2,
IdWell = 2,
TimeZone = new SimpleTimezoneDto()
{
Hours = 5
}
}
};
private static readonly List<TelemetryEventDto> events = new List<TelemetryEventDto>()
{
new TelemetryEventDto()
{
Id = 1,
IdCategory = 1,
MessageTemplate = "Шаблон сообщения 1 категории 1"
},
new TelemetryEventDto()
{
Id = 2,
IdCategory = 1,
MessageTemplate = "Шаблон сообщения 2 категории 1"
},
new TelemetryEventDto()
{
Id = 3,
IdCategory = 1,
MessageTemplate = "Шаблон сообщения 3 категории 1"
},
new TelemetryEventDto()
{
Id = 4,
IdCategory = 2,
MessageTemplate = "Шаблон сообщения 1 категории 2"
},
new TelemetryEventDto()
{
Id = 5,
IdCategory = 2,
MessageTemplate = "Шаблон сообщения 2 категории 2"
},
new TelemetryEventDto()
{
Id = 6,
IdCategory = 3,
MessageTemplate = "Шаблон сообщения 1 категории 3"
}
};
/// <summary>
/// Структура:
/// Телеметрия 1:
/// Категория 1:
/// Событие 1:
/// Сообщение 1
/// Сообщение 2
/// Сообщение 3
/// Событие 2:
/// Сообщение 1
/// Сообщение 2
/// Сообщение 3
/// Событие 3:
/// Сообщение 1
/// Сообщение 2
/// Сообщение 3
/// Категория 2:
/// Событие 2:
/// Сообщение 1
/// Сообщение 2
/// Событие 3:
/// Сообщение 1
/// Сообщение 2
/// Телеметрия 2
/// Категория 3:
/// Событие 3:
/// Сообщение 1
/// Сообщение 2
/// Сообщение 3
///
/// </summary>
private static readonly List<TelemetryMessageDto> messages = new List<TelemetryMessageDto>()
{
new TelemetryMessageDto()
{
Id = 1,
IdEvent = 1,
IdTelemetry = 1
},
new TelemetryMessageDto()
{
Id = 2,
IdEvent = 1,
IdTelemetry = 1
},
new TelemetryMessageDto()
{
Id = 3,
IdEvent = 1,
IdTelemetry = 1
},
new TelemetryMessageDto()
{
Id = 4,
IdEvent = 2,
IdTelemetry = 1
},
new TelemetryMessageDto()
{
Id = 5,
IdEvent = 2,
IdTelemetry = 1
},
new TelemetryMessageDto()
{
Id = 6,
IdEvent = 2,
IdTelemetry = 1
},
new TelemetryMessageDto()
{
Id = 7,
IdEvent = 3,
IdTelemetry = 1
},
new TelemetryMessageDto()
{
Id = 8,
IdEvent = 3,
IdTelemetry = 1
},
new TelemetryMessageDto()
{
Id = 9,
IdEvent = 3,
IdTelemetry = 1
},
new TelemetryMessageDto()
{
Id = 10,
IdEvent = 4,
IdTelemetry = 1
},
new TelemetryMessageDto()
{
Id = 11,
IdEvent = 4,
IdTelemetry = 1
},
new TelemetryMessageDto()
{
Id = 12,
IdEvent = 5,
IdTelemetry = 1
},
new TelemetryMessageDto()
{
Id = 13,
IdEvent = 5,
IdTelemetry = 1
},
new TelemetryMessageDto()
{
Id = 14,
IdEvent = 6,
IdTelemetry = 2
},
new TelemetryMessageDto()
{
Id = 15,
IdEvent = 6,
IdTelemetry = 2
},
new TelemetryMessageDto()
{
Id = 16,
IdEvent = 6,
IdTelemetry = 2
},
};
private readonly IMessageService messageServiceMock = Substitute.For<IMessageService>();
private readonly IMessageRepository messageRepositoryMock = Substitute.For<IMessageRepository>();
private readonly IEventRepository eventRepositoryMock = Substitute.For<IEventRepository>();
private readonly ITelemetryService telemetryServiceMock = Substitute.For<ITelemetryService>();
public MessageServiceTest()
{
messageServiceMock = new MessageService(messageRepositoryMock, telemetryServiceMock, eventRepositoryMock);
telemetryServiceMock
.GetOrDefaultTelemetriesByIdsWells(Arg.Any<IEnumerable<int>>())
.Returns(telemetries);
eventRepositoryMock
.GetAsync(Arg.Any<TelemetryEventRequest>(), Arg.Any<CancellationToken>())
.Returns(events);
messageRepositoryMock
.GetMessagesAsync(Arg.Any<MessageTelemetryRequest>(), Arg.Any<CancellationToken>())
.Returns(messages);
}
[Fact]
public async Task GetStatMessages_ShouldReturn_Success()
{
//act
var baseRequest = new MessageRequestBase() { };
var messageRequest = new MessageRequest(baseRequest, [1]);
var result = await messageServiceMock.GetStatAsync(messageRequest, CancellationToken.None);
Assert.Equal(6, result.Count());
var messageStat_1_1 = result
.Where(x => x.IdWell == 1)
.Where(x => x.IdCategory == 1)
.Where(x => x.MessageTemplate == "Шаблон сообщения 1 категории 1")
.Single();
Assert.Equal(3, messageStat_1_1.MessagesCount);
var messageStat_1_2 = result
.Where(x => x.IdWell == 1)
.Where(x => x.IdCategory == 1)
.Where(x => x.MessageTemplate == "Шаблон сообщения 2 категории 1")
.Single();
Assert.Equal(3, messageStat_1_2.MessagesCount);
var messageStat_1_3 = result
.Where(x => x.IdWell == 1)
.Where(x => x.IdCategory == 1)
.Where(x => x.MessageTemplate == "Шаблон сообщения 3 категории 1")
.Single();
Assert.Equal(3, messageStat_1_3.MessagesCount);
var messageStat_2_2 = result
.Where(x => x.IdWell == 1)
.Where(x => x.IdCategory == 2)
.Where(x => x.MessageTemplate == "Шаблон сообщения 2 категории 2")
.Single();
Assert.Equal(2, messageStat_2_2.MessagesCount);
var messageStat_2_1 = result
.Where(x => x.IdWell == 1)
.Where(x => x.IdCategory == 2)
.Where(x => x.MessageTemplate == "Шаблон сообщения 1 категории 2")
.Single();
Assert.Equal(2, messageStat_2_1.MessagesCount);
var messageStat_3_1 = result
.Where(x => x.IdWell == 2)
.Where(x => x.IdCategory == 3)
.Where(x => x.MessageTemplate == "Шаблон сообщения 1 категории 3")
.Single();
Assert.Equal(3, messageStat_3_1.MessagesCount);
}
}