diff --git a/Kyoo.Tests/Library/RepositoryActivator.cs b/Kyoo.Tests/Library/RepositoryActivator.cs new file mode 100644 index 00000000..09016c60 --- /dev/null +++ b/Kyoo.Tests/Library/RepositoryActivator.cs @@ -0,0 +1,70 @@ +using System; +using System.Threading.Tasks; +using Kyoo.Controllers; +using Kyoo.Models; + +namespace Kyoo.Tests +{ + public class RepositoryActivator : IDisposable, IAsyncDisposable + { + public TestContext Context { get; init; } + public ILibraryManager LibraryManager { get; init; } + + + private readonly DatabaseContext _database; + + public RepositoryActivator() + { + Context = new TestContext(); + _database = Context.New(); + + ProviderRepository provider = new(_database); + LibraryRepository library = new(_database, provider); + CollectionRepository collection = new(_database); + GenreRepository genre = new(_database); + StudioRepository studio = new(_database); + PeopleRepository people = new(_database, provider, + new Lazy(() => LibraryManager.ShowRepository)); + ShowRepository show = new(_database, studio, people, genre, provider, + new Lazy(() => LibraryManager.SeasonRepository), + new Lazy(() => LibraryManager.EpisodeRepository)); + SeasonRepository season = new(_database, provider, show, + new Lazy(() => LibraryManager.EpisodeRepository)); + LibraryItemRepository libraryItem = new(_database, + new Lazy(() => LibraryManager.LibraryRepository), + new Lazy(() => LibraryManager.ShowRepository), + new Lazy(() => LibraryManager.CollectionRepository)); + TrackRepository track = new(_database); + EpisodeRepository episode = new(_database, provider, show, track); + + LibraryManager = new LibraryManager(new IBaseRepository[] { + provider, + library, + libraryItem, + collection, + show, + season, + episode, + track, + people, + studio, + genre + }); + + Context.AddTest(); + } + + public void Dispose() + { + _database.Dispose(); + Context.Dispose(); + GC.SuppressFinalize(this); + } + + public async ValueTask DisposeAsync() + { + await _database.DisposeAsync(); + await Context.DisposeAsync(); + } + } +} \ No newline at end of file diff --git a/Kyoo.Tests/Library/RepositoryTests.cs b/Kyoo.Tests/Library/RepositoryTests.cs index 9261d56f..9c350933 100644 --- a/Kyoo.Tests/Library/RepositoryTests.cs +++ b/Kyoo.Tests/Library/RepositoryTests.cs @@ -1,110 +1,70 @@ -using System; using System.Linq; using System.Threading.Tasks; using Kyoo.Controllers; using Kyoo.Models; +using Kyoo.Models.Exceptions; using Xunit; namespace Kyoo.Tests { - public class RepositoryActivator : IDisposable, IAsyncDisposable - { - public TestContext Context { get; init; } - public ILibraryManager LibraryManager { get; init; } - - - private readonly DatabaseContext _database; - - public RepositoryActivator() - { - Context = new TestContext(); - _database = Context.New(); - - ProviderRepository provider = new(_database); - LibraryRepository library = new(_database, provider); - CollectionRepository collection = new(_database); - GenreRepository genre = new(_database); - StudioRepository studio = new(_database); - PeopleRepository people = new(_database, provider, - new Lazy(() => LibraryManager.ShowRepository)); - ShowRepository show = new(_database, studio, people, genre, provider, - new Lazy(() => LibraryManager.SeasonRepository), - new Lazy(() => LibraryManager.EpisodeRepository)); - SeasonRepository season = new(_database, provider, show, - new Lazy(() => LibraryManager.EpisodeRepository)); - LibraryItemRepository libraryItem = new(_database, - new Lazy(() => LibraryManager.LibraryRepository), - new Lazy(() => LibraryManager.ShowRepository), - new Lazy(() => LibraryManager.CollectionRepository)); - TrackRepository track = new(_database); - EpisodeRepository episode = new(_database, provider, show, track); - - LibraryManager = new LibraryManager(new IBaseRepository[] { - provider, - library, - libraryItem, - collection, - show, - season, - episode, - track, - people, - studio, - genre - }); - - Context.AddTest(); - } - - public void Dispose() - { - _database.Dispose(); - Context.Dispose(); - GC.SuppressFinalize(this); - } - - public async ValueTask DisposeAsync() - { - await _database.DisposeAsync(); - await Context.DisposeAsync(); - } - } - - - public abstract class RepositoryTests : IClassFixture + public abstract class RepositoryTests where T : class, IResource { - private readonly RepositoryActivator _repositories; + protected readonly RepositoryActivator Repositories; private readonly IRepository _repository; protected RepositoryTests(RepositoryActivator repositories) { - _repositories = repositories; - _repository = _repositories.LibraryManager.GetRepository(); + Repositories = repositories; + _repository = Repositories.LibraryManager.GetRepository(); } - - // TODO test libraries & repositories via a on-memory SQLite database. - + [Fact] public async Task FillTest() { - await using DatabaseContext database = _repositories.Context.New(); + 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")); + } - public class ShowTests : RepositoryTests - { - public ShowTests(RepositoryActivator repositories) - : base(repositories) - {} + [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()); + } } } \ No newline at end of file diff --git a/Kyoo.Tests/Library/SpecificTests/ShowTests.cs b/Kyoo.Tests/Library/SpecificTests/ShowTests.cs new file mode 100644 index 00000000..43c7fb39 --- /dev/null +++ b/Kyoo.Tests/Library/SpecificTests/ShowTests.cs @@ -0,0 +1,34 @@ +using System.Threading.Tasks; +using Kyoo.Controllers; +using Kyoo.Models; +using Microsoft.EntityFrameworkCore; +using Xunit; + +namespace Kyoo.Tests.SpecificTests +{ + public class ShowTests : RepositoryTests + { + private readonly IShowRepository _repository; + + public ShowTests() + : base(new RepositoryActivator()) + { + _repository = Repositories.LibraryManager.ShowRepository; + } + // + // [Fact] + // public async Task EditTest() + // { + // Show value = await _repository.Get(TestSample.Get().Slug); + // value.Path = "/super"; + // value.Title = "New Title"; + // Show edited = await _repository.Edit(value, false); + // KAssert.DeepEqual(value, edited); + // + // await using DatabaseContext database = Repositories.Context.New(); + // Show show = await database.Shows.FirstAsync(); + // + // KAssert.DeepEqual(show, value); + // } + } +} \ No newline at end of file