Source code for ase2sprkkr.asr.test.test_cli

import pytest

from click.testing import CliRunner
from asr.core.cli import cli


[docs] @pytest.mark.ci def test_asr(): """Test the main CLI.""" runner = CliRunner() result = runner.invoke(cli) assert result.exit_code == 0 assert 'Usage: cli [OPTIONS] COMMAND [ARGS]...' in result.output help_result = runner.invoke(cli, ['--help']) assert help_result.exit_code == 0 assert '--help Show this message and exit.' in help_result.output help_result = runner.invoke(cli, ['-h']) assert help_result.exit_code == 0 assert '--help Show this message and exit.' in help_result.output
[docs] @pytest.mark.ci def test_asr_run(asr_tmpdir_w_params): import pathlib runner = CliRunner() result = runner.invoke(cli, ['run', '-h']) assert result.exit_code == 0 assert 'Usage: cli run [OPTIONS] COMMAND [FOLDERS]' in result.output help_result = runner.invoke(cli, ['--help']) assert help_result.exit_code == 0 assert '--help Show this message and exit.' in help_result.output help_result = runner.invoke(cli, ['-h']) assert help_result.exit_code == 0 assert '--help Show this message and exit.' in help_result.output result = runner.invoke(cli, ['run', '--dry-run', 'setup.params']) assert result.exit_code == 0 assert 'Would run asr.setup.params@main in 1 folders.' in result.output pathlib.Path("folder1").mkdir() pathlib.Path("folder2").mkdir() result = runner.invoke(cli, ['run', 'setup.params asr.relax:d3 True', 'folder1', 'folder2']) assert result.exit_code == 0 assert pathlib.Path("folder1", "params.json").is_file() assert pathlib.Path("folder2", "params.json").is_file() pathlib.Path("folder3").mkdir() pathlib.Path("folder4").mkdir() result = runner.invoke(cli, ['run', '--njobs', '2', 'setup.params asr.relax:d3 True', 'folder3', 'folder4']) assert result.exit_code == 0 assert pathlib.Path("folder3", "params.json").is_file(), result assert pathlib.Path("folder4", "params.json").is_file(), result
[docs] @pytest.mark.ci def test_asr_list(): runner = CliRunner() result = runner.invoke(cli, ['list']) assert result.exit_code == 0 assert 'Name' in result.output assert 'Description' in result.output
[docs] @pytest.mark.ci def test_asr_results_help(): runner = CliRunner() result = runner.invoke(cli, ['results', '-h']) assert result.exit_code == 0 assert 'Usage: cli results [OPTIONS] NAME' in result.output
[docs] @pytest.mark.ci def test_asr_results_bandstructure(asr_tmpdir, mockgpaw, mocker): from asr.gs import main as calculate_gs from .materials import BN import gpaw mocker.patch.object(gpaw.GPAW, "_get_band_gap") mocker.patch.object(gpaw.GPAW, "_get_fermi_level") gpaw.GPAW._get_fermi_level.return_value = 0.5 gpaw.GPAW._get_band_gap.return_value = 1 BN.write('structure.json') calculate_gs() runner = CliRunner() result = runner.invoke(cli, ['results', 'asr.gs']) assert result.exit_code == 0, result assert 'Saved figures: bz-with-gaps.png' in result.output
[docs] @pytest.mark.ci def test_asr_find_help(): runner = CliRunner() result = runner.invoke(cli, ['find', '-h']) assert result.exit_code == 0 assert 'Usage: cli find [OPTIONS] RECIPE [HASH]...' in result.output
[docs] @pytest.mark.ci @pytest.mark.parametrize( "recipe,hashish,output", [('asr.recipename', '9e2e1e68..32241753', 'results-asr.recipename.json\n'), ('asr.recipename', '^9e2e1e68 32241753', 'results-asr.recipename.json\n'), ('asr.recipename', 'c8980f6f3^..c8980f6f3', 'results-asr.recipename.json\n'), ('asr.recipename', '^c8980f6f3^ c8980f6f3', 'results-asr.recipename.json\n'), ('asr.recipename', 'c8980f6f3..c8980f6f3^', ''), ('asr.recipename', '^c8980f6f3 c8980f6f3^', ''), ('asr.recipename', 'c8980f6f3..32241753', ''), ('asr.recipename', '^c8980f6f3 32241753', '')]) def test_asr_find(recipe, hashish, output): from asr.core import write_json # TODO: Mock git call data = { '__versions__': { 'asr': 'version-c8980f6f32492437136b3b88b6d2598a8b653a25' } } recipe = "asr.recipename" filename = f'results-{recipe}.json' write_json(filename, data) runner = CliRunner() result = runner.invoke( cli, ['find', recipe] + hashish.split()) assert result.exit_code == 0 assert result.output == output
[docs] @pytest.mark.ci def test_asr_find_no_versions(asr_tmpdir_w_params): from asr.core import write_json data = {'dummydata': ['somecontent']} recipe = "asr.recipename" filename = f'results-{recipe}.json' write_json(filename, data) runner = CliRunner() result = runner.invoke( cli, ['find', recipe, 'c8980f6f3..32241753']) assert result.exit_code == 0 assert result.output == ''