using System.Linq; using System.Threading.Tasks; using Kyoo.Controllers; using Kyoo.Models; using Kyoo.Models.Exceptions; using Xunit; namespace Kyoo.Tests { public abstract class RepositoryTests where T : class, IResource { protected readonly RepositoryActivator Repositories; private readonly IRepository _repository; protected RepositoryTests() { Repositories = new RepositoryActivator(); _repository = Repositories.LibraryManager.GetRepository(); Repositories.Context.AddTest(); } [Fact] public async Task FillTest() { await using DatabaseContext database = Repositories.Context.New(); Assert.Equal(1, database.Shows.Count()); } [Fact] public async Task GetByIdTest() { T value = await _repository.Get(TestSample.Get().ID); KAssert.DeepEqual(TestSample.Get(), value); } [Fact] public async Task GetBySlugTest() { T value = await _repository.Get(TestSample.Get().Slug); KAssert.DeepEqual(TestSample.Get(), value); } [Fact] public async Task GetByFakeIdTest() { await Assert.ThrowsAsync(() => _repository.Get(2)); } [Fact] public async Task GetByFakeSlugTest() { await Assert.ThrowsAsync(() => _repository.Get("non-existent")); } [Fact] public async Task DeleteByIdTest() { await _repository.Delete(TestSample.Get().ID); Assert.Equal(0, await _repository.GetCount()); } [Fact] public async Task DeleteBySlugTest() { await _repository.Delete(TestSample.Get().Slug); Assert.Equal(0, await _repository.GetCount()); } [Fact] public async Task DeleteByValueTest() { await _repository.Delete(TestSample.Get()); Assert.Equal(0, await _repository.GetCount()); } [Fact] public async Task CreateTest() { await Assert.ThrowsAsync(() => _repository.Create(TestSample.Get())); await _repository.Delete(TestSample.Get()); T expected = TestSample.Get(); expected.ID = 0; await _repository.Create(expected); KAssert.DeepEqual(expected, await _repository.Get(expected.Slug)); } } }