def test_config_over_defaults(mockconfig):
    parser = ConfigArgumentParser(description='test program')
    parser.add_argument('--foo', env='ENV_FOO', default='cars', config='foo')
    parser._set_config(mockconfig)
    args = []
    ns = parser.parse_args(args)
    assert ns.foo == 'google'
    assert len(vars(ns)) == 1
def test_command_over_all(mockconfig):
    os.environ['ENV_FOO'] = 'bats'
    parser = ConfigArgumentParser(description='test program')
    parser.add_argument('--foo', env='ENV_FOO', default='cars', config='foo')
    parser._set_config(mockconfig)
    args = ['--foo', 'red']
    ns = parser.parse_args(args)
    assert ns.foo == 'red'
    assert len(vars(ns)) == 1
def test_coerce_config(mockconfig):
    parser = ConfigArgumentParser(description='test program')
    parser.add_argument('--num1', config='num1', default=0, type=int)
    parser.add_argument('--num2', config='num2', default=0, type=int)
    parser._set_config(mockconfig)
    args = []
    ns = parser.parse_args(args)
    # num1 did not coerce because it was not a string (matches argparse spec)
    assert ns.num1 == 10.0
    # num2 coerced because it was a string in the config
    assert ns.num2 == 20
    assert len(vars(ns)) == 2