#!/usr/bin/env python
import logging
import optparse
import sys
import unittest

try:
    import mock
except ImportError:
    sys.stderr.write(
        "*** Cannot find mock; please make sure it is in the Python path "
        "or install it (pip install mock)\n")
    sys.exit(-1)

from smarkets import __version__
from tests import unit_tests, integration_tests


if __name__ == '__main__':
    version = "%%prog %s" % __version__
    parser = optparse.OptionParser(version=version)
    parser.add_option(
        '-v', '--verbose', dest='verbose', action='store_true',
        default=False, help="turn on DEBUG logging level")
    parser.add_option(
        '-f', '--file', dest='password_filename',
        help="read usernames and passwords from FILE (integration only)",
        metavar='FILE')
    parser.add_option(
        '-m', '--markets', dest='market_filename',
        help="read markets from FILE (integration only)",
        metavar='FILE')
    parser.add_option(
        '-s', '--server', dest='server',
        help="server host to connect to (integration only)",
        metavar='SERVER')
    parser.add_option(
        '-p', '--port', dest='port',
        help="server port to connect to (integration only)",
        metavar='PORT')
    parser.add_option(
        '-i', '--run-integration', dest='run_integration', action='store_true',
        default=False,
        help="run integration tests (only possible if you have a 'test' "
        "API service available)")
    parser.add_option(
        '-t', '--disable-ssl', dest='ssl', action='store_false',
        default=True,
        help="disable ssl (only possible if configured on 'test' API service)")
    options, args = parser.parse_args()
    level = logging.WARNING
    if options.verbose:
        level = logging.DEBUG
    logging.basicConfig(level=level)
    suite = unittest.TestSuite()
    unit_tests(suite)
    kwargs = {}
    if options.run_integration:
        for name in (
            'password_filename',
            'market_filename',
            'server',
            'port',
            'ssl',
            ):
            val = getattr(options, name)
            if val:
                kwargs[name] = val
        integration_tests(suite, **kwargs)
    results = unittest.TextTestRunner().run(suite)
