sound stuff
This commit is contained in:
parent
309c47e0a7
commit
ae03b61dca
22 changed files with 487 additions and 105 deletions
|
|
@ -34,7 +34,7 @@ from django.core.management import call_command
|
|||
from django.test import TestCase, override_settings
|
||||
|
||||
from clips import blobs, extraction
|
||||
from clips.models import Analysis, Block, Blob, Clip, Footage, Leaf, Project, Revision, Source
|
||||
from clips.models import Analysis, Block, Blob, Clip, Footage, Leaf, Project, Revision, Sound, Source
|
||||
|
||||
BLOB_DIR = tempfile.mkdtemp(prefix="arthur-test-blobs-")
|
||||
|
||||
|
|
@ -721,6 +721,36 @@ class UploadTests(TestCase):
|
|||
self.assertEqual(27, job.progress)
|
||||
job.save.assert_called_once_with(update_fields=["progress", "updated"])
|
||||
|
||||
def test_an_uploaded_mp3_is_a_sound_and_not_footage(self):
|
||||
with tempfile.TemporaryDirectory() as directory:
|
||||
path = Path(directory) / "tone.mp3"
|
||||
subprocess.run([
|
||||
"ffmpeg", "-hide_banner", "-loglevel", "error", "-y",
|
||||
"-f", "lavfi", "-i", "sine=frequency=440:duration=1.5", str(path),
|
||||
], check=True, capture_output=True)
|
||||
payload = path.read_bytes()
|
||||
|
||||
uploaded = self.client.post("/api/sounds", {
|
||||
"file": SimpleUploadedFile("tone.mp3", payload, content_type="audio/mpeg")})
|
||||
self.assertEqual(201, uploaded.status_code, uploaded.content)
|
||||
sound = uploaded.json()
|
||||
self.assertEqual("tone.mp3", sound["label"])
|
||||
self.assertAlmostEqual(1.5, sound["duration"], delta=0.1)
|
||||
self.assertEqual(payload, b"".join(self.client.get(sound["audio"]).streaming_content))
|
||||
self.assertEqual(sound, self.client.get(f"/api/sounds/{sound['id']}").json())
|
||||
self.assertEqual([sound], self.client.get("/api/sounds").json()["sounds"])
|
||||
self.assertEqual(0, Source.objects.count())
|
||||
|
||||
again = self.client.post("/api/sounds", {
|
||||
"file": SimpleUploadedFile("again.mp3", payload, content_type="audio/mpeg")})
|
||||
self.assertEqual(200, again.status_code)
|
||||
self.assertEqual(1, Sound.objects.count())
|
||||
|
||||
def test_a_file_without_audio_is_not_a_sound(self):
|
||||
refused = self.client.post("/api/sounds", {
|
||||
"file": SimpleUploadedFile("notes.txt", b"not audio", content_type="text/plain")})
|
||||
self.assertEqual(400, refused.status_code)
|
||||
|
||||
def test_uploaded_video_extracts_to_reopenable_footage(self):
|
||||
with tempfile.TemporaryDirectory() as directory:
|
||||
path = Path(directory) / "four-frames.mp4"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue