diff --git a/back/src/Kyoo.Abstractions/Models/Resources/Episode.cs b/back/src/Kyoo.Abstractions/Models/Resources/Episode.cs index 94fff8c8..f9161d96 100644 --- a/back/src/Kyoo.Abstractions/Models/Resources/Episode.cs +++ b/back/src/Kyoo.Abstractions/Models/Resources/Episode.cs @@ -186,14 +186,11 @@ namespace Kyoo.Abstractions.Models /// If you don't know it or this is a movie, use null /// /// The slug corresponding to the given arguments - /// The given show slug was null. public static string GetSlug(string showSlug, int? seasonNumber, int? episodeNumber, int? absoluteNumber = null) { - if (showSlug == null) - throw new ArgumentNullException(nameof(showSlug)); return seasonNumber switch { null when absoluteNumber == null => showSlug, diff --git a/back/src/Kyoo.Abstractions/Models/Utils/Identifier.cs b/back/src/Kyoo.Abstractions/Models/Utils/Identifier.cs index 0c6c9327..c0a1cbdc 100644 --- a/back/src/Kyoo.Abstractions/Models/Utils/Identifier.cs +++ b/back/src/Kyoo.Abstractions/Models/Utils/Identifier.cs @@ -59,8 +59,6 @@ namespace Kyoo.Abstractions.Models.Utils /// The slug of the resource. public Identifier(string slug) { - if (slug == null) - throw new ArgumentNullException(nameof(slug)); _slug = slug; } diff --git a/back/src/Kyoo.Abstractions/Utility/EnumerableExtensions.cs b/back/src/Kyoo.Abstractions/Utility/EnumerableExtensions.cs index 5d3d9038..05e18f49 100644 --- a/back/src/Kyoo.Abstractions/Utility/EnumerableExtensions.cs +++ b/back/src/Kyoo.Abstractions/Utility/EnumerableExtensions.cs @@ -33,16 +33,10 @@ namespace Kyoo.Utils /// The enumerable to check /// The action to execute is the list is empty /// The type of items inside the list - /// The iterable and the action can't be null. /// The iterator proxied, there is no dual iterations. [LinqTunnel] public static IEnumerable IfEmpty(this IEnumerable self, Action action) { - if (self == null) - throw new ArgumentNullException(nameof(self)); - if (action == null) - throw new ArgumentNullException(nameof(action)); - static IEnumerable Generator(IEnumerable self, Action action) { using IEnumerator enumerator = self.GetEnumerator(); diff --git a/back/src/Kyoo.Abstractions/Utility/Merger.cs b/back/src/Kyoo.Abstractions/Utility/Merger.cs index 6e628a53..ccbe2b48 100644 --- a/back/src/Kyoo.Abstractions/Utility/Merger.cs +++ b/back/src/Kyoo.Abstractions/Utility/Merger.cs @@ -58,7 +58,7 @@ namespace Kyoo.Utils hasChanged = false; if (second == null) return first; - hasChanged = second.Any(x => x.Value?.Equals(first[x.Key]) == false); + hasChanged = second.Any(x => !first.ContainsKey(x.Key) || x.Value?.Equals(first[x.Key]) == false); foreach ((T key, T2 value) in first) second.TryAdd(key, value); return second; diff --git a/back/src/Kyoo.Abstractions/Utility/Utility.cs b/back/src/Kyoo.Abstractions/Utility/Utility.cs index 57b8b4ce..e3e91694 100644 --- a/back/src/Kyoo.Abstractions/Utility/Utility.cs +++ b/back/src/Kyoo.Abstractions/Utility/Utility.cs @@ -104,13 +104,8 @@ namespace Kyoo.Utils /// The type to check /// The generic type to check against (Only generic types are supported like typeof(IEnumerable<>). /// True if obj inherit from genericType. False otherwise - /// obj and genericType can't be null public static bool IsOfGenericType(Type type, Type genericType) { - if (type == null) - throw new ArgumentNullException(nameof(type)); - if (genericType == null) - throw new ArgumentNullException(nameof(genericType)); if (!genericType.IsGenericType) throw new ArgumentException($"{nameof(genericType)} is not a generic type."); @@ -128,14 +123,9 @@ namespace Kyoo.Utils /// The type to check /// The generic type to check against (Only generic types are supported like typeof(IEnumerable<>). /// The generic definition of genericType that type inherit or null if type does not implement the generic type. - /// and can't be null /// must be a generic type public static Type? GetGenericDefinition(Type type, Type genericType) { - if (type == null) - throw new ArgumentNullException(nameof(type)); - if (genericType == null) - throw new ArgumentNullException(nameof(genericType)); if (!genericType.IsGenericType) throw new ArgumentException($"{nameof(genericType)} is not a generic type."); @@ -272,12 +262,6 @@ namespace Kyoo.Utils Type[] types, params object?[] args) { - if (owner == null) - throw new ArgumentNullException(nameof(owner)); - if (methodName == null) - throw new ArgumentNullException(nameof(methodName)); - if (types == null) - throw new ArgumentNullException(nameof(types)); if (types.Length < 1) throw new ArgumentException($"The {nameof(types)} array is empty. At least one type is needed."); MethodInfo method = GetMethod(owner, BindingFlags.Static, methodName, types, args); diff --git a/back/src/Kyoo.Core/Controllers/LibraryManager.cs b/back/src/Kyoo.Core/Controllers/LibraryManager.cs index 0cab6155..318e7aff 100644 --- a/back/src/Kyoo.Core/Controllers/LibraryManager.cs +++ b/back/src/Kyoo.Core/Controllers/LibraryManager.cs @@ -209,8 +209,6 @@ namespace Kyoo.Core.Controllers where T : class, IResource where T2 : class, IResource { - if (member == null) - throw new ArgumentNullException(nameof(member)); return Load(obj, Utility.GetPropertyName(member), force); } @@ -219,8 +217,6 @@ namespace Kyoo.Core.Controllers where T : class, IResource where T2 : class { - if (member == null) - throw new ArgumentNullException(nameof(member)); return Load(obj, Utility.GetPropertyName(member), force); } diff --git a/back/src/Kyoo.Core/Controllers/Repositories/CollectionRepository.cs b/back/src/Kyoo.Core/Controllers/Repositories/CollectionRepository.cs index d8489e10..f5d19bc3 100644 --- a/back/src/Kyoo.Core/Controllers/Repositories/CollectionRepository.cs +++ b/back/src/Kyoo.Core/Controllers/Repositories/CollectionRepository.cs @@ -82,9 +82,6 @@ namespace Kyoo.Core.Controllers /// public override async Task Delete(Collection obj) { - if (obj == null) - throw new ArgumentNullException(nameof(obj)); - _database.Entry(obj).State = EntityState.Deleted; await _database.SaveChangesAsync(); await base.Delete(obj); diff --git a/back/src/Kyoo.Core/Controllers/Repositories/EpisodeRepository.cs b/back/src/Kyoo.Core/Controllers/Repositories/EpisodeRepository.cs index f1a49d41..5fba8395 100644 --- a/back/src/Kyoo.Core/Controllers/Repositories/EpisodeRepository.cs +++ b/back/src/Kyoo.Core/Controllers/Repositories/EpisodeRepository.cs @@ -170,9 +170,6 @@ namespace Kyoo.Core.Controllers /// public override async Task Delete(Episode obj) { - if (obj == null) - throw new ArgumentNullException(nameof(obj)); - int epCount = await _database.Episodes.Where(x => x.ShowId == obj.ShowId).Take(2).CountAsync(); _database.Entry(obj).State = EntityState.Deleted; await _database.SaveChangesAsync(); diff --git a/back/src/Kyoo.Core/Controllers/Repositories/LocalRepository.cs b/back/src/Kyoo.Core/Controllers/Repositories/LocalRepository.cs index 778d9a9f..5c3340d8 100644 --- a/back/src/Kyoo.Core/Controllers/Repositories/LocalRepository.cs +++ b/back/src/Kyoo.Core/Controllers/Repositories/LocalRepository.cs @@ -30,6 +30,7 @@ using Kyoo.Abstractions.Models.Exceptions; using Kyoo.Core.Api; using Kyoo.Utils; using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; namespace Kyoo.Core.Controllers { @@ -338,14 +339,15 @@ namespace Kyoo.Core.Controllers /// public virtual async Task Create(T obj) { - if (obj == null) - throw new ArgumentNullException(nameof(obj)); await Validate(obj); if (obj is IThumbnails thumbs) { - Database.Entry(thumbs).Reference(x => x.Poster).IsModified = thumbs.Poster != null; - Database.Entry(thumbs).Reference(x => x.Thumbnail).IsModified = thumbs.Thumbnail != null; - Database.Entry(thumbs).Reference(x => x.Logo).IsModified = thumbs.Logo != null; + if (thumbs.Poster != null) + Database.Entry(thumbs).Reference(x => x.Poster).TargetEntry.State = EntityState.Added; + if (thumbs.Thumbnail != null) + Database.Entry(thumbs).Reference(x => x.Thumbnail).TargetEntry.State = EntityState.Added; + if (thumbs.Logo != null) + Database.Entry(thumbs).Reference(x => x.Logo).TargetEntry.State = EntityState.Added; } return obj; } @@ -395,7 +397,7 @@ namespace Kyoo.Core.Controllers T old = await GetWithTracking(edited.Id); Merger.Complete(old, edited, x => x.GetCustomAttribute() == null); - await EditRelations(old, edited, true); + await EditRelations(old, edited); await Database.SaveChangesAsync(); OnEdited?.Invoke(old); return old; @@ -418,6 +420,7 @@ namespace Kyoo.Core.Controllers if (!await patch(resource)) throw new ArgumentException("Could not patch resource"); + await Database.SaveChangesAsync(); OnEdited?.Invoke(resource); return resource; @@ -439,11 +442,8 @@ namespace Kyoo.Core.Controllers /// The new version of . /// This item will be saved on the database and replace /// - /// - /// A boolean to indicate if all values of resource should be discarded or not. - /// /// A representing the asynchronous operation. - protected virtual Task EditRelations(T resource, T changed, bool resetOld) + protected virtual Task EditRelations(T resource, T changed) { if (resource is IThumbnails thumbs && changed is IThumbnails chng) { diff --git a/back/src/Kyoo.Core/Controllers/Repositories/MovieRepository.cs b/back/src/Kyoo.Core/Controllers/Repositories/MovieRepository.cs index 49290f31..cc5f89eb 100644 --- a/back/src/Kyoo.Core/Controllers/Repositories/MovieRepository.cs +++ b/back/src/Kyoo.Core/Controllers/Repositories/MovieRepository.cs @@ -22,7 +22,6 @@ using System.Threading.Tasks; using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Models; using Kyoo.Postgresql; -using Kyoo.Utils; using Microsoft.EntityFrameworkCore; namespace Kyoo.Core.Controllers @@ -111,17 +110,17 @@ namespace Kyoo.Core.Controllers } /// - protected override async Task EditRelations(Movie resource, Movie changed, bool resetOld) + protected override async Task EditRelations(Movie resource, Movie changed) { await Validate(changed); - if (changed.Studio != null || resetOld) + if (changed.Studio != null || changed.StudioID == null) { await Database.Entry(resource).Reference(x => x.Studio).LoadAsync(); resource.Studio = changed.Studio; } - if (changed.People != null || resetOld) + if (changed.People != null) { await Database.Entry(resource).Collection(x => x.People).LoadAsync(); resource.People = changed.People; diff --git a/back/src/Kyoo.Core/Controllers/Repositories/PeopleRepository.cs b/back/src/Kyoo.Core/Controllers/Repositories/PeopleRepository.cs index ee52b798..a01b2c4f 100644 --- a/back/src/Kyoo.Core/Controllers/Repositories/PeopleRepository.cs +++ b/back/src/Kyoo.Core/Controllers/Repositories/PeopleRepository.cs @@ -99,11 +99,11 @@ namespace Kyoo.Core.Controllers } /// - protected override async Task EditRelations(People resource, People changed, bool resetOld) + protected override async Task EditRelations(People resource, People changed) { await Validate(changed); - if (changed.Roles != null || resetOld) + if (changed.Roles != null) { await Database.Entry(resource).Collection(x => x.Roles).LoadAsync(); resource.Roles = changed.Roles; @@ -113,9 +113,6 @@ namespace Kyoo.Core.Controllers /// public override async Task Delete(People obj) { - if (obj == null) - throw new ArgumentNullException(nameof(obj)); - _database.Entry(obj).State = EntityState.Deleted; obj.Roles.ForEach(x => _database.Entry(x).State = EntityState.Deleted); await _database.SaveChangesAsync(); diff --git a/back/src/Kyoo.Core/Controllers/Repositories/SeasonRepository.cs b/back/src/Kyoo.Core/Controllers/Repositories/SeasonRepository.cs index 0265fc4a..d9d41d2c 100644 --- a/back/src/Kyoo.Core/Controllers/Repositories/SeasonRepository.cs +++ b/back/src/Kyoo.Core/Controllers/Repositories/SeasonRepository.cs @@ -137,9 +137,6 @@ namespace Kyoo.Core.Controllers /// public override async Task Delete(Season obj) { - if (obj == null) - throw new ArgumentNullException(nameof(obj)); - _database.Remove(obj); await _database.SaveChangesAsync(); await base.Delete(obj); diff --git a/back/src/Kyoo.Core/Controllers/Repositories/ShowRepository.cs b/back/src/Kyoo.Core/Controllers/Repositories/ShowRepository.cs index 810300a3..0a829e0f 100644 --- a/back/src/Kyoo.Core/Controllers/Repositories/ShowRepository.cs +++ b/back/src/Kyoo.Core/Controllers/Repositories/ShowRepository.cs @@ -113,17 +113,17 @@ namespace Kyoo.Core.Controllers } /// - protected override async Task EditRelations(Show resource, Show changed, bool resetOld) + protected override async Task EditRelations(Show resource, Show changed) { await Validate(changed); - if (changed.Studio != null || resetOld) + if (changed.Studio != null || changed.StudioId == null) { await Database.Entry(resource).Reference(x => x.Studio).LoadAsync(); resource.Studio = changed.Studio; } - if (changed.People != null || resetOld) + if (changed.People != null) { await Database.Entry(resource).Collection(x => x.People).LoadAsync(); resource.People = changed.People; diff --git a/back/src/Kyoo.Core/Controllers/Repositories/StudioRepository.cs b/back/src/Kyoo.Core/Controllers/Repositories/StudioRepository.cs index 738f3fb4..536accba 100644 --- a/back/src/Kyoo.Core/Controllers/Repositories/StudioRepository.cs +++ b/back/src/Kyoo.Core/Controllers/Repositories/StudioRepository.cs @@ -82,9 +82,6 @@ namespace Kyoo.Core.Controllers /// public override async Task Delete(Studio obj) { - if (obj == null) - throw new ArgumentNullException(nameof(obj)); - _database.Entry(obj).State = EntityState.Deleted; await _database.SaveChangesAsync(); await base.Delete(obj); diff --git a/back/src/Kyoo.Core/Controllers/Repositories/UserRepository.cs b/back/src/Kyoo.Core/Controllers/Repositories/UserRepository.cs index bf6f3e5e..c91c8a49 100644 --- a/back/src/Kyoo.Core/Controllers/Repositories/UserRepository.cs +++ b/back/src/Kyoo.Core/Controllers/Repositories/UserRepository.cs @@ -76,9 +76,6 @@ namespace Kyoo.Core.Controllers /// public override async Task Delete(User obj) { - if (obj == null) - throw new ArgumentNullException(nameof(obj)); - _database.Entry(obj).State = EntityState.Deleted; await _database.SaveChangesAsync(); await base.Delete(obj); diff --git a/back/tests/Kyoo.Tests/Database/RepositoryActivator.cs b/back/tests/Kyoo.Tests/Database/RepositoryActivator.cs index aa2fee16..c9ce640d 100644 --- a/back/tests/Kyoo.Tests/Database/RepositoryActivator.cs +++ b/back/tests/Kyoo.Tests/Database/RepositoryActivator.cs @@ -41,6 +41,7 @@ namespace Kyoo.Tests.Database StudioRepository studio = new(_NewContext()); PeopleRepository people = new(_NewContext(), new Lazy(() => LibraryManager.ShowRepository)); + MovieRepository movies = new(_NewContext(), studio, people); ShowRepository show = new(_NewContext(), studio, people); SeasonRepository season = new(_NewContext(), show); LibraryItemRepository libraryItem = new(_NewContext()); @@ -50,6 +51,7 @@ namespace Kyoo.Tests.Database LibraryManager = new LibraryManager(new IBaseRepository[] { libraryItem, collection, + movies, show, season, episode, diff --git a/back/tests/Kyoo.Tests/Database/RepositoryTests.cs b/back/tests/Kyoo.Tests/Database/RepositoryTests.cs index 0e022ceb..eada621e 100644 --- a/back/tests/Kyoo.Tests/Database/RepositoryTests.cs +++ b/back/tests/Kyoo.Tests/Database/RepositoryTests.cs @@ -118,18 +118,6 @@ namespace Kyoo.Tests.Database KAssert.DeepEqual(expected, await _repository.Get(expected.Slug)); } - [Fact] - public async Task CreateNullTest() - { - await Assert.ThrowsAsync(() => _repository.Create(null!)); - } - - [Fact] - public async Task CreateIfNotExistNullTest() - { - await Assert.ThrowsAsync(() => _repository.CreateIfNotExists(null!)); - } - [Fact] public virtual async Task CreateIfNotExistTest() { diff --git a/back/tests/Kyoo.Tests/Database/SpecificTests/CollectionsTests.cs b/back/tests/Kyoo.Tests/Database/SpecificTests/CollectionsTests.cs index 2094afdb..31fb2b3d 100644 --- a/back/tests/Kyoo.Tests/Database/SpecificTests/CollectionsTests.cs +++ b/back/tests/Kyoo.Tests/Database/SpecificTests/CollectionsTests.cs @@ -120,9 +120,7 @@ namespace Kyoo.Tests.Database await _repository.Edit(value); await using DatabaseContext database = Repositories.Context.New(); - Collection retrieved = await database.Collections - .Include(x => x.ExternalId) - .FirstAsync(); + Collection retrieved = await database.Collections.FirstAsync(); KAssert.DeepEqual(value, retrieved); } @@ -143,9 +141,7 @@ namespace Kyoo.Tests.Database { await using DatabaseContext database = Repositories.Context.New(); - Collection retrieved = await database.Collections - .Include(x => x.ExternalId) - .FirstAsync(); + Collection retrieved = await database.Collections.FirstAsync(); KAssert.DeepEqual(value, retrieved); } @@ -159,9 +155,7 @@ namespace Kyoo.Tests.Database { await using DatabaseContext database = Repositories.Context.New(); - Collection retrieved = await database.Collections - .Include(x => x.ExternalId) - .FirstAsync(); + Collection retrieved = await database.Collections.FirstAsync(); KAssert.DeepEqual(value, retrieved); } diff --git a/back/tests/Kyoo.Tests/Database/SpecificTests/EpisodeTests.cs b/back/tests/Kyoo.Tests/Database/SpecificTests/EpisodeTests.cs index dfb91af4..988ec0c3 100644 --- a/back/tests/Kyoo.Tests/Database/SpecificTests/EpisodeTests.cs +++ b/back/tests/Kyoo.Tests/Database/SpecificTests/EpisodeTests.cs @@ -55,12 +55,11 @@ namespace Kyoo.Tests.Database { Episode episode = await _repository.Get(1); Assert.Equal($"{TestSample.Get().Slug}-s1e1", episode.Slug); - Show show = new() + await Repositories.LibraryManager.ShowRepository.Patch(episode.ShowId, (x) => { - Id = episode.ShowId, - Slug = "new-slug" - }; - await Repositories.LibraryManager.ShowRepository.Edit(show); + x.Slug = "new-slug"; + return Task.FromResult(true); + }); episode = await _repository.Get(1); Assert.Equal("new-slug-s1e1", episode.Slug); } @@ -70,11 +69,10 @@ namespace Kyoo.Tests.Database { Episode episode = await _repository.Get(1); Assert.Equal($"{TestSample.Get().Slug}-s1e1", episode.Slug); - episode = await _repository.Edit(new Episode + episode = await _repository.Patch(1, (x) => { - Id = 1, - SeasonNumber = 2, - ShowId = 1 + x.SeasonNumber = 2; + return Task.FromResult(true); }); Assert.Equal($"{TestSample.Get().Slug}-s2e1", episode.Slug); episode = await _repository.Get(1); @@ -86,11 +84,10 @@ namespace Kyoo.Tests.Database { Episode episode = await _repository.Get(1); Assert.Equal($"{TestSample.Get().Slug}-s1e1", episode.Slug); - episode = await _repository.Edit(new Episode + episode = await Repositories.LibraryManager.Patch(episode.Id, (x) => { - Id = 1, - EpisodeNumber = 2, - ShowId = 1 + x.EpisodeNumber = 2; + return Task.FromResult(true); }); Assert.Equal($"{TestSample.Get().Slug}-s1e2", episode.Slug); episode = await _repository.Get(1); @@ -100,12 +97,12 @@ namespace Kyoo.Tests.Database [Fact] public async Task EpisodeCreationSlugTest() { - Episode episode = await _repository.Create(new Episode - { - ShowId = TestSample.Get().Id, - SeasonNumber = 2, - EpisodeNumber = 4 - }); + Episode model = TestSample.Get(); + model.Id = 0; + model.ShowId = TestSample.Get().Id; + model.SeasonNumber = 2; + model.EpisodeNumber = 4; + Episode episode = await _repository.Create(model); Assert.Equal($"{TestSample.Get().Slug}-s2e4", episode.Slug); } @@ -127,12 +124,11 @@ namespace Kyoo.Tests.Database public async Task SlugEditAbsoluteTest() { Episode episode = await _repository.Create(TestSample.GetAbsoluteEpisode()); - Show show = new() + await Repositories.LibraryManager.ShowRepository.Patch(episode.ShowId, (x) => { - Id = episode.ShowId, - Slug = "new-slug" - }; - await Repositories.LibraryManager.ShowRepository.Edit(show); + x.Slug = "new-slug"; + return Task.FromResult(true); + }); episode = await _repository.Get(2); Assert.Equal($"new-slug-3", episode.Slug); } @@ -141,11 +137,10 @@ namespace Kyoo.Tests.Database public async Task AbsoluteNumberEditTest() { await _repository.Create(TestSample.GetAbsoluteEpisode()); - Episode episode = await _repository.Edit(new Episode + Episode episode = await _repository.Patch(2, (x) => { - Id = 2, - AbsoluteNumber = 56, - ShowId = 1 + x.AbsoluteNumber = 56; + return Task.FromResult(true); }); Assert.Equal($"{TestSample.Get().Slug}-56", episode.Slug); episode = await _repository.Get(2); @@ -156,12 +151,11 @@ namespace Kyoo.Tests.Database public async Task AbsoluteToNormalEditTest() { await _repository.Create(TestSample.GetAbsoluteEpisode()); - Episode episode = await _repository.Edit(new Episode + Episode episode = await _repository.Patch(2, (x) => { - Id = 2, - SeasonNumber = 1, - EpisodeNumber = 2, - ShowId = 1 + x.SeasonNumber = 1; + x.EpisodeNumber = 2; + return Task.FromResult(true); }); Assert.Equal($"{TestSample.Get().Slug}-s1e2", episode.Slug); episode = await _repository.Get(2); @@ -283,12 +277,10 @@ namespace Kyoo.Tests.Database [InlineData("SuPeR")] public async Task SearchTest(string query) { - Episode value = new() - { - Name = "This is a test super title", - ShowId = 1, - AbsoluteNumber = 2 - }; + Episode value = TestSample.Get(); + value.Id = 0; + value.Name = "This is a test super title"; + value.EpisodeNumber = 56; await _repository.Create(value); ICollection ret = await _repository.Search(query); value.Show = TestSample.Get(); diff --git a/back/tests/Kyoo.Tests/Database/SpecificTests/SeasonTests.cs b/back/tests/Kyoo.Tests/Database/SpecificTests/SeasonTests.cs index 85a5c3d0..e67fd367 100644 --- a/back/tests/Kyoo.Tests/Database/SpecificTests/SeasonTests.cs +++ b/back/tests/Kyoo.Tests/Database/SpecificTests/SeasonTests.cs @@ -53,12 +53,11 @@ namespace Kyoo.Tests.Database { Season season = await _repository.Get(1); Assert.Equal("anohana-s1", season.Slug); - Show show = new() + await Repositories.LibraryManager.ShowRepository.Patch(season.ShowId, (x) => { - Id = season.ShowId, - Slug = "new-slug" - }; - await Repositories.LibraryManager.ShowRepository.Edit(show); + x.Slug = "new-slug"; + return Task.FromResult(true); + }); season = await _repository.Get(1); Assert.Equal("new-slug-s1", season.Slug); } @@ -68,12 +67,12 @@ namespace Kyoo.Tests.Database { Season season = await _repository.Get(1); Assert.Equal("anohana-s1", season.Slug); - await _repository.Edit(new Season + await _repository.Patch(season.Id, (x) => { - Id = 1, - SeasonNumber = 2, - ShowId = 1 - }); + x.SeasonNumber = 2; + return Task.FromResult(true); + } + ); season = await _repository.Get(1); Assert.Equal("anohana-s2", season.Slug); } diff --git a/back/tests/Kyoo.Tests/Database/SpecificTests/ShowTests.cs b/back/tests/Kyoo.Tests/Database/SpecificTests/ShowTests.cs index f3a0746d..53bf1d6b 100644 --- a/back/tests/Kyoo.Tests/Database/SpecificTests/ShowTests.cs +++ b/back/tests/Kyoo.Tests/Database/SpecificTests/ShowTests.cs @@ -75,9 +75,7 @@ namespace Kyoo.Tests.Database Assert.Equal(value.Genres, edited.Genres); await using DatabaseContext database = Repositories.Context.New(); - Show show = await database.Shows - .Include(x => x.Genres) - .FirstAsync(); + Show show = await database.Shows.FirstAsync(); Assert.Equal(value.Slug, show.Slug); Assert.Equal(value.Genres, show.Genres); @@ -94,9 +92,7 @@ namespace Kyoo.Tests.Database Assert.Equal(value.Genres, edited.Genres); await using DatabaseContext database = Repositories.Context.New(); - Show show = await database.Shows - .Include(x => x.Genres) - .FirstAsync(); + Show show = await database.Shows.FirstAsync(); Assert.Equal(value.Slug, show.Slug); Assert.Equal(value.Genres, show.Genres); @@ -113,9 +109,7 @@ namespace Kyoo.Tests.Database Assert.Equal("studio", edited.Studio!.Slug); await using DatabaseContext database = Repositories.Context.New(); - Show show = await database.Shows - .Include(x => x.Studio) - .FirstAsync(); + Show show = await database.Shows.Include(x => x.Studio).FirstAsync(); Assert.Equal(value.Slug, show.Slug); Assert.Equal("studio", show.Studio!.Slug); @@ -187,13 +181,13 @@ namespace Kyoo.Tests.Database Show edited = await _repository.Edit(value); Assert.Equal(value.Slug, edited.Slug); - Assert.Equal(value.ExternalId, edited.ExternalId); + KAssert.DeepEqual(value.ExternalId, edited.ExternalId); await using DatabaseContext database = Repositories.Context.New(); Show show = await database.Shows.FirstAsync(); Assert.Equal(value.Slug, show.Slug); - Assert.Equal(value.ExternalId, show.ExternalId); + KAssert.DeepEqual(value.ExternalId, show.ExternalId); } [Fact] @@ -227,8 +221,6 @@ namespace Kyoo.Tests.Database await using DatabaseContext context = Repositories.Context.New(); Show retrieved = await context.Shows - .Include(x => x.ExternalId) - .Include(x => x.Genres) .Include(x => x.People) .ThenInclude(x => x.People) .Include(x => x.Studio) @@ -264,9 +256,7 @@ namespace Kyoo.Tests.Database Show created = await _repository.Create(expected); KAssert.DeepEqual(expected, created); await using DatabaseContext context = Repositories.Context.New(); - Show retrieved = await context.Shows - .Include(x => x.ExternalId) - .FirstAsync(x => x.Id == created.Id); + Show retrieved = await context.Shows.FirstAsync(x => x.Id == created.Id); KAssert.DeepEqual(expected, retrieved); Assert.Single(retrieved.ExternalId); Assert.Equal("ID", retrieved.ExternalId["test"].DataId); diff --git a/back/tests/Kyoo.Tests/Database/TestContext.cs b/back/tests/Kyoo.Tests/Database/TestContext.cs index 0f8b48e0..1c5bdca5 100644 --- a/back/tests/Kyoo.Tests/Database/TestContext.cs +++ b/back/tests/Kyoo.Tests/Database/TestContext.cs @@ -102,8 +102,8 @@ namespace Kyoo.Tests { string server = Environment.GetEnvironmentVariable("POSTGRES_HOST") ?? "127.0.0.1"; string port = Environment.GetEnvironmentVariable("POSTGRES_PORT") ?? "5432"; - string username = Environment.GetEnvironmentVariable("POSTGRES_USER") ?? "kyoo"; - string password = Environment.GetEnvironmentVariable("POSTGRES_PASSWORD") ?? "kyooPassword"; + string username = Environment.GetEnvironmentVariable("POSTGRES_USER") ?? "KyooUser"; + string password = Environment.GetEnvironmentVariable("POSTGRES_PASSWORD") ?? "KyooPassword"; return $"Server={server};Port={port};Database={database};User ID={username};Password={password};Include Error Detail=true"; } diff --git a/back/tests/Kyoo.Tests/Utility/EnumerableTests.cs b/back/tests/Kyoo.Tests/Utility/EnumerableTests.cs index 02184acb..80a55a6f 100644 --- a/back/tests/Kyoo.Tests/Utility/EnumerableTests.cs +++ b/back/tests/Kyoo.Tests/Utility/EnumerableTests.cs @@ -30,9 +30,6 @@ namespace Kyoo.Tests.Utility { int[] list = { 1, 2, 3, 4 }; list = list.IfEmpty(() => KAssert.Fail("Empty action should not be triggered.")).ToArray(); - Assert.Throws(() => list.IfEmpty(null!).ToList()); - list = null; - Assert.Throws(() => list!.IfEmpty(() => { }).ToList()); list = Array.Empty(); Assert.Throws(() => list.IfEmpty(() => throw new ArgumentException()).ToList()); Assert.Empty(list.IfEmpty(() => { })); diff --git a/back/tests/Kyoo.Tests/Utility/MergerTests.cs b/back/tests/Kyoo.Tests/Utility/MergerTests.cs index f8610d57..4e9f3f3b 100644 --- a/back/tests/Kyoo.Tests/Utility/MergerTests.cs +++ b/back/tests/Kyoo.Tests/Utility/MergerTests.cs @@ -31,12 +31,12 @@ namespace Kyoo.Tests.Utility { Studio genre = new() { - Id = 5, Name = "merged" }; Studio genre2 = new() { - Name = "test" + Name = "test", + Id = 5, }; Studio ret = Merger.Complete(genre, genre2); Assert.True(ReferenceEquals(genre, ret)); @@ -50,11 +50,11 @@ namespace Kyoo.Tests.Utility { Collection collection = new() { - Id = 5, Name = "merged", }; Collection collection2 = new() { + Id = 5, Name = "test", }; Collection ret = Merger.Complete(collection, collection2); diff --git a/back/tests/Kyoo.Tests/Utility/UtilityTests.cs b/back/tests/Kyoo.Tests/Utility/UtilityTests.cs index 944c6571..aea71e8e 100644 --- a/back/tests/Kyoo.Tests/Utility/UtilityTests.cs +++ b/back/tests/Kyoo.Tests/Utility/UtilityTests.cs @@ -47,8 +47,8 @@ namespace Kyoo.Tests.Utility Expression> member = x => x.Id; Expression> memberCast = x => x.Id; - Assert.Equal("ID", KUtility.GetPropertyName(member)); - Assert.Equal("ID", KUtility.GetPropertyName(memberCast)); + Assert.Equal("Id", KUtility.GetPropertyName(member)); + Assert.Equal("Id", KUtility.GetPropertyName(memberCast)); } [Fact]