def test_removes_track_menu_item_when_closing_an_project(driver): window_ = show_main_window() project = build.album(tracks=[build.track(track_title="Chevere!"), build.track(track_title="Zumbar")]) window_.display_project_screen(project) window_.display_startup_screen() project = build.album() window_.display_project_screen(project) driver.does_not_show_menu_item(title="Chevere!", track_number=1) driver.does_not_show_menu_item(title="Zumbar", track_number=2)
def test_removes_track_menu_item_when_closing_an_project(driver): window_ = show_main_window() project = build.album(tracks=[ build.track(track_title="Chevere!"), build.track(track_title="Zumbar") ]) window_.display_project_screen(project) window_.display_startup_screen() project = build.album() window_.display_project_screen(project) driver.does_not_show_menu_item(title="Chevere!", track_number=1) driver.does_not_show_menu_item(title="Zumbar", track_number=2)
def test_moves_track_of_album(): chevere = build.track(track_title="Chevere!") salsa_coltrane = build.track(track_title="Salsa Coltrane") honeycomb = build.album(tracks=[salsa_coltrane, chevere]) director.move_track_of(honeycomb)(0, 1) assert_that(honeycomb.tracks, contains(chevere, salsa_coltrane), "reordered tracks")
def test_adds_track_menu_item_when_adding_a_track_to_the_project(driver): window_ = show_main_window() project = build.album() window_.display_project_screen(project) project.add_track(build.track(track_title="Chevere!")) driver.shows_track_menu_item(title="Chevere!", track_number=1)
def test_navigates_to_project_edition_page_item_when_menu_item_is_clicked(driver): window_ = show_main_window() project = build.album() window_.display_project_screen(project) driver.navigate_to_project_page() project_screen(driver).is_showing_project_edition_page()
def test_displays_track_menu_item_when_loading_an_existing_project(driver): window_ = show_main_window() project = build.album(tracks=[build.track(track_title="Chevere!"), build.track(track_title="Zumbar")]) window_.display_project_screen(project) driver.shows_track_menu_item(title="Chevere!", track_number=1) driver.shows_track_menu_item(title="Zumbar", track_number=2)
def test_adds_selected_tracks_to_album_in_order(track_catalog): tracks = [track_catalog.add_track(filename) for filename in ("first.mp3", "second.mp3", "third.mp3")] album = build.album() director.add_tracks(album, "first.mp3", "second.mp3", "third.mp3", from_catalog=track_catalog) assert_that(album.tracks, contains(*tracks), "tracks added to album")
def test_cleans_superflous_isnis_before_tagging(mp3): album = build.album(release_name="Album Title", lead_performer="Album Artist", isnis={ "Album Artist": "0000000123456789", "Album Lyricist": "9876543210000000", "Album Composer": "1234567890000000", "Album Publisher": "0000000987654321", "Previous Album Artist": "1234567890000000", "Previous Album Lyricist": "0000000987654321" }) track = build.track(filename=mp3(), track_title="Track Title", lyricist=["Album Lyricist"], composer=["Album Composer"], publisher=["Album Publisher"], album=album) tagging.save_track(track) track = tagging.load_track(track.filename) assert_that( track.metadata, has_entries(release_name="Album Title", lead_performer="Album Artist", isnis={ "Album Artist": "0000000123456789", "Album Lyricist": "9876543210000000", "Album Composer": "1234567890000000", "Album Publisher": "0000000987654321" }, track_title="Track Title"), "metadata tags")
def test_uses_first_front_cover_or_first_image_as_main_cover(): album = build.album() assert_that(album.main_cover, is_(None)) album.add_image("image/jepg", "back cover image") assert_that(album.main_cover, has_property("data", "back cover image")) album.add_front_cover("image/jpeg", "front cover image") assert_that(album.main_cover, has_property("data", "front cover image"))
def test_round_trips_album_metadata_and_tracks_to_disk(project_file, mp3): album_file = project_file("album.tgit") original_tracks = (build.track(mp3(), track_title=title) for title in ("1st", "2nd", "3rd")) original_album = build.album(filename=album_file, version="1.11.0", type=Album.Type.FLAC, lead_performer="Artist", images=[sample_front_cover], tracks=original_tracks) local_project.save_project( original_album, track_name=lambda track: track.track_title + ".mp3") delete_from_disk(*original_tracks) stored_album = local_project.load_project(album_file) assert_that(stored_album.type, equal_to(Album.Type.FLAC), "type") assert_that(stored_album.lead_performer, equal_to("Artist"), "lead performer") assert_that(stored_album.images, contains(Image(*sample_front_cover)), "images") assert_that( stored_album.tracks, contains( has_filename(project_file(TRACKS_FOLDER_NAME, "1st.mp3")), has_filename(project_file(TRACKS_FOLDER_NAME, "2nd.mp3")), has_filename(project_file(TRACKS_FOLDER_NAME, "3rd.mp3")), ), "tracks")
def test_round_trips_chain_of_title_to_disk(project_file, mp3): album_file = project_file("album.tgit") original_filename = mp3() chain_of_title = make_chain_of_title( authors_composers=[joel_miller(), john_roney()], publishers=[effendi_records()]) original_track = make_track(original_filename, chain_of_title=chain_of_title, track_title="Chevere!") original_album = build.album(filename=album_file, version="2.4.0", type=Album.Type.FLAC, lead_performer="Joel Miller", tracks=[original_track]) local_project.save_project( original_album, track_name=lambda current_track: current_track.track_title + ".mp3") os.remove(original_filename) track = local_project.load_project(album_file).tracks[0] assert_that(track.chain_of_title.contributors, has_author_composer("Joel Miller", joel_miller()), "The contributors") assert_that(track.chain_of_title.contributors, has_author_composer("John Roney", john_roney()), "The contributors") assert_that(track.chain_of_title.contributors, has_publisher("Effendi Records", effendi_records()), "The contributors")
def test_updates_album_main_artist_when_album_is_a_compilation(): album = build.album() director.update_album_from(album)(compilation=True, lead_performer="Artist") assert_that(album.compilation, is_(True), "compilation") assert_that(album.lead_performer, equal_to(""), "lead performer")
def test_updates_album_metadata(): album = build.album() director.update_album_from(album)(release_name="Title", compilation=False, lead_performer="Artist", guestPerformers=[("Guitar", "Guitarist") ], label_name="Label", catalogNumber="XXX123456789", upc="123456789999", comments="Comments\n...", releaseTime="2009-01-01", recording_time="2008-09-15", recordingStudios="Studios", music_producer="Producer", mixer="Engineer", primary_style="Style") assert_that(album.release_name, equal_to("Title"), "release name") assert_that(album.compilation, is_(False), "compilation") assert_that(album.lead_performer, equal_to("Artist"), "lead performer") assert_that(album.guestPerformers, equal_to([("Guitar", "Guitarist")]), "guest performers") assert_that(album.label_name, equal_to("Label"), "label name") assert_that(album.catalogNumber, equal_to("XXX123456789"), "catalog number") assert_that(album.upc, equal_to("123456789999"), "upc") assert_that(album.comments, equal_to("Comments\n..."), "comments") assert_that(album.releaseTime, equal_to("2009-01-01"), "release time") assert_that(album.recording_time, equal_to("2008-09-15"), "recording time") assert_that(album.recordingStudios, equal_to("Studios"), "recording studios") assert_that(album.music_producer, equal_to("Producer"), "producer") assert_that(album.mixer, equal_to("Engineer"), "mixer") assert_that(album.primary_style, equal_to("Style"), "primary style")
def test_updates_tracks_main_artist_when_album_is_not_a_compilation(): album = build.album(tracks=[build.track(), build.track(), build.track()]) director.update_album_from(album)(lead_performer="Album Artist") for track in album.tracks: assert_that(track.lead_performer, equal_to("Album Artist"), "track artist")
def test_round_trips_track_and_album_metadata(mp3): album = build.album( release_name="Album Title", lead_performer="Album Artist", isnis={"Album Artist": "0000000123456789"}, ipis={"Album Lyricist": "9876543210000000"}, images=[build.image(mime="image/jpeg", data=b"<image data>")]) track = build.track(filename=mp3(), track_title="Track Title", album=album, lyricist=["Album Lyricist"]) tagging.save_track(track) track = tagging.load_track(track.filename) assert_that( track.metadata, has_entries(release_name="Album Title", lead_performer="Album Artist", isnis={"Album Artist": "0000000123456789"}, ipis={"Album Lyricist": "9876543210000000"}, track_title="Track Title"), "metadata tags") assert_that(track.metadata.images, contains(Image(mime="image/jpeg", data=b"<image data>")), "attached pictures")
def test_ignores_invalid_tracks(track_catalog): valid_track = track_catalog.add_track("valid.mp3") album = build.album() director.add_tracks(album, "invalid.mp3", "valid.mp3", from_catalog=track_catalog) assert_that(album.tracks, contains(valid_track), "valid tracks in album")
def test_contained_tracks_have_lead_performer_of_album_when_album_is_not_a_compilation( ): track = build.track(lead_performer="???") album = build.album(lead_performer="Joel Miller") album.add_track(track) assert_that(track.lead_performer, "Joel Miller", "track lead performer")
def test_updates_track_menu_item_when_track_name_changes(driver): window_ = show_main_window() project = build.album() window_.display_project_screen(project) project.add_track(build.track(track_title="Chevere!")) project.tracks[0].track_title = "Zumbar" driver.shows_track_menu_item(title="Zumbar", track_number=1)
def test_updates_album_main_artist_region_when_album_is_a_compilation(): album = build.album() director.update_album_from(album)(compilation=True, lead_performer_region=("CA", "MTL")) assert_that(album.compilation, is_(True), "compilation") assert_that(album.lead_performer_region, is_(None), "lead performer region")
def test_navigates_to_project_edition_page_item_when_menu_item_is_clicked( driver): window_ = show_main_window() project = build.album() window_.display_project_screen(project) driver.navigate_to_project_page() project_screen(driver).is_showing_project_edition_page()
def test_updates_album_main_artist_date_of_birth_when_album_is_a_compilation(): album = build.album() director.update_album_from(album)( compilation=True, lead_performer_date_of_birth="2009-05-06") assert_that(album.compilation, is_(True), "compilation") assert_that(album.lead_performer_date_of_birth, equal_to("2000-01-01"), "lead performer date of birth")
def test_signals_when_add_files_menu_item_clicked(driver): window_ = show_main_window(select_tracks=lambda type_, on_select: on_select("track1." + type_, "track2." + type_)) project = build.album(of_type=Album.Type.FLAC) add_files_signal = ValueMatcherProbe("add files", contains(project, ("track1.flac", "track2.flac"))) window_.on_add_files(lambda _, *files: add_files_signal.received([project, files])) window_.display_project_screen(project) driver.add_tracks_to_project(from_menu=True) driver.check(add_files_signal)
def test_contained_tracks_have_various_lead_performers_when_album_is_a_compilation( ): track = build.track(lead_performer="Joel Miller") compilation = build.album(lead_performer="Various Artists", compilation=True) compilation.add_track(track) assert_that(track.lead_performer, "Joel Miller", "track lead performer")
def test_removes_track_menu_item_when_removing_a_track_from_the_project(driver): window_ = show_main_window() project = build.album() window_.display_project_screen(project) project.add_track(build.track(track_title="Chevere!")) project.remove_track(0) driver.does_not_show_menu_item(title="Chevere!", track_number=1)
def test_signals_when_add_folder_menu_item_clicked(driver): window_ = show_main_window(select_tracks_in_folder=lambda type_, on_select: on_select("track1." + type_, "track2." + type_)) projet = build.album() add_folder_signal = ValueMatcherProbe("add folder", contains(projet, ("track1.flac", "track2.flac"))) window_.on_add_files(lambda current_projet, *file: add_folder_signal.received([current_projet, file])) window_.display_project_screen(projet) driver.add_tracks_in_folder() driver.check(add_folder_signal)
def test_removes_track_menu_item_when_removing_a_track_from_the_project( driver): window_ = show_main_window() project = build.album() window_.display_project_screen(project) project.add_track(build.track(track_title="Chevere!")) project.remove_track(0) driver.does_not_show_menu_item(title="Chevere!", track_number=1)
def test_signals_when_export_menu_item_clicked(driver): window_ = show_main_window(select_export_destination=lambda on_select, name: on_select(name + ".csv")) projet = build.album(release_name="Honeycomb") export_signal = ValueMatcherProbe("export", contains(projet, "Honeycomb.csv")) window_.on_export( lambda current_projet, destination: export_signal.received([current_projet, destination])) window_.display_project_screen(projet) driver.export() driver.check(export_signal)
def test_displays_track_menu_item_when_loading_an_existing_project(driver): window_ = show_main_window() project = build.album(tracks=[ build.track(track_title="Chevere!"), build.track(track_title="Zumbar") ]) window_.display_project_screen(project) driver.shows_track_menu_item(title="Chevere!", track_number=1) driver.shows_track_menu_item(title="Zumbar", track_number=2)
def test_signals_when_transmit_to_soproq_menu_item_clicked(driver): project = build.album(release_name="Honeycomb") transmit_signal = MultiValueMatcherProbe("transmit to soproq", contains(project, "Honeycomb.xlsx")) window_ = show_main_window(select_save_as_destination=lambda on_select, name: on_select(name + ".xlsx"), on_transmit_to_soproq=transmit_signal.received) window_.display_project_screen(project) driver.transmit_to_soproq() driver.check(transmit_signal)
def test_navigates_to_track_page_when_menu_item_is_clicked(driver): window_ = show_main_window() project = build.album() window_.display_project_screen(project) project.add_track(build.track(track_title="Chevere!")) project.add_track(build.track(track_title="Zumbar")) project.add_track(build.track(track_title="Salsa Coltrane")) driver.navigate_to_track_page(title="Salsa Coltrane", track_number=3) project_screen(driver).is_showing_track_edition_page(3)
def test_adds_version_information_to_tags(mp3): track = build.track(filename=mp3(), album=build.album()) tagging.save_track(track, at_time=NOW) track = tagging.load_track(track.filename) assert_that( track, has_properties(tagger='TGiT', tagger_version=tgit.__version__, tagging_time="2014-03-23 20:44:33"))
def test_signals_when_export_menu_item_clicked(driver): window_ = show_main_window(select_export_destination=lambda on_select, name: on_select(name + ".csv")) projet = build.album(release_name="Honeycomb") export_signal = ValueMatcherProbe("export", contains(projet, "Honeycomb.csv")) window_.on_export(lambda current_projet, destination: export_signal. received([current_projet, destination])) window_.display_project_screen(projet) driver.export() driver.check(export_signal)
def test_signals_when_transmit_to_soproq_menu_item_clicked(driver): project = build.album(release_name="Honeycomb") transmit_signal = MultiValueMatcherProbe( "transmit to soproq", contains(project, "Honeycomb.xlsx")) window_ = show_main_window(select_save_as_destination=lambda on_select, name: on_select(name + ".xlsx"), on_transmit_to_soproq=transmit_signal.received) window_.display_project_screen(project) driver.transmit_to_soproq() driver.check(transmit_signal)
def test_signals_track_insertion_events(): album = build.album() subscriber = Subscriber() tracks = [build.track(), build.track(), build.track()] album.track_inserted.subscribe(subscriber) for track in tracks: album.add_track(track) for index, track in enumerate(tracks): assert_that(subscriber.events, has_item(event(index, track)), "track {0} insertion event".format(index))
def test_signals_when_add_folder_menu_item_clicked(driver): window_ = show_main_window(select_tracks_in_folder=lambda type_, on_select: on_select("track1." + type_, "track2." + type_)) projet = build.album() add_folder_signal = ValueMatcherProbe( "add folder", contains(projet, ("track1.flac", "track2.flac"))) window_.on_add_files(lambda current_projet, *file: add_folder_signal. received([current_projet, file])) window_.display_project_screen(projet) driver.add_tracks_in_folder() driver.check(add_folder_signal)
def test_does_not_update_track_with_album_lead_performer_when_album_is_a_compilation( mp3): album = build.album(lead_performer="Various Artists", compilation=True) track = build.track(filename=mp3(), lead_performer="Track Artist", album=album) tagging.save_track(track) track = tagging.load_track(track.filename) assert_that(track.lead_performer, equal_to("Track Artist"), "lead performer")
def test_signals_when_add_files_menu_item_clicked(driver): window_ = show_main_window(select_tracks=lambda type_, on_select: on_select("track1." + type_, "track2." + type_)) project = build.album(of_type=Album.Type.FLAC) add_files_signal = ValueMatcherProbe( "add files", contains(project, ("track1.flac", "track2.flac"))) window_.on_add_files( lambda _, *files: add_files_signal.received([project, files])) window_.display_project_screen(project) driver.add_tracks_to_project(from_menu=True) driver.check(add_files_signal)
def test_closes_main_widget_when_changing_page(driver): window_ = show_main_window() project = build.album() screen = startup_screen(driver).widget() window_.display_project_screen(project) no_startup_screen(driver).exists() screen.is_closed() screen = project_screen(driver).widget() window_.display_startup_screen() no_album_screen(driver).exists() screen.is_closed()
def test_allows_removing_tracks(): album = build.album(tracks=[ build.track(track_title="Track 1"), build.track(track_title="Track 2"), build.track(track_title="Track 3") ]) album.remove_track(1) assert_that(album.tracks, has_length(2), "remaining tracks") assert_that(album.tracks, is_not(has_item(has_property("track_title", "Track 2"))), "tracks")
def test_writes_compilation_tracks_to_workbook(): album = build.album( release_name="Release Name", lead_performer="Various Artists", compilation=True) album.add_track(build.track(lead_performer="performer")) workbook = Workbook() write(album, workbook) has_line_metadata(workbook.active, A13="Release Name", B13="Artistes Variés", N13="performer", K13="O")
def test_remove_previous_artwork_and_tracks(project_file, mp3): album_file = project_file("album.tgit") tracks = (build.track(mp3(), track_title=title) for title in ("1st", "2nd", "3rd")) album = build.album(filename=album_file, images=[sample_front_cover], tracks=tracks) local_project.save_project(album, simple_naming) for position in reversed(range(len(album))): album.remove_track(position) album.remove_images() local_project.save_project(album, simple_naming) assert_that(fs.list_dir(project_file(TRACKS_FOLDER_NAME)), empty(), "track files left") assert_that(fs.list_dir(project_file(ARTWORK_FOLDER_NAME)), empty(), "artwork files left")
def test_round_trips_chain_of_title_to_disk(project_file, mp3): album_file = project_file("album.tgit") original_filename = mp3() chain_of_title = make_chain_of_title(authors_composers=[joel_miller(), john_roney()], publishers=[effendi_records()]) original_track = make_track(original_filename, chain_of_title=chain_of_title, track_title="Chevere!") original_album = build.album(filename=album_file, version="2.4.0", type=Album.Type.FLAC, lead_performer="Joel Miller", tracks=[original_track]) local_project.save_project(original_album, track_name=lambda current_track: current_track.track_title + ".mp3") os.remove(original_filename) track = local_project.load_project(album_file).tracks[0] assert_that(track.chain_of_title.contributors, has_author_composer("Joel Miller", joel_miller()), "The contributors") assert_that(track.chain_of_title.contributors, has_author_composer("John Roney", john_roney()), "The contributors") assert_that(track.chain_of_title.contributors, has_publisher("Effendi Records", effendi_records()), "The contributors")
def test_round_trips_album_metadata_and_tracks_to_disk(project_file, mp3): album_file = project_file("album.tgit") original_tracks = (build.track(mp3(), track_title=title) for title in ("1st", "2nd", "3rd")) original_album = build.album(filename=album_file, version="1.11.0", type=Album.Type.FLAC, lead_performer="Artist", images=[sample_front_cover], tracks=original_tracks) local_project.save_project(original_album, track_name=lambda track: track.track_title + ".mp3") delete_from_disk(*original_tracks) stored_album = local_project.load_project(album_file) assert_that(stored_album.type, equal_to(Album.Type.FLAC), "type") assert_that(stored_album.lead_performer, equal_to("Artist"), "lead performer") assert_that(stored_album.images, contains(Image(*sample_front_cover)), "images") assert_that(stored_album.tracks, contains(has_filename(project_file(TRACKS_FOLDER_NAME, "1st.mp3")), has_filename(project_file(TRACKS_FOLDER_NAME, "2nd.mp3")), has_filename(project_file(TRACKS_FOLDER_NAME, "3rd.mp3")), ), "tracks")
def test_updates_album_metadata(): album = build.album() director.update_album_from(album)(release_name="Title", compilation=False, lead_performer="Artist", guestPerformers=[("Guitar", "Guitarist")], label_name="Label", catalogNumber="XXX123456789", upc="123456789999", comments="Comments\n...", releaseTime="2009-01-01", recording_time="2008-09-15", recordingStudios="Studios", music_producer="Producer", mixer="Engineer", primary_style="Style") assert_that(album.release_name, equal_to("Title"), "release name") assert_that(album.compilation, is_(False), "compilation") assert_that(album.lead_performer, equal_to("Artist"), "lead performer") assert_that(album.guestPerformers, equal_to([("Guitar", "Guitarist")]), "guest performers") assert_that(album.label_name, equal_to("Label"), "label name") assert_that(album.catalogNumber, equal_to("XXX123456789"), "catalog number") assert_that(album.upc, equal_to("123456789999"), "upc") assert_that(album.comments, equal_to("Comments\n..."), "comments") assert_that(album.releaseTime, equal_to("2009-01-01"), "release time") assert_that(album.recording_time, equal_to("2008-09-15"), "recording time") assert_that(album.recordingStudios, equal_to("Studios"), "recording studios") assert_that(album.music_producer, equal_to("Producer"), "producer") assert_that(album.mixer, equal_to("Engineer"), "mixer") assert_that(album.primary_style, equal_to("Style"), "primary style")
def test_updates_album_main_artist_date_of_birth_when_album_is_a_compilation(): album = build.album() director.update_album_from(album)(compilation=True, lead_performer_date_of_birth="2009-05-06") assert_that(album.compilation, is_(True), "compilation") assert_that(album.lead_performer_date_of_birth, equal_to("2000-01-01"), "lead performer date of birth")
def test_shows_confirmation_when_close_project_keyboard_shortcut_is_activated(driver): window_ = show_main_window() window_.enable_project_actions(build.album()) driver.close_project(using_shortcut=True)
def test_clears_album_images(): album = build.album(images=[build.image("image/jpeg", "image data")]) director.remove_album_cover_from(album)() assert_that(album.images, equal_to([]), "images")
def test_actions_are_disabled_once_project_is_closed(driver): window_ = show_main_window() window_.enable_project_actions(build.album()) window_.disable_project_actions() driver.has_disabled_project_actions()
def test_writes_tracks_to_workbook(): album = build.album( release_name="Release Name", lead_performer="Lead Performer", lead_performer_region=("CA",), compilation=False, label_name="Label Name", catalog_number="Catalog Number", upc="Barcode", release_time="2014-05-10") album.add_track(build.track(track_title="Track Title", isrc="ISRC", duration=60, recording_studio_region=("CA",), production_company="Production Company", production_company_region=("US",), recording_time="2013-05-10")) album.add_track(build.track(track_title="Track Title1", isrc="ISRC1", duration=120, recording_studio_region=("CA",), production_company="Production Company", production_company_region=("US",), recording_time="2013-05-10")) workbook = Workbook() write(album, workbook) has_rights_holder(workbook.active, "Label Name", str(date.today())) has_line_metadata(workbook.active, A13="Release Name", B13="Lead Performer", C13="CAN", D13="Label Name", E13="Label Name", F13="", G13="Catalog Number", H13="Barcode", I13="2014-05-10", J13="", K13="N", L13="1", M13="Track Title", N13="Lead Performer", O13="CAN", P13="ISRC", Q13="00:01:00", R13="CAN", S13="2013", T13="Production Company", U13="USA", V13="RE/CP/Repro", W13="100", X13="WW", Y13="", Z13="", AA13="") has_line_metadata(workbook.active, A14="Release Name", B14="Lead Performer", C14="CAN", D14="Label Name", E14="Label Name", F14="", G14="Catalog Number", H14="Barcode", I14="2014-05-10", J14="", K14="N", L14="2", M14="Track Title1", N14="Lead Performer", O14="CAN", P14="ISRC1", Q14="00:02:00", R14="CAN", S14="2013", T14="Production Company", U14="USA", V14="RE/CP/Repro", W14="100", X14="WW", Y14="", Z14="", AA14="")