def test_update_track_db_object_updates_object(): from cozy.model.library import Library from cozy.media.media_file import MediaFile from cozy.db.book import Book from cozy.media.chapter import Chapter from cozy.db.track import Track library = Library() chapter = Chapter("New Chapter", 0) media_file = MediaFile(book_name="New Book Name", author="New Author", reader="New Reader", disk=999, track_number=999, length=1234567, cover=b"cover", path="test.mp3", modified=1234567, chapters=[chapter]) book = Book.select().get() library._update_track_db_object(media_file, book) track_in_db: Track = Track.select().where(Track.file == "test.mp3").get() assert track_in_db.name == "New Chapter" assert track_in_db.disk == 999 assert track_in_db.number == 999 assert track_in_db.length == 1234567 assert track_in_db.modified == 1234567
def test_create_track_db_object_creates_object(): from cozy.model.library import Library from cozy.media.media_file import MediaFile from cozy.db.book import Book from cozy.media.chapter import Chapter library = Library() chapter = Chapter("New Chapter", 0) media_file = MediaFile(book_name="New Book Name", author="New Author", reader="New Reader", disk=999, track_number=999, length=1234567, cover=b"cover", path="New File", modified=1234567, chapters=[chapter]) book = Book.select().get() res_dict = library._get_track_dictionary_for_db(media_file, book) assert res_dict["name"] == "New Chapter" assert res_dict["disk"] == 999 assert res_dict["number"] == 999 assert res_dict["book"] == book assert res_dict["file"] == "New File" assert res_dict["length"] == 1234567 assert res_dict["modified"] == 1234567 assert res_dict["position"] == 0
def _get_m4b_chapters(self, mutagen_tags: MP4) -> List[Chapter]: chapters = [] if not mutagen_tags.chapters or len(mutagen_tags.chapters) == 0: return self._get_single_chapter() index = 0 for chapter in mutagen_tags.chapters: if index < len(mutagen_tags.chapters) - 1: length = mutagen_tags.chapters[index + 1].start - chapter.start else: length = self._get_length_in_seconds() - chapter.start if chapter.title: title = chapter.title else: title = "" chapters.append( Chapter(name=title, position=int(chapter.start * NS_TO_SEC), length=length, number=index + 1)) index += 1 return chapters
def test_create_book_db_object_creates_object(): from cozy.model.library import Library from cozy.media.media_file import MediaFile from cozy.db.book import Book from cozy.media.chapter import Chapter library = Library() chapter = Chapter("New Chapter", 0) media_file = MediaFile(book_name="New Book", author="New Author", reader="New Reader", disk=999, track_number=999, length=1234567, cover=b"cover", path="test.mp3", modified=1234567, chapters=[chapter]) library._create_book_db_object(media_file) book_in_db: Book = Book.select().where(Book.name == "New Book").get() assert book_in_db.name == "New Book" assert book_in_db.author == "New Author" assert book_in_db.reader == "New Reader" assert book_in_db.cover == b"cover" assert book_in_db.position == 0 assert book_in_db.rating == -1
def test_delete_all_tracks_from_db_does_as_it_says(): from cozy.media.media_file import MediaFile from cozy.media.chapter import Chapter from cozy.db.file import File from cozy.db.track import Track from cozy.db.track_to_file import TrackToFile from cozy.model.database_importer import DatabaseImporter database_importer = DatabaseImporter() chapter = Chapter("Ohne Aussicht auf Freiheit", 0, 1234567, 999) media_file = MediaFile( book_name="Test Book New", author="New Author2", reader="New Reader", disk=999, cover=b"cover", path="20.000 Meilen unter dem Meer/2-10 Ohne Aussicht auf Freiheit.m4a", modified=1234567, chapters=[chapter]) assert Track.select().where( Track.name == "Ohne Aussicht auf Freiheit").count() == 1 assert TrackToFile.select().join(File).where( TrackToFile.file.path == media_file.path).count() == 1 database_importer._delete_tracks_from_db(media_file) assert Track.select().where( Track.name == "Ohne Aussicht auf Freiheit").count() == 0 assert TrackToFile.select().join(File).where( TrackToFile.file.path == media_file.path).count() == 0 assert File.select().where(File.path == media_file.path).count() == 1
def test_prepare_db_objects_recreates_existing_track(mocker): from cozy.model.database_importer import DatabaseImporter from cozy.media.media_file import MediaFile from cozy.media.chapter import Chapter from cozy.db.track_to_file import TrackToFile from cozy.db.file import File database_importer = DatabaseImporter() chapter = Chapter("New Chapter", 0, 1234567, 999) media_file = MediaFile(book_name="Test Book", author="New Author", reader="New Reader", disk=999, cover=b"cover", path="test.mp3", modified=1234567, chapters=[chapter]) res = database_importer._prepare_track_db_objects([media_file]) res_list = list(res) request = res_list[0] assert TrackToFile.select().join(File).where( File.path == "test.mp3").count() == 0 assert len(res_list) == 1 assert request.file.path == "test.mp3" assert request.start_at == 0 assert request.track_data["name"] == "New Chapter" assert request.track_data["number"] == 999 assert request.track_data["disk"] == 999 assert request.track_data["book"].id == 1 assert request.track_data["length"] == 1234567 assert request.track_data["position"] == 0
def test_create_book_db_object_creates_object(): from cozy.model.database_importer import DatabaseImporter from cozy.media.media_file import MediaFile from cozy.db.book import Book from cozy.media.chapter import Chapter database_importer = DatabaseImporter() chapter = Chapter("New Chapter", 0, 1234567, 999) media_file = MediaFile(book_name="New Book", author="New Author", reader="New Reader", disk=999, cover=b"cover", path="test.mp3", modified=1234567, chapters=[chapter]) database_importer._create_book_db_object(media_file) book_in_db: Book = Book.select().where(Book.name == "New Book").get() assert book_in_db.name == "New Book" assert book_in_db.author == "New Author" assert book_in_db.reader == "New Reader" assert book_in_db.cover == b"cover" assert book_in_db.position == 0 assert book_in_db.rating == -1
def test_create_track_db_object_creates_object(): from cozy.model.database_importer import DatabaseImporter from cozy.media.media_file import MediaFile from cozy.db.book import Book from cozy.media.chapter import Chapter database_importer = DatabaseImporter() chapter = Chapter("New Chapter", 0, 1234567, 999) media_file = MediaFile(book_name="New Book Name", author="New Author", reader="New Reader", disk=999, cover=b"cover", path="New File", modified=1234567, chapters=[chapter]) book = Book.select().get() res_dict = database_importer._get_track_list_for_db(media_file, book)[0] assert res_dict["name"] == "New Chapter" assert res_dict["disk"] == 999 assert res_dict["number"] == 999 assert res_dict["book"] == book assert res_dict["length"] == 1234567 assert res_dict["position"] == 0
def _get_chapters(self): chapter = Chapter( name=self._get_track_name(), position=0 ) return [chapter]
def test_prepare_db_objects_updates_existing_book_regardless_of_spelling( mocker): from cozy.model.database_importer import DatabaseImporter from cozy.media.media_file import MediaFile from cozy.media.chapter import Chapter from cozy.db.file import File database_importer = DatabaseImporter() spy = mocker.spy(database_importer, "_update_book_db_object") File.create(path="New test File", modified=1234567) File.create(path="Another test File", modified=1234568) chapter = Chapter("New Chapter", 0, 1234567, 999) another_chapter = Chapter("Another Chapter", 0, 1234567, 999) media_file = MediaFile(book_name="TeSt bOOk", author="New Author2", reader="New Reader", disk=999, cover=b"cover", path="New test File", modified=1234567, chapters=[chapter]) another_media_file = MediaFile(book_name="TEST BOOK", author="New Author2", reader="New Reader", disk=999, cover=b"cover", path="Another test File", modified=1234568, chapters=[another_chapter]) res_dict = database_importer._prepare_track_db_objects( [media_file, another_media_file]) assert len(list(res_dict)) == 2 spy.assert_called_once()
def test_prepare_db_objects_skips_if_file_object_not_present(mocker): from cozy.model.database_importer import DatabaseImporter from cozy.media.media_file import MediaFile from cozy.media.chapter import Chapter database_importer = DatabaseImporter() chapter = Chapter("New Chapter", 0, 1234567, 999) media_file = MediaFile(book_name="Test Book", author="New Author", reader="New Reader", disk=999, cover=b"cover", path="New test File", modified=1234567, chapters=[chapter]) res_dict = database_importer._prepare_track_db_objects([media_file]) assert len(list(res_dict)) == 0
def test_prepare_db_objects_raises_not_implemented_for_multi_chapter_file(mocker): from cozy.model.library import Library from cozy.media.media_file import MediaFile from cozy.media.chapter import Chapter library = Library() chapter = Chapter("New Chapter", 0) media_file = MediaFile(book_name="Test Book New", author="New Author2", reader="New Reader", disk=999, track_number=999, length=1234567, cover=b"cover", path="New test File", modified=1234567, chapters=[chapter, chapter]) with pytest.raises(NotImplementedError): res_dict = library._prepare_db_objects([media_file]) list(res_dict)
def test_prepare_db_objects_creates_new_book(mocker): from cozy.model.library import Library from cozy.media.media_file import MediaFile from cozy.media.chapter import Chapter library = Library() spy = mocker.spy(library, "_create_book_db_object") chapter = Chapter("New Chapter", 0) media_file = MediaFile(book_name="Test Book New", author="New Author2", reader="New Reader", disk=999, track_number=999, length=1234567, cover=b"cover", path="New test File", modified=1234567, chapters=[chapter]) res_dict = library._prepare_db_objects([media_file]) assert len(list(res_dict)) == 1 spy.assert_called_once()
def test_prepare_db_objects_creates_new_book(mocker): from cozy.model.database_importer import DatabaseImporter from cozy.media.media_file import MediaFile from cozy.media.chapter import Chapter from cozy.db.file import File database_importer = DatabaseImporter() spy = mocker.spy(database_importer, "_create_book_db_object") File.create(path="New test File", modified=1234567) chapter = Chapter("New Chapter", 0, 1234567, 999) media_file = MediaFile(book_name="Test Book New", author="New Author2", reader="New Reader", disk=999, cover=b"cover", path="New test File", modified=1234567, chapters=[chapter]) res_dict = database_importer._prepare_track_db_objects([media_file]) assert len(list(res_dict)) == 1 spy.assert_called_once()
def _get_single_chapter(self): chapter = Chapter(name=self._get_track_name(), position=0, length=self._get_length_in_seconds(), number=self._get_track_number()) return [chapter]