TEST_DATA = Path(__file__).parent / "data"
+def _create_fake_mp3_and_return(returncode):
+ def _create_fake_mp3(*args, **kwargs):
+ subprocess_args = args[0]
+ if subprocess_args[0] == "ffmpeg":
+ # Create "fake" mp3 file by just copying input file
+ output_filename = subprocess_args[-1]
+ input_filename = subprocess_args[-2]
+ with open(input_filename, "rb") as infile, open(output_filename, "wb") as outfile:
+ outfile.write(infile.read())
+
+ return subprocess.CompletedProcess([], returncode=returncode, stdout=b"")
+ return _create_fake_mp3
+
# Upload Song ##################################################################
def test_upload_song_success(client):
create_user(client, "user", "password", login=True)
upload_song(client, b"not a valid collaborator name", error=True, collabs="a"*32)
-def test_upload_song_invalid_audio(client):
+@mock.patch("subprocess.run")
+def test_upload_song_invalid_audio(mock_run, client):
+ mock_run.side_effect = _create_fake_mp3_and_return(1)
create_user(client, "user", "password", login=True)
# Use this script file as the "audio" file
upload_song(client, b"Invalid audio file", error=True, filename=__file__)
-def _create_fake_mp3(*args, **kwargs):
- subprocess_args = args[0]
- if subprocess_args[0] == "ffmpeg":
- # Create "fake" mp3 file by just copying input file
- output_filename = subprocess_args[-1]
- input_filename = subprocess_args[-2]
- with open(input_filename, "rb") as infile, open(output_filename, "wb") as outfile:
- outfile.write(infile.read())
-
- return subprocess.CompletedProcess([], returncode=0, stdout=b"")
-
@mock.patch("subprocess.run")
-def test_upload_song_from_mp4(fake_run, client):
- fake_run.side_effect = _create_fake_mp3
+def test_upload_song_from_mp4(mock_run, client):
+ mock_run.side_effect = _create_fake_mp3_and_return(0)
create_user(client, "user", "password", login=True)
upload_song(client, b"Successfully uploaded 'song title'", filename=TEST_DATA/"sample-4s.mp4")
create_user_and_song(client)
upload_song(client, b"not a valid collaborator name", error=True, songid=1, collabs="a"*32)
-def test_update_song_invalid_mp3(client):
+@mock.patch("subprocess.run")
+def test_update_song_invalid_audio(mock_run, client):
+ mock_run.side_effect = _create_fake_mp3_and_return(0)
create_user_and_song(client)
+ mock_run.side_effect = _create_fake_mp3_and_return(1)
upload_song(client, b"Invalid audio file", error=True, songid=1, filename=__file__)
def test_update_song_invalid_song(client):