import pytest from models.affected_element import AffectedElement from models.enhanced_operation import EnhancedOperation from models.openapi import Operation, Parameter, Schema class MockAffectedElement(AffectedElement): @property def generation_strategies(self): pass @pytest.fixture def sample_operation(): return Operation( responses={}, parameters=[ Parameter( name="body", in_="body", required=True, schema=Schema( type="object", properties={ "tidbNodeSetting": Schema( type="object", properties={ "tidbNodeGroups": Schema( type="array", items=Schema( type="object", properties={"clusterId": Schema(type="string")}, required=["clusterId"], ), ) }, required=["tidbNodeGroups"], ) }, required=["tidbNodeSetting"], ), ), Parameter(name="queryParam", in_="query", type="string", required=True), ], ) @pytest.fixture def enhanced_operation(sample_operation): return EnhancedOperation( path="/test", method="POST", operation=sample_operation, available_methods=["POST"], coefficient_dict={}, cases=[], ) def test_is_element_required(enhanced_operation): assert ( enhanced_operation.is_element_required( MockAffectedElement("body.tidbNodeSetting", Schema(type="object")) ) == True ) assert ( enhanced_operation.is_element_required( MockAffectedElement( "body.tidbNodeSetting.tidbNodeGroups", Schema(type="array") ) ) == True ) assert ( enhanced_operation.is_element_required( MockAffectedElement( "body.tidbNodeSetting.tidbNodeGroups[]", Schema(type="object") ) ) == True ) assert ( enhanced_operation.is_element_required( MockAffectedElement( "body.tidbNodeSetting.tidbNodeGroups[].clusterId", Schema(type="string") ) ) == True ) assert ( enhanced_operation.is_element_required( MockAffectedElement( "body.tidbNodeSetting.nonExistentField", Schema(type="string") ) ) == False ) assert ( enhanced_operation.is_element_required( MockAffectedElement("body.nonExistentField", Schema(type="string")) ) == False )