@@ -2155,3 +2155,107 @@ def test_scanpipe_d2d_load_ecosystem_config(self):
21552155 expected_extra_data = json .load (f )
21562156
21572157 self .assertEqual (expected_extra_data , asdict (pipeline .ecosystem_config ))
2158+
2159+ def test_scanpipe_pipes_d2d_extract_protobuf_base_name (self ):
2160+ """Test the protobuf base name extraction function."""
2161+ test_cases = [
2162+ ("command_request_pb2.py" , "command_request" ),
2163+ ("connection_request_pb2.pyi" , "connection_request" ),
2164+ ("response_pb2.py" , "response" ),
2165+ ("user_pb3.py" , "user" ),
2166+ ("data_pb2.pyi" , "data" ),
2167+ ("regular_file.py" , None ),
2168+ ("not_protobuf.pyi" , None ),
2169+ ("pb2_standalone.py" , None ),
2170+ ]
2171+
2172+ for filename , expected in test_cases :
2173+ with self .subTest (filename = filename ):
2174+ result = d2d ._extract_protobuf_base_name (filename )
2175+ self .assertEqual (expected , result )
2176+
2177+ def test_scanpipe_pipes_d2d_map_python_protobuf_files (self ):
2178+ """Test protobuf file mapping functionality."""
2179+ from1 = make_resource_file (
2180+ self .project1 ,
2181+ path = "from/valkey_glide-2.0.1/glide-core/src/protobuf/command_request.proto" ,
2182+ )
2183+ from2 = make_resource_file (
2184+ self .project1 ,
2185+ path = "from/valkey_glide-2.0.1/glide-core/src/protobuf/connection_request.proto" ,
2186+ )
2187+ from3 = make_resource_file (
2188+ self .project1 ,
2189+ path = "from/valkey_glide-2.0.1/glide-core/src/protobuf/response.proto" ,
2190+ )
2191+
2192+ to1 = make_resource_file (
2193+ self .project1 ,
2194+ path = "to/glide/protobuf/command_request_pb2.py" ,
2195+ )
2196+ to2 = make_resource_file (
2197+ self .project1 ,
2198+ path = "to/glide/protobuf/command_request_pb2.pyi" ,
2199+ )
2200+ to3 = make_resource_file (
2201+ self .project1 ,
2202+ path = "to/glide/protobuf/connection_request_pb2.py" ,
2203+ )
2204+ to4 = make_resource_file (
2205+ self .project1 ,
2206+ path = "to/glide/protobuf/connection_request_pb2.pyi" ,
2207+ )
2208+ to5 = make_resource_file (
2209+ self .project1 ,
2210+ path = "to/glide/protobuf/response_pb2.py" ,
2211+ )
2212+ to6 = make_resource_file (
2213+ self .project1 ,
2214+ path = "to/glide/protobuf/response_pb2.pyi" ,
2215+ )
2216+
2217+ d2d .map_python_protobuf_files (self .project1 )
2218+
2219+ relations = self .project1 .codebaserelations .filter (map_type = "protobuf_mapping" )
2220+ self .assertEqual (6 , relations .count ())
2221+
2222+ expected_mappings = [
2223+ (from1 , to1 , "command_request" ),
2224+ (from1 , to2 , "command_request" ),
2225+ (from2 , to3 , "connection_request" ),
2226+ (from2 , to4 , "connection_request" ),
2227+ (from3 , to5 , "response" ),
2228+ (from3 , to6 , "response" ),
2229+ ]
2230+
2231+ for from_resource , to_resource , expected_base_name in expected_mappings :
2232+ relation = relations .filter (
2233+ from_resource = from_resource ,
2234+ to_resource = to_resource
2235+ ).first ()
2236+ self .assertIsNotNone (relation )
2237+ self .assertEqual (expected_base_name , relation .extra_data ["protobuf_base_name" ])
2238+
2239+ def test_scanpipe_pipes_d2d_map_python_protobuf_files_no_proto_files (self ):
2240+ """Test protobuf mapping when no .proto files exist."""
2241+ make_resource_file (
2242+ self .project1 ,
2243+ path = "to/glide/protobuf/command_request_pb2.py" ,
2244+ )
2245+
2246+ d2d .map_python_protobuf_files (self .project1 )
2247+
2248+ relations = self .project1 .codebaserelations .filter (map_type = "protobuf_mapping" )
2249+ self .assertEqual (0 , relations .count ())
2250+
2251+ def test_scanpipe_pipes_d2d_map_python_protobuf_files_no_py_files (self ):
2252+ """Test protobuf mapping when no .py/.pyi files exist."""
2253+ make_resource_file (
2254+ self .project1 ,
2255+ path = "from/valkey_glide-2.0.1/glide-core/src/protobuf/command_request.proto" ,
2256+ )
2257+
2258+ d2d .map_python_protobuf_files (self .project1 )
2259+
2260+ relations = self .project1 .codebaserelations .filter (map_type = "protobuf_mapping" )
2261+ self .assertEqual (0 , relations .count ())
0 commit comments