106 lines
3.4 KiB
Python
106 lines
3.4 KiB
Python
import pytest
|
|
from django.conf import settings
|
|
from django.test.client import Client
|
|
|
|
from ucast.service import util
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"url_path,internal_path",
|
|
[
|
|
(
|
|
"audio/ThetaDev/20190602_ThetaDev_Embedded_World_2019.mp3",
|
|
"/internal_files/ThetaDev/20190602_ThetaDev_Embedded_World_2019.mp3",
|
|
),
|
|
(
|
|
"cover/ThetaDev/20190602_ThetaDev_Embedded_World_2019.png",
|
|
"/internal_files/ThetaDev/_ucast/covers/20190602_ThetaDev_Embedded_World_2019.png",
|
|
),
|
|
(
|
|
"thumbnail/ThetaDev/20190602_ThetaDev_Embedded_World_2019.webp",
|
|
"/internal_files/ThetaDev/_ucast/thumbnails/20190602_ThetaDev_Embedded_World_2019.webp",
|
|
),
|
|
(
|
|
"thumbnail/ThetaDev/20190602_ThetaDev_Embedded_World_2019.webp?sm",
|
|
"/internal_files/ThetaDev/_ucast/thumbnails/20190602_ThetaDev_Embedded_World_2019_sm.webp",
|
|
),
|
|
(
|
|
"avatar/ThetaDev.jpg",
|
|
"/internal_files/ThetaDev/_ucast/avatar.jpg",
|
|
),
|
|
(
|
|
"avatar/ThetaDev.webp?sm",
|
|
"/internal_files/ThetaDev/_ucast/avatar_sm.webp",
|
|
),
|
|
],
|
|
)
|
|
def test_files_internal_redirect(
|
|
url_path: str, internal_path: str, download_dir_content, feed_key, admin_client
|
|
):
|
|
settings.INTERNAL_REDIRECT_HEADER = "X-Accel-Redirect"
|
|
|
|
def check_response(resp):
|
|
assert resp.getvalue() == b""
|
|
assert resp.headers.get("X-Accel-Redirect") == internal_path
|
|
assert "Content-Type" not in resp.headers
|
|
|
|
# Access with key
|
|
client = Client()
|
|
url = util.add_key_to_url("/files/" + url_path, feed_key)
|
|
response = client.get(url)
|
|
check_response(response)
|
|
|
|
# Access with login
|
|
response = admin_client.get("/files/" + url_path)
|
|
check_response(response)
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"url_path,file_path",
|
|
[
|
|
(
|
|
"audio/ThetaDev/20190602_ThetaDev_Embedded_World_2019.mp3",
|
|
"ThetaDev/20190602_ThetaDev_Embedded_World_2019.mp3",
|
|
),
|
|
(
|
|
"cover/ThetaDev/20190602_ThetaDev_Embedded_World_2019.png",
|
|
"ThetaDev/_ucast/covers/20190602_ThetaDev_Embedded_World_2019.png",
|
|
),
|
|
(
|
|
"thumbnail/ThetaDev/20190602_ThetaDev_Embedded_World_2019.webp",
|
|
"ThetaDev/_ucast/thumbnails/20190602_ThetaDev_Embedded_World_2019.webp",
|
|
),
|
|
(
|
|
"thumbnail/ThetaDev/20190602_ThetaDev_Embedded_World_2019.webp?sm",
|
|
"ThetaDev/_ucast/thumbnails/20190602_ThetaDev_Embedded_World_2019_sm.webp",
|
|
),
|
|
(
|
|
"avatar/ThetaDev.jpg",
|
|
"ThetaDev/_ucast/avatar.jpg",
|
|
),
|
|
(
|
|
"avatar/ThetaDev.webp?sm",
|
|
"ThetaDev/_ucast/avatar_sm.webp",
|
|
),
|
|
],
|
|
)
|
|
def test_files_response(
|
|
url_path: str, file_path: str, download_dir_content, feed_key, admin_client
|
|
):
|
|
settings.INTERNAL_REDIRECT_HEADER = ""
|
|
|
|
response_file = settings.DOWNLOAD_ROOT / file_path
|
|
with open(response_file, "rb") as f:
|
|
file_bts = f.read()
|
|
|
|
# Access with key
|
|
client = Client()
|
|
url = util.add_key_to_url("/files/" + url_path, feed_key)
|
|
response = client.get(url)
|
|
response_bts = response.getvalue()
|
|
assert response_bts == file_bts
|
|
|
|
# Access with login
|
|
response = admin_client.get("/files/" + url_path)
|
|
response_bts = response.getvalue()
|
|
assert response_bts == file_bts
|