diff --git a/tests/test_models.py b/tests/test_models.py new file mode 100644 index 0000000..890cb44 --- /dev/null +++ b/tests/test_models.py @@ -0,0 +1,71 @@ +import pytest +from src.http_convert.models import HTTPRequest, HttpMethod, OutputFormat, InputFormat + + +class TestHTTPRequest: + def test_default_values(self): + request = HTTPRequest(url="https://example.com") + assert request.method == HttpMethod.GET + assert request.url == "https://example.com" + assert request.headers == {} + assert request.params == {} + assert request.body is None + + def test_custom_values(self): + request = HTTPRequest( + method=HttpMethod.POST, + url="https://api.example.com/users", + headers={"Content-Type": "application/json"}, + params={"page": "1"}, + body='{"name": "test"}' + ) + assert request.method == HttpMethod.POST + assert request.url == "https://api.example.com/users" + assert request.headers["Content-Type"] == "application/json" + assert request.params["page"] == "1" + assert request.body == '{"name": "test"}' + + def test_get_final_url_no_params(self): + request = HTTPRequest(url="https://example.com/users") + assert request.get_final_url() == "https://example.com/users" + + def test_get_final_url_with_params(self): + request = HTTPRequest( + url="https://example.com/users", + params={"page": "1", "limit": "10"} + ) + result = request.get_final_url() + assert "https://example.com/users?page=1&limit=10" == result or \ + "https://example.com/users?limit=10&page=1" == result + + def test_get_final_url_with_existing_query(self): + request = HTTPRequest( + url="https://example.com/users?active=true", + params={"page": "1"} + ) + result = request.get_final_url() + assert "page=1" in result + assert "active=true" in result + + +class TestHttpMethod: + def test_all_methods(self): + assert HttpMethod.GET.value == "GET" + assert HttpMethod.POST.value == "POST" + assert HttpMethod.PUT.value == "PUT" + assert HttpMethod.PATCH.value == "PATCH" + assert HttpMethod.DELETE.value == "DELETE" + assert HttpMethod.HEAD.value == "HEAD" + assert HttpMethod.OPTIONS.value == "OPTIONS" + + def test_method_from_string(self): + assert HttpMethod("GET") == HttpMethod.GET + assert HttpMethod("POST") == HttpMethod.POST + + +class TestOutputFormat: + def test_all_formats(self): + assert OutputFormat.CURL.value == "curl" + assert OutputFormat.HTTPie.value == "httpie" + assert OutputFormat.FETCH.value == "fetch" + assert OutputFormat.AXIOS.value == "axios"