Skip to content

Commit

Permalink
Refactor file and rtsp component tests (#135)
Browse files Browse the repository at this point in the history
* Refactor file and rtsp component tests

* Remove component tests
  • Loading branch information
Karolk99 committed Dec 28, 2023
1 parent 7dac6c5 commit 966ac7d
Show file tree
Hide file tree
Showing 3 changed files with 103 additions and 202 deletions.
147 changes: 0 additions & 147 deletions test/jellyfish/component/file_test.exs

This file was deleted.

49 changes: 0 additions & 49 deletions test/jellyfish/component/rtsp_test.exs

This file was deleted.

109 changes: 103 additions & 6 deletions test/jellyfish_web/controllers/component/file_component_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@ defmodule JellyfishWeb.Component.FileComponentTest do
use JellyfishWeb.ComponentCase

@file_component_directory "file_component_sources"
@file_component_source "video.h264"
@video_source "video.h264"
@audio_source "audio.ogg"

setup _tags do
setup_all _tags do
media_sources_directory =
Application.fetch_env!(:jellyfish, :media_files_path)
|> Path.join(@file_component_directory)
Expand All @@ -14,18 +15,71 @@ defmodule JellyfishWeb.Component.FileComponentTest do
File.mkdir_p!(media_sources_directory)

media_sources_directory
|> Path.join(@file_component_source)
|> Path.join(@video_source)
|> File.touch!()

{:ok, %{}}
media_sources_directory
|> Path.join(@audio_source)
|> File.touch!()

on_exit(fn -> :file.del_dir_r(media_sources_directory) end)

{:ok, %{media_sources_directory: media_sources_directory}}
end

describe "Create File Component" do
test "renders component with required options", %{conn: conn, room_id: room_id} do
test "renders component with video as source", %{conn: conn, room_id: room_id} do
conn =
post(conn, ~p"/room/#{room_id}/component",
type: "file",
options: %{filePath: @video_source}
)

assert %{
"data" => %{
"id" => id,
"type" => "file",
"properties" => %{}
}
} =
model_response(conn, :created, "ComponentDetailsResponse")

assert_component_created(conn, room_id, id, "file")
end

test "renders component wiht audio as source", %{conn: conn, room_id: room_id} do
conn =
post(conn, ~p"/room/#{room_id}/component",
type: "file",
options: %{filePath: @audio_source}
)

assert %{
"data" => %{
"id" => id,
"type" => "file",
"properties" => %{}
}
} =
model_response(conn, :created, "ComponentDetailsResponse")

assert_component_created(conn, room_id, id, "file")
end

test "file in subdirectory", %{
conn: conn,
room_id: room_id,
media_sources_directory: media_sources_directory
} do
subdir_name = "subdirectory"
video_relative_path = Path.join(subdir_name, @video_source)
[media_sources_directory, subdir_name] |> Path.join() |> File.mkdir_p!()
media_sources_directory |> Path.join(video_relative_path) |> File.touch!()

conn =
post(conn, ~p"/room/#{room_id}/component",
type: "file",
options: %{filePath: @file_component_source}
options: %{filePath: video_relative_path}
)

assert %{
Expand Down Expand Up @@ -63,5 +117,48 @@ defmodule JellyfishWeb.Component.FileComponentTest do
assert model_response(conn, :not_found, "Error")["errors"] ==
"File not found"
end

test "renders error when file path is outside of media files directory", %{
conn: conn,
room_id: room_id
} do
filepath = "../restricted_audio.opus"

conn =
post(conn, ~p"/room/#{room_id}/component", type: "file", options: %{filePath: filepath})

assert model_response(conn, :bad_request, "Error")["errors"] ==
"Invalid file path"
end

test "renders error when file has no extension", %{
conn: conn,
room_id: room_id,
media_sources_directory: media_sources_directory
} do
filepath = "h264"
media_sources_directory |> Path.join(filepath) |> File.touch!()

conn =
post(conn, ~p"/room/#{room_id}/component", type: "file", options: %{filePath: filepath})

assert model_response(conn, :bad_request, "Error")["errors"] ==
"Unsupported file type"
end

test "renders error when file has invalid extension", %{
conn: conn,
room_id: room_id,
media_sources_directory: media_sources_directory
} do
filepath = "sounds.aac"
media_sources_directory |> Path.join(filepath) |> File.touch!()

conn =
post(conn, ~p"/room/#{room_id}/component", type: "file", options: %{filePath: filepath})

assert model_response(conn, :bad_request, "Error")["errors"] ==
"Unsupported file type"
end
end
end

0 comments on commit 966ac7d

Please sign in to comment.