Skip to content

Commit

Permalink
fix: handle missing file parameter in /api/loadfile
Browse files Browse the repository at this point in the history
This commit also introduces a test that calls post endpoints with wrong args.
  • Loading branch information
open-dynaMIX committed Jan 4, 2021
1 parent 411ca7b commit c7b897d
Show file tree
Hide file tree
Showing 3 changed files with 207 additions and 1 deletion.
152 changes: 152 additions & 0 deletions tests/snapshots/snap_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,158 @@

snapshots = Snapshot()

snapshots["TestsRequests.test_post_wrong_args[add-&-foo] 1"] = {
"message": "Parameter name contains invalid characters"
}

snapshots["TestsRequests.test_post_wrong_args[add-foo-&] 1"] = {
"message": "Parameter needs to be an integer or float"
}

snapshots["TestsRequests.test_post_wrong_args[add_audio_delay-&-None] 1"] = {
"message": "Parameter needs to be an integer or float"
}

snapshots["TestsRequests.test_post_wrong_args[add_chapter-&-None] 1"] = {
"message": "Parameter needs to be an integer or float"
}

snapshots["TestsRequests.test_post_wrong_args[add_sub_delay-&-None] 1"] = {
"message": "Parameter needs to be an integer or float"
}

snapshots["TestsRequests.test_post_wrong_args[add_volume-&-None] 1"] = {
"message": "Parameter needs to be an integer or float"
}

snapshots["TestsRequests.test_post_wrong_args[cycle-&-foo] 1"] = {
"message": "Parameter name contains invalid characters"
}

snapshots["TestsRequests.test_post_wrong_args[cycle-foo-&] 1"] = {
"message": 'Cycle paramater is not "up" or "down"'
}

snapshots["TestsRequests.test_post_wrong_args[loadfile-None-None] 1"] = {
"message": "No url provided!"
}

snapshots["TestsRequests.test_post_wrong_args[loadfile-http://foo-invalid] 1"] = {
"message": "Invalid mode: 'foo'"
}

snapshots["TestsRequests.test_post_wrong_args[loop_file-&-None] 1"] = {
"message": "Invalid parameter!"
}

snapshots["TestsRequests.test_post_wrong_args[loop_file-None-None] 1"] = {
"message": "Invalid parameter!"
}

snapshots["TestsRequests.test_post_wrong_args[loop_playlist-&-None] 1"] = {
"message": "Invalid parameter!"
}

snapshots["TestsRequests.test_post_wrong_args[multiply-&-23] 1"] = {
"message": "Parameter name contains invalid characters"
}

snapshots["TestsRequests.test_post_wrong_args[multiply-23-&] 1"] = {
"message": "Parameter needs to be an integer or float"
}

snapshots["TestsRequests.test_post_wrong_args[multiply-23-None] 1"] = {
"message": "Parameter needs to be an integer or float"
}

snapshots["TestsRequests.test_post_wrong_args[playlist_jump-&-None] 1"] = {
"message": "Parameter needs to be an integer or float"
}

snapshots["TestsRequests.test_post_wrong_args[playlist_jump-None-None] 1"] = {
"message": "Parameter needs to be an integer or float"
}

snapshots["TestsRequests.test_post_wrong_args[playlist_move-&-23] 1"] = {
"message": "Parameter needs to be an integer or float"
}

snapshots["TestsRequests.test_post_wrong_args[playlist_move-23-&] 1"] = {
"message": "Parameter needs to be an integer or float"
}

snapshots["TestsRequests.test_post_wrong_args[playlist_move-23-None] 1"] = {
"message": "Parameter needs to be an integer or float"
}

snapshots["TestsRequests.test_post_wrong_args[playlist_move_up-&-None] 1"] = {
"message": "Parameter needs to be an integer or float"
}

snapshots["TestsRequests.test_post_wrong_args[playlist_move_up-None-None] 1"] = {
"message": "Parameter needs to be an integer or float"
}

snapshots["TestsRequests.test_post_wrong_args[playlist_remove-&-None] 1"] = {
"message": "Parameter needs to be an integer or float"
}

snapshots["TestsRequests.test_post_wrong_args[playlist_remove-None-None] 1"] = {
"message": "Parameter needs to be an integer or float"
}

snapshots["TestsRequests.test_post_wrong_args[seek-None-None] 1"] = {
"message": "Parameter needs to be an integer or float"
}

snapshots["TestsRequests.test_post_wrong_args[seek-g-None] 1"] = {
"message": "Parameter needs to be an integer or float"
}

snapshots["TestsRequests.test_post_wrong_args[set-&-foo] 1"] = {
"message": "Parameter name contains invalid characters"
}

snapshots["TestsRequests.test_post_wrong_args[set-foo- ] 1"] = {
"message": "Parameter value contains invalid characters"
}

snapshots["TestsRequests.test_post_wrong_args[set_audio_delay-&-None] 1"] = {
"message": "Parameter needs to be an integer or float"
}

snapshots["TestsRequests.test_post_wrong_args[set_position-&-None] 1"] = {
"message": "Parameter needs to be an integer or float"
}

snapshots["TestsRequests.test_post_wrong_args[set_position-None-None] 1"] = {
"message": "Parameter needs to be an integer or float"
}

snapshots["TestsRequests.test_post_wrong_args[set_sub_delay-&-None] 1"] = {
"message": "Parameter needs to be an integer or float"
}

snapshots["TestsRequests.test_post_wrong_args[set_volume-&-None] 1"] = {
"message": "Parameter needs to be an integer or float"
}

snapshots["TestsRequests.test_post_wrong_args[speed_adjust-&-None] 1"] = {
"message": "Parameter needs to be an integer or float"
}

snapshots["TestsRequests.test_post_wrong_args[speed_set-&-None] 1"] = {
"message": "Parameter needs to be an integer or float"
}

snapshots["TestsRequests.test_post_wrong_args[toggle-&-None] 1"] = {
"message": "Parameter name contains invalid characters"
}

snapshots["TestsRequests.test_post_wrong_args[toggle-None-None] 1"] = {
"message": "Parameter name contains invalid characters"
}

snapshots["test_status 1"] = {
"audio-delay": 0,
"audio-devices": [
Expand Down
54 changes: 54 additions & 0 deletions tests/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,60 @@ def test_post(mpv_instance, endpoint, arg, key, value, invert_actual):

assert send(endpoint, arg=arg, status=key) == value

@staticmethod
@pytest.mark.parametrize(
"endpoint,arg,arg2",
[
("seek", "g", None),
("seek", None, None),
("add", "&", "foo"),
("add", "foo", "&"),
("cycle", "&", "foo"),
("cycle", "foo", "&"),
("multiply", "&", "23"),
("multiply", "23", "&"),
("multiply", "23", None),
("set", "&", "foo"),
("set", "foo", " "),
("toggle", "&", None),
("toggle", None, None),
("set_position", "&", None),
("set_position", None, None),
("playlist_jump", "&", None),
("playlist_jump", None, None),
("playlist_remove", "&", None),
("playlist_remove", None, None),
("playlist_move", "&", "23"),
("playlist_move", "23", "&"),
("playlist_move", "23", None),
("playlist_move_up", "&", None),
("playlist_move_up", None, None),
("loop_file", "&", None),
("loop_file", None, None),
("loop_playlist", "&", None),
("add_volume", "&", None),
("set_volume", "&", None),
("add_sub_delay", "&", None),
("set_sub_delay", "&", None),
("add_audio_delay", "&", None),
("set_audio_delay", "&", None),
("speed_set", "&", None),
("speed_adjust", "&", None),
("add_chapter", "&", None),
("loadfile", None, None),
("loadfile", "http://foo", "invalid"),
],
)
def test_post_wrong_args(mpv_instance, snapshot, endpoint, arg, arg2):
send(endpoint, arg=arg, arg2=arg2, expect=400)
api = f"api/{endpoint}"
for a in [arg, arg2]:
if a is not None:
api += f"/{a}"
response = requests.post(get_uri(api))
assert response.status_code == 400
snapshot.assert_match(response.json())

@staticmethod
@pytest.mark.parametrize(
"endpoint,arg,position",
Expand Down
2 changes: 1 addition & 1 deletion webui.lua
Original file line number Diff line number Diff line change
Expand Up @@ -389,7 +389,7 @@ local commands = {
end,

loadfile = function(uri, mode)
if uri == nil or type(uri) ~= "string" then
if uri == "" or type(uri) ~= "string" then
return true, false, "No url provided!"
end
if mode ~= nil and
Expand Down

0 comments on commit c7b897d

Please sign in to comment.