#!/usr/bin/env python3

import inspect
import optparse
import os
import sys
import unittest
from unittest import mock

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 FdroidTest(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', lambda x: None):
                    fdroidserver.__main__.main()
        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', lambda x: None):
                    fdroidserver.__main__.main()
        co.assert_called_once_with()


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(FdroidTest))
    unittest.main(failfast=False)
