"""Tests for BookService""" import pytest from pathlib import Path import aiofiles.os as aios from chitai.schemas import BookCreate from chitai.services import BookService from chitai.database import models as m @pytest.mark.asyncio class TestBookServiceCRUD: """Test CRUD operation for libraries.""" async def test_update_book( self, books_service: BookService, test_library: m.Library ) -> None: book_data = BookCreate( library_id=1, title="Fellowship of the Ring", authors=["J.R.R Tolkien"], tags=["Fantasy"], identifiers={"isbn-13": "9780261102354"}, pages=427, ) book = await books_service.to_model_on_create(book_data.model_dump()) # Add path manually as it won't be generated (not using the create function, but manually inserting into db) book.path = f"{test_library.root_path}/J.R.R Tolkien/The Fellowship of the Ring" await aios.makedirs(book.path) books_service.repository.session.add(book) await books_service.repository.session.commit() await books_service.repository.session.refresh(book) await books_service.update( book.id, { "title": "The Fellowship of the Ring", "identifiers": {"isbn-10": "9780261102354"}, "edition": 3, "publisher": "Tolkien Estate", "series": "The Lord of the Rings", "series_position": "1", "tags": ["Fantasy", "Adventure"], }, test_library, ) updated_book = await books_service.get(book.id) # Assert updated information is correct assert updated_book.title == "The Fellowship of the Ring" assert ( updated_book.path == f"{test_library.root_path}/J.R.R Tolkien/The Lord of the Rings/01 - The Fellowship of the Ring" ) assert len(updated_book.identifiers) assert updated_book.identifiers[0].value == "9780261102354" assert updated_book.edition == 3 assert updated_book.publisher.name == "Tolkien Estate" assert len(updated_book.tags) == 2 # book = await books_service.create(book_data.model_dump())