using AsbCloudDb.Model; using AsbCloudInfrastructure.Services; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Moq; using Xunit; using AsbCloudApp.Services; namespace AsbCloudWebApi.Tests.ServicesTests; public class ClusterServiceTest { private readonly AsbCloudDbContext context; private readonly Mock wellService; private readonly List deposits = new() { new Deposit { Id = 1, Caption = "Test deposit 1" }, new Deposit { Id = 2, Caption = "Test deposit 2" }, new Deposit { Id = 3, Caption = "Test deposit 3" }, new Deposit { Id = 4, Caption = "Test deposit 4" }, }; private readonly List clusters = new() { new Cluster { Id = 1, IdDeposit = 1 }, new Cluster { Id = 2, IdDeposit = 1 }, new Cluster { Id = 3, IdDeposit = 2 }, new Cluster { Id = 4, IdDeposit = 2 }, }; private readonly List wells = new() { new Well { Id = 1, IdCluster = 1 }, new Well { Id = 2, IdCluster = 1 }, new Well { Id = 3, IdCluster = 2 }, new Well { Id = 4, IdCluster = 2 }, }; private readonly List companies = new() { new Company { Id = 1 }, new Company { Id = 2 } }; private readonly List relations = new() { new RelationCompanyWell { IdCompany = 1, IdWell = 1 }, new RelationCompanyWell { IdCompany = 1, IdWell = 2 } }; public ClusterServiceTest() { context = TestHelpter.MakeTestContext(); wellService = new Mock(); context.Deposits.RemoveRange(deposits); context.Clusters.RemoveRange(clusters); context.Wells.RemoveRange(wells); context.Companies.RemoveRange(companies); context.RemoveRange(relations); context.SaveChanges(); context.Deposits.AddRange(deposits); context.Clusters.AddRange(clusters); context.Wells.AddRange(wells); context.Companies.AddRange(companies); context.AddRange(relations); context.SaveChanges(); } ~ClusterServiceTest() { context.Deposits.RemoveRange(context.Deposits.Where(u => u.Id > 1)); context.Clusters.RemoveRange(context.Clusters.Where(u => u.Id > 1)); context.Wells.RemoveRange(context.Wells.Where(u => u.Id > 1)); context.Companies.RemoveRange(context.Companies.Where(u => u.Id > 1)); context.RemoveRange(relations); context.SaveChanges(); } [Fact] public async Task GetDepositsAsync_returns_depositDtos() { var service = new ClusterService(context, wellService.Object); var dtos = await service.GetDepositsAsync(1); Assert.True(dtos.Any()); } [Fact] public async Task GetDepositsAsync_returns_one_deposit() { var service = new ClusterService(context, wellService.Object); var dtos = await service.GetDepositsAsync(1); Assert.Equal(1, dtos.Count()); } [Fact] public async Task GetDepositsAsync_returns_one_deposit_with_two_companies() { var service = new ClusterService(context, wellService.Object); var dtos = await service.GetDepositsAsync(1); Assert.Equal(2, dtos.FirstOrDefault()?.Clusters.Count()); } [Fact] public async Task GetDrillParamsAsync_returns_depositDtos() { var service = new ClusterService(context, wellService.Object); var dtos = await service.GetDepositsDrillParamsAsync(1); Assert.True(dtos.Any()); } [Fact] public async Task GetDrillParamsAsync_returns_one_deposit() { var service = new ClusterService(context, wellService.Object); var dtos = await service.GetDepositsDrillParamsAsync(1); Assert.Equal(1, dtos.Count()); } [Fact] public async Task GetDrillParamsAsync_returns_one_deposit_with_two_companies() { var service = new ClusterService(context, wellService.Object); var dtos = await service.GetDepositsDrillParamsAsync(1); Assert.Equal(2, dtos.FirstOrDefault()?.Clusters.Count()); } [Fact] public async Task GetClustersAsync_returns_dtos() { var service = new ClusterService(context, wellService.Object); var dtos = await service.GetClustersAsync(1); Assert.True(dtos.Any()); } [Fact] public async Task GetClustersAsync_returns_one_cluster() { var service = new ClusterService(context, wellService.Object); var dtos = await service.GetClustersAsync(1); Assert.Equal(1, dtos.Count()); } }