import pytest from src.http_convert.generators import CurlGenerator, HTTPieGenerator, FetchGenerator, AxiosGenerator, Generator from src.http_convert.models import HTTPRequest, HttpMethod, OutputFormat @pytest.fixture def sample_request(): return HTTPRequest( method=HttpMethod.GET, url="https://api.example.com/users", headers={"Accept": "application/json"}, params={"page": "1"}, body=None ) @pytest.fixture def post_request(): return HTTPRequest( method=HttpMethod.POST, url="https://api.example.com/users", headers={"Content-Type": "application/json"}, body='{"name": "John"}' ) class TestCurlGenerator: def test_generate_simple_get(self, sample_request): result = CurlGenerator.generate(sample_request) assert "curl" in result assert "https://api.example.com/users" in result def test_generate_with_headers(self, sample_request): result = CurlGenerator.generate(sample_request) assert "-H" in result assert "Accept" in result def test_generate_with_method(self): request = HTTPRequest(method=HttpMethod.POST, url="https://example.com") result = CurlGenerator.generate(request) assert "-X POST" in result def test_generate_compact(self, sample_request): result = CurlGenerator.generate(sample_request, compact=True) assert " " in result and "\\" not in result def test_generate_multiline(self, sample_request): result = CurlGenerator.generate(sample_request, compact=False) assert "\\" in result class TestHTTPieGenerator: def test_generate_simple_get(self, sample_request): result = HTTPieGenerator.generate(sample_request) assert "GET" in result assert "https://api.example.com/users" in result def test_generate_with_headers(self, sample_request): result = HTTPieGenerator.generate(sample_request) assert "Accept:application/json" in result def test_generate_with_params(self, sample_request): result = HTTPieGenerator.generate(sample_request) assert "page==" in result def test_generate_with_body(self, post_request): result = HTTPieGenerator.generate(post_request) assert "POST" in result assert "https://api.example.com/users" in result class TestFetchGenerator: def test_generate_simple_get(self, sample_request): result = FetchGenerator.generate(sample_request) assert "fetch(" in result assert "https://api.example.com/users" in result def test_generate_with_headers(self, sample_request): result = FetchGenerator.generate(sample_request) assert "headers" in result assert "Accept" in result def test_generate_with_method(self, sample_request): result = FetchGenerator.generate(sample_request) assert "method" in result assert "GET" in result def test_generate_with_body(self, post_request): result = FetchGenerator.generate(post_request) assert "body" in result def test_generate_compact(self, sample_request): result = FetchGenerator.generate(sample_request, compact=True) assert " " in result and "\\n" not in result class TestAxiosGenerator: def test_generate_simple_get(self, sample_request): result = AxiosGenerator.generate(sample_request) assert "axios(" in result assert "https://api.example.com/users" in result def test_generate_with_headers(self, sample_request): result = AxiosGenerator.generate(sample_request) assert "headers" in result assert "Accept" in result def test_generate_with_method(self, sample_request): result = AxiosGenerator.generate(sample_request) assert "method" in result assert "GET" in result def test_generate_with_url(self, sample_request): result = AxiosGenerator.generate(sample_request) assert "url" in result def test_generate_with_body(self, post_request): result = AxiosGenerator.generate(post_request) assert "data" in result class TestGenerator: def test_generate_curl(self, sample_request): result = Generator.generate(sample_request, OutputFormat.CURL) assert "curl" in result def test_generate_httpie(self, sample_request): result = Generator.generate(sample_request, OutputFormat.HTTPie) assert "GET" in result def test_generate_fetch(self, sample_request): result = Generator.generate(sample_request, OutputFormat.FETCH) assert "fetch(" in result def test_generate_axios(self, sample_request): result = Generator.generate(sample_request, OutputFormat.AXIOS) assert "axios(" in result def test_generate_invalid_format(self, sample_request): with pytest.raises(ValueError): Generator.generate(sample_request, "invalid")