277 lines
11 KiB
Python
277 lines
11 KiB
Python
import json
|
|
|
|
import pytest
|
|
from django.core.files.uploadedfile import SimpleUploadedFile
|
|
from django.urls import reverse
|
|
from rest_framework import status
|
|
from rest_framework.test import APIClient
|
|
|
|
from openslides.mediafiles.models import Mediafile
|
|
from openslides.utils.test import TestCase
|
|
|
|
from ..helpers import count_queries
|
|
|
|
|
|
@pytest.mark.django_db(transaction=False)
|
|
def test_mediafiles_db_queries():
|
|
"""
|
|
Tests that only the following db queries are done:
|
|
* 1 requests to get the list of all files
|
|
* 1 request to get all lists of speakers.
|
|
* 1 request to get all groups
|
|
* 1 request to prefetch parents
|
|
"""
|
|
for index in range(10):
|
|
Mediafile.objects.create(
|
|
title=f"some_file{index}",
|
|
original_filename=f"some_file{index}",
|
|
mediafile=SimpleUploadedFile(f"some_file{index}", b"some content."),
|
|
)
|
|
|
|
assert count_queries(Mediafile.get_elements) == 4
|
|
|
|
|
|
class TestCreation(TestCase):
|
|
def setUp(self):
|
|
self.client = APIClient()
|
|
self.client.login(username="admin", password="admin")
|
|
self.file = SimpleUploadedFile("some_file.ext", b"some content.")
|
|
|
|
def test_simple_file(self):
|
|
response = self.client.post(
|
|
reverse("mediafile-list"),
|
|
{"title": "test_title_ahyo1uifoo9Aiph2av5a", "mediafile": self.file},
|
|
)
|
|
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
|
|
mediafile = Mediafile.objects.get()
|
|
self.assertEqual(mediafile.title, "test_title_ahyo1uifoo9Aiph2av5a")
|
|
self.assertFalse(mediafile.is_directory)
|
|
self.assertTrue(mediafile.mediafile.name)
|
|
self.assertEqual(mediafile.path, mediafile.original_filename)
|
|
|
|
def test_simple_directory(self):
|
|
response = self.client.post(
|
|
reverse("mediafile-list"),
|
|
{"title": "test_title_ahyo1uifoo9Aiph2av5a", "is_directory": True},
|
|
)
|
|
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
|
|
mediafile = Mediafile.objects.get()
|
|
self.assertEqual(mediafile.title, "test_title_ahyo1uifoo9Aiph2av5a")
|
|
self.assertTrue(mediafile.is_directory)
|
|
self.assertEqual(mediafile.mediafile.name, "")
|
|
self.assertEqual(mediafile.original_filename, "")
|
|
self.assertEqual(mediafile.path, mediafile.title + "/")
|
|
|
|
def test_file_and_directory(self):
|
|
response = self.client.post(
|
|
reverse("mediafile-list"),
|
|
{
|
|
"title": "test_title_ahyo1uifoo9Aiph2av5a",
|
|
"is_directory": True,
|
|
"mediafile": self.file,
|
|
},
|
|
)
|
|
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
|
self.assertFalse(Mediafile.objects.exists())
|
|
|
|
def test_no_extension(self):
|
|
file = SimpleUploadedFile("no_extension", b"some content.")
|
|
response = self.client.post(
|
|
reverse("mediafile-list"),
|
|
{"title": "test_title_vai8oDogohheideedie4", "mediafile": file},
|
|
)
|
|
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
|
|
mediafile = Mediafile.objects.get()
|
|
self.assertEqual(mediafile.title, "test_title_vai8oDogohheideedie4")
|
|
|
|
def test_mediafile_twice_different_title(self):
|
|
file1 = SimpleUploadedFile("file.ext", b"some content.")
|
|
file2 = SimpleUploadedFile("file.ext", b"some content.")
|
|
response = self.client.post(
|
|
reverse("mediafile-list"),
|
|
{"title": "test_title_Zeicheipeequie3ohfid", "mediafile": file1},
|
|
)
|
|
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
|
|
mediafile = Mediafile.objects.get()
|
|
self.assertEqual(mediafile.title, "test_title_Zeicheipeequie3ohfid")
|
|
|
|
response = self.client.post(
|
|
reverse("mediafile-list"),
|
|
{"title": "test_title_aiChaetohs0quicee9eb", "mediafile": file2},
|
|
)
|
|
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
|
self.assertEqual(Mediafile.objects.count(), 1)
|
|
|
|
def test_directory_twice(self):
|
|
title = "test_title_kFJq83fjmqo2babfqk3f"
|
|
Mediafile.objects.create(is_directory=True, title=title)
|
|
response = self.client.post(
|
|
reverse("mediafile-list"), {"title": title, "is_directory": True}
|
|
)
|
|
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
|
self.assertEqual(Mediafile.objects.count(), 1)
|
|
|
|
def test_without_mediafile(self):
|
|
response = self.client.post(reverse("mediafile-list"), {})
|
|
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
|
self.assertFalse(Mediafile.objects.exists())
|
|
|
|
def test_without_title(self):
|
|
response = self.client.post(reverse("mediafile-list"), {"is_directory": True})
|
|
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
|
self.assertFalse(Mediafile.objects.exists())
|
|
|
|
def test_with_empty_title(self):
|
|
response = self.client.post(
|
|
reverse("mediafile-list"), {"is_directory": True, "title": ""}
|
|
)
|
|
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
|
self.assertFalse(Mediafile.objects.exists())
|
|
|
|
def test_directory_with_slash(self):
|
|
response = self.client.post(
|
|
reverse("mediafile-list"),
|
|
{"title": "test_title_with_/", "is_directory": True},
|
|
)
|
|
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
|
self.assertFalse(Mediafile.objects.exists())
|
|
|
|
def test_with_parent(self):
|
|
parent_title = "test_title_3q0cqghZRFewocjwferT"
|
|
title = "test_title_gF3if8jmvrbnwdksg4je"
|
|
Mediafile.objects.create(is_directory=True, title=parent_title)
|
|
response = self.client.post(
|
|
reverse("mediafile-list"),
|
|
{"title": title, "is_directory": True, "parent_id": 1},
|
|
)
|
|
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
|
|
self.assertEqual(Mediafile.objects.count(), 2)
|
|
mediafile = Mediafile.objects.get(title="test_title_gF3if8jmvrbnwdksg4je")
|
|
self.assertEqual(mediafile.parent.title, "test_title_3q0cqghZRFewocjwferT")
|
|
self.assertEqual(mediafile.path, parent_title + "/" + title + "/")
|
|
|
|
def test_with_file_as_parent(self):
|
|
Mediafile.objects.create(
|
|
title="test_title_qejOVM84gw8ghwpKnqeg", mediafile=self.file
|
|
)
|
|
response = self.client.post(
|
|
reverse("mediafile-list"),
|
|
{
|
|
"title": "test_title_poejvvlmmorsgeroemr9",
|
|
"is_directory": True,
|
|
"parent_id": 1,
|
|
},
|
|
)
|
|
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
|
self.assertEqual(Mediafile.objects.count(), 1)
|
|
|
|
def test_with_access_groups(self):
|
|
response = self.client.post(
|
|
reverse("mediafile-list"),
|
|
{
|
|
"title": "test_title_dggjwevBnUngelkdviom",
|
|
"mediafile": self.file,
|
|
"access_groups_id": json.dumps([2, 4]),
|
|
},
|
|
)
|
|
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
|
|
self.assertTrue(Mediafile.objects.exists())
|
|
mediafile = Mediafile.objects.get()
|
|
self.assertEqual(
|
|
sorted([group.id for group in mediafile.access_groups.all()]), [2, 4]
|
|
)
|
|
self.assertTrue(mediafile.mediafile.name)
|
|
self.assertEqual(mediafile.path, mediafile.original_filename)
|
|
|
|
def test_with_access_groups_wrong_json(self):
|
|
response = self.client.post(
|
|
reverse("mediafile-list"),
|
|
{
|
|
"title": "test_title_dggjwevBnUngelkdviom",
|
|
"is_directory": True,
|
|
"access_groups_id": json.dumps({"a": 324}),
|
|
},
|
|
)
|
|
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
|
self.assertFalse(Mediafile.objects.exists())
|
|
|
|
def test_with_access_groups_wrong_json2(self):
|
|
response = self.client.post(
|
|
reverse("mediafile-list"),
|
|
{
|
|
"title": "test_title_dggjwevBnUngelkdviom",
|
|
"is_directory": True,
|
|
"access_groups_id": "_FWEpwwfkwk",
|
|
},
|
|
)
|
|
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
|
self.assertFalse(Mediafile.objects.exists())
|
|
|
|
|
|
# TODO: List and retrieve
|
|
|
|
|
|
class TestUpdate(TestCase):
|
|
"""
|
|
Tree:
|
|
-dir
|
|
-mediafileA
|
|
-mediafileB
|
|
"""
|
|
|
|
def setUp(self):
|
|
self.client = APIClient()
|
|
self.client.login(username="admin", password="admin")
|
|
self.dir = Mediafile.objects.create(title="dir", is_directory=True)
|
|
fileA_name = "some_fileA.ext"
|
|
self.fileA = SimpleUploadedFile(fileA_name, b"some content.")
|
|
self.mediafileA = Mediafile.objects.create(
|
|
title="mediafileA",
|
|
original_filename=fileA_name,
|
|
mediafile=self.fileA,
|
|
parent=self.dir,
|
|
)
|
|
fileB_name = "some_fileB.ext"
|
|
self.fileB = SimpleUploadedFile(fileB_name, b"some content.")
|
|
self.mediafileB = Mediafile.objects.create(
|
|
title="mediafileB", original_filename=fileB_name, mediafile=self.fileB
|
|
)
|
|
|
|
def test_update(self):
|
|
response = self.client.put(
|
|
reverse("mediafile-detail", args=[self.mediafileA.pk]),
|
|
{"title": "test_title_gpasgrmg*miGUM)EAyGO", "access_groups_id": [2, 4]},
|
|
)
|
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
mediafile = Mediafile.objects.get(pk=self.mediafileA.pk)
|
|
self.assertEqual(mediafile.title, "test_title_gpasgrmg*miGUM)EAyGO")
|
|
self.assertEqual(mediafile.path, "dir/some_fileA.ext")
|
|
self.assertEqual(
|
|
sorted([group.id for group in mediafile.access_groups.all()]), [2, 4]
|
|
)
|
|
|
|
def test_update_directory(self):
|
|
response = self.client.put(
|
|
reverse("mediafile-detail", args=[self.dir.pk]),
|
|
{"title": "test_title_seklMOIGGihdjJBNaflkklnlg"},
|
|
)
|
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
dir = Mediafile.objects.get(pk=self.dir.pk)
|
|
self.assertEqual(dir.title, "test_title_seklMOIGGihdjJBNaflkklnlg")
|
|
mediafile = Mediafile.objects.get(pk=self.mediafileA.pk)
|
|
self.assertEqual(
|
|
mediafile.path, "test_title_seklMOIGGihdjJBNaflkklnlg/some_fileA.ext"
|
|
)
|
|
|
|
def test_update_parent_id(self):
|
|
""" Assert, that the parent id does not change """
|
|
response = self.client.put(
|
|
reverse("mediafile-detail", args=[self.mediafileA.pk]),
|
|
{"title": self.mediafileA.title, "parent_id": None},
|
|
format="json",
|
|
)
|
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
mediafile = Mediafile.objects.get(pk=self.mediafileA.pk)
|
|
self.assertTrue(mediafile.parent)
|
|
self.assertEqual(mediafile.parent.pk, self.dir.pk)
|