187 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			187 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Python
		
	
	
	
| from uuid import uuid4
 | |
| 
 | |
| import pytest
 | |
| from django.utils.timezone import now
 | |
| 
 | |
| # this test is commented since it's very slow, but it can be useful for future development
 | |
| # def test_pytest_plugin_initial(migrator):
 | |
| #     mapping_list = [
 | |
| #         ("audio/mpeg", "20", "low", 0, 1),
 | |
| #         ("audio/ogg", "180", "medium", 1, 2),
 | |
| #         ("audio/x-m4a", "280", "high", 2, 3),
 | |
| #         ("audio/opus", "130", "high", 2, 4),
 | |
| #         ("audio/opus", "513", "very-high", 3, 5),
 | |
| #         ("audio/aiff", "1312", "very-high", 3, 6),
 | |
| #         ("audio/mpeg", "320", "high", 2, 8),
 | |
| #         ("audio/mpeg", "200", "medium", 1, 9),
 | |
| #         ("audio/aiff", "1", "very-high", 3, 10),
 | |
| #         ("audio/flac", "1", "very-high", 3, 11),
 | |
| #     ]
 | |
| 
 | |
| #     a, f, t = ("music", "0057_auto_20221118_2108", "0058_upload_quality")
 | |
| 
 | |
| #     migrator.migrate([(a, f)])
 | |
| #     old_apps = migrator.loader.project_state([(a, f)]).apps
 | |
| #     Upload = old_apps.get_model(a, "Upload")
 | |
| #     for upload in mapping_list:
 | |
| #         Upload.objects.create(pk=upload[4], mimetype=upload[0], bitrate=upload[1])
 | |
| 
 | |
| #     migrator.loader.build_graph()
 | |
| #     migrator.migrate([(a, t)])
 | |
| #     new_apps = migrator.loader.project_state([(a, t)]).apps
 | |
| 
 | |
| #     upload_manager = new_apps.get_model(a, "Upload")
 | |
| 
 | |
| 
 | |
| #     for upload in mapping_list:
 | |
| #         upload_obj = upload_manager.objects.get(pk=upload[4])
 | |
| #         assert upload_obj.quality == upload[3]
 | |
| 
 | |
| 
 | |
| def test_artist_credit_migration(migrator):
 | |
|     mapping_list = [("artist_name", "album_title", "track_title")]
 | |
| 
 | |
|     a, f, t = (
 | |
|         "music",
 | |
|         "0058_upload_quality",
 | |
|         "0059_remove_album_artist_remove_track_artist_artistcredit_and_more",
 | |
|     )
 | |
| 
 | |
|     migrator.migrate([(a, f)])
 | |
|     old_apps = migrator.loader.project_state([(a, f)]).apps
 | |
|     Track = old_apps.get_model(a, "Track")
 | |
|     Album = old_apps.get_model(a, "Album")
 | |
|     Artist = old_apps.get_model(a, "Artist")
 | |
| 
 | |
|     for track in mapping_list:
 | |
|         artist = Artist.objects.create(name=track[0])
 | |
|         old_album = Album.objects.create(title=track[1], artist=artist)
 | |
|         old_track = Track.objects.create(title=track[2], artist=artist, album=old_album)
 | |
| 
 | |
|     migrator.loader.build_graph()
 | |
| 
 | |
|     migrator.migrate([(a, t)])
 | |
|     new_apps = migrator.loader.project_state([(a, t)]).apps
 | |
| 
 | |
|     track_manager = new_apps.get_model(a, "Track")
 | |
|     album_manager = new_apps.get_model(a, "Album")
 | |
| 
 | |
|     for track in mapping_list:
 | |
|         track_obj = track_manager.objects.get(title=track[2])
 | |
|         album_obj = album_manager.objects.get(title=track[1])
 | |
| 
 | |
|         assert track_obj.artist_credit.all()[0].artist.pk == old_track.artist.pk
 | |
|         assert track_obj.artist_credit.all()[0].joinphrase == ""
 | |
|         assert track_obj.artist_credit.all()[0].credit == old_track.artist.name
 | |
| 
 | |
|         assert album_obj.artist_credit.all()[0].artist.pk == old_album.artist.pk
 | |
|         assert album_obj.artist_credit.all()[0].joinphrase == ""
 | |
|         assert album_obj.artist_credit.all()[0].credit == old_album.artist.name
 | |
| 
 | |
| 
 | |
| @pytest.mark.django_db
 | |
| def test_migrate_libraries_to_playlist(migrator):
 | |
|     music_initial_migration = (
 | |
|         "music",
 | |
|         "0060_empty_for_test",
 | |
|     )
 | |
|     music_final_migration = ("music", "0061_migrate_libraries_to_playlist")
 | |
| 
 | |
|     # Apply migrations
 | |
|     migrator.migrate(
 | |
|         [
 | |
|             music_initial_migration,
 | |
|         ]
 | |
|     )
 | |
|     music_apps = migrator.loader.project_state([music_initial_migration]).apps
 | |
| 
 | |
|     Playlist = music_apps.get_model("playlists", "Playlist")
 | |
|     LibraryFollow = music_apps.get_model("federation", "LibraryFollow")
 | |
|     Actor = music_apps.get_model("federation", "Actor")
 | |
|     Domain = music_apps.get_model("federation", "Domain")
 | |
|     Track = music_apps.get_model("music", "Track")
 | |
|     Library = music_apps.get_model("music", "Library")
 | |
|     Upload = music_apps.get_model("music", "Upload")
 | |
| 
 | |
|     # Create data
 | |
|     domain = Domain.objects.create()
 | |
|     domain2 = Domain.objects.create(pk=2)
 | |
|     actor = Actor.objects.create(name="Test Actor", domain=domain)
 | |
|     existing_urls = Actor.objects.values_list("fid", flat=True)
 | |
|     print(existing_urls)
 | |
|     target_actor = Actor.objects.create(
 | |
|         name="Test Actor 2",
 | |
|         domain=domain2,
 | |
|         fid="http://test2.com/superduniquemanonmam",
 | |
|     )
 | |
| 
 | |
|     library = Library.objects.create(
 | |
|         name="This should becane playlist name",
 | |
|         actor=target_actor,
 | |
|         creation_date=now(),
 | |
|         privacy_level="everyone",
 | |
|         uuid=uuid4(),
 | |
|         description="This is a description",
 | |
|     )
 | |
| 
 | |
|     Track.objects.create()
 | |
|     Track.objects.create()
 | |
|     track = Track.objects.create()
 | |
|     track2 = Track.objects.create()
 | |
|     track3 = Track.objects.create()
 | |
| 
 | |
|     uploads = [
 | |
|         Upload.objects.create(library=library, track=track),
 | |
|         Upload.objects.create(library=library, track=track2),
 | |
|         Upload.objects.create(library=library, track=track3),
 | |
|     ]
 | |
| 
 | |
|     library_follow = LibraryFollow.objects.create(
 | |
|         uuid=uuid4(),
 | |
|         target=library,
 | |
|         actor=actor,
 | |
|         approved=True,
 | |
|         creation_date=now(),
 | |
|         modification_date=now(),
 | |
|     )
 | |
| 
 | |
|     # Perform migration
 | |
|     migrator.loader.build_graph()
 | |
|     migrator.migrate([music_final_migration])
 | |
| 
 | |
|     new_apps = migrator.loader.project_state([music_final_migration]).apps
 | |
|     Playlist = new_apps.get_model("playlists", "Playlist")
 | |
|     PlaylistTrack = new_apps.get_model("playlists", "PlaylistTrack")
 | |
|     Follow = new_apps.get_model("federation", "Follow")
 | |
|     LibraryFollow = new_apps.get_model("federation", "LibraryFollow")
 | |
|     Follow = new_apps.get_model("federation", "Follow")
 | |
| 
 | |
|     # Assertions
 | |
| 
 | |
|     # Verify Playlist creation
 | |
|     playlist = Playlist.objects.get(name="This should becane playlist name")
 | |
| 
 | |
|     assert playlist.actor.pk == library.actor.pk
 | |
|     assert playlist.creation_date == library.creation_date
 | |
|     assert playlist.privacy_level == library.privacy_level
 | |
|     assert playlist.description == library.description
 | |
| 
 | |
|     # Verify PlaylistTrack creation
 | |
|     playlist_tracks = PlaylistTrack.objects.filter(playlist=playlist).order_by("index")
 | |
|     assert playlist_tracks.count() == 3
 | |
|     for i, playlist_track in enumerate(playlist_tracks):
 | |
|         assert playlist_track.track.pk == uploads[i].track.pk
 | |
| 
 | |
|     # Verify User Follow creation
 | |
|     follow = Follow.objects.get(target__pk=target_actor.pk)
 | |
|     assert follow.actor.pk == actor.pk
 | |
|     assert follow.approved == library_follow.approved
 | |
| 
 | |
|     # Verify LibraryFollow deletion and library creation
 | |
|     assert LibraryFollow.objects.count() == 0
 | |
| 
 | |
|     # Test fail but works on real db I don't get why
 | |
|     # no library are found in the new app
 | |
|     # NewAppLibrary = new_apps.get_model("music", "Library")
 | |
|     # assert NewAppLibrary.objects.count() == 3
 |