diff --git a/tests/test.mp4 b/tests/test.mp4 new file mode 100644 index 0000000..995e692 Binary files /dev/null and b/tests/test.mp4 differ diff --git a/tests/test_discord_embed.py b/tests/test_discord_embed.py index 18adc93..9d6273a 100644 --- a/tests/test_discord_embed.py +++ b/tests/test_discord_embed.py @@ -1,4 +1,15 @@ +import imghdr +import os + from discord_embed import __version__, settings +from discord_embed.generate_html import generate_html_for_videos +from discord_embed.main import app +from discord_embed.video import make_thumbnail, video_resolution +from discord_embed.webhook import send_webhook +from fastapi.testclient import TestClient + +client = TestClient(app) +TEST_FILE = "tests/test.mp4" def test_version(): @@ -8,4 +19,108 @@ def test_version(): def test_domain_ends_with_slash(): """Test that domain ends with slash.""" - assert not settings.domain.endswith("/") + assert not settings.serve_domain.endswith("/") + + +def test_generate_html_for_videos(): + """Test that generate_html_for_videos() works.""" + # TODO: We should probably import this from settings.py instead of + # hardcoding it here. If we change it in settings.py, it won't be + # changed here. + + domain = os.environ["SERVE_DOMAIN"] + + # Remove trailing slash from domain + if domain.endswith("/"): + domain = domain[:-1] + + generated_html = generate_html_for_videos( + url="https://www.youtube.com/watch?v=dQw4w9WgXcQ", + width=1920, + height=1080, + screenshot="https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg", + filename="test_video.mp4", + ) + assert generated_html == f"{domain}/test_video.mp4" + + +def test_video_resolution(): + """Test that video_resolution() works.""" + assert video_resolution(TEST_FILE) == (422, 422) + + +def test_make_thumbnail(): + """Test that make_thumbnail() works.""" + # TODO: We should probably import this from settings.py instead of + # hardcoding it here. If we change it in settings.py, it won't be + # changed here. + + domain = os.environ["SERVE_DOMAIN"] + + # Remove trailing slash from domain + if domain.endswith("/"): + domain = domain[:-1] + + thumbnail = make_thumbnail(TEST_FILE, "test.mp4") + # Check that thumbnail is a jpeg. + assert imghdr.what(f"{settings.upload_folder}/test.mp4.jpg") == "jpeg" + + # Check that the it returns the correct URL. + assert thumbnail == f"{domain}/test.mp4.jpg" + + +def test_save_to_disk(): + """Test that save_to_disk() works.""" + # TODO: Implement this test. I need to mock the UploadFile object. + + +def test_do_things(): + """Test that do_things() works.""" + # TODO: Implement this test. I need to mock the UploadFile object. + + +def test_send_webhook(): + """Test that send_webhook() works.""" + send_webhook("Running Pytest") + + +def test_main(): + """Test that main() works.""" + data_without_trailing_nl = "" + response = client.get("/") + + # Check if response is our HTML. + with open("templates/index.html", encoding="utf8") as our_html: + data = our_html.read() + + # index.html has a trailing newline that we need to remove. + if data[-1:] == "\n": + data_without_trailing_nl = data[:-1] + + assert response.status_code == 200 + assert response.text == data_without_trailing_nl + + +def test_upload_file(): + """Test if we can upload files.""" + # TODO: We should probably import this from settings.py instead of + # hardcoding it here. If we change it in settings.py, it won't be + # changed here. + + domain = os.environ["SERVE_DOMAIN"] + + # Remove trailing slash from domain + if domain.endswith("/"): + domain = domain[:-1] + + # Upload our video file and check if it returns the html_url. + with open(TEST_FILE, "rb") as uploaded_file: + response = client.post( + url="/uploadfiles/", + files={"file": uploaded_file}, + ) + returned_json = response.json() + html_url = returned_json["html_url"] + + assert response.status_code == 200 + assert html_url == f"{domain}/test.mp4"