PackagesService/NeedsChromeSource: check for uprevs

Add a check for package uprevs to NeedsChromeSource.

BUG=b:187795814
TEST=cq

Change-Id: If20ed8ddf46ce05fe1c00934ae447636ebb7596f
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/2984240
Tested-by: Alex Klein <saklein@chromium.org>
Reviewed-by: Mike Frysinger <vapier@chromium.org>
Commit-Queue: Alex Klein <saklein@chromium.org>
diff --git a/api/controller/packages_unittest.py b/api/controller/packages_unittest.py
index 4b7d62f..1c7ab80 100644
--- a/api/controller/packages_unittest.py
+++ b/api/controller/packages_unittest.py
@@ -840,6 +840,61 @@
                                   [controller_util.PackageInfoToCPV(package)])
 
 
+class NeedsChromeSourceTest(cros_test_lib.MockTempDirTestCase, ApiConfigMixin):
+  """NeedsChromeSource tests."""
+
+  def setUp(self):
+    self.response = packages_pb2.NeedsChromeSourceResponse()
+
+    self.board = 'board'
+    self.sysroot = self.tempdir
+
+  def _GetRequest(self, compile_source=False):
+    """Helper to build a request."""
+    request = packages_pb2.NeedsChromeSourceRequest()
+
+    request.install_request.sysroot.path = self.sysroot
+    request.install_request.sysroot.build_target.name = self.board
+    request.install_request.flags.compile_source = compile_source
+
+    return request
+
+  def testAll(self):
+    """Reason translation test."""
+    result = packages_service.NeedsChromeSourceResult(
+        needs_chrome_source=True,
+        builds_chrome=True,
+        packages=[package_info.parse('cat/pkg')],
+        missing_chrome_prebuilt=True,
+        missing_follower_prebuilt=True,
+        local_uprev=True,
+    )
+    self.PatchObject(packages_service, 'needs_chrome_source',
+                     return_value=result)
+
+    packages_controller.NeedsChromeSource(self._GetRequest(compile_source=True),
+                                          self.response,
+                                          self.api_config)
+
+    self.assertIn(packages_pb2.NeedsChromeSourceResponse.COMPILE_SOURCE,
+                  self.response.reasons)
+    self.assertIn(packages_pb2.NeedsChromeSourceResponse.LOCAL_UPREV,
+                  self.response.reasons)
+    self.assertIn(packages_pb2.NeedsChromeSourceResponse.NO_PREBUILT,
+                  self.response.reasons)
+    self.assertIn(
+        packages_pb2.NeedsChromeSourceResponse.FOLLOWER_LACKS_PREBUILT,
+        self.response.reasons)
+    self.assertIn(packages_pb2.NeedsChromeSourceResponse.COMPILE_SOURCE,
+                  self.response.reasons)
+    self.assertIn(packages_pb2.NeedsChromeSourceResponse.COMPILE_SOURCE,
+                  self.response.reasons)
+
+    self.assertEqual(1, len(self.response.packages))
+    self.assertEqual(('cat', 'pkg'), (self.response.packages[0].category,
+                                      self.response.packages[0].package_name))
+
+
 class GetAndroidMetadataTest(cros_test_lib.MockTestCase, ApiConfigMixin):
   """GetAndroidMetadata tests."""