91 lines
3.2 KiB
C#
91 lines
3.2 KiB
C#
using FluentAssertions;
|
|
using PageManager.Api.Data.Models;
|
|
using PageManager.Api.Services;
|
|
using PageManager.Api.Tests.Helpers;
|
|
|
|
namespace PageManager.Api.Tests.Unit.Services;
|
|
|
|
public class FileScannerServiceTests
|
|
{
|
|
// ── GetFormatFromExtension ────────────────────────────────────────────────
|
|
|
|
[Theory]
|
|
[InlineData(".epub", FileFormat.Epub)]
|
|
[InlineData(".mobi", FileFormat.Mobi)]
|
|
[InlineData(".pdf", FileFormat.Pdf)]
|
|
[InlineData(".m4b", FileFormat.M4b)]
|
|
[InlineData(".mp3", FileFormat.Mp3)]
|
|
[InlineData(".aac", FileFormat.Aac)]
|
|
[InlineData(".flac", FileFormat.Flac)]
|
|
[InlineData(".EPUB", FileFormat.Epub)] // case-insensitive
|
|
[InlineData(".PDF", FileFormat.Pdf)]
|
|
public void GetFormatFromExtension_KnownExtension_ReturnsFormat(string ext, FileFormat expected)
|
|
{
|
|
FileScannerService.GetFormatFromExtension(ext).Should().Be(expected);
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData(".txt")]
|
|
[InlineData(".docx")]
|
|
[InlineData(".zip")]
|
|
[InlineData("")]
|
|
public void GetFormatFromExtension_UnknownExtension_ReturnsNull(string ext)
|
|
{
|
|
FileScannerService.GetFormatFromExtension(ext).Should().BeNull();
|
|
}
|
|
|
|
// ── FindMatch ─────────────────────────────────────────────────────────────
|
|
|
|
[Fact]
|
|
public void FindMatch_FilenameContainsBookTitle_ReturnsBook()
|
|
{
|
|
var books = new[] { BookFactory.Create(id: 1, title: "Dune") };
|
|
var file = new BookFile { Filename = "Dune - Frank Herbert.epub" };
|
|
|
|
FileScannerService.FindMatch(file, books)!.Id.Should().Be(1);
|
|
}
|
|
|
|
[Fact]
|
|
public void FindMatch_CaseInsensitive_ReturnsBook()
|
|
{
|
|
var books = new[] { BookFactory.Create(id: 2, title: "The Way of Kings") };
|
|
var file = new BookFile { Filename = "the way of kings.epub" };
|
|
|
|
FileScannerService.FindMatch(file, books)!.Id.Should().Be(2);
|
|
}
|
|
|
|
[Fact]
|
|
public void FindMatch_FilenameContainsIsbn_ReturnsBook()
|
|
{
|
|
var books = new[] { BookFactory.Create(id: 3, title: "Foundation", isbn: "9780553293357") };
|
|
var file = new BookFile { Filename = "9780553293357.epub" };
|
|
|
|
FileScannerService.FindMatch(file, books)!.Id.Should().Be(3);
|
|
}
|
|
|
|
[Fact]
|
|
public void FindMatch_NoMatch_ReturnsNull()
|
|
{
|
|
var books = new[] { BookFactory.Create(id: 1, title: "Dune") };
|
|
var file = new BookFile { Filename = "Foundation - Isaac Asimov.epub" };
|
|
|
|
FileScannerService.FindMatch(file, books).Should().BeNull();
|
|
}
|
|
|
|
[Fact]
|
|
public void FindMatch_EmptyBookList_ReturnsNull()
|
|
{
|
|
FileScannerService.FindMatch(new BookFile { Filename = "anything.epub" }, []).Should().BeNull();
|
|
}
|
|
|
|
[Fact]
|
|
public void FindMatch_BookWithNullIsbn_DoesNotThrow()
|
|
{
|
|
var books = new[] { BookFactory.Create(id: 1, title: "Dune", isbn: null) };
|
|
var file = new BookFile { Filename = "some-file.epub" };
|
|
|
|
var act = () => FileScannerService.FindMatch(file, books);
|
|
act.Should().NotThrow();
|
|
}
|
|
}
|