mirror of
				https://github.com/Kareadita/Kavita.git
				synced 2025-11-03 19:17:05 -05:00 
			
		
		
		
	* Added a tooltip to inform user that format and collection filter selections do not only show for the selected library. * Refactored a lot of code around when we update chapter cover images. Applied an optimization for when we re-calculate volume/series covers, such that it only occurs when the first chapter's image updates. * Updated code to ensure only lastmodified gets refreshed in metadata since it always follows a scan * Optimized how metadata is populated on the series. Instead of re-reading the comicInfos, instead I read the data from the underlying chapter entities. This reduces N additional reads AND enables the ability in the future to show/edit chapter level metadata. * Spelling mistake * Fixed a concurency issue by not selecting Genres from DB. Added a test for long paths. * Fixed a bug in filter where collection tag wasn't populating on load * Cleaned up the logic for changelog to better compare against the installed verison. For nightly users, show the last stable as installed. * Removed some demo code * SplitQuery to allow loading tags much faster for series metadata load.
		
			
				
	
	
		
			193 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			193 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System.Linq;
 | 
						|
using API.Entities.Enums;
 | 
						|
using Xunit;
 | 
						|
using static API.Parser.Parser;
 | 
						|
 | 
						|
namespace API.Tests.Parser
 | 
						|
{
 | 
						|
    public class ParserTests
 | 
						|
    {
 | 
						|
        [Theory]
 | 
						|
        [InlineData("Joe Shmo, Green Blue", "Joe Shmo, Green Blue")]
 | 
						|
        [InlineData("Shmo, Joe",  "Shmo, Joe")]
 | 
						|
        [InlineData("  Joe Shmo  ",  "Joe Shmo")]
 | 
						|
        public void CleanAuthorTest(string input, string expected)
 | 
						|
        {
 | 
						|
            Assert.Equal(expected, CleanAuthor(input));
 | 
						|
        }
 | 
						|
 | 
						|
        [Theory]
 | 
						|
        [InlineData("Beastars - SP01", true)]
 | 
						|
        [InlineData("Beastars SP01", true)]
 | 
						|
        [InlineData("Beastars Special 01", false)]
 | 
						|
        [InlineData("Beastars Extra 01", false)]
 | 
						|
        [InlineData("Batman Beyond - Return of the Joker (2001) SP01", true)]
 | 
						|
        public void HasSpecialTest(string input, bool expected)
 | 
						|
        {
 | 
						|
            Assert.Equal(expected,  HasSpecialMarker(input));
 | 
						|
        }
 | 
						|
 | 
						|
        [Theory]
 | 
						|
        [InlineData("0001", "1")]
 | 
						|
        [InlineData("1", "1")]
 | 
						|
        [InlineData("0013", "13")]
 | 
						|
        public void RemoveLeadingZeroesTest(string input, string expected)
 | 
						|
        {
 | 
						|
            Assert.Equal(expected, RemoveLeadingZeroes(input));
 | 
						|
        }
 | 
						|
 | 
						|
        [Theory]
 | 
						|
        [InlineData("1", "001")]
 | 
						|
        [InlineData("10", "010")]
 | 
						|
        [InlineData("100", "100")]
 | 
						|
        public void PadZerosTest(string input, string expected)
 | 
						|
        {
 | 
						|
            Assert.Equal(expected, PadZeros(input));
 | 
						|
        }
 | 
						|
 | 
						|
        [Theory]
 | 
						|
        [InlineData("Hello_I_am_here", false, "Hello I am here")]
 | 
						|
        [InlineData("Hello_I_am_here   ",  false, "Hello I am here")]
 | 
						|
        [InlineData("[ReleaseGroup] The Title", false, "The Title")]
 | 
						|
        [InlineData("[ReleaseGroup]_The_Title", false, "The Title")]
 | 
						|
        [InlineData("-The Title", false, "The Title")]
 | 
						|
        [InlineData("- The Title", false, "The Title")]
 | 
						|
        [InlineData("[Suihei Kiki]_Kasumi_Otoko_no_Ko_[Taruby]_v1.1", false, "Kasumi Otoko no Ko v1.1")]
 | 
						|
        [InlineData("Batman - Detective Comics - Rebirth Deluxe Edition Book 04 (2019) (digital) (Son of Ultron-Empire)", true, "Batman - Detective Comics - Rebirth Deluxe Edition")]
 | 
						|
        public void CleanTitleTest(string input, bool isComic, string expected)
 | 
						|
        {
 | 
						|
            Assert.Equal(expected, CleanTitle(input, isComic));
 | 
						|
        }
 | 
						|
 | 
						|
        [Theory]
 | 
						|
        [InlineData("src: url(fonts/AvenirNext-UltraLight.ttf)", true)]
 | 
						|
        [InlineData("src: url(ideal-sans-serif.woff)", true)]
 | 
						|
        [InlineData("src: local(\"Helvetica Neue Bold\")", true)]
 | 
						|
        [InlineData("src: url(\"/fonts/OpenSans-Regular-webfont.woff2\")", true)]
 | 
						|
        [InlineData("src: local(\"/fonts/OpenSans-Regular-webfont.woff2\")", true)]
 | 
						|
        [InlineData("src: url(data:application/x-font-woff", false)]
 | 
						|
        public void FontCssRewriteMatches(string input, bool expectedMatch)
 | 
						|
        {
 | 
						|
            Assert.Equal(expectedMatch, FontSrcUrlRegex.Matches(input).Count > 0);
 | 
						|
        }
 | 
						|
 | 
						|
        [Theory]
 | 
						|
        [InlineData("src: url(fonts/AvenirNext-UltraLight.ttf)", new [] {"src: url(", "fonts/AvenirNext-UltraLight.ttf", ")"})]
 | 
						|
        [InlineData("src: url(ideal-sans-serif.woff)", new [] {"src: url(", "ideal-sans-serif.woff", ")"})]
 | 
						|
        [InlineData("src: local(\"Helvetica Neue Bold\")", new [] {"src: local(\"", "Helvetica Neue Bold", "\")"})]
 | 
						|
        [InlineData("src: url(\"/fonts/OpenSans-Regular-webfont.woff2\")", new [] {"src: url(\"", "/fonts/OpenSans-Regular-webfont.woff2", "\")"})]
 | 
						|
        [InlineData("src: local(\"/fonts/OpenSans-Regular-webfont.woff2\")", new [] {"src: local(\"", "/fonts/OpenSans-Regular-webfont.woff2", "\")"})]
 | 
						|
        public void FontCssCorrectlySeparates(string input, string[] expected)
 | 
						|
        {
 | 
						|
            Assert.Equal(expected, FontSrcUrlRegex.Match(input).Groups.Values.Select(g => g.Value).Where((_, i) => i > 0).ToArray());
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
        [Theory]
 | 
						|
        [InlineData("test.cbz", true)]
 | 
						|
        [InlineData("test.cbr", true)]
 | 
						|
        [InlineData("test.zip", true)]
 | 
						|
        [InlineData("test.rar", true)]
 | 
						|
        [InlineData("test.rar.!qb", false)]
 | 
						|
        [InlineData("[shf-ma-khs-aqs]negi_pa_vol15007.jpg", false)]
 | 
						|
        public void IsArchiveTest(string input, bool expected)
 | 
						|
        {
 | 
						|
            Assert.Equal(expected, IsArchive(input));
 | 
						|
        }
 | 
						|
 | 
						|
        [Theory]
 | 
						|
        [InlineData("test.epub", true)]
 | 
						|
        [InlineData("test.pdf", true)]
 | 
						|
        [InlineData("test.mobi", false)]
 | 
						|
        [InlineData("test.djvu", false)]
 | 
						|
        [InlineData("test.zip", false)]
 | 
						|
        [InlineData("test.rar", false)]
 | 
						|
        [InlineData("test.epub.!qb", false)]
 | 
						|
        [InlineData("[shf-ma-khs-aqs]negi_pa_vol15007.ebub", false)]
 | 
						|
        public void IsBookTest(string input, bool expected)
 | 
						|
        {
 | 
						|
            Assert.Equal(expected, IsBook(input));
 | 
						|
        }
 | 
						|
 | 
						|
        [Theory]
 | 
						|
        [InlineData("test.epub", true)]
 | 
						|
        [InlineData("test.EPUB", true)]
 | 
						|
        [InlineData("test.mobi", false)]
 | 
						|
        [InlineData("test.epub.!qb", false)]
 | 
						|
        [InlineData("[shf-ma-khs-aqs]negi_pa_vol15007.ebub", false)]
 | 
						|
        public void IsEpubTest(string input, bool expected)
 | 
						|
        {
 | 
						|
            Assert.Equal(expected, IsEpub(input));
 | 
						|
        }
 | 
						|
 | 
						|
        [Theory]
 | 
						|
        [InlineData("12-14", 12)]
 | 
						|
        [InlineData("24", 24)]
 | 
						|
        [InlineData("18-04", 4)]
 | 
						|
        [InlineData("18-04.5", 4.5)]
 | 
						|
        [InlineData("40", 40)]
 | 
						|
        [InlineData("40a-040b", 0)]
 | 
						|
        [InlineData("40.1_a", 0)]
 | 
						|
        public void MinimumNumberFromRangeTest(string input, float expected)
 | 
						|
        {
 | 
						|
            Assert.Equal(expected, MinimumNumberFromRange(input));
 | 
						|
        }
 | 
						|
 | 
						|
        [Theory]
 | 
						|
        [InlineData("Darker Than Black", "darkerthanblack")]
 | 
						|
        [InlineData("Darker Than Black - Something", "darkerthanblacksomething")]
 | 
						|
        [InlineData("Darker Than_Black", "darkerthanblack")]
 | 
						|
        [InlineData("Citrus", "citrus")]
 | 
						|
        [InlineData("Citrus+", "citrus+")]
 | 
						|
        [InlineData("", "")]
 | 
						|
        public void NormalizeTest(string input, string expected)
 | 
						|
        {
 | 
						|
            Assert.Equal(expected, Normalize(input));
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
 | 
						|
        [Theory]
 | 
						|
        [InlineData("test.jpg", true)]
 | 
						|
        [InlineData("test.jpeg", true)]
 | 
						|
        [InlineData("test.png", true)]
 | 
						|
        [InlineData(".test.jpg", false)]
 | 
						|
        [InlineData("!test.jpg", false)]
 | 
						|
        [InlineData("test.webp", true)]
 | 
						|
        public void IsImageTest(string filename, bool expected)
 | 
						|
        {
 | 
						|
            Assert.Equal(expected, IsImage(filename));
 | 
						|
        }
 | 
						|
 | 
						|
 | 
						|
 | 
						|
        [Theory]
 | 
						|
        [InlineData("Love Hina - Special.jpg", false)]
 | 
						|
        [InlineData("folder.jpg", true)]
 | 
						|
        [InlineData("DearS_v01_cover.jpg", true)]
 | 
						|
        [InlineData("DearS_v01_covers.jpg", false)]
 | 
						|
        [InlineData("!cover.jpg", true)]
 | 
						|
        [InlineData("cover.jpg", true)]
 | 
						|
        [InlineData("cover.png", true)]
 | 
						|
        [InlineData("ch1/cover.png", true)]
 | 
						|
        [InlineData("ch1/backcover.png", false)]
 | 
						|
        [InlineData("backcover.png", false)]
 | 
						|
        public void IsCoverImageTest(string inputPath, bool expected)
 | 
						|
        {
 | 
						|
            Assert.Equal(expected, IsCoverImage(inputPath));
 | 
						|
        }
 | 
						|
 | 
						|
        [Theory]
 | 
						|
        [InlineData("__MACOSX/Love Hina - Special.jpg", true)]
 | 
						|
        [InlineData("TEST/Love Hina - Special.jpg", false)]
 | 
						|
        [InlineData("__macosx/Love Hina/", false)]
 | 
						|
        [InlineData("MACOSX/Love Hina/", false)]
 | 
						|
        [InlineData("._Love Hina/Love Hina/", true)]
 | 
						|
        [InlineData("@Recently-Snapshot/Love Hina/", true)]
 | 
						|
        public void HasBlacklistedFolderInPathTest(string inputPath, bool expected)
 | 
						|
        {
 | 
						|
            Assert.Equal(expected, HasBlacklistedFolderInPath(inputPath));
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |