mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-06-23 15:30:34 -04:00
Adding more repository tests
This commit is contained in:
parent
81945b4e37
commit
ac07e85f85
70
Kyoo.Tests/Library/RepositoryActivator.cs
Normal file
70
Kyoo.Tests/Library/RepositoryActivator.cs
Normal file
@ -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<IShowRepository>(() => LibraryManager.ShowRepository));
|
||||
ShowRepository show = new(_database, studio, people, genre, provider,
|
||||
new Lazy<ISeasonRepository>(() => LibraryManager.SeasonRepository),
|
||||
new Lazy<IEpisodeRepository>(() => LibraryManager.EpisodeRepository));
|
||||
SeasonRepository season = new(_database, provider, show,
|
||||
new Lazy<IEpisodeRepository>(() => LibraryManager.EpisodeRepository));
|
||||
LibraryItemRepository libraryItem = new(_database,
|
||||
new Lazy<ILibraryRepository>(() => LibraryManager.LibraryRepository),
|
||||
new Lazy<IShowRepository>(() => LibraryManager.ShowRepository),
|
||||
new Lazy<ICollectionRepository>(() => 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<Show>();
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_database.Dispose();
|
||||
Context.Dispose();
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
public async ValueTask DisposeAsync()
|
||||
{
|
||||
await _database.DisposeAsync();
|
||||
await Context.DisposeAsync();
|
||||
}
|
||||
}
|
||||
}
|
@ -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<IShowRepository>(() => LibraryManager.ShowRepository));
|
||||
ShowRepository show = new(_database, studio, people, genre, provider,
|
||||
new Lazy<ISeasonRepository>(() => LibraryManager.SeasonRepository),
|
||||
new Lazy<IEpisodeRepository>(() => LibraryManager.EpisodeRepository));
|
||||
SeasonRepository season = new(_database, provider, show,
|
||||
new Lazy<IEpisodeRepository>(() => LibraryManager.EpisodeRepository));
|
||||
LibraryItemRepository libraryItem = new(_database,
|
||||
new Lazy<ILibraryRepository>(() => LibraryManager.LibraryRepository),
|
||||
new Lazy<IShowRepository>(() => LibraryManager.ShowRepository),
|
||||
new Lazy<ICollectionRepository>(() => 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<Show>();
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_database.Dispose();
|
||||
Context.Dispose();
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
public async ValueTask DisposeAsync()
|
||||
{
|
||||
await _database.DisposeAsync();
|
||||
await Context.DisposeAsync();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public abstract class RepositoryTests<T> : IClassFixture<RepositoryActivator>
|
||||
public abstract class RepositoryTests<T>
|
||||
where T : class, IResource
|
||||
{
|
||||
private readonly RepositoryActivator _repositories;
|
||||
protected readonly RepositoryActivator Repositories;
|
||||
private readonly IRepository<T> _repository;
|
||||
|
||||
protected RepositoryTests(RepositoryActivator repositories)
|
||||
{
|
||||
_repositories = repositories;
|
||||
_repository = _repositories.LibraryManager.GetRepository<T>();
|
||||
Repositories = repositories;
|
||||
_repository = Repositories.LibraryManager.GetRepository<T>();
|
||||
}
|
||||
|
||||
// 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<T>().ID);
|
||||
KAssert.DeepEqual(TestSample.Get<T>(), value);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetBySlugTest()
|
||||
{
|
||||
T value = await _repository.Get(TestSample.Get<T>().Slug);
|
||||
KAssert.DeepEqual(TestSample.Get<T>(), value);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetByFakeIdTest()
|
||||
{
|
||||
await Assert.ThrowsAsync<ItemNotFoundException>(() => _repository.Get(2));
|
||||
}
|
||||
|
||||
public class ShowTests : RepositoryTests<Show>
|
||||
[Fact]
|
||||
public async Task GetByFakeSlugTest()
|
||||
{
|
||||
public ShowTests(RepositoryActivator repositories)
|
||||
: base(repositories)
|
||||
{}
|
||||
await Assert.ThrowsAsync<ItemNotFoundException>(() => _repository.Get("non-existent"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task DeleteByIdTest()
|
||||
{
|
||||
await _repository.Delete(TestSample.Get<T>().ID);
|
||||
Assert.Equal(0, await _repository.GetCount());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task DeleteBySlugTest()
|
||||
{
|
||||
await _repository.Delete(TestSample.Get<T>().Slug);
|
||||
Assert.Equal(0, await _repository.GetCount());
|
||||
}
|
||||
}
|
||||
}
|
34
Kyoo.Tests/Library/SpecificTests/ShowTests.cs
Normal file
34
Kyoo.Tests/Library/SpecificTests/ShowTests.cs
Normal file
@ -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<Show>
|
||||
{
|
||||
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<Show>().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);
|
||||
// }
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user