Source code for tests.test_request

import pytest
from unittest.mock import Mock, patch

from steps.api.utils.request import Request, AUTHORIZATION_KEY, JSON_HEADER_KEY, FORM_HEADER_KEY, CONTENT_TYPE_KEY


[docs] def test_request_initialization(): mock_api = Mock() request = Request(api=mock_api, timeout=5) assert request.api == mock_api assert request.method == "" assert 'Accept' in request.headers assert request.headers['Accept'] == JSON_HEADER_KEY assert request.params == {} assert request.body == {} assert request.timeout == 5 assert request.expected_status_code == "200" assert request.response is None
[docs] def test_set_header(): request = Request() request.set_header("Test-Header", "test-value") assert request.headers["Test-Header"] == "test-value"
[docs] def test_set_body(): request = Request() request.set_body("test_key", "test_value") assert request.body["test_key"] == "test_value"
[docs] def test_set_param(): request = Request() request.set_param("test_param", "test_value") assert request.params["test_param"] == "test_value"
[docs] def test_set_authorization_header(): request = Request() request.set_authorization_header("test_token") assert request.headers[AUTHORIZATION_KEY] == "Bearer test_token"
[docs] def test_set_json_content_type(): request = Request() request.set_json_content_type() assert request.headers[CONTENT_TYPE_KEY] == JSON_HEADER_KEY
[docs] def test_set_form_content_type(): request = Request() request.set_form_content_type() assert request.headers[CONTENT_TYPE_KEY] == FORM_HEADER_KEY
[docs] def test_set_url(): mock_api = Mock() mock_api.url = "https://api.example.com" request = Request(api=mock_api) # Test without parameters request.set_url("/test/path") assert request.original_path_url == "/test/path" assert request.path_parameters == {} assert request.path_url == "/test/path" assert request.url == "https://api.example.com/test/path" # Test with parameters request.set_url("/user/{user_id}", {"user_id": "123"}) assert request.original_path_url == "/user/{user_id}" assert request.path_parameters == {"user_id": "123"} assert request.path_url == "/user/123" assert request.url == "https://api.example.com/user/123"
[docs] def test_set_method(): request = Request() request.set_method("GET") assert request.method == "GET" request.set_method("POST") assert request.method == "POST"
@patch("steps.api.utils.request.requests.Session")
[docs] def test_send_json_body(mock_session): mock_api = Mock() mock_api.url = "https://api.example.com" mock_response = Mock() mock_response.status_code = 200 mock_session_instance = Mock() mock_session_instance.send.return_value = mock_response mock_session.return_value = mock_session_instance request = Request(api=mock_api) request.set_url("/test") request.set_method("POST") request.set_json_content_type() request.set_body("test_key", "test_value") request.send() assert request.response == mock_response mock_session_instance.send.assert_called_once()
@patch("steps.api.utils.request.requests.Session")
[docs] def test_send_form_body(mock_session): mock_api = Mock() mock_api.url = "https://api.example.com" mock_response = Mock() mock_response.status_code = 200 mock_session_instance = Mock() mock_session_instance.send.return_value = mock_response mock_session.return_value = mock_session_instance request = Request(api=mock_api) request.set_url("/test") request.set_method("POST") request.set_form_content_type() request.set_body("test_key", "test_value") request.send() assert request.response == mock_response mock_session_instance.send.assert_called_once()
@patch("steps.api.utils.request.requests.Session")
[docs] def test_send_unknown_content_type(mock_session): mock_api = Mock() mock_api.url = "https://api.example.com" request = Request(api=mock_api) request.set_url("/test") request.set_method("POST") request.set_header(CONTENT_TYPE_KEY, "unknown/content-type") request.set_body("test_key", "test_value") with pytest.raises(NotImplementedError, match="Unknown request type unknown/content-type"): request.send()
[docs] def test_str_representation(): mock_api = Mock() mock_api.url = "https://api.example.com" request = Request(api=mock_api) request.set_url("/test/path") request.set_method("GET") str_representation = str(request) assert "GET" in str_representation assert "/test/path" in str_representation # Test with path parameters request.set_url("/user/{user_id}", {"user_id": "123"}) str_representation = str(request) assert "/user/{user_id}" in str_representation assert "123" in str_representation # Test with authorization header (should be hidden) request.set_authorization_header("secret_token") str_representation = str(request) assert "xxxxxxxxxx" in str_representation assert "secret_token" not in str_representation # Test with body request.set_body("test_key", "test_value") str_representation = str(request) assert "test_key" in str_representation assert "test_value" in str_representation
[docs] def test_hide_secret(): # Test with dictionary test_dict = { "username": "test_user", "password": "secret_password", "token": "secret_token", "nested": { "password_hash": "hashed_secret", "normal_field": "normal_value" } } result = Request._hide_secret(test_dict) assert result["username"] == "test_user" assert result["password"] == "xxxxxxxxxx" assert result["token"] == "xxxxxxxxxx" assert result["nested"]["password_hash"] == "xxxxxxxxxx" assert result["nested"]["normal_field"] == "normal_value"
[docs] def test_copy(): mock_api = Mock() mock_api.url = "https://api.example.com" request = Request(api=mock_api) request.set_url("/test/path") request.set_method("GET") request.set_header("Test-Header", "test-value") request.set_param("test_param", "test_value") request.set_body("test_key", "test_value") request.log = False request.timeout = 10 request.expected_status_code = "201" copied_request = request.copy() assert copied_request.api == request.api assert copied_request.method == request.method assert copied_request.headers == request.headers assert copied_request.params == request.params assert copied_request.body == request.body assert copied_request.original_path_url == request.original_path_url assert copied_request.path_parameters == request.path_parameters assert copied_request.log == request.log assert copied_request.timeout == request.timeout assert copied_request.expected_status_code == request.expected_status_code # Verify that changes to the copy don't affect the original copied_request.set_method("POST") assert request.method == "GET" assert copied_request.method == "POST"