From 29845aa36a367e3fd57ecba09dc1309ad328c989 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A4=D1=80=D0=BE=D0=BB=D0=BE=D0=B2?= Date: Mon, 21 Feb 2022 17:55:50 +0500 Subject: [PATCH] Add tests for DrillingProgramService --- AsbCloudApp/Data/FileInfoDto.cs | 2 +- .../DrillingProgramServiceTest.cs | 205 ++++++++++++++++-- 2 files changed, 186 insertions(+), 21 deletions(-) diff --git a/AsbCloudApp/Data/FileInfoDto.cs b/AsbCloudApp/Data/FileInfoDto.cs index b3f4da39..7153218a 100644 --- a/AsbCloudApp/Data/FileInfoDto.cs +++ b/AsbCloudApp/Data/FileInfoDto.cs @@ -8,7 +8,7 @@ namespace AsbCloudApp.Data public int Id { get; set; } public int IdWell { get; set; } public int IdCategory { get; set; } - public int IdAuthor { get; set; } + public int? IdAuthor { get; set; } public string Name { get; set; } public DateTime UploadDate { get; set; } public long Size { get; set; } diff --git a/AsbCloudWebApi.Tests/ServicesTests/DrillingProgramServiceTest.cs b/AsbCloudWebApi.Tests/ServicesTests/DrillingProgramServiceTest.cs index e45dbb8f..92938991 100644 --- a/AsbCloudWebApi.Tests/ServicesTests/DrillingProgramServiceTest.cs +++ b/AsbCloudWebApi.Tests/ServicesTests/DrillingProgramServiceTest.cs @@ -11,6 +11,7 @@ using Microsoft.Extensions.Configuration; using System.Threading; using AsbCloudApp.Data; using Mapster; +using System; namespace AsbCloudWebApi.Tests.ServicesTests { @@ -45,6 +46,30 @@ namespace AsbCloudWebApi.Tests.ServicesTests new User { Id = 3005, IdCompany = 3003, Login = "wrong 2", Email = "aa@aa.aa", IdState = 2 }, }; + private static readonly FileInfo file1001 = new FileInfo + { + Id = 3001, + IdWell = idWell, + IdCategory = 1001, + IdAuthor = publisher1.Id, + IsDeleted = false, + Name = "file1.xlsx", + Size = 1024, + UploadDate = System.DateTimeOffset.UtcNow, + }; + + private static readonly FileInfo file1002 = new FileInfo + { + Id = 3002, + IdWell = idWell, + IdCategory = 1002, + IdAuthor = publisher1.Id, + IsDeleted = false, + Name = "file2.xlsx", + Size = 1024, + UploadDate = System.DateTimeOffset.UtcNow, + }; + private static readonly List relationsCompanyWell = new() { new RelationCompanyWell { IdCompany = 3001, IdWell = 3001, }, @@ -184,7 +209,108 @@ namespace AsbCloudWebApi.Tests.ServicesTests } [Fact] - public async Task GetStateAsync_returns_state_2() + public async Task AddOrReplaceFileMarkAsync_returns_1() + { + ConfigureNotApproved(); + fileServiceMock + .Setup(s => s.GetInfoAsync(It.IsAny(), It.IsAny())) + .Returns(Task.FromResult(file1002.Adapt())); + + fileServiceMock + .Setup(s => s.CreateFileMarkAsync(It.IsAny(), It.IsAny(), It.IsAny())) + .Returns(Task.FromResult(1)); + + var service = new DrillingProgramService( + db, + fileServiceMock.Object, + userServiceMock.Object, + wellServiceMock.Object, + configurationMock.Object, + backgroundWorkerMock.Object); + + var fileMark = new FileMarkDto + { + IdFile = file1002.Id, + IdMarkType = 1, + DateCreated = DateTime.Now, + }; + var affected = await service.AddOrReplaceFileMarkAsync(fileMark, approver1.Id, CancellationToken.None); + Assert.Equal(1, affected); + } + + [Fact] + public async Task AddOrReplaceFileMarkAsync_as_replace_returns_1() + { + ConfigureNotApproved(); + fileServiceMock + .Setup(s => s.GetInfoAsync(It.IsAny(), It.IsAny())) + .Returns(Task.FromResult(file1002.Adapt())); + + fileServiceMock + .Setup(s => s.CreateFileMarkAsync(It.IsAny(), It.IsAny(), It.IsAny())) + .Returns(Task.FromResult(1)); + + var service = new DrillingProgramService( + db, + fileServiceMock.Object, + userServiceMock.Object, + wellServiceMock.Object, + configurationMock.Object, + backgroundWorkerMock.Object); + var fileMark = new FileMarkDto + { + IdFile = file1001.Id, + IdMarkType = 0, + DateCreated = DateTime.Now, + }; + await service.AddOrReplaceFileMarkAsync(fileMark, approver1.Id, CancellationToken.None); + var fileMark2 = new FileMarkDto + { + IdFile = file1001.Id, + IdMarkType = 1, + DateCreated = DateTime.Now.AddHours(1), + }; + var affected = await service.AddOrReplaceFileMarkAsync(fileMark2, approver1.Id, CancellationToken.None); + + Assert.Equal(1, affected); + } + + [Fact] + public async Task MarkAsDeletedFileMarkAsync_returns_1() + { + ConfigureNotApproved(); + fileServiceMock + .Setup(s => s.GetByMarkId(It.IsAny(), It.IsAny())) + .Returns(Task.FromResult(file1002.Adapt())); + + fileServiceMock + .Setup(s => s.MarkFileMarkAsDeletedAsync(It.IsAny(), It.IsAny())) + .Returns(Task.FromResult(1)); + + var service = new DrillingProgramService( + db, + fileServiceMock.Object, + userServiceMock.Object, + wellServiceMock.Object, + configurationMock.Object, + backgroundWorkerMock.Object); + + var fileMark = new FileMarkDto + { + IdFile = file1001.Id, + IdMarkType = 0, + DateCreated = DateTime.Now, + }; + + int idMark = 0; + + var affected = await service.MarkAsDeletedFileMarkAsync(idMark, CancellationToken.None); + + Assert.Equal(1, affected); + } + + [Fact] + public async Task GetStateAsync_returns_state_1() { ConfigureNotApproved(); var service = new DrillingProgramService( @@ -197,7 +323,63 @@ namespace AsbCloudWebApi.Tests.ServicesTests var state = await service.GetStateAsync(idWell, publisher1.Id, CancellationToken.None); + Assert.Equal(1, state.IdState); + } + + [Fact] + public async Task GetStateAsync_returns_state_2() + { + ConfigureNotApproved(); + db.FileMarks.AddRange( + new FileMark { IdFile = file1002.Id, IdUser = approver1.Id, IdMarkType = 1, DateCreated = System.DateTimeOffset.UtcNow }, + new FileMark { IdFile = file1002.Id, IdUser = approver2.Id, IdMarkType = 1, DateCreated = System.DateTimeOffset.UtcNow } + ); + await db.SaveChangesAsync(); + + wellServiceMock.Setup(s => s.GetAsync(It.IsAny(), It.IsAny())) + .Returns(Task.FromResult(new WellDto { Caption = "test well", Cluster = "test cluster" })); + + var service = new DrillingProgramService( + db, + fileServiceMock.Object, + userServiceMock.Object, + wellServiceMock.Object, + configurationMock.Object, + backgroundWorkerMock.Object); + + var state = await service.GetStateAsync(idWell, publisher1.Id, CancellationToken.None); + Assert.Equal(2, state.IdState); + backgroundWorkerMock.Verify(s => s.Enqueue(It.IsAny>())); + } + + [Fact] + public async Task GetStateAsync_returns_state_3() + { + ConfigureNotApproved(); + db.FileMarks.AddRange( + new FileMark { IdFile = file1002.Id, IdUser = approver1.Id, IdMarkType = 1, DateCreated = DateTimeOffset.UtcNow }, + new FileMark { IdFile = file1002.Id, IdUser = approver2.Id, IdMarkType = 1, DateCreated = DateTimeOffset.UtcNow } + ); + db.Files.AddRange(new FileInfo { IdCategory = 1000, IdWell = idWell, Name = "DrillingProgram.xalsx", Size = 1024*1024, UploadDate = DateTimeOffset.UtcNow }); + + await db.SaveChangesAsync(); + + wellServiceMock.Setup(s => s.GetAsync(It.IsAny(), It.IsAny())) + .Returns(Task.FromResult(new WellDto { Caption = "test well", Cluster = "test cluster" })); + + var service = new DrillingProgramService( + db, + fileServiceMock.Object, + userServiceMock.Object, + wellServiceMock.Object, + configurationMock.Object, + backgroundWorkerMock.Object); + + var state = await service.GetStateAsync(idWell, publisher1.Id, CancellationToken.None); + + Assert.Equal(3, state.IdState); + backgroundWorkerMock.VerifyNoOtherCalls(); } private void ConfigureNotApproved() @@ -211,7 +393,6 @@ namespace AsbCloudWebApi.Tests.ServicesTests var entry2 = db.DrillingProgramParts.Add(new DrillingProgramPart { IdWell = idWell, IdFileCategory = 1002 }); db.SaveChanges(); - db.RelationDrillingProgramPartUsers.AddRange(new List{ new RelationUserDrillingProgramPart{ IdDrillingProgramPart = entry1.Entity.Id, @@ -236,24 +417,8 @@ namespace AsbCloudWebApi.Tests.ServicesTests }); db.Files.AddRange(new List{ - new FileInfo{ - IdWell = idWell, - IdCategory = 1001, - IdAuthor = publisher1.Id, - IsDeleted = false, - Name = "file1.xlsx", - Size = 1024, - UploadDate = System.DateTimeOffset.UtcNow, - }, - new FileInfo{ - IdWell = idWell, - IdCategory = 1002, - IdAuthor = publisher1.Id, - IsDeleted = false, - Name = "file2.xlsx", - Size = 1024, - UploadDate = System.DateTimeOffset.UtcNow, - } + file1001, + file1002 }); db.SaveChanges();