using System; using System.Collections.Generic; using Emby.Naming.AudioBook; using Emby.Naming.Common; using Xunit; namespace Jellyfin.Naming.Tests.AudioBook { public class AudioBookResolverTests { private readonly NamingOptions _namingOptions = new NamingOptions(); public static IEnumerable GetResolveFileTestData() { yield return new object[] { new AudioBookFileInfo() { Path = @"/server/AudioBooks/Larry Potter/Larry Potter.mp3", Container = "mp3", } }; yield return new object[] { new AudioBookFileInfo() { Path = @"/server/AudioBooks/Berry Potter/Chapter 1 .ogg", Container = "ogg", ChapterNumber = 1 } }; yield return new object[] { new AudioBookFileInfo() { Path = @"/server/AudioBooks/Nerry Potter/Part 3 - Chapter 2.mp3", Container = "mp3", ChapterNumber = 2, PartNumber = 3 } }; } [Theory] [MemberData(nameof(GetResolveFileTestData))] public void Resolve_ValidFileName_Success(AudioBookFileInfo expectedResult) { var result = new AudioBookResolver(_namingOptions).Resolve(expectedResult.Path); Assert.NotNull(result); Assert.Equal(result!.Path, expectedResult.Path); Assert.Equal(result!.Container, expectedResult.Container); Assert.Equal(result!.ChapterNumber, expectedResult.ChapterNumber); Assert.Equal(result!.PartNumber, expectedResult.PartNumber); Assert.Equal(result!.IsDirectory, expectedResult.IsDirectory); } [Fact] public void Resolve_EmptyFileName_ArgumentException() { Assert.Throws(() => new AudioBookResolver(_namingOptions).Resolve(string.Empty)); } } }