diff --git a/AsbCloudApp/Requests/MessageRequest.cs b/AsbCloudApp/Requests/MessageRequest.cs index 0d05138a..861d091a 100644 --- a/AsbCloudApp/Requests/MessageRequest.cs +++ b/AsbCloudApp/Requests/MessageRequest.cs @@ -31,6 +31,14 @@ public class MessageRequestBase : RequestBase /// public string? SearchString { get; set; } + /// + /// + /// + public MessageRequestBase() + { + + } + /// /// копирующий конструктор /// diff --git a/AsbCloudInfrastructure.Tests/Services/MessageServiceTest.cs b/AsbCloudInfrastructure.Tests/Services/MessageServiceTest.cs new file mode 100644 index 00000000..955c2101 --- /dev/null +++ b/AsbCloudInfrastructure.Tests/Services/MessageServiceTest.cs @@ -0,0 +1,320 @@ +using AsbCloudApp.Data; +using AsbCloudApp.Data.SAUB; +using AsbCloudApp.Repositories; +using AsbCloudApp.Requests; +using AsbCloudApp.Services; +using AsbCloudDb.Model; +using AsbCloudInfrastructure.Repository; +using AsbCloudInfrastructure.Services; +using AsbCloudInfrastructure.Services.SAUB; +using DocumentFormat.OpenXml.Office2010.ExcelAc; +using NSubstitute; +using Org.BouncyCastle.Asn1.Ocsp; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Xunit; + +namespace AsbCloudInfrastructure.Tests.Services; + +public class MessageServiceTest +{ + private static readonly List telemetries = new List() + { + new TelemetryBaseDto() + { + Id = 1, + TimeZone = new SimpleTimezoneDto() + { + Hours = 5 + } + }, + new TelemetryBaseDto() + { + Id = 2, + TimeZone = new SimpleTimezoneDto() + { + Hours = 5 + } + } + }; + + private static readonly List events = new List() + { + 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" + } + }; + + /// + /// : + /// 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 + /// + /// + private static readonly List messages = new List() + { + 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(); + private readonly IMessageRepository messageRepositoryMock = Substitute.For(); + private readonly IEventRepository eventRepositoryMock = Substitute.For(); + private readonly ITelemetryService telemetryServiceMock = Substitute.For(); + private readonly IAsbCloudDbContext db = Substitute.For(); + + public MessageServiceTest() + { + messageServiceMock = new MessageService(messageRepositoryMock, telemetryServiceMock, eventRepositoryMock); + + telemetryServiceMock + .GetOrDefaultTelemetriesByIdsWells(Arg.Any>()) + .Returns(telemetries); + + eventRepositoryMock + .Get(Arg.Any(), Arg.Any()) + .Returns(events); + + messageRepositoryMock + .GetMessagesAsync(Arg.Any(), Arg.Any()) + .Returns(messages); + } + + + [Fact] + public async Task GetStatMessages_ShouldReturn_Success() + { + //act + var baseRequest = new MessageRequestBase() { }; + var messageRequest = new MessageRequest(baseRequest, [1]); + var result = await messageServiceMock.GetStat(messageRequest, CancellationToken.None); + + Assert.Equal(6, result.Count()); + + var mCount_Telemetry_1_Category_1_Template_1_Expected = messages + .Where(x => x.IdTelemetry == 1) + .Where(x => x.IdEvent == 1) + .Count(); + var mCount_Telemetry_1_Category_1_Template_1_Actual = result + .Where(x => x.IdTelemetry == 1) + .Where(x => x.IdCategory == 1) + .Where(x => x.MessageTemplate == " 1 1") + .Sum(x => x.MessagesCount); + Assert.Equal(mCount_Telemetry_1_Category_1_Template_1_Expected, mCount_Telemetry_1_Category_1_Template_1_Actual); + + var mCount_Telemetry_1_Category_1_Template_2_Expected = messages + .Where(x => x.IdTelemetry == 1) + .Where(x => x.IdEvent == 2) + .Count(); + var mCount_Telemetry_1_Category_1_Template_2_Actual = result + .Where(x => x.IdTelemetry == 1) + .Where(x => x.IdCategory == 1) + .Where(x => x.MessageTemplate == " 2 1") + .Sum(x => x.MessagesCount); + Assert.Equal(mCount_Telemetry_1_Category_1_Template_2_Expected, mCount_Telemetry_1_Category_1_Template_2_Actual); + + var mCount_Telemetry_1_Category_1_Template_3_Expected = messages + .Where(x => x.IdTelemetry == 1) + .Where(x => x.IdEvent == 3) + .Count(); + var mCount_Telemetry_1_Category_1_Template_3_Actual = result + .Where(x => x.IdTelemetry == 1) + .Where(x => x.IdCategory == 1) + .Where(x => x.MessageTemplate == " 3 1") + .Sum(x => x.MessagesCount); + Assert.Equal(mCount_Telemetry_1_Category_1_Template_3_Expected, mCount_Telemetry_1_Category_1_Template_3_Actual); + + var mCount_Telemetry_1_Category_2_Template_2_Expected = messages + .Where(x => x.IdTelemetry == 1) + .Where(x => x.IdEvent == 5) + .Count(); + var mCount_Telemetry_1_Category_2_Template_2_Actual = result + .Where(x => x.IdTelemetry == 1) + .Where(x => x.IdCategory == 2) + .Where(x => x.MessageTemplate == " 2 2") + .Sum(x => x.MessagesCount); + Assert.Equal(mCount_Telemetry_1_Category_2_Template_2_Expected, mCount_Telemetry_1_Category_2_Template_2_Actual); + + var mCount_Telemetry_1_Category_2_Template_3_Expected = messages + .Where(x => x.IdTelemetry == 1) + .Where(x => x.IdEvent == 6) + .Count(); + var mCount_Telemetry_1_Category_2_Template_3_Actual = result + .Where(x => x.IdTelemetry == 1) + .Where(x => x.IdCategory == 2) + .Where(x => x.MessageTemplate == " 3 2") + .Sum(x => x.MessagesCount); + Assert.Equal(mCount_Telemetry_1_Category_2_Template_3_Expected, mCount_Telemetry_1_Category_2_Template_3_Actual); + + var mCount_Telemetry_2_Category_3_Template_1_Expected = messages + .Where(x => x.IdTelemetry == 2) + .Where(x => x.IdEvent == 6) + .Count(); + var mCount_Telemetry_2_Category_3_Template_1_Actual = result + .Where(x => x.IdTelemetry == 2) + .Where(x => x.IdCategory == 3) + .Where(x => x.MessageTemplate == " 1 3") + .Sum(x => x.MessagesCount); + Assert.Equal(mCount_Telemetry_2_Category_3_Template_1_Expected, mCount_Telemetry_2_Category_3_Template_1_Actual); + } + + +} \ No newline at end of file