using AsbCloudDb.Model; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Caching.Memory; using Moq; using System.Collections.Generic; using System.Linq; namespace AsbCloudWebApi.Tests { internal static class TestHelpter { // Попробовать когда-нибудь https://github.com/MichalJankowskii/Moq.EntityFrameworkCore public static IMemoryCache MemoryCache = new MemoryCache(new MemoryCacheOptions()); public static AsbCloudDbContext MakeRealTestContext() { var options = new DbContextOptionsBuilder() .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.EnsureCreated(); return context; } public static Mock AddDbSetMock(this Mock contextMock, IEnumerable dbSetData) where T : class { var dbSetMock = MakeDbSetMock(dbSetData); contextMock.Setup(o => o.Set()) .Returns(() => dbSetMock.Object); return contextMock; } public static Mock> MakeDbSetMock() where T : class { var dbSetData = new List(); return MakeDbSetMock(dbSetData); } public static Mock> MakeDbSetMock(IEnumerable dbSetData) where T : class { var dbSetDataQueriable = dbSetData .ToList() .AsQueryable(); Mock> dbSetMock = new(); dbSetMock.As>().Setup(o => o.Provider).Returns(() => dbSetDataQueriable.Provider); dbSetMock.As>().Setup(o => o.Expression).Returns(() => dbSetDataQueriable.Expression); dbSetMock.As>().Setup(o => o.ElementType).Returns(() => dbSetDataQueriable.ElementType); dbSetMock.As>().Setup(o => o.GetEnumerator()).Returns(() => dbSetDataQueriable.GetEnumerator()); return dbSetMock; } } }