mirror of
https://github.com/ajurna/cbwebreader.git
synced 2026-11-02 10:36:55 +00:00
- 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.
49 lines
1.9 KiB
Python
49 lines
1.9 KiB
Python
"""Tests for the filesystem reconciliation in comic.processing."""
|
|
|
|
import pytest
|
|
|
|
from comic import models
|
|
from comic.processing import clean_directories, clean_files, generate_directory
|
|
from comic.tests.factories import make_cbz
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_clean_directories_adds_new_and_removes_stale(comic_volume, reader_user) -> None:
|
|
parent = models.Directory.objects.create(name='Series')
|
|
models.Directory.objects.create(name='Gone', parent=parent)
|
|
(comic_volume / 'Series' / 'New').mkdir(parents=True)
|
|
|
|
clean_directories(models.Directory.objects.filter(parent=parent), comic_volume / 'Series', parent)
|
|
|
|
names = set(models.Directory.objects.filter(parent=parent).values_list('name', flat=True))
|
|
assert names == {'New'}
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_clean_files_ignores_unsupported_extensions(comic_volume, reader_user) -> None:
|
|
directory = models.Directory.objects.create(name='Series')
|
|
target = comic_volume / 'Series'
|
|
target.mkdir(parents=True)
|
|
make_cbz(target / 'issue.cbz', pages=2)
|
|
(target / 'notes.txt').write_text('not a comic')
|
|
|
|
clean_files(models.ComicBook.objects.filter(directory=directory), reader_user, target, directory)
|
|
|
|
books = list(models.ComicBook.objects.filter(directory=directory))
|
|
assert [book.file_name for book in books] == ['issue.cbz']
|
|
assert books[0].page_count == 2
|
|
assert models.ComicStatus.objects.filter(user=reader_user).count() == 1
|
|
|
|
|
|
@pytest.mark.django_db
|
|
def test_generate_directory_creates_missing_statuses(comic_volume, reader_user) -> None:
|
|
directory = models.Directory.objects.create(name='Series')
|
|
target = comic_volume / 'Series'
|
|
target.mkdir(parents=True)
|
|
make_cbz(target / 'issue.cbz', pages=1)
|
|
|
|
entries = generate_directory(reader_user, directory)
|
|
|
|
assert [entry.title for entry in entries] == ['issue.cbz']
|
|
assert models.ComicStatus.objects.filter(user=reader_user, comic=entries[0]).exists()
|