From 4ab2d815801a4b7c943abfb8bc75173d48bb690e Mon Sep 17 00:00:00 2001 From: harisreedhar Date: Tue, 17 Feb 2026 14:32:35 +0530 Subject: [PATCH] add test_api_capabilities.py --- facefusion/args_store.py | 2 +- facefusion/types.py | 2 +- tests/test_api_capabilities.py | 51 ++++++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 tests/test_api_capabilities.py diff --git a/facefusion/args_store.py b/facefusion/args_store.py index a5ac85f7..1af019cc 100644 --- a/facefusion/args_store.py +++ b/facefusion/args_store.py @@ -1,5 +1,5 @@ from argparse import Action -from typing import Dict, List +from typing import List from facefusion.types import Args, ArgsStore, ArgumentValue, Scope diff --git a/facefusion/types.py b/facefusion/types.py index 5eca4fa2..bfbf5eab 100755 --- a/facefusion/types.py +++ b/facefusion/types.py @@ -99,7 +99,7 @@ Resolution : TypeAlias = Tuple[int, int] Args : TypeAlias = Dict[str, Any] Scope : TypeAlias = Literal['api', 'cli', 'sys'] -ArgumentValue : TypeAlias = Any +ArgumentValue : TypeAlias = Dict[str, Any] ArgsStore = TypedDict('ArgsStore', { diff --git a/tests/test_api_capabilities.py b/tests/test_api_capabilities.py new file mode 100644 index 00000000..7d24d69c --- /dev/null +++ b/tests/test_api_capabilities.py @@ -0,0 +1,51 @@ +from argparse import ArgumentParser +from typing import Iterator + +import pytest +from starlette.testclient import TestClient + +from facefusion import args_store, session_manager +from facefusion.apis.core import create_api + + +@pytest.fixture(scope = 'module') +def test_client() -> Iterator[TestClient]: + program = ArgumentParser() + source_paths_action = program.add_argument('--source-paths', nargs = '+', default = None) + target_path_action = program.add_argument('--target-path', default = None) + output_format_action = program.add_argument('--output-format', default = 'mp4', choices = [ 'mp4', 'mkv', 'webm' ]) + args_store.register_argument(source_paths_action, scopes = [ 'api' ]) + args_store.register_argument(target_path_action, scopes = [ 'api' ]) + args_store.register_argument(output_format_action, scopes = [ 'api' ]) + + with TestClient(create_api()) as test_client: + yield test_client + + +@pytest.fixture(scope = 'function', autouse = True) +def before_each() -> None: + session_manager.SESSIONS.clear() + + +def test_get_capabilities(test_client : TestClient) -> None: + capabilities_response = test_client.get('/capabilities') + capabilities_body = capabilities_response.json() + + assert capabilities_response.status_code == 200 + + assert 'mp3' in capabilities_body.get('formats').get('audio') + assert 'wav' in capabilities_body.get('formats').get('audio') + assert 'flac' in capabilities_body.get('formats').get('audio') + + assert 'jpeg' in capabilities_body.get('formats').get('image') + assert 'png' in capabilities_body.get('formats').get('image') + assert 'webp' in capabilities_body.get('formats').get('image') + + assert 'mp4' in capabilities_body.get('formats').get('video') + assert 'mkv' in capabilities_body.get('formats').get('video') + assert 'webm' in capabilities_body.get('formats').get('video') + + assert capabilities_body.get('arguments').get('source_paths').get('default') is None + assert capabilities_body.get('arguments').get('target_path').get('default') is None + assert capabilities_body.get('arguments').get('output_format').get('default') == 'mp4' + assert capabilities_body.get('arguments').get('output_format').get('choices') == [ 'mp4', 'mkv', 'webm' ]