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_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_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_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_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_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_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_displays_album_summary_in_banner(driver): track = make_track() album = make_album(release_name="Album Title", lead_performer="Artist", label_name="Record Label", tracks=[build.track(), track, build.track()]) _ = show_page(album, track) driver.shows_album_title("Album Title") driver.shows_album_lead_performer("Artist") driver.shows_track_number("2")
def test_updates_track_menu_item_when_tracks_change_order(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.move_track(1, 0) driver.shows_track_menu_item(title="Zumbar", track_number=1) driver.shows_track_menu_item(title="Chevere!", track_number=2)
def test_updates_track_menu_item_when_tracks_change_order(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.move_track(1, 0) driver.shows_track_menu_item(title="Zumbar", track_number=1) driver.shows_track_menu_item(title="Chevere!", track_number=2)
def test_holds_a_list_of_tracks_in_order(): album = Album() album.add_track(build.track(track_title="Track 1")) album.add_track(build.track(track_title="Track 2")) album.add_track(build.track(track_title="Track 3")) assert_that( album.tracks, contains(has_property("track_title", "Track 1"), has_property("track_title", "Track 2"), has_property("track_title", "Track 3")), "track titles")
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_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_writes_one_record_per_track_in_album(formatter, out): project = make_album(tracks=[build.track(track_title="Song 1"), build.track(track_title="Song 2"), build.track(track_title="Song 3")]) formatter.write(project, out) rows = read_csv(out) _ = next(rows) assert_that(next(rows), has_item("Song 1"), "first row") assert_that(next(rows), has_item("Song 2"), "second row") assert_that(next(rows), has_item("Song 3"), "third row")
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_displays_album_summary_in_banner(driver): track = make_track() album = make_album(release_name="Album Title", lead_performer="Artist", label_name="Record Label", tracks=[build.track(), track, build.track()]) _ = show_page(album, track) driver.shows_album_title("Album Title") driver.shows_album_lead_performer("Artist") driver.shows_track_number("2")
def test_writes_one_record_per_track_in_album(formatter, out): project = make_album(tracks=[ build.track(track_title="Song 1"), build.track(track_title="Song 2"), build.track(track_title="Song 3") ]) formatter.write(project, out) rows = read_csv(out) _ = next(rows) assert_that(next(rows), has_item("Song 1"), "first row") assert_that(next(rows), has_item("Song 2"), "second row") assert_that(next(rows), has_item("Song 3"), "third row")
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_supports_inserting_tracks_at_a_specific_positions(): album = build.album(tracks=[ build.track(track_title="Track 1"), build.track(track_title="Track 2"), build.track(track_title="Track 3") ]) first = album.remove_track(0) album.insert_track(first, 1) assert_that( album.tracks, contains(has_property("track_title", "Track 2"), has_property("track_title", "Track 1"), has_property("track_title", "Track 3")), "tracks")
def test_signals_track_removal_events(): tracks = [build.track(), build.track(), build.track()] album = build.album() for track in tracks: album.add_track(track) subscriber = Subscriber() album.track_removed.subscribe(subscriber) for index in reversed(range(len(album))): album.remove_track(index) for index, track in enumerate(tracks): assert_that(subscriber.events, has_item(contains(index, track)), "track {0} removal event".format(index))
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_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_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_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_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_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 _assert_notifies_of_metadata_change(prop, value): track = build.track() subscriber = Subscriber() track.metadata_changed.subscribe(subscriber) setattr(track, prop, value) assert_that(subscriber.events, contains(contains(has_property(prop, value))), "track changed events")
def test_make_line_breaks_excel_friendly_by_converting_line_feeds_to_carriage_returns(formatter, out): project = make_album(tracks=[build.track(comments="Comments\nspanning\nseveral lines")]) formatter.write(project, out) csv_file = read_csv(out) _ = next(csv_file) assert_that(next(csv_file), has_item("Comments\rspanning\rseveral lines"), "row with line feeds")
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_names_track_file_with_lead_performer_and_track_number_and_track_title( ): track = build.track(filename="track.mp3", track_title="title", lead_performer="artist", track_number=3) assert_that(naming.track_scheme(track), equal_to("artist - 03 - title.mp3"), "name of track file")
def _assert_notifies_of_metadata_change(prop, value): track = build.track() subscriber = Subscriber() track.metadata_changed.subscribe(subscriber) setattr(track, prop, value) assert_that(subscriber.events, contains(contains(has_property(prop, value))), "track changed events")
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_make_line_breaks_excel_friendly_by_converting_line_feeds_to_carriage_returns( formatter, out): project = make_album( tracks=[build.track(comments="Comments\nspanning\nseveral lines")]) formatter.write(project, out) csv_file = read_csv(out) _ = next(csv_file) assert_that(next(csv_file), has_item("Comments\rspanning\rseveral lines"), "row with line feeds")
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_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_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_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_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_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_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="")
def test_names_track_file_with_lead_performer_and_track_number_and_track_title(): track = build.track(filename="track.mp3", track_title="title", lead_performer="artist", track_number=3) assert_that(naming.track_scheme(track), equal_to("artist - 03 - title.mp3"), "name of track file")
def test_numbers_tracks(): album = make_album(tracks=(build.track(), build.track(), build.track())) assert_has_numbered_tracks(album)
def test_renumbers_tracks_when_removed(): album = make_album(tracks=(build.track(), build.track(), build.track())) album.remove_track(0) assert_has_numbered_tracks(album)
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_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="")