From 433bc30316af9e5589a662e67053f11c36820c6f 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 12:04:26 +0500 Subject: [PATCH] fix default EF data. --- AsbCloudDb/Model/AsbCloudDbContext.cs | 2 +- .../DrillingProgram/DrillingProgramService.cs | 3 + .../ServicesTests/ClusterServiceTest.cs | 6 +- .../DrillingProgramServiceTest.cs | 262 ++++++++++++++++++ .../ServicesTests/EventServiceTest.cs | 1 - AsbCloudWebApi.Tests/TestHelpter.cs | 3 +- 6 files changed, 271 insertions(+), 6 deletions(-) create mode 100644 AsbCloudWebApi.Tests/ServicesTests/DrillingProgramServiceTest.cs diff --git a/AsbCloudDb/Model/AsbCloudDbContext.cs b/AsbCloudDb/Model/AsbCloudDbContext.cs index 37ee88c5..11f2eb85 100644 --- a/AsbCloudDb/Model/AsbCloudDbContext.cs +++ b/AsbCloudDb/Model/AsbCloudDbContext.cs @@ -548,7 +548,7 @@ namespace AsbCloudDb.Model modelBuilder.Entity(entity => { entity.HasData(new List{ - new RelationUserUserRole { IdUser = 1, IdUserRole = 2, }, + new RelationUserUserRole { IdUser = 1, IdUserRole = 1, }, }); }); diff --git a/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs b/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs index 82d4c174..8baa6c61 100644 --- a/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs +++ b/AsbCloudInfrastructure/Services/DrillingProgram/DrillingProgramService.cs @@ -325,6 +325,9 @@ namespace AsbCloudInfrastructure.Services.DrillingProgram if (fileEntity is not null) { part.File = fileEntity.Adapt(); + if (part.File.FileMarks is not null) + part.File.FileMarks = part.File.FileMarks.Where(m => !m.IsDeleted); + part.IdState = idPartStateApproving; var marks = fileEntity.FileMarks.Where(m => !m.IsDeleted); var hasReject = marks.Any(m => m.IdMarkType == idMarkTypeReject); diff --git a/AsbCloudWebApi.Tests/ServicesTests/ClusterServiceTest.cs b/AsbCloudWebApi.Tests/ServicesTests/ClusterServiceTest.cs index 63e5895d..92e77976 100644 --- a/AsbCloudWebApi.Tests/ServicesTests/ClusterServiceTest.cs +++ b/AsbCloudWebApi.Tests/ServicesTests/ClusterServiceTest.cs @@ -109,7 +109,7 @@ public class ClusterServiceTest var service = new ClusterService(context, wellService.Object); var dtos = await service.GetDepositsAsync(1); - Assert.Equal(1, dtos.Count()); + Assert.Single(dtos); } [Fact] @@ -135,7 +135,7 @@ public class ClusterServiceTest var service = new ClusterService(context, wellService.Object); var dtos = await service.GetDepositsDrillParamsAsync(1); - Assert.Equal(1, dtos.Count()); + Assert.Single(dtos); } [Fact] @@ -171,7 +171,7 @@ public class ClusterServiceTest var service = new ClusterService(context, wellService.Object); var dtos = await service.GetWellsAsync(1,1); - Assert.Equal(1, dtos.Count()); + Assert.Single(dtos); } diff --git a/AsbCloudWebApi.Tests/ServicesTests/DrillingProgramServiceTest.cs b/AsbCloudWebApi.Tests/ServicesTests/DrillingProgramServiceTest.cs new file mode 100644 index 00000000..e45dbb8f --- /dev/null +++ b/AsbCloudWebApi.Tests/ServicesTests/DrillingProgramServiceTest.cs @@ -0,0 +1,262 @@ +using AsbCloudDb.Model; +using AsbCloudInfrastructure.Services; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Moq; +using Xunit; +using AsbCloudApp.Services; +using AsbCloudInfrastructure.Services.DrillingProgram; +using Microsoft.Extensions.Configuration; +using System.Threading; +using AsbCloudApp.Data; +using Mapster; + +namespace AsbCloudWebApi.Tests.ServicesTests +{ + public class DrillingProgramServiceTest + { + private const int idWell = 3001; + private static readonly SimpleTimezone baseTimezone = new () { Hours = 5d }; + private readonly AsbCloudDbContext db; + + private static readonly List wells = new() + { + new Well { Id = 3001, Caption = "well 1", Timezone = baseTimezone }, + new Well { Id = 3002, Caption = "well 2", Timezone = baseTimezone }, + }; + + private static readonly List companies = new() { + new Company { Id = 3001, Caption = "company name", IdCompanyType = 2, }, + new Company { Id = 3002, Caption = "company name", IdCompanyType = 2, }, + new Company { Id = 3003, Caption = "company name", IdCompanyType = 2, }, + }; + + private static readonly User publisher1 = new () { Id = 3001, IdCompany = 3001, Login = "user 1", Email = "aa@aa.aa", IdState = 2 }; + private static readonly User approver1 = new () { Id = 3002, IdCompany = 3001, Login = "user 2", Email = "aa@aa.aa", IdState = 2 }; + private static readonly User approver2 = new () { Id = 3003, IdCompany = 3002, Login = "user 3", Email = "aa@aa.aa", IdState = 2 }; + + private static readonly List users = new() + { + publisher1, + approver1, + approver2, + new User { Id = 3004, IdCompany = 3001, Login = "wrong 1", Email = "", IdState = 2 }, + new User { Id = 3005, IdCompany = 3003, Login = "wrong 2", Email = "aa@aa.aa", IdState = 2 }, + }; + + private static readonly List relationsCompanyWell = new() + { + new RelationCompanyWell { IdCompany = 3001, IdWell = 3001, }, + new RelationCompanyWell { IdCompany = 3002, IdWell = 3001, }, + new RelationCompanyWell { IdCompany = 3002, IdWell = 3002, }, + new RelationCompanyWell { IdCompany = 3003, IdWell = 3002, }, + }; + + private readonly Mock fileServiceMock; + private readonly Mock userServiceMock; + private readonly Mock wellServiceMock; + private readonly Mock configurationMock; + private readonly Mock backgroundWorkerMock; + + public DrillingProgramServiceTest() + { + AsbCloudInfrastructure.DependencyInjection.MapsterSetup(); + + db = TestHelpter.MakeTestContext(); + db.Wells.AddRange(wells); + db.Companies.AddRange(companies); + db.SaveChanges(); + db.Users.AddRange(users); + db.RelationCompaniesWells.AddRange(relationsCompanyWell); + db.SaveChanges(); + + fileServiceMock = new Mock(); + userServiceMock = new Mock(); + wellServiceMock = new Mock(); + configurationMock = new Mock(); + backgroundWorkerMock = new Mock(); + } + + [Fact] + public async Task GetAvailableUsers_returns_3_users() + { + var service = new DrillingProgramService( + db, + fileServiceMock.Object, + userServiceMock.Object, + wellServiceMock.Object, + configurationMock.Object, + backgroundWorkerMock.Object); + + var users = await service.GetAvailableUsers(idWell, CancellationToken.None); + + Assert.Equal(3, users.Count()); + } + + [Fact] + public async Task AddPartsAsync_returns_2() + { + var service = new DrillingProgramService( + db, + fileServiceMock.Object, + userServiceMock.Object, + wellServiceMock.Object, + configurationMock.Object, + backgroundWorkerMock.Object); + + var result = await service.AddPartsAsync(idWell, new int[] { 1001, 1002 }, CancellationToken.None); + + Assert.Equal(2, result); + } + + [Fact] + public async Task RemovePartsAsync_returns_1() + { + db.DrillingProgramParts.Add(new DrillingProgramPart { IdFileCategory = 1005, IdWell = idWell}); + db.SaveChanges(); + var service = new DrillingProgramService( + db, + fileServiceMock.Object, + userServiceMock.Object, + wellServiceMock.Object, + configurationMock.Object, + backgroundWorkerMock.Object); + + var result = await service.RemovePartsAsync(idWell, new int[] { 1005 }, CancellationToken.None); + + Assert.Equal(1, result); + } + + [Fact] + public async Task AddUserAsync_returns_1() + { + db.DrillingProgramParts.Add(new DrillingProgramPart { IdFileCategory = 1001, IdWell = idWell }); + db.SaveChanges(); + + userServiceMock.Setup((s) => s.GetAsync(It.IsAny(), It.IsAny())) + .Returns(Task.FromResult(publisher1.Adapt())); + + var service = new DrillingProgramService( + db, + fileServiceMock.Object, + userServiceMock.Object, + wellServiceMock.Object, + configurationMock.Object, + backgroundWorkerMock.Object); + + var result = await service.AddUserAsync(idWell, 1001, publisher1.Id, 1, CancellationToken.None); + + Assert.Equal(1, result); + } + + [Fact] + public async Task RemoveUserAsync_returns_1() + { + const int idUserRole = 1; + const int idFileCategory = 1001; + var entry = db.DrillingProgramParts.Add(new DrillingProgramPart { + IdFileCategory = idFileCategory, + IdWell = idWell + }); + db.SaveChanges(); + db.RelationDrillingProgramPartUsers.Add(new RelationUserDrillingProgramPart + { + IdUser = publisher1.Id, + IdDrillingProgramPart = entry.Entity.Id, + IdUserRole = idUserRole + }); + db.SaveChanges(); + userServiceMock.Setup((s) => s.GetAsync(It.IsAny(), It.IsAny())) + .Returns(Task.FromResult(publisher1.Adapt())); + + var service = new DrillingProgramService( + db, + fileServiceMock.Object, + userServiceMock.Object, + wellServiceMock.Object, + configurationMock.Object, + backgroundWorkerMock.Object); + + var result = await service.RemoveUserAsync(idWell, idFileCategory, publisher1.Id, idUserRole, CancellationToken.None); + + Assert.Equal(1, result); + } + + [Fact] + public async Task GetStateAsync_returns_state_2() + { + ConfigureNotApproved(); + 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); + } + + private void ConfigureNotApproved() + { + db.DrillingProgramParts.RemoveRange(db.DrillingProgramParts); + db.Files.RemoveRange(db.Files); + //db.RelationDrillingProgramPartUsers.RemoveRange(db.RelationDrillingProgramPartUsers); + db.SaveChanges(); + + var entry1 = db.DrillingProgramParts.Add(new DrillingProgramPart { IdWell = idWell, IdFileCategory = 1001 }); + var entry2 = db.DrillingProgramParts.Add(new DrillingProgramPart { IdWell = idWell, IdFileCategory = 1002 }); + db.SaveChanges(); + + + db.RelationDrillingProgramPartUsers.AddRange(new List{ + new RelationUserDrillingProgramPart{ + IdDrillingProgramPart = entry1.Entity.Id, + IdUser = publisher1.Id, + IdUserRole = 1, + }, + new RelationUserDrillingProgramPart{ + IdDrillingProgramPart = entry2.Entity.Id, + IdUser = publisher1.Id, + IdUserRole = 1, + }, + new RelationUserDrillingProgramPart{ + IdDrillingProgramPart = entry2.Entity.Id, + IdUser = approver1.Id, + IdUserRole = 2, + }, + new RelationUserDrillingProgramPart{ + IdDrillingProgramPart = entry2.Entity.Id, + IdUser = approver2.Id, + IdUserRole = 2, + }, + }); + + 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, + } + }); + + db.SaveChanges(); + } + } +} diff --git a/AsbCloudWebApi.Tests/ServicesTests/EventServiceTest.cs b/AsbCloudWebApi.Tests/ServicesTests/EventServiceTest.cs index e6aef6ed..9d6baf19 100644 --- a/AsbCloudWebApi.Tests/ServicesTests/EventServiceTest.cs +++ b/AsbCloudWebApi.Tests/ServicesTests/EventServiceTest.cs @@ -6,7 +6,6 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using AsbCloudApp.Services; -using AsbCloudInfrastructure.Services; using Moq; using Xunit; diff --git a/AsbCloudWebApi.Tests/TestHelpter.cs b/AsbCloudWebApi.Tests/TestHelpter.cs index 4552fc8d..0cf683ae 100644 --- a/AsbCloudWebApi.Tests/TestHelpter.cs +++ b/AsbCloudWebApi.Tests/TestHelpter.cs @@ -16,7 +16,8 @@ namespace AsbCloudWebApi.Tests .UseNpgsql("Host=localhost;Database=tests;Username=postgres;Password=q;Persist Security Info=True;Include Error Detail=True") .Options; var context = new AsbCloudDbContext(options); - context.Database.Migrate(); + context.Database.EnsureDeleted(); + context.Database.EnsureCreated(); return context; } }