def test_walk_pattern_properties_with_primitive(primitive_type): test_schema = {"patternProperties": {"a": primitive_type}} flattener = JsonSchemaFlattener({}) result = flattener._walk(test_schema, ()) assert result == test_schema assert not flattener._schema_map
def test_walk_array_items_with_primitive(primitive_type): test_schema = {"type": "array", "items": primitive_type} flattener = JsonSchemaFlattener({}) result = flattener._walk(test_schema, ()) assert result == test_schema assert not flattener._schema_map
def test_walk_ref_to_ref_to_primitive(primitive_type): test_schema = {"b": {"$ref": "#/c"}, "c": primitive_type} flattener = JsonSchemaFlattener(test_schema) result = flattener._walk({"$ref": "#/b"}, ()) assert result == primitive_type assert not flattener._schema_map
def test_walk_path_already_processed(path): flattener = JsonSchemaFlattener({}) flattener._schema_map = {path: {}} result = flattener._walk({}, path) assert result == {"$ref": path} assert len(flattener._schema_map) == 1
def test_circular_reference_nested(): test_schema = { "properties": { "a": { "properties": { "b": { "type": "string" }, "c": { "$ref": "#/properties/a" } } } } } flattener = JsonSchemaFlattener(test_schema) flattened = flattener._walk({"$ref": "#/properties/a"}, ()) assert flattened == {"$ref": ("properties", "a")} assert flattener._schema_map[("properties", "a")] == { "properties": { "b": { "type": "string" }, "c": { "$ref": ("properties", "a") } } }
def test_walk_object(path): test_schema = {"properties": {"a": {}}} flattener = JsonSchemaFlattener({}) result = flattener._walk(test_schema, path) assert result == {"$ref": path} assert len(flattener._schema_map) == 1 assert flattener._schema_map[path] == test_schema
def test_walk_ref_to_ref_object(): test_schema = {"b": {"$ref": "#/c"}, "c": {"properties": {"a": {}}}} flattener = JsonSchemaFlattener(test_schema) result = flattener._walk({"$ref": "#/b"}, ()) assert result == {"$ref": ("c", )} assert len(flattener._schema_map) == 1 assert flattener._schema_map[("c", )] == {"properties": {"a": {}}}
def test_walk_ref_to_object(): test_schema = {"a": {"properties": {"b": {}}}} flattener = JsonSchemaFlattener(test_schema) flattened = flattener._walk({"$ref": "#/a"}, ()) assert flattened == {"$ref": ("a", )} assert len(flattener._schema_map) == 1 assert flattener._schema_map[("a", )] == {"properties": {"b": {}}}
def test_walk_pattern_properties_with_object(path): test_schema = {"patternProperties": {"a": {"properties": {"b": {}}}}} flattener = JsonSchemaFlattener({}) result = flattener._walk(test_schema, path) ref_path = path + ("patternProperties", "a") assert result == {"patternProperties": {"a": {"$ref": ref_path}}} assert len(flattener._schema_map) == 1 assert flattener._schema_map[ref_path] == {"properties": {"b": {}}}
def test_walk_array_items_with_object(path): test_schema = {"type": "array", "items": {"properties": {"b": {}}}} flattener = JsonSchemaFlattener({}) result = flattener._walk(test_schema, path) ref_path = path + ("items", ) expected_schema = {"type": "array", "items": {"$ref": ref_path}} assert result == expected_schema assert len(flattener._schema_map) == 1 assert flattener._schema_map[ref_path] == {"properties": {"b": {}}}
def test_circular_reference_indirect(): test_schema = { "properties": { "a": { "$ref": "#/properties/b" }, "b": { "$ref": "#/properties/c" }, "c": { "$ref": "#/properties/a" }, } } flattener = JsonSchemaFlattener(test_schema) flattened_a = flattener._walk({"$ref": "#/properties/a"}, ()) flattened_b = flattener._walk({"$ref": "#/properties/b"}, ()) flattened_c = flattener._walk({"$ref": "#/properties/c"}, ()) assert flattened_a == {"$ref": ("properties", "a")} assert flattened_b == {"$ref": ("properties", "b")} assert flattened_c == {"$ref": ("properties", "c")}
def test_walk_nested_properties(path): test_schema = {"properties": {"a": {"properties": {"b": {}}}}} flattener = JsonSchemaFlattener({}) result = flattener._walk(test_schema, path) ref_path = path + ("properties", "a") assert result == {"$ref": path} assert len(flattener._schema_map) == 2 assert flattener._schema_map[path] == { "properties": { "a": { "$ref": ref_path } } } assert flattener._schema_map[ref_path] == {"properties": {"b": {}}}
def test_circular_reference_self(): test_schema = {"properties": {"a": {"$ref": "#/properties/a"}}} flattener = JsonSchemaFlattener(test_schema) flattened = flattener._walk({"$ref": "#/properties/a"}, ()) assert flattened == {"$ref": ("properties", "a")}
def test_walk_ref_to_primitive(primitive_type): flattener = JsonSchemaFlattener({"a": primitive_type}) result = flattener._walk({"$ref": "#/a"}, ()) assert result == primitive_type assert not flattener._schema_map
def test_walk_primitive_type(primitive_type): flattener = JsonSchemaFlattener({}) result = flattener._walk(primitive_type, ()) assert result == primitive_type assert not flattener._schema_map