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"