#!/usr/bin/env python3 import inspect import optparse import os import sys import textwrap import unittest import tempfile from unittest import mock from testcommon import TmpCwd, TmpPyPath localmodule = os.path.realpath( os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..')) print('localmodule: ' + localmodule) if localmodule not in sys.path: sys.path.insert(0, localmodule) from fdroidserver import common import fdroidserver.__main__ class MainTest(unittest.TestCase): '''this tests fdroid.py''' def test_commands(self): """make sure the built in sub-command defs didn't change unintentionally""" self.assertListEqual([x for x in fdroidserver.__main__.commands.keys()], ['build', 'init', 'publish', 'gpgsign', 'update', 'deploy', 'verify', 'checkupdates', 'import', 'install', 'readmeta', 'rewritemeta', 'lint', 'scanner', 'stats', 'server', 'signindex', 'btlog', 'signatures', 'nightly', 'mirror']) def test_call_init(self): co = mock.Mock() with mock.patch('sys.argv', ['', 'init', '-h']): with mock.patch('fdroidserver.init.main', co): with mock.patch('sys.exit') as exit_mock: fdroidserver.__main__.main() exit_mock.assert_called_once_with(0) co.assert_called_once_with() def test_call_deploy(self): co = mock.Mock() with mock.patch('sys.argv', ['', 'deploy', '-h']): with mock.patch('fdroidserver.server.main', co): with mock.patch('sys.exit') as exit_mock: fdroidserver.__main__.main() exit_mock.assert_called_once_with(0) co.assert_called_once_with() def test_find_plugins(self): with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): with open('fdroid_testy.py', 'w') as f: f.write(textwrap.dedent("""\ fdroid_summary = "ttt" main = lambda: 'all good'""")) with TmpPyPath(tmpdir): plugins = fdroidserver.__main__.find_plugins() self.assertIn('testy', plugins.keys()) self.assertEqual(plugins['testy']['summary'], 'ttt') self.assertEqual(plugins['testy']['module'].main(), 'all good') def test_main_plugin(self): with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): with open('fdroid_testy.py', 'w') as f: f.write(textwrap.dedent("""\ fdroid_summary = "ttt" main = lambda: pritn('all good')""")) with mock.patch('sys.argv', ['', 'testy']): with mock.patch('sys.exit') as exit_mock: fdroidserver.__main__.main() exit_mock.assert_called_once_with(0) if __name__ == "__main__": os.chdir(os.path.dirname(__file__)) parser = optparse.OptionParser() parser.add_option("-v", "--verbose", action="store_true", default=False, help="Spew out even more information than normal") (common.options, args) = parser.parse_args(['--verbose']) newSuite = unittest.TestSuite() newSuite.addTest(unittest.makeSuite(MainTest)) unittest.main(failfast=False)