| #!/usr/bin/env vpython3 | 
 | # Copyright 2022 The Chromium Authors | 
 | # Use of this source code is governed by a BSD-style license that can be | 
 | # found in the LICENSE file. | 
 | """File for testing publish_package.py.""" | 
 |  | 
 | import argparse | 
 | import unittest | 
 | import unittest.mock as mock | 
 |  | 
 | import publish_package | 
 |  | 
 | _PACKAGES = ['test_package'] | 
 | _REPO = 'test_repo' | 
 |  | 
 |  | 
 | class PublishPackageTest(unittest.TestCase): | 
 |     """Unittests for publish_package.py.""" | 
 |  | 
 |     def setUp(self) -> None: | 
 |         self._ffx_patcher = mock.patch('publish_package.run_ffx_command') | 
 |         self._ffx_mock = self._ffx_patcher.start() | 
 |         self.addCleanup(self._ffx_mock.stop) | 
 |  | 
 |  | 
 |     def test_new_repo(self) -> None: | 
 |         """Test setting |new_repo| to True in |publish_packages|.""" | 
 |  | 
 |         publish_package.ensure_repository( | 
 |             argparse.Namespace(**{ | 
 |                 'repo': _REPO, | 
 |                 'no_repo_init': False, | 
 |             })) | 
 |         publish_package.publish_packages( | 
 |             _PACKAGES, | 
 |             argparse.Namespace(**{ | 
 |                 'repo': _REPO, | 
 |                 'no_repo_init': False, | 
 |             })) | 
 |         self.assertEqual(self._ffx_mock.call_count, 2) | 
 |         first_call, second_call = self._ffx_mock.call_args_list | 
 |         self.assertEqual(['repository', 'create', _REPO], | 
 |                          first_call.kwargs['cmd']) | 
 |         self.assertEqual([ | 
 |             'repository', 'publish', '--package-archive', _PACKAGES[0], _REPO | 
 |         ], second_call.kwargs['cmd']) | 
 |  | 
 |     @mock.patch('os.path.exists', return_value=False) | 
 |     def test_new_repo_if_not_existing(self, *_) -> None: | 
 |         """Always initialize the repo if it's not existing.""" | 
 |  | 
 |         publish_package.ensure_repository( | 
 |             argparse.Namespace(**{ | 
 |                 'repo': _REPO, | 
 |                 'no_repo_init': False, | 
 |             })) | 
 |         self.assertEqual(self._ffx_mock.call_count, 1) | 
 |         first_call = self._ffx_mock.call_args | 
 |         self.assertEqual(['repository', 'create', _REPO], | 
 |                          first_call.kwargs['cmd']) | 
 |  | 
 |     @mock.patch('os.path.exists', return_value=True) | 
 |     @mock.patch('os.path.isdir', return_value=True) | 
 |     def test_no_new_repo(self, *_) -> None: | 
 |         """Test setting |new_repo| to False in |publish_packages|.""" | 
 |  | 
 |         publish_package.ensure_repository( | 
 |             argparse.Namespace(**{ | 
 |                 'repo': _REPO, | 
 |                 'no_repo_init': True, | 
 |             })) | 
 |         publish_package.publish_packages( | 
 |             _PACKAGES, | 
 |             argparse.Namespace(**{ | 
 |                 'repo': _REPO, | 
 |                 'no_repo_init': True, | 
 |             })) | 
 |         self.assertEqual(self._ffx_mock.call_count, 1) | 
 |  | 
 |  | 
 |     @mock.patch('os.path.exists', return_value=True) | 
 |     @mock.patch('os.path.isdir', return_value=False) | 
 |     def test_not_a_dir(self, *_) -> None: | 
 |         """Test using a non-directory for repo.""" | 
 |  | 
 |         with self.assertRaises(AssertionError): | 
 |             publish_package.ensure_repository( | 
 |                 argparse.Namespace(**{ | 
 |                     'repo': _REPO, | 
 |                     'no_repo_init': True, | 
 |                 })) | 
 |  | 
 |  | 
 |     def test_allow_temp_repo(self) -> None: | 
 |         """Test setting |allow_temp_repo| to True in |register_package_args|.""" | 
 |  | 
 |         parser = argparse.ArgumentParser() | 
 |         publish_package.register_package_args(parser) | 
 |         args = parser.parse_args(['--no-repo-init']) | 
 |         self.assertEqual(args.no_repo_init, True) | 
 |  | 
 |  | 
 | if __name__ == '__main__': | 
 |     unittest.main() |