diff --git a/back/src/Kyoo.Core/Controllers/Repositories/EpisodeRepository.cs b/back/src/Kyoo.Core/Controllers/Repositories/EpisodeRepository.cs index 65451a5f..c3fc9ec8 100644 --- a/back/src/Kyoo.Core/Controllers/Repositories/EpisodeRepository.cs +++ b/back/src/Kyoo.Core/Controllers/Repositories/EpisodeRepository.cs @@ -150,7 +150,7 @@ namespace Kyoo.Core.Controllers public override async Task Create(Episode obj) { await base.Create(obj); - obj.ShowSlug = _database.Shows.First(x => x.ID == obj.ShowID).Slug; + obj.ShowSlug = obj.Show?.Slug ?? _database.Shows.First(x => x.ID == obj.ShowID).Slug; _database.Entry(obj).State = EntityState.Added; await _database.SaveChangesAsync(() => obj.SeasonNumber != null && obj.EpisodeNumber != null diff --git a/back/src/Kyoo.Postgresql/Migrations/20230724144449_RemoveTriggers.cs b/back/src/Kyoo.Postgresql/Migrations/20230724144449_RemoveTriggers.cs index 575f2276..f235cdf6 100644 --- a/back/src/Kyoo.Postgresql/Migrations/20230724144449_RemoveTriggers.cs +++ b/back/src/Kyoo.Postgresql/Migrations/20230724144449_RemoveTriggers.cs @@ -31,6 +31,27 @@ namespace Kyoo.Postgresql.Migrations /// protected override void Up(MigrationBuilder migrationBuilder) { + // language=PostgreSQL + migrationBuilder.Sql("DROP TRIGGER show_slug_trigger ON shows;"); + // language=PostgreSQL + migrationBuilder.Sql(@"DROP FUNCTION show_slug_update;"); + // language=PostgreSQL + migrationBuilder.Sql(@"DROP TRIGGER season_slug_trigger ON seasons;"); + // language=PostgreSQL + migrationBuilder.Sql(@"DROP FUNCTION season_slug_update;"); + // language=PostgreSQL + migrationBuilder.Sql("DROP TRIGGER episode_slug_trigger ON episodes;"); + // language=PostgreSQL + migrationBuilder.Sql(@"DROP FUNCTION episode_slug_update;"); + // language=PostgreSQL + migrationBuilder.Sql("DROP TRIGGER track_slug_trigger ON tracks;"); + // language=PostgreSQL + migrationBuilder.Sql(@"DROP FUNCTION track_slug_update;"); + // language=PostgreSQL + migrationBuilder.Sql("DROP TRIGGER episode_track_slug_trigger ON episodes;"); + // language=PostgreSQL + migrationBuilder.Sql(@"DROP FUNCTION episode_update_tracks_slug;"); + migrationBuilder.AlterColumn( name: "slug", table: "tracks", @@ -60,27 +81,6 @@ namespace Kyoo.Postgresql.Migrations oldClrType: typeof(string), oldType: "text", oldNullable: true); - - // language=PostgreSQL - migrationBuilder.Sql("DROP TRIGGER show_slug_trigger ON shows;"); - // language=PostgreSQL - migrationBuilder.Sql(@"DROP FUNCTION show_slug_update;"); - // language=PostgreSQL - migrationBuilder.Sql(@"DROP TRIGGER season_slug_trigger ON seasons;"); - // language=PostgreSQL - migrationBuilder.Sql(@"DROP FUNCTION season_slug_update;"); - // language=PostgreSQL - migrationBuilder.Sql("DROP TRIGGER episode_slug_trigger ON episodes;"); - // language=PostgreSQL - migrationBuilder.Sql(@"DROP FUNCTION episode_slug_update;"); - // language=PostgreSQL - migrationBuilder.Sql("DROP TRIGGER track_slug_trigger ON tracks;"); - // language=PostgreSQL - migrationBuilder.Sql(@"DROP FUNCTION track_slug_update;"); - // language=PostgreSQL - migrationBuilder.Sql("DROP TRIGGER episode_track_slug_trigger ON episodes;"); - // language=PostgreSQL - migrationBuilder.Sql(@"DROP FUNCTION episode_update_tracks_slug;"); } /// diff --git a/back/tests/Kyoo.Tests/Database/RepositoryTests.cs b/back/tests/Kyoo.Tests/Database/RepositoryTests.cs index 8e7acc03..fd21f8ba 100644 --- a/back/tests/Kyoo.Tests/Database/RepositoryTests.cs +++ b/back/tests/Kyoo.Tests/Database/RepositoryTests.cs @@ -108,7 +108,7 @@ namespace Kyoo.Tests.Database } [Fact] - public async Task CreateTest() + public virtual async Task CreateTest() { await Assert.ThrowsAsync(() => _repository.Create(TestSample.Get())); await _repository.Delete(TestSample.Get()); @@ -132,7 +132,7 @@ namespace Kyoo.Tests.Database } [Fact] - public async Task CreateIfNotExistTest() + public virtual async Task CreateIfNotExistTest() { T expected = TestSample.Get(); KAssert.DeepEqual(expected, await _repository.CreateIfNotExists(TestSample.Get())); diff --git a/back/tests/Kyoo.Tests/Database/SpecificTests/EpisodeTests.cs b/back/tests/Kyoo.Tests/Database/SpecificTests/EpisodeTests.cs index 51c59d90..22b1befb 100644 --- a/back/tests/Kyoo.Tests/Database/SpecificTests/EpisodeTests.cs +++ b/back/tests/Kyoo.Tests/Database/SpecificTests/EpisodeTests.cs @@ -21,6 +21,7 @@ using System.Linq; using System.Threading.Tasks; using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Models; +using Kyoo.Abstractions.Models.Exceptions; using Kyoo.Postgresql; using Microsoft.EntityFrameworkCore; using Xunit; @@ -45,6 +46,7 @@ namespace Kyoo.Tests.Database protected AEpisodeTests(RepositoryActivator repositories) : base(repositories) { + _repository = repositories.LibraryManager.EpisodeRepository; } @@ -332,5 +334,30 @@ namespace Kyoo.Tests.Database value.Show = TestSample.Get(); KAssert.DeepEqual(value, ret.First()); } + + [Fact] + public override async Task CreateTest() + { + await Assert.ThrowsAsync(() => _repository.Create(TestSample.Get())); + await _repository.Delete(TestSample.Get()); + + Episode expected = TestSample.Get(); + expected.ID = 0; + expected.ShowID = (await Repositories.LibraryManager.ShowRepository.Create(TestSample.Get())).ID; + expected.SeasonID = (await Repositories.LibraryManager.SeasonRepository.Create(TestSample.Get())).ID; + await _repository.Create(expected); + KAssert.DeepEqual(expected, await _repository.Get(expected.Slug)); + } + + [Fact] + public override async Task CreateIfNotExistTest() + { + Episode expected = TestSample.Get(); + KAssert.DeepEqual(expected, await _repository.CreateIfNotExists(TestSample.Get())); + await _repository.Delete(TestSample.Get()); + expected.ShowID = (await Repositories.LibraryManager.ShowRepository.Create(TestSample.Get())).ID; + expected.SeasonID = (await Repositories.LibraryManager.SeasonRepository.Create(TestSample.Get())).ID; + KAssert.DeepEqual(expected, await _repository.CreateIfNotExists(expected)); + } } } diff --git a/back/tests/Kyoo.Tests/Database/TestContext.cs b/back/tests/Kyoo.Tests/Database/TestContext.cs index 1b430b94..0f8b48e0 100644 --- a/back/tests/Kyoo.Tests/Database/TestContext.cs +++ b/back/tests/Kyoo.Tests/Database/TestContext.cs @@ -41,8 +41,6 @@ namespace Kyoo.Tests public PostgresFixture() { - // TODO Assert.Skip when postgres is not available. (this needs xunit v3) - string id = Guid.NewGuid().ToString().Replace('-', '_'); Template = $"kyoo_template_{id}";