import pytest from models.openapi import Schema from utils.value_generator import ( generate_below_min, generate_exceed_max, generate_invalid_enum, generate_invalid_type, generate_null_value, generate_random_value, ) def test_generate_random_value(): # Test string generation schema = Schema(type="string", minLength=3, maxLength=10) result = generate_random_value(None, schema) assert isinstance(result, str) assert result == "freedeaths" # Since random is disabled # Test number generation schema = Schema(type="number", minimum=0, maximum=100) result = generate_random_value(None, schema) assert isinstance(result, float) assert result == 666.666 # Since random is disabled # Test integer generation schema = Schema(type="integer", minimum=0, maximum=100) result = generate_random_value(None, schema) assert isinstance(result, int) assert result == 666 # Since random is disabled # Test boolean generation schema = Schema(type="boolean") result = generate_random_value(None, schema) assert isinstance(result, bool) assert result == True # Since random is disabled # Test array generation schema = Schema(type="array", items=Schema(type="string"), minItems=2, maxItems=5) result = generate_random_value(None, schema) assert isinstance(result, list) assert len(result) == 3 # Since random is disabled assert all(isinstance(item, str) for item in result) # Test object generation schema = Schema( type="object", properties={ "name": Schema(type="string"), "age": Schema(type="integer"), }, ) result = generate_random_value(None, schema) assert isinstance(result, dict) assert "name" in result and isinstance(result["name"], str) assert "age" in result and isinstance(result["age"], int) def test_generate_invalid_type(): schema = Schema(type="string") result = generate_invalid_type(None, schema) assert result == {} schema = Schema(type="integer") result = generate_invalid_type(None, schema) assert result == "invalid_string_value" def test_generate_null_value(): schema = Schema(type="string") result = generate_null_value(None, schema) assert result is None def test_generate_exceed_max(): # Test string schema = Schema(type="string", maxLength=5) result = generate_exceed_max(None, schema) assert len(result) == 6 # Test number schema = Schema(type="number", maximum=100) result = generate_exceed_max(None, schema) assert result == 101 # Test array schema = Schema(type="array", maxItems=3) result = generate_exceed_max([1, 2, 3], schema) assert len(result) == 4 # Test object schema = Schema(type="object", properties={"key": Schema(type="string")}) with pytest.raises(ValueError) as excinfo: generate_exceed_max({"key": "value"}, schema) assert "maxProperties is not set" in str(excinfo.value) def test_generate_below_min(): # Test string schema = Schema(type="string", minLength=5) result = generate_below_min(None, schema) assert len(result) == 4 # Test number schema = Schema(type="number", minimum=100) result = generate_below_min(None, schema) assert result == 99 # Test array schema = Schema(type="array", minItems=3) result = generate_below_min([1, 2, 3], schema) assert len(result) == 2 # Test object schema = Schema( type="object", minProperties=2, properties={"key1": Schema(type="string"), "key2": Schema(type="string")}, ) result = generate_below_min({"key1": "value1", "key2": "value2"}, schema) assert len(result) == 1 def test_generate_invalid_enum(): schema = Schema(type="string", enum=["red", "green", "blue"]) result = generate_invalid_enum("red", schema) assert result == "red_666" assert result not in schema.enum schema = Schema(type="integer", enum=[1, 2, 3]) result = generate_invalid_enum(1, schema) assert result == 4 assert result not in schema.enum with pytest.raises(ValueError): generate_invalid_enum("yellow", schema) with pytest.raises(ValueError): generate_invalid_enum(1, Schema(type="string"))