import aqt


def test_cli_help(capsys):
    expected = "".join(["usage: aqt [-h] [--logging-conf LOGGING_CONF] [--logger LOGGER]\n",
                        "           {install,tool,list,help} ...\n",
                        "\n",
                        "Installer for Qt SDK.\n",
                        "\n",
                        "optional arguments:\n",
                        "  -h, --help            show this help message and exit\n",
                        "  --logging-conf LOGGING_CONF\n",
                        "                        Logging configuration ini file.\n",
                        "  --logger LOGGER       Specify logger name\n",
                        "\n",
                        "subcommands:\n",
                        "  Valid subcommands\n",
                        "\n",
                        "  {install,tool,list,help}\n",
                        "                        subcommand for aqt Qt installer\n"])
    cli = aqt.cli.Cli()
    cli.run(["help"])
    out, err = capsys.readouterr()
    assert out == expected


def test_cli_check_module():
    cli = aqt.cli.Cli()
    assert cli._check_modules_arg('5.11.3', ['qtcharts', 'qtwebengine'])
    assert not cli._check_modules_arg('5.7', ['not_exist'])
    assert cli._check_modules_arg('5.14.0', None)
    assert not cli._check_modules_arg('5.15.0', ["Unknown"])


def test_cli_check_combination():
    cli = aqt.cli.Cli()
    assert cli._check_qt_arg_combination('5.11.3', 'linux', 'desktop', 'gcc_64')
    assert cli._check_qt_arg_combination('5.11.3', 'mac', 'desktop', 'clang_64')
    assert not cli._check_qt_arg_combination('5.14.0', 'android', 'desktop', 'clang_64')


def test_cli_check_version():
    cli = aqt.cli.Cli()
    assert cli._check_qt_arg_versions('5.12.0')
    assert not cli._check_qt_arg_versions('5.12')


def test_cli_check_mirror():
    cli = aqt.cli.Cli()
    assert cli._check_mirror(None)
    arg = ['install', '5.11.3', 'linux', 'desktop', '-b', "https://download.qt.io/"]
    args = cli.parser.parse_args(arg)
    assert args.base == 'https://download.qt.io/'
    assert cli._check_mirror(args.base)
