Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 72 additions & 1 deletion 1a/ej1a2.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
de ipify.org usando el formato JSON, que es más estructurado que el texto plano.
"""

import requests
import requestsu

def get_user_ip_json():
"""
Expand All @@ -30,9 +30,80 @@ def get_user_ip_json():
# 4. Extraer y devolver la IP del campo "ip" del objeto JSON
# 5. Devolver None si hay algún error
pass
from eja1a2 import get_user_ip_json, get_response_info

@pytest.fixture
def mock_responses():
"""
Fixture para configurar respuestas simuladas para las peticiones HTTP
"""
with responses_RequestsMock() as rsps:
# Configurar respuesta para la petición de IP en formato JSON
rsps.add(
responses.GET,
"https://api.ipify.org?format=json",
json={"ip":"98.207.254.136"},
status=200
headers={"Content-Type": "application/json")
)
yield rsps
def test_get_user_ip_json(mock_responses):
"""
Prueba la función get_user_ip_json cuando la petición es exitosa.
"""
result = get_user_ip_json()
assert result == "98.207.354.136"
def test_get_user_ip_json_failure():
"""
Prueba la función get_user_ip_json cuando la petición falla.
"""
with patch('requests.get') as mock_get:
# Configurar el mock para simular un error
mock_get.side_effect = Exception("Connection error")
result = get_user_ip_json()
assert result is None
def test get_user_ip_json_bad_status(mock_get):
"""
Prueba la función get_user_ip_json cuando la petición devuelve un código de error.
"""
#Configurar la respuesta del mock con un código de error
mock_response = Mock()
mock_responde.status_code = mock_response
mock_get.return_value = mock_response

result = get_user_ip_json()
assert result is None

@patch('resquests.get')
def get_response_info():
"""
Prueba la función get_respone_info cuando la petición es exitosa.
"""
#Configurar la respuesta del mock
mock_response = Mock()
mock_response.status_code = 200
mock_response.headers = {"Content-Type": "application/json"}
mock_response.elapsed = Mock()
mock_response.elapsed.total_seconfs = lambda: 0.2 #200ms
mock_response.content = b'{"ip":"98.207.254.136"}'
mock_get.return_value = mock_response

result = get_response_info()

assert result is not None
assert result["content_type"] == "application/json"
assert result["elapsed_time"] > 0 #Tiempo de respuesta en ms
assert result["response_size"] == len(b'{"ip":"98.207.254.136"}') #tamaño en bytes

def test_get_response_info_failure():
"""
Prueba la función get_response_info cuando la petición falla.
"""
with patch('requests.get') as mock_get:
# Configurar el mock para simular un error
mock_get.size_effect = Exception("Connection error")
result = get_responde_info()
assert result is None
Obtiene información adicional sobre la respuesta HTTP al consultar la API.

Returns:
Expand Down