BuildAPI: Finish Package Mock responses.

BUG=chromium:1000854
TEST=run_tests

Change-Id: Ifa23018b44889ab0492602a69378a194d9e8ca43
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/1887310
Tested-by: Michael Mortensen <mmortensen@google.com>
Reviewed-by: Alex Klein <saklein@chromium.org>
Reviewed-by: Michael Mortensen <mmortensen@google.com>
Commit-Queue: Michael Mortensen <mmortensen@google.com>
diff --git a/api/controller/packages.py b/api/controller/packages.py
index 158fa93..62d51f7 100644
--- a/api/controller/packages.py
+++ b/api/controller/packages.py
@@ -25,8 +25,13 @@
     binhost_pb2.OVERLAYTYPE_BOTH: constants.BOTH_OVERLAYS,
 }
 
+def _UprevResponse(_input_proto, output_proto, _config):
+  """Add fake paths to a successful uprev response."""
+  output_proto.modified_ebuilds.add().path = '/fake/path1'
+  output_proto.modified_ebuilds.add().path = '/fake/path2'
 
-@faux.all_empty
+@faux.success(_UprevResponse)
+@faux.empty_error
 @validate.require('overlay_type')
 @validate.is_in('overlay_type', _OVERLAY_TYPE_TO_NAME)
 @validate.validation_complete
@@ -49,7 +54,14 @@
     output_proto.modified_ebuilds.add().path = path
 
 
-@faux.all_empty
+def _UprevVersionedPackageResponse(_input_proto, output_proto, _config):
+  """Add fake paths to a successful uprev versioned package response."""
+  uprev_response = output_proto.responses.add()
+  uprev_response.modified_ebuilds.add().path = '/uprev/response/path'
+
+
+@faux.success(_UprevVersionedPackageResponse)
+@faux.empty_error
 @validate.require('versions')
 @validate.require('package_info.package_name', 'package_info.category')
 @validate.validation_complete
@@ -83,7 +95,18 @@
       uprev_response.modified_ebuilds.add().path = path
 
 
-@faux.all_empty
+def _GetBestVisibleResponse(_input_proto, output_proto, _config):
+  """Add fake paths to a successful GetBestVisible response."""
+  package_info = common_pb2.PackageInfo(
+      category='category',
+      package_name='name',
+      version='1.01',
+  )
+  output_proto.package_info.CopyFrom(package_info)
+
+
+@faux.success(_GetBestVisibleResponse)
+@faux.empty_error
 @validate.require('atom')
 @validate.validation_complete
 def GetBestVisible(input_proto, output_proto, _config):
@@ -113,7 +136,19 @@
   output_proto.version = packages.determine_chrome_version(build_target)
 
 
-@faux.all_empty
+def _GetTargetVersionsResponse(_input_proto, output_proto, _config):
+  """Add fake target version fields to a successful response."""
+  output_proto.android_version = '5812377'
+  output_proto.android_branch_version = 'git_nyc-mr1-arc'
+  output_proto.android_target_version = 'cheets'
+  output_proto.chrome_version = '78.0.3900.0'
+  output_proto.platform_version = '12438.0.0'
+  output_proto.milestone_version = '78'
+  output_proto.full_version = 'R78-12438.0.0'
+
+
+@faux.success(_GetTargetVersionsResponse)
+@faux.empty_error
 @validate.require('build_target.name')
 @validate.validation_complete
 def GetTargetVersions(input_proto, output_proto, _config):
diff --git a/api/controller/packages_unittest.py b/api/controller/packages_unittest.py
index d89a53f..85fb125 100644
--- a/api/controller/packages_unittest.py
+++ b/api/controller/packages_unittest.py
@@ -51,6 +51,15 @@
     packages_controller.Uprev(request, self.response, self.validate_only_config)
     patch.assert_not_called()
 
+  def testMockCall(self):
+    """Test that a mock call does not execute logic, returns mocked value."""
+    patch = self.PatchObject(packages_service, 'uprev_build_targets')
+    targets = ['foo', 'bar']
+    request = self._GetRequest(targets=targets, overlay_type=self._BOTH)
+    packages_controller.Uprev(request, self.response, self.mock_call_config)
+    patch.assert_not_called()
+    self.assertTrue(self.response.modified_ebuilds)
+
   def testNoOverlayTypeFails(self):
     """No overlay type provided should fail."""
     request = self._GetRequest(targets=['foo'])
@@ -118,6 +127,16 @@
 
     service.assert_not_called()
 
+  def testMockCall(self):
+    """Test that a mock call does not execute logic, returns mocked value."""
+    patch = self.PatchObject(packages_service, 'uprev_versioned_package')
+    request = packages_pb2.UprevVersionedPackageRequest()
+    packages_controller.UprevVersionedPackage(request, self.response,
+                                              self.mock_call_config)
+    patch.assert_not_called()
+    self.assertTrue(self.response.responses)
+    self.assertTrue(self.response.responses[0].modified_ebuilds)
+
   def testNoVersions(self):
     """Test no versions provided."""
     request = packages_pb2.UprevVersionedPackageRequest()
@@ -208,6 +227,18 @@
                                        self.validate_only_config)
     patch.assert_not_called()
 
+  def testMockCall(self):
+    """Test that a mock call does not execute logic, returns mocked value."""
+    patch = self.PatchObject(packages_service, 'get_best_visible')
+    request = self._GetRequest(atom='chromeos-chrome')
+    packages_controller.GetBestVisible(request, self.response,
+                                       self.mock_call_config)
+    patch.assert_not_called()
+    self.assertTrue(self.response.package_info)
+    self.assertTrue(self.response.package_info.category)
+    self.assertTrue(self.response.package_info.package_name)
+    self.assertTrue(self.response.package_info.version)
+
   def testNoAtomFails(self):
     """No atom provided should fail."""
     request = self._GetRequest()
@@ -321,6 +352,46 @@
     milestone_version.assert_not_called()
     full_version.assert_not_called()
 
+  def testMockCall(self):
+    """Test that a mock call does not execute logic, returns mocked value."""
+    builds_chrome = self.PatchObject(
+        packages_service, 'builds', return_value=True)
+    patch_version = self.PatchObject(packages_service,
+                                     'determine_android_version')
+    patch_branch_version = self.PatchObject(packages_service,
+                                            'determine_android_branch')
+    patch_target_version = self.PatchObject(packages_service,
+                                            'determine_android_target')
+    chrome_version = self.PatchObject(packages_service,
+                                      'determine_chrome_version')
+    platform_version = self.PatchObject(packages_service,
+                                        'determine_platform_version')
+    milestone_version = self.PatchObject(packages_service,
+                                         'determine_milestone_version')
+    full_version = self.PatchObject(packages_service,
+                                    'determine_full_version')
+
+    request = self._GetRequest(board='betty')
+    packages_controller.GetTargetVersions(request, self.response,
+                                          self.mock_call_config)
+
+    patch_version.assert_not_called()
+    patch_branch_version.assert_not_called()
+    patch_target_version.assert_not_called()
+    builds_chrome.assert_not_called()
+    chrome_version.assert_not_called()
+    platform_version.assert_not_called()
+    milestone_version.assert_not_called()
+    full_version.assert_not_called()
+
+    self.assertTrue(self.response.android_version)
+    self.assertTrue(self.response.android_branch_version)
+    self.assertTrue(self.response.android_target_version)
+    self.assertTrue(self.response.chrome_version)
+    self.assertTrue(self.response.platform_version)
+    self.assertTrue(self.response.milestone_version)
+    self.assertTrue(self.response.full_version)
+
   def testNoBuildTargetFails(self):
     """No build target argument should fail."""
     request = self._GetRequest()