146 lines
4.9 KiB
Python
146 lines
4.9 KiB
Python
import json
|
|
import pytest
|
|
|
|
from api_mock_cli.core.data_generator import FakeDataGenerator
|
|
|
|
|
|
class TestFakeDataGenerator:
|
|
def test_detect_email_field(self):
|
|
generator = FakeDataGenerator()
|
|
field_type = generator._detect_field_type("email", "test@example.com")
|
|
assert field_type == "email"
|
|
|
|
def test_detect_name_field(self):
|
|
generator = FakeDataGenerator()
|
|
field_type = generator._detect_field_type("full_name", "John Doe")
|
|
assert field_type == "name"
|
|
|
|
def test_detect_id_field(self):
|
|
generator = FakeDataGenerator()
|
|
field_type = generator._detect_field_type("user_id", "12345")
|
|
assert field_type == "id"
|
|
|
|
def test_detect_date_field(self):
|
|
generator = FakeDataGenerator()
|
|
field_type = generator._detect_field_type("created_at", "2024-01-01T00:00:00Z")
|
|
assert field_type == "date"
|
|
|
|
def test_detect_uuid_field(self):
|
|
generator = FakeDataGenerator()
|
|
field_type = generator._detect_field_type("uuid", "123e4567-e89b-12d3-a456-426614174000")
|
|
assert field_type == "uuid"
|
|
|
|
def test_detect_phone_field(self):
|
|
generator = FakeDataGenerator()
|
|
field_type = generator._detect_field_type("phone_number", "+1-555-123-4567")
|
|
assert field_type == "phone"
|
|
|
|
def test_detect_boolean_field(self):
|
|
generator = FakeDataGenerator()
|
|
field_type = generator._detect_field_type("is_active", True)
|
|
assert field_type == "boolean"
|
|
|
|
def test_detect_integer_field(self):
|
|
generator = FakeDataGenerator()
|
|
field_type = generator._detect_field_type("count", 42)
|
|
assert field_type == "integer"
|
|
|
|
def test_generate_scalar_email(self):
|
|
generator = FakeDataGenerator()
|
|
value = generator._generate_scalar("email")
|
|
assert "@" in value
|
|
|
|
def test_generate_scalar_name(self):
|
|
generator = FakeDataGenerator()
|
|
value = generator._generate_scalar("name")
|
|
assert len(value) > 0
|
|
assert " " in value or len(value.split()) == 1
|
|
|
|
def test_generate_scalar_uuid(self):
|
|
generator = FakeDataGenerator()
|
|
value = generator._generate_scalar("uuid")
|
|
assert len(value) == 36
|
|
assert "-" in value
|
|
|
|
def test_generate_from_dict_simple(self):
|
|
generator = FakeDataGenerator()
|
|
data = {
|
|
"id": 123,
|
|
"name": "Test User",
|
|
"email": "test@example.com",
|
|
"created_at": "2024-01-01",
|
|
}
|
|
result = generator.generate_from_dict(data)
|
|
|
|
assert "id" in result
|
|
assert "name" in result
|
|
assert "email" in result
|
|
assert "created_at" in result
|
|
|
|
def test_generate_from_dict_nested(self):
|
|
generator = FakeDataGenerator()
|
|
data = {
|
|
"user": {
|
|
"id": 123,
|
|
"profile": {
|
|
"name": "John",
|
|
"email": "john@example.com",
|
|
}
|
|
}
|
|
}
|
|
result = generator.generate_from_dict(data)
|
|
|
|
assert "user" in result
|
|
assert "id" in result["user"]
|
|
assert "profile" in result["user"]
|
|
assert "name" in result["user"]["profile"]
|
|
|
|
def test_generate_from_dict_array(self):
|
|
generator = FakeDataGenerator()
|
|
data = {
|
|
"users": [
|
|
{"id": 1, "name": "Alice"},
|
|
{"id": 2, "name": "Bob"},
|
|
]
|
|
}
|
|
result = generator.generate_from_dict(data)
|
|
|
|
assert "users" in result
|
|
assert len(result["users"]) == 2
|
|
|
|
def test_generate_from_json_string(self):
|
|
generator = FakeDataGenerator()
|
|
json_str = '{"id": 123, "name": "Test"}'
|
|
result = generator.generate_from_json(json_str)
|
|
|
|
parsed = json.loads(result)
|
|
assert "id" in parsed
|
|
assert "name" in parsed
|
|
|
|
def test_generate_response_preserves_structure(self):
|
|
generator = FakeDataGenerator()
|
|
original = '{"id": 123, "name": "Test", "email": "test@example.com"}'
|
|
result = generator.generate_response(original, preserve_structure=True)
|
|
|
|
parsed = json.loads(result)
|
|
assert "id" in parsed
|
|
assert "name" in parsed
|
|
assert "email" in parsed
|
|
|
|
def test_generate_response_with_array(self):
|
|
generator = FakeDataGenerator()
|
|
original = '{"users": [{"id": 1}, {"id": 2}]}'
|
|
result = generator.generate_response(original, preserve_structure=True)
|
|
|
|
parsed = json.loads(result)
|
|
assert "users" in parsed
|
|
assert len(parsed["users"]) == 2
|
|
|
|
def test_field_detection_by_value_patterns(self):
|
|
generator = FakeDataGenerator()
|
|
|
|
assert generator._detect_field_type("field", "user@example.com") == "email"
|
|
assert generator._detect_field_type("field", "123e4567-e89b-12d3-a456-426614174000") == "uuid"
|
|
assert generator._detect_field_type("field", "2024-01-01") == "date"
|
|
assert generator._detect_field_type("field", "https://example.com") == "url"
|