Merge branch 'main' into avm99963-monorail

GitOrigin-RevId: 1412a00daa7379d93b6872e9ef7da0a45118b180
diff --git a/api/v3/test/projects_servicer_test.py b/api/v3/test/projects_servicer_test.py
index 83aa8ab..2a9fbba 100644
--- a/api/v3/test/projects_servicer_test.py
+++ b/api/v3/test/projects_servicer_test.py
@@ -224,6 +224,25 @@
 
     self.assertEqual(config.component_defs, [])
 
+  def testGetComponentDef(self):
+    user_1 = self.services.user.TestAddUser('achilles@test.com', 981)
+    project = self.services.project.TestAddProject(
+        'chicken', project_id=987, owner_ids=[user_1.user_id])
+    config = fake.MakeTestConfig(project.project_id, [], [])
+    component_def = fake.MakeTestComponentDef(
+        project.project_id, 1, path='Chickens>Dickens')
+    config.component_defs = [component_def]
+    self.services.config.StoreConfig(self.cnxn, config)
+
+    request = projects_pb2.GetComponentDefRequest(
+        name='projects/chicken/componentDefs/1')
+    mc = monorailcontext.MonorailContext(
+        self.services, cnxn=self.cnxn, requester=user_1.email)
+    actual = self.CallWrapped(
+        self.projects_svcr.GetComponentDef, mc, request)
+    expected_cd = self.converter.ConvertComponentDef(component_def)
+    self.assertEqual(actual, expected_cd)
+
   @mock.patch('project.project_helpers.GetThumbnailUrl')
   def testListProjects(self, mock_GetThumbnailUrl):
     mock_GetThumbnailUrl.return_value = 'xyz'