From 64ca497bb68587456e043ec13d352b8de566f22e Mon Sep 17 00:00:00 2001 From: Amelia <77553571+Fesaa@users.noreply.github.com> Date: Wed, 25 Jun 2025 15:58:38 +0200 Subject: [PATCH] Get naming correctly in unit tests, add some notes Adjust numbers in unit tests to make sure they're values that can be passed to IsSeriesCompleted (TotalCount = External count unless comicinfo has more) --- .../Services/ExternalMetadataServiceTests.cs | 26 ++++++++++++------- .../Metadata/ExternalSeriesDetailDto.cs | 2 ++ API/Services/Plus/ExternalMetadataService.cs | 2 +- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/API.Tests/Services/ExternalMetadataServiceTests.cs b/API.Tests/Services/ExternalMetadataServiceTests.cs index b856a5705..d5719111f 100644 --- a/API.Tests/Services/ExternalMetadataServiceTests.cs +++ b/API.Tests/Services/ExternalMetadataServiceTests.cs @@ -903,7 +903,7 @@ public class ExternalMetadataServiceTests : AbstractDbTest } [Fact] - public void IsSeriesCompleted_Volumes_IncludeSpecialsCheck() + public void IsSeriesCompleted_Volumes_DecimalVolumes() { const string seriesName = "Test - Volume Complete"; var series = new SeriesBuilder(seriesName) @@ -918,7 +918,7 @@ public class ExternalMetadataServiceTests : AbstractDbTest .Build(); var chapters = new List(); - // External metadata includes special (2.5) + // External metadata includes decimal volume 2.5 var externalMetadata = new ExternalSeriesDetailDto { Chapters = 0, Volumes = 3 }; var result = ExternalMetadataService.IsSeriesCompleted(series, chapters, externalMetadata, 2); @@ -958,8 +958,13 @@ public class ExternalMetadataServiceTests : AbstractDbTest Assert.Equal(3, series.Metadata.TotalCount); } + /// + /// This unit test also illustrates the bug where you may get a false positive if you had Volumes 1,2, and 2.1. While + /// missing volume 3. With the external metadata expecting non-decimal volumes. + /// i.e. it would fail if we only had one decimal volume + /// [Fact] - public void IsSeriesCompleted_Volumes_TooManySpecials() + public void IsSeriesCompleted_Volumes_TooManyDecimalVolumes() { const string seriesName = "Test - Volume Complete"; var series = new SeriesBuilder(seriesName) @@ -975,7 +980,7 @@ public class ExternalMetadataServiceTests : AbstractDbTest .Build(); var chapters = new List(); - // External metadata includes no special. There are 3 volumes. And we're missing volume 3 + // External metadata includes no special or decimals. There are 3 volumes. And we're missing volume 3 var externalMetadata = new ExternalSeriesDetailDto { Chapters = 0, Volumes = 3 }; var result = ExternalMetadataService.IsSeriesCompleted(series, chapters, externalMetadata, 2); @@ -986,12 +991,13 @@ public class ExternalMetadataServiceTests : AbstractDbTest [Fact] public void IsSeriesCompleted_NoVolumes_GEQChapterCheck() { + // We own 11 chapters, the external metadata expects 10 const string seriesName = "Test - Chapter MaxCount, no volumes"; var series = new SeriesBuilder(seriesName) .WithLibraryId(1) .WithMetadata(new SeriesMetadataBuilder() - .WithMaxCount(10) - .WithTotalCount(8) + .WithMaxCount(11) + .WithTotalCount(10) .Build()) .Build(); @@ -1001,8 +1007,8 @@ public class ExternalMetadataServiceTests : AbstractDbTest var result = ExternalMetadataService.IsSeriesCompleted(series, chapters, externalMetadata, Parser.DefaultChapterNumber); Assert.True(result); - Assert.Equal(10, series.Metadata.TotalCount); - Assert.Equal(10, series.Metadata.MaxCount); + Assert.Equal(11, series.Metadata.TotalCount); + Assert.Equal(11, series.Metadata.MaxCount); } [Fact] @@ -1012,8 +1018,8 @@ public class ExternalMetadataServiceTests : AbstractDbTest var series = new SeriesBuilder(seriesName) .WithLibraryId(1) .WithMetadata(new SeriesMetadataBuilder() - .WithMaxCount(8) - .WithTotalCount(5) + .WithMaxCount(7) + .WithTotalCount(10) .Build()) .Build(); diff --git a/API/DTOs/KavitaPlus/Metadata/ExternalSeriesDetailDto.cs b/API/DTOs/KavitaPlus/Metadata/ExternalSeriesDetailDto.cs index a3cd378b2..6704bf697 100644 --- a/API/DTOs/KavitaPlus/Metadata/ExternalSeriesDetailDto.cs +++ b/API/DTOs/KavitaPlus/Metadata/ExternalSeriesDetailDto.cs @@ -29,7 +29,9 @@ public sealed record ExternalSeriesDetailDto public DateTime? StartDate { get; set; } public DateTime? EndDate { get; set; } public int AverageScore { get; set; } + /// AniList returns the total count of unique chapters, includes 1.1 for example public int Chapters { get; set; } + /// AniList returns the total count of unique volumes, includes 1.1 for example public int Volumes { get; set; } public IList? Relations { get; set; } = []; public IList? Characters { get; set; } = []; diff --git a/API/Services/Plus/ExternalMetadataService.cs b/API/Services/Plus/ExternalMetadataService.cs index 06201ef01..a75a8d145 100644 --- a/API/Services/Plus/ExternalMetadataService.cs +++ b/API/Services/Plus/ExternalMetadataService.cs @@ -1646,7 +1646,7 @@ public class ExternalMetadataService : IExternalMetadataService return true; } - // If volumes are collected, check if we reach the required volumes by including specials + // If volumes are collected, check if we reach the required volumes by including specials, and decimal volumes // // TODO BUG: If the series has specials, that are not included in the external count. But you do own them // This may mark the series as completed pre-maturely