Adding more repository tests

This commit is contained in:
Zoe Roux 2021-05-29 19:57:37 +02:00
parent 81945b4e37
commit ac07e85f85
3 changed files with 143 additions and 79 deletions

View 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();
}
}
}

View File

@ -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());
}
}
}

View 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);
// }
}
}