mirror of
https://github.com/ajurna/cbwebreader.git
synced 2026-11-02 10:36:55 +00:00
**Replace Flake8 with Ruff, refactor type hints, and enhance archive processing logic**
- Removed `flake8` and `flake8-annotations` from dependencies, replaced by `ruff` for linting. - Introduced cleaner type hinting and modern Python annotations (PEP 604 style) across multiple modules. - Moved archive processing to a dedicated helper (`comic.archives`) for improved maintainability. - Updated and simplified logic for archive file retrieval, directory cleaning, and user access validation. - Improved error handling and added support for user classification restrictions in API responses.
This commit is contained in:
1 parent
1148f4072b
commit
a7e9bd0743
16 files changed
+553
-4
No files matched your search
@@ -0,0 +1,71 @@
|
||||
"""Tests for the comic models."""
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
from comic import models
|
||||
from comic.tests.factories import make_cbz, make_pdf
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_page_count_excludes_metadata(comic_volume: Path) -> None:
|
||||
make_cbz(comic_volume / 'issue.cbz', pages=3, metadata=True)
|
||||
book = models.ComicBook.objects.create(file_name='issue.cbz')
|
||||
assert book.get_page_count() == 3
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_pdf_page_count(comic_volume: Path) -> None:
|
||||
make_pdf(comic_volume / 'issue.pdf', pages=2)
|
||||
book = models.ComicBook.objects.create(file_name='issue.pdf')
|
||||
assert book.get_page_count() == 2
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_unreadable_archive_is_indexed_without_pages(comic_volume: Path) -> None:
|
||||
path = comic_volume / 'broken.cbz'
|
||||
path.write_bytes(b'this is not an archive')
|
||||
result = models.ComicBook.process_comic_book(path)
|
||||
assert isinstance(result, Path)
|
||||
assert models.ComicBook.objects.get(file_name='broken.cbz').page_count == 0
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_archive_path_uses_the_directory_tree(comic_volume: Path) -> None:
|
||||
parent = models.Directory.objects.create(name='Series')
|
||||
child = models.Directory.objects.create(name='Volume 1', parent=parent)
|
||||
book = models.ComicBook.objects.create(file_name='issue.cbz', directory=child)
|
||||
assert book.get_archive_path == comic_volume / 'Series' / 'Volume 1' / 'issue.cbz'
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_book_without_a_directory_uses_the_volume_root(comic_volume: Path) -> None:
|
||||
book = models.ComicBook.objects.create(file_name='issue.cbz')
|
||||
assert book.get_archive_path == comic_volume / 'issue.cbz'
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_directory_path_is_built_from_its_parents() -> None:
|
||||
parent = models.Directory.objects.create(name='Series')
|
||||
child = models.Directory.objects.create(name='Volume 1', parent=parent)
|
||||
assert child.get_path() == Path('Series') / 'Volume 1'
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_get_image_returns_the_requested_page(comic_volume: Path) -> None:
|
||||
make_cbz(comic_volume / 'issue.cbz', pages=2, metadata=False)
|
||||
book = models.ComicBook.objects.create(file_name='issue.cbz')
|
||||
stream, mime_type = book.get_image(1)
|
||||
assert mime_type == 'image/png'
|
||||
assert stream.read()
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_classification_comparison() -> None:
|
||||
directory = models.Directory.objects.create(name='Rated', classification=models.Directory.Classification.C_18)
|
||||
misc = models.UserMisc.objects.create(
|
||||
user=models.User.objects.create_user('pg', 'pg@example.com', 'password12345'),
|
||||
allowed_to_read=models.Directory.Classification.C_PG,
|
||||
)
|
||||
assert directory.classification > misc.allowed_to_read
|
||||
Reference in new issue
Block a user